Make mypy IGNORED_MODULES file specific (#65416)

* Make mypy IGNORED_MODULES file specific

* Adjust sonos type hints

* Remove legacy nest from IGNORED_MODULES

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2022-02-03 14:21:06 +01:00 committed by GitHub
parent 8234625d30
commit f95183f6a8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 1028 additions and 122 deletions

View file

@ -16,66 +16,289 @@ from .model import Config, Integration
# remove your component from this list to enable type checks.
# Do your best to not add anything new here.
IGNORED_MODULES: Final[list[str]] = [
"homeassistant.components.blueprint.*",
"homeassistant.components.cloud.*",
"homeassistant.components.config.*",
"homeassistant.components.conversation.*",
"homeassistant.components.deconz.*",
"homeassistant.components.demo.*",
"homeassistant.components.denonavr.*",
"homeassistant.components.evohome.*",
"homeassistant.components.fireservicerota.*",
"homeassistant.components.firmata.*",
"homeassistant.components.geniushub.*",
"homeassistant.components.google_assistant.*",
"homeassistant.components.gree.*",
"homeassistant.components.harmony.*",
"homeassistant.components.hassio.*",
"homeassistant.components.here_travel_time.*",
"homeassistant.components.home_plus_control.*",
"homeassistant.components.homekit.*",
"homeassistant.components.honeywell.*",
"homeassistant.components.icloud.*",
"homeassistant.components.influxdb.*",
"homeassistant.components.input_datetime.*",
"homeassistant.components.isy994.*",
"homeassistant.components.izone.*",
"homeassistant.components.konnected.*",
"homeassistant.components.kostal_plenticore.*",
"homeassistant.components.litterrobot.*",
"homeassistant.components.lovelace.*",
"homeassistant.components.lutron_caseta.*",
"homeassistant.components.lyric.*",
"homeassistant.components.melcloud.*",
"homeassistant.components.meteo_france.*",
"homeassistant.components.minecraft_server.*",
"homeassistant.components.mobile_app.*",
"homeassistant.components.netgear.*",
"homeassistant.components.nilu.*",
"homeassistant.components.nzbget.*",
"homeassistant.components.omnilogic.*",
"homeassistant.components.onvif.*",
"homeassistant.components.ozw.*",
"homeassistant.components.philips_js.*",
"homeassistant.components.plex.*",
"homeassistant.components.profiler.*",
"homeassistant.components.solaredge.*",
"homeassistant.components.sonos.*",
"homeassistant.components.spotify.*",
"homeassistant.components.system_health.*",
"homeassistant.components.telegram_bot.*",
"homeassistant.components.template.*",
"homeassistant.components.toon.*",
"homeassistant.components.unifi.*",
"homeassistant.components.upnp.*",
"homeassistant.components.vizio.*",
"homeassistant.components.withings.*",
"homeassistant.components.xbox.*",
"homeassistant.components.xiaomi_aqara.*",
"homeassistant.components.xiaomi_miio.*",
"homeassistant.components.yeelight.*",
"homeassistant.components.zha.*",
"homeassistant.components.zwave.*",
"homeassistant.components.blueprint.importer",
"homeassistant.components.blueprint.models",
"homeassistant.components.blueprint.websocket_api",
"homeassistant.components.cloud.client",
"homeassistant.components.cloud.http_api",
"homeassistant.components.config.auth",
"homeassistant.components.config.config_entries",
"homeassistant.components.config.core",
"homeassistant.components.config.entity_registry",
"homeassistant.components.conversation",
"homeassistant.components.conversation.default_agent",
"homeassistant.components.deconz",
"homeassistant.components.deconz.alarm_control_panel",
"homeassistant.components.deconz.binary_sensor",
"homeassistant.components.deconz.climate",
"homeassistant.components.deconz.cover",
"homeassistant.components.deconz.fan",
"homeassistant.components.deconz.gateway",
"homeassistant.components.deconz.light",
"homeassistant.components.deconz.lock",
"homeassistant.components.deconz.logbook",
"homeassistant.components.deconz.number",
"homeassistant.components.deconz.sensor",
"homeassistant.components.deconz.services",
"homeassistant.components.deconz.siren",
"homeassistant.components.deconz.switch",
"homeassistant.components.demo",
"homeassistant.components.demo.fan",
"homeassistant.components.demo.light",
"homeassistant.components.demo.number",
"homeassistant.components.demo.remote",
"homeassistant.components.demo.siren",
"homeassistant.components.demo.switch",
"homeassistant.components.denonavr.config_flow",
"homeassistant.components.denonavr.media_player",
"homeassistant.components.denonavr.receiver",
"homeassistant.components.evohome",
"homeassistant.components.evohome.climate",
"homeassistant.components.evohome.water_heater",
"homeassistant.components.fireservicerota",
"homeassistant.components.fireservicerota.binary_sensor",
"homeassistant.components.fireservicerota.sensor",
"homeassistant.components.fireservicerota.switch",
"homeassistant.components.firmata",
"homeassistant.components.firmata.binary_sensor",
"homeassistant.components.firmata.board",
"homeassistant.components.firmata.entity",
"homeassistant.components.firmata.light",
"homeassistant.components.firmata.pin",
"homeassistant.components.firmata.sensor",
"homeassistant.components.firmata.switch",
"homeassistant.components.geniushub",
"homeassistant.components.geniushub.binary_sensor",
"homeassistant.components.geniushub.climate",
"homeassistant.components.geniushub.sensor",
"homeassistant.components.geniushub.water_heater",
"homeassistant.components.google_assistant.helpers",
"homeassistant.components.google_assistant.http",
"homeassistant.components.google_assistant.report_state",
"homeassistant.components.google_assistant.trait",
"homeassistant.components.gree.climate",
"homeassistant.components.gree.switch",
"homeassistant.components.harmony",
"homeassistant.components.harmony.config_flow",
"homeassistant.components.harmony.data",
"homeassistant.components.hassio",
"homeassistant.components.hassio.auth",
"homeassistant.components.hassio.binary_sensor",
"homeassistant.components.hassio.ingress",
"homeassistant.components.hassio.sensor",
"homeassistant.components.hassio.system_health",
"homeassistant.components.hassio.websocket_api",
"homeassistant.components.here_travel_time.sensor",
"homeassistant.components.home_plus_control",
"homeassistant.components.home_plus_control.api",
"homeassistant.components.homekit.aidmanager",
"homeassistant.components.homekit.config_flow",
"homeassistant.components.homekit.util",
"homeassistant.components.honeywell.climate",
"homeassistant.components.icloud",
"homeassistant.components.icloud.account",
"homeassistant.components.icloud.device_tracker",
"homeassistant.components.icloud.sensor",
"homeassistant.components.influxdb",
"homeassistant.components.input_datetime",
"homeassistant.components.isy994",
"homeassistant.components.isy994.binary_sensor",
"homeassistant.components.isy994.climate",
"homeassistant.components.isy994.config_flow",
"homeassistant.components.isy994.cover",
"homeassistant.components.isy994.entity",
"homeassistant.components.isy994.fan",
"homeassistant.components.isy994.helpers",
"homeassistant.components.isy994.light",
"homeassistant.components.isy994.lock",
"homeassistant.components.isy994.sensor",
"homeassistant.components.isy994.services",
"homeassistant.components.isy994.switch",
"homeassistant.components.izone.climate",
"homeassistant.components.konnected",
"homeassistant.components.konnected.config_flow",
"homeassistant.components.kostal_plenticore.helper",
"homeassistant.components.kostal_plenticore.select",
"homeassistant.components.kostal_plenticore.sensor",
"homeassistant.components.kostal_plenticore.switch",
"homeassistant.components.litterrobot",
"homeassistant.components.litterrobot.button",
"homeassistant.components.litterrobot.entity",
"homeassistant.components.litterrobot.hub",
"homeassistant.components.litterrobot.select",
"homeassistant.components.litterrobot.sensor",
"homeassistant.components.litterrobot.switch",
"homeassistant.components.litterrobot.vacuum",
"homeassistant.components.lovelace",
"homeassistant.components.lovelace.dashboard",
"homeassistant.components.lovelace.resources",
"homeassistant.components.lovelace.websocket",
"homeassistant.components.lutron_caseta",
"homeassistant.components.lutron_caseta.device_trigger",
"homeassistant.components.lutron_caseta.switch",
"homeassistant.components.lyric.climate",
"homeassistant.components.lyric.config_flow",
"homeassistant.components.lyric.sensor",
"homeassistant.components.melcloud",
"homeassistant.components.melcloud.climate",
"homeassistant.components.meteo_france.sensor",
"homeassistant.components.meteo_france.weather",
"homeassistant.components.minecraft_server",
"homeassistant.components.minecraft_server.helpers",
"homeassistant.components.minecraft_server.sensor",
"homeassistant.components.mobile_app.binary_sensor",
"homeassistant.components.mobile_app.device_action",
"homeassistant.components.mobile_app.device_tracker",
"homeassistant.components.mobile_app.helpers",
"homeassistant.components.mobile_app.http_api",
"homeassistant.components.mobile_app.push_notification",
"homeassistant.components.mobile_app.sensor",
"homeassistant.components.netgear",
"homeassistant.components.netgear.config_flow",
"homeassistant.components.netgear.device_tracker",
"homeassistant.components.netgear.router",
"homeassistant.components.nilu.air_quality",
"homeassistant.components.nzbget",
"homeassistant.components.nzbget.config_flow",
"homeassistant.components.nzbget.coordinator",
"homeassistant.components.nzbget.switch",
"homeassistant.components.omnilogic.common",
"homeassistant.components.omnilogic.sensor",
"homeassistant.components.omnilogic.switch",
"homeassistant.components.onvif.base",
"homeassistant.components.onvif.binary_sensor",
"homeassistant.components.onvif.button",
"homeassistant.components.onvif.camera",
"homeassistant.components.onvif.config_flow",
"homeassistant.components.onvif.device",
"homeassistant.components.onvif.event",
"homeassistant.components.onvif.models",
"homeassistant.components.onvif.parsers",
"homeassistant.components.onvif.sensor",
"homeassistant.components.ozw",
"homeassistant.components.ozw.climate",
"homeassistant.components.ozw.entity",
"homeassistant.components.philips_js",
"homeassistant.components.philips_js.config_flow",
"homeassistant.components.philips_js.device_trigger",
"homeassistant.components.philips_js.light",
"homeassistant.components.philips_js.media_player",
"homeassistant.components.plex.media_player",
"homeassistant.components.profiler",
"homeassistant.components.solaredge.config_flow",
"homeassistant.components.solaredge.coordinator",
"homeassistant.components.solaredge.sensor",
"homeassistant.components.sonos",
"homeassistant.components.sonos.alarms",
"homeassistant.components.sonos.binary_sensor",
"homeassistant.components.sonos.diagnostics",
"homeassistant.components.sonos.entity",
"homeassistant.components.sonos.favorites",
"homeassistant.components.sonos.helpers",
"homeassistant.components.sonos.media_browser",
"homeassistant.components.sonos.media_player",
"homeassistant.components.sonos.number",
"homeassistant.components.sonos.sensor",
"homeassistant.components.sonos.speaker",
"homeassistant.components.sonos.statistics",
"homeassistant.components.spotify.config_flow",
"homeassistant.components.spotify.media_player",
"homeassistant.components.system_health",
"homeassistant.components.telegram_bot.polling",
"homeassistant.components.template",
"homeassistant.components.template.binary_sensor",
"homeassistant.components.template.button",
"homeassistant.components.template.fan",
"homeassistant.components.template.number",
"homeassistant.components.template.select",
"homeassistant.components.template.sensor",
"homeassistant.components.template.template_entity",
"homeassistant.components.template.trigger_entity",
"homeassistant.components.template.weather",
"homeassistant.components.toon",
"homeassistant.components.toon.config_flow",
"homeassistant.components.toon.models",
"homeassistant.components.unifi",
"homeassistant.components.unifi.config_flow",
"homeassistant.components.unifi.device_tracker",
"homeassistant.components.unifi.diagnostics",
"homeassistant.components.unifi.unifi_entity_base",
"homeassistant.components.upnp",
"homeassistant.components.upnp.binary_sensor",
"homeassistant.components.upnp.config_flow",
"homeassistant.components.upnp.device",
"homeassistant.components.upnp.sensor",
"homeassistant.components.vizio.config_flow",
"homeassistant.components.vizio.media_player",
"homeassistant.components.withings",
"homeassistant.components.withings.binary_sensor",
"homeassistant.components.withings.common",
"homeassistant.components.withings.config_flow",
"homeassistant.components.xbox",
"homeassistant.components.xbox.base_sensor",
"homeassistant.components.xbox.binary_sensor",
"homeassistant.components.xbox.browse_media",
"homeassistant.components.xbox.media_source",
"homeassistant.components.xbox.sensor",
"homeassistant.components.xiaomi_aqara",
"homeassistant.components.xiaomi_aqara.binary_sensor",
"homeassistant.components.xiaomi_aqara.lock",
"homeassistant.components.xiaomi_aqara.sensor",
"homeassistant.components.xiaomi_miio",
"homeassistant.components.xiaomi_miio.air_quality",
"homeassistant.components.xiaomi_miio.binary_sensor",
"homeassistant.components.xiaomi_miio.device",
"homeassistant.components.xiaomi_miio.device_tracker",
"homeassistant.components.xiaomi_miio.fan",
"homeassistant.components.xiaomi_miio.humidifier",
"homeassistant.components.xiaomi_miio.light",
"homeassistant.components.xiaomi_miio.sensor",
"homeassistant.components.xiaomi_miio.switch",
"homeassistant.components.yeelight",
"homeassistant.components.yeelight.light",
"homeassistant.components.yeelight.scanner",
"homeassistant.components.zha.alarm_control_panel",
"homeassistant.components.zha.api",
"homeassistant.components.zha.binary_sensor",
"homeassistant.components.zha.button",
"homeassistant.components.zha.climate",
"homeassistant.components.zha.config_flow",
"homeassistant.components.zha.core.channels",
"homeassistant.components.zha.core.channels.base",
"homeassistant.components.zha.core.channels.closures",
"homeassistant.components.zha.core.channels.general",
"homeassistant.components.zha.core.channels.homeautomation",
"homeassistant.components.zha.core.channels.hvac",
"homeassistant.components.zha.core.channels.lighting",
"homeassistant.components.zha.core.channels.lightlink",
"homeassistant.components.zha.core.channels.manufacturerspecific",
"homeassistant.components.zha.core.channels.measurement",
"homeassistant.components.zha.core.channels.protocol",
"homeassistant.components.zha.core.channels.security",
"homeassistant.components.zha.core.channels.smartenergy",
"homeassistant.components.zha.core.decorators",
"homeassistant.components.zha.core.device",
"homeassistant.components.zha.core.discovery",
"homeassistant.components.zha.core.gateway",
"homeassistant.components.zha.core.group",
"homeassistant.components.zha.core.helpers",
"homeassistant.components.zha.core.registries",
"homeassistant.components.zha.core.store",
"homeassistant.components.zha.core.typing",
"homeassistant.components.zha.cover",
"homeassistant.components.zha.device_action",
"homeassistant.components.zha.device_tracker",
"homeassistant.components.zha.entity",
"homeassistant.components.zha.fan",
"homeassistant.components.zha.light",
"homeassistant.components.zha.lock",
"homeassistant.components.zha.select",
"homeassistant.components.zha.sensor",
"homeassistant.components.zha.siren",
"homeassistant.components.zha.switch",
"homeassistant.components.zwave",
"homeassistant.components.zwave.migration",
"homeassistant.components.zwave.node_entity",
]
# Component modules which should set no_implicit_reexport = true.
@ -130,6 +353,19 @@ STRICT_SETTINGS_CORE: Final[list[str]] = [
]
def _strict_module_in_ignore_list(
module: str, ignored_modules_set: set[str]
) -> str | None:
if module in ignored_modules_set:
return module
if module.endswith("*"):
module = module[:-1]
for ignored_module in ignored_modules_set:
if ignored_module.startswith(module):
return ignored_module
return None
def generate_and_validate(config: Config) -> str:
"""Validate and generate mypy config."""
@ -162,9 +398,10 @@ def generate_and_validate(config: Config) -> str:
config.add_error(
"mypy_config", f"Only components should be added: {module}"
)
if module in ignored_modules_set:
if ignored_module := _strict_module_in_ignore_list(module, ignored_modules_set):
config.add_error(
"mypy_config", f"Module '{module}' is in ignored list in mypy_config.py"
"mypy_config",
f"Module '{ignored_module}' is in ignored list in mypy_config.py",
)
# Validate that all modules exist.