From 7eef2470bb03c2104143e357f73c30a21096f60b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 4 Jan 2018 20:48:48 -0800 Subject: [PATCH] Add note about not using customize to checklist --- .../developers/code_review_component.markdown | 11 +++--- .../developers/code_review_platform.markdown | 36 +++++++++---------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/source/developers/code_review_component.markdown b/source/developers/code_review_component.markdown index 4d708290c54..9b7bdff4601 100644 --- a/source/developers/code_review_component.markdown +++ b/source/developers/code_review_component.markdown @@ -15,21 +15,22 @@ 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!

-### {% linkable_title Requirements %} +### {% linkable_title 1. Requirements %} 1. Requirement version pinned: `REQUIREMENTS = ['phue==0.8.1']` 2. We no longer want requirements hosted on GitHub. Please upload to PyPi. 3. Requirements should only be imported inside functions. This is necessary because requirements are installed on the fly. -### {% linkable_title Configuration %} +### {% linkable_title 2. Configuration %} 1. Voluptuous schema present for config validation 2. Default parameters specified in voluptuous schema, not in `setup(…)` 3. Schema using as many generic config keys as possible from `homeassistant.const` - 4. If having platforms, have a `PLATFORM_SCHEMA`, otherwise `CONFIG_SCHEMA`. - 5. If `PLATFORM_SCHEMA`, import base from `homeassistant.helpers.config_validation` + 4. If your component has platforms, define a `PLATFORM_SCHEMA` instead of a `CONFIG_SCHEMA`. + 5. If using a `PLATFORM_SCHEMA` to be used with `EntityComponent`, import base from `homeassistant.helpers.config_validation` + 6. Never depend on users adding things to `customize` to configure behavior inside your component. -### {% linkable_title Component/platform communication %} +### {% linkable_title 3. Component/platform communication %} 1. If you need to share global data with platforms, use the dictionary `hass.data`. `hass.data[DATA_XY]` while `XY` is the component is preferred over `hass.data[DOMAIN]`. 2. If the component fetches data that causes it's related platform entities to update, you can notify them using the dispatcher code in `homeassistant.helpers.dispatcher`. diff --git a/source/developers/code_review_platform.markdown b/source/developers/code_review_platform.markdown index 1475234123b..96f78c60a0c 100644 --- a/source/developers/code_review_platform.markdown +++ b/source/developers/code_review_platform.markdown @@ -27,28 +27,28 @@ Not all existing platforms follow the requirements in this checklist. This canno ### {% linkable_title 3. Configuration %} - 1. Volutpuous schema present for config validation + 1. Voluptuous schema present for config validation 2. Voluptuous schema extends schema from component
(e.g. `light.hue.PLATFORM_SCHEMA` extends `light.PLATFORM_SCHEMA`) 3. Default parameters specified in voluptuous schema, not in `setup_platform(…)` - 4. Schema using as many generic config keys as possible from `homeassistant.const` + 4. Your `PLATFORM_SCHEMA` should use as many generic config keys as possible from `homeassistant.const` + ```python + import voluptuous as vol -```python -import voluptuous as vol + from homeassistant.const import CONF_FILENAME, CONF_HOST + from homeassistant.components.light import PLATFORM_SCHEMA + import homeassistant.helpers.config_validation as cv -from homeassistant.const import CONF_FILENAME, CONF_HOST -from homeassistant.components.light import PLATFORM_SCHEMA -import homeassistant.helpers.config_validation as cv + CONF_ALLOW_UNREACHABLE = 'allow_unreachable' + DEFAULT_UNREACHABLE = False -CONF_ALLOW_UNREACHABLE = 'allow_unreachable' -DEFAULT_UNREACHABLE = False - -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_HOST): cv.string, - vol.Optional(CONF_ALLOW_UNREACHABLE, - default=DEFAULT_UNREACHABLE): cv.boolean, - vol.Optional(CONF_FILENAME): cv.string, -}) -``` + PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_HOST): cv.string, + vol.Optional(CONF_ALLOW_UNREACHABLE, + default=DEFAULT_UNREACHABLE): cv.boolean, + vol.Optional(CONF_FILENAME): cv.string, + }) + ``` + 5. Never depend on users adding things to `customize` to configure behavior inside your platform. ### {% linkable_title 4. Setup Platform %} @@ -66,7 +66,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ ### {% linkable_title 6. Communication with devices/services %} 1. 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. - + ```python # bad status = requests.get(url('/status'))