3.0 KiB
title | id | original_id |
---|---|---|
Checklist for creating a component | version-0.89.0-creating_component_code_review | creating_component_code_review |
A checklist of things to do when you're adding a new component.
Not all existing platforms follow the requirements in this checklist. This cannot be used as a reason to not follow them!
0. Common
- Follow our Style guidelines
- Use existing constants from
const.py
- Only add new constants to
const.py
if they are widely used. Otherwise keep them on components level
- Only add new constants to
1. Requirements
- Requirement version pinned:
REQUIREMENTS = ['phue==0.8.1']
- We no longer want requirements hosted on GitHub. Please upload to PyPi.
- Requirements should only be imported inside functions. This is necessary because requirements are installed on the fly.
2. Configuration
- Voluptuous schema present for configuration validation
- Default parameters specified in voluptuous schema, not in
setup(…)
- Schema using as many generic config keys as possible from
homeassistant.const
- If your component has platforms, define a
PLATFORM_SCHEMA
instead of aCONFIG_SCHEMA
. - If using a
PLATFORM_SCHEMA
to be used withEntityComponent
, import base fromhomeassistant.helpers.config_validation
- Never depend on users adding things to
customize
to configure behavior inside your component.
3. Component/platform communication
- If you need to share global data with platforms, use the dictionary
hass.data
.hass.data[DATA_XY]
whileXY
is the component is preferred overhass.data[DOMAIN]
. - If the component fetches data that causes its related platform entities to update, you can notify them using the dispatcher code in
homeassistant.helpers.dispatcher
.
4. Communication with devices/services
- All API specific code has to be part of a third party library hosted on PyPi. Home Assistant should only interact with objects and not make direct calls to the API.
# bad
status = requests.get(url('/status'))
# good
from phue import Bridge
bridge = Bridge(...)
status = bridge.status()
5. Limit platforms included in initial pull request
Large pull requests mean there is a larger chance of finding problems that need to be addressed, and more code that needs to be reviewed between every requested change. If your new component will have multiple platforms, try and limit your initial pull request to a single platform. Once the initial component is merged, you can submit additional PRs for the remaining platforms. This allows reviewers to sign off on smaller chunks of code one at a time, and lets us get your new feature in sooner. Pull requests containing large code dumps will not be a priority for review.
6. Event names
Prefix component event names with component name itself. For example, use xiaomi_aqara.click
instead of click
for the xiaomi_aqara
component.