创建组件的检查清单
添加新组件时要做的事情清单。
并非所有现有代码都遵循本清单中的要求。这不能作为不遵循要求的理由!
0. Common
1. External requirements
- 依赖项已添加到
manifest.json。REQUIREMENTS常量已弃用。 - 依赖项版本必须固定:
"requirements": ['phue==0.8.1'] - 每个依赖项都满足库要求。
2. Configuration
- 有用于配置验证 的 Voluptuous schema
- 默认参数在 voluptuous schema 中指定,而不是在
setup(…)中 - 尽可能多地使用来自
homeassistant.const的通用配置键 - 如果你的组件有平台,请定义
PLATFORM_SCHEMA而不是CONFIG_SCHEMA。 - 如果使用与
EntityComponent配合的PLATFORM_SCHEMA,请从homeassistant.helpers.config_validation导入基础 schema - 永远不要依赖用户在
customize中添加内容来配置你的组件内部行为。
3. Component/platform communication
- 可以通过
hass.data[DOMAIN]与你的平台共享数据。 - 如果组件获取的数据导致其相关平台实体更新,可以使用
homeassistant.helpers.dispatcher中的 dispatcher 代码来通知它们。
4. Communication with devices/services
-
所有与 API 相关的代码必须作为 PyPi 上托管的第三方库的一部分。Home Assistant 应该只与对象交互,而不直接调用 API。
其他关于发布 Python 包的值得注意的资源: Cookiecutter Project flit Poetry
5. Make your pull request as small as possible
将新集成保持在能让人从中获得价值的最小功能范围。这允许审查者一次一批地签署较小代码块,让我们能更早地获得你的新集成/功能。包含大量代码倾倒的 pull request 不会成为审查的优先级,可能会被关闭。
- 限制为单个平台
- 不要添加不支持该单个平台所需的功能(如自定义 service actions)
- 不要在单个 pull request 中混合清理工作与新功能
- 不要在单个 pull request 中解决多个问题
- 不要提交依赖于其他尚未合并工作的 pull request
在"现代化"某个长时间未触及的集成时,可能会倾向于打开一个大型 PR,以利用所有最新可用功能。正确的方法是尽可能将功能拆分为独立的功能性更改,并按顺序提交 PR。
处理顺序 PR 的一个策略是,在 current PR 的分支上为 next PR 创建一个分支,然后可以开始编写代码。如果你已经将 PR 拆分使得一个依赖于前一个,这种策略是有优势的,因为你是在 PR 合并后会在 dev 中的代码基础上工作。如果你因为更改/审查反馈而向 current PR 添加额外的提交,你可以对 next PR 的分支执行 rebase,并更容易地整合任何 merge conflicts。一旦你的 current PR 被合并,在 next PR 分支中 squash 来自 current PR 分支的提交,然后在 dev 上 rebase。然后就可以提交 next PR 分支进行审查,并根据需要重复此过程。
6. Event names
使用 domain 名称作为组件事件名称的前缀。例如,对于 netatmo 组件,使用 netatmo_person 而不是 person。请注意我们在 Data Science portal 上记录的数据结构。
7. Tests
强烈考虑为你的组件添加测试,以尽量减少未来的回归问题。

