3.2 KiB
title | sidebar_label |
---|---|
Checklist for creating a component | Component Checklist |
A checklist of things to do when you're adding a new component.
:::info Not all existing code follows 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
- Requirements have been added to
manifest.json
. TheREQUIREMENTS
constant is deprecated. - Requirement version should be pinned:
"requirements": ['phue==0.8.1']
- We no longer want requirements hosted on GitHub. Please upload to PyPi.
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
- You can share data with your platforms by leveraging
hass.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. Make your pull request as small as possible
Keep a new integration to the minimum functionality needed for someone to get value out of the integration. This allows reviewers to sign off on smaller chunks of code one at a time, and lets us get your new integration/features in sooner. Pull requests containing large code dumps will not be a priority for review and may be closed.
- Limit to a single platform
- Do not add features not needed to directly support the single platform (such as custom services)
- Do not mix clean-ups and new features in a single pull request.
- Do not solve several issues in a single pull request.
- Do not submit pull requests that depend on other work which is still unmerged.
6. Event names
Prefix component event names with the domain name. For example, use netatmo_person
instead of person
for the netatmo
component.
7. Tests
Strongly consider adding tests for your component to minimize future regressions.