mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 14:17:45 +00:00
Force root import of references from other components (#125816)
* Force root import of references from other components * Improve * Adjust * Tweak exceptions * Another * Another * Another * Another * Another * Another * Another * Another * Another * Another * Another * Another * Adjust * More * Ignore violations in test * Improve
This commit is contained in:
parent
9f1cc638c9
commit
02cb6a6af7
@ -394,6 +394,31 @@ _OBSOLETE_IMPORT: dict[str, list[ObsoleteImportMatch]] = {
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_IGNORE_ROOT_IMPORT = (
|
||||||
|
"assist_pipeline",
|
||||||
|
"automation",
|
||||||
|
"bluetooth",
|
||||||
|
"camera",
|
||||||
|
"cast",
|
||||||
|
"device_automation",
|
||||||
|
"device_tracker",
|
||||||
|
"ffmpeg",
|
||||||
|
"ffmpeg_motion",
|
||||||
|
"google_assistant",
|
||||||
|
"hardware",
|
||||||
|
"homeassistant",
|
||||||
|
"homeassistant_hardware",
|
||||||
|
"http",
|
||||||
|
"manual",
|
||||||
|
"plex",
|
||||||
|
"recorder",
|
||||||
|
"rest",
|
||||||
|
"script",
|
||||||
|
"sensor",
|
||||||
|
"stream",
|
||||||
|
"zha",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Blacklist of imports that should be using the namespace
|
# Blacklist of imports that should be using the namespace
|
||||||
@dataclass
|
@dataclass
|
||||||
@ -489,8 +514,9 @@ class HassImportsFormatChecker(BaseChecker):
|
|||||||
if module.startswith(f"{self.current_package}."):
|
if module.startswith(f"{self.current_package}."):
|
||||||
self.add_message("hass-relative-import", node=node)
|
self.add_message("hass-relative-import", node=node)
|
||||||
continue
|
continue
|
||||||
if module.startswith("homeassistant.components.") and module.endswith(
|
if (
|
||||||
"const"
|
module.startswith("homeassistant.components.")
|
||||||
|
and len(module.split(".")) > 3
|
||||||
):
|
):
|
||||||
if (
|
if (
|
||||||
self.current_package.startswith("tests.components.")
|
self.current_package.startswith("tests.components.")
|
||||||
@ -546,11 +572,17 @@ class HassImportsFormatChecker(BaseChecker):
|
|||||||
self.add_message("hass-relative-import", node=node)
|
self.add_message("hass-relative-import", node=node)
|
||||||
return
|
return
|
||||||
|
|
||||||
if node.modname.startswith("homeassistant.components.") and not (
|
if (
|
||||||
self.current_package.startswith("tests.components.")
|
node.modname.startswith("homeassistant.components.")
|
||||||
and self.current_package.split(".")[2] == node.modname.split(".")[2]
|
and (module_parts := node.modname.split("."))
|
||||||
|
and (module_integration := module_parts[2])
|
||||||
|
and module_integration not in _IGNORE_ROOT_IMPORT
|
||||||
|
and not (
|
||||||
|
self.current_package.startswith("tests.components.")
|
||||||
|
and self.current_package.split(".")[2] == module_integration
|
||||||
|
)
|
||||||
):
|
):
|
||||||
if node.modname.endswith(".const"):
|
if len(module_parts) > 3:
|
||||||
self.add_message("hass-component-root-import", node=node)
|
self.add_message("hass-component-root-import", node=node)
|
||||||
return
|
return
|
||||||
for name, alias in node.names:
|
for name, alias in node.names:
|
||||||
|
@ -14,6 +14,8 @@ from hass_nabucasa.voice import TTS_VOICES
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.alexa import errors as alexa_errors
|
from homeassistant.components.alexa import errors as alexa_errors
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.alexa.entities import LightCapabilities
|
from homeassistant.components.alexa.entities import LightCapabilities
|
||||||
from homeassistant.components.assist_pipeline.pipeline import STORAGE_KEY
|
from homeassistant.components.assist_pipeline.pipeline import STORAGE_KEY
|
||||||
from homeassistant.components.cloud.const import DEFAULT_EXPOSED_DOMAINS, DOMAIN
|
from homeassistant.components.cloud.const import DEFAULT_EXPOSED_DOMAINS, DOMAIN
|
||||||
|
@ -7,6 +7,8 @@ from pytest_unordered import unordered
|
|||||||
|
|
||||||
from homeassistant.components.automation import DOMAIN as AUTOMATION_DOMAIN
|
from homeassistant.components.automation import DOMAIN as AUTOMATION_DOMAIN
|
||||||
from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN
|
from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.binary_sensor.device_trigger import (
|
from homeassistant.components.binary_sensor.device_trigger import (
|
||||||
CONF_BAT_LOW,
|
CONF_BAT_LOW,
|
||||||
CONF_NOT_BAT_LOW,
|
CONF_NOT_BAT_LOW,
|
||||||
|
@ -30,6 +30,8 @@ from homeassistant.components.assist_satellite import (
|
|||||||
AssistSatelliteEntity,
|
AssistSatelliteEntity,
|
||||||
AssistSatelliteEntityFeature,
|
AssistSatelliteEntityFeature,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.assist_satellite.entity import AssistSatelliteState
|
from homeassistant.components.assist_satellite.entity import AssistSatelliteState
|
||||||
from homeassistant.components.esphome import DOMAIN
|
from homeassistant.components.esphome import DOMAIN
|
||||||
from homeassistant.components.esphome.assist_satellite import (
|
from homeassistant.components.esphome.assist_satellite import (
|
||||||
|
@ -9,10 +9,20 @@ from pytest_unordered import unordered
|
|||||||
|
|
||||||
from homeassistant.components.camera import CameraEntityFeature
|
from homeassistant.components.camera import CameraEntityFeature
|
||||||
from homeassistant.components.climate import ATTR_MAX_TEMP, ATTR_MIN_TEMP, HVACMode
|
from homeassistant.components.climate import ATTR_MAX_TEMP, ATTR_MIN_TEMP, HVACMode
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.demo.binary_sensor import DemoBinarySensor
|
from homeassistant.components.demo.binary_sensor import DemoBinarySensor
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.demo.cover import DemoCover
|
from homeassistant.components.demo.cover import DemoCover
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.demo.light import LIGHT_EFFECT_LIST, DemoLight
|
from homeassistant.components.demo.light import LIGHT_EFFECT_LIST, DemoLight
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.demo.media_player import AbstractDemoPlayer
|
from homeassistant.components.demo.media_player import AbstractDemoPlayer
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.demo.switch import DemoSwitch
|
from homeassistant.components.demo.switch import DemoSwitch
|
||||||
from homeassistant.components.google_assistant import (
|
from homeassistant.components.google_assistant import (
|
||||||
EVENT_COMMAND_RECEIVED,
|
EVENT_COMMAND_RECEIVED,
|
||||||
|
@ -11,6 +11,8 @@ import pytest
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components import logbook, recorder
|
from homeassistant.components import logbook, recorder
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.alexa.smart_home import EVENT_ALEXA_SMART_HOME
|
from homeassistant.components.alexa.smart_home import EVENT_ALEXA_SMART_HOME
|
||||||
from homeassistant.components.automation import EVENT_AUTOMATION_TRIGGERED
|
from homeassistant.components.automation import EVENT_AUTOMATION_TRIGGERED
|
||||||
from homeassistant.components.logbook.models import EventAsRow, LazyEventPartialState
|
from homeassistant.components.logbook.models import EventAsRow, LazyEventPartialState
|
||||||
|
@ -8,6 +8,8 @@ import pytest
|
|||||||
from pytraccar import TraccarException
|
from pytraccar import TraccarException
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.traccar.device_tracker import PLATFORM_SCHEMA
|
from homeassistant.components.traccar.device_tracker import PLATFORM_SCHEMA
|
||||||
from homeassistant.components.traccar_server.const import (
|
from homeassistant.components.traccar_server.const import (
|
||||||
CONF_CUSTOM_ATTRIBUTES,
|
CONF_CUSTOM_ATTRIBUTES,
|
||||||
|
@ -13,6 +13,8 @@ from voip_utils import CallInfo
|
|||||||
|
|
||||||
from homeassistant.components import assist_pipeline, assist_satellite, tts, voip
|
from homeassistant.components import assist_pipeline, assist_satellite, tts, voip
|
||||||
from homeassistant.components.assist_satellite import AssistSatelliteEntity
|
from homeassistant.components.assist_satellite import AssistSatelliteEntity
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.assist_satellite.entity import AssistSatelliteState
|
from homeassistant.components.assist_satellite.entity import AssistSatelliteState
|
||||||
from homeassistant.components.voip import HassVoipDatagramProtocol
|
from homeassistant.components.voip import HassVoipDatagramProtocol
|
||||||
from homeassistant.components.voip.assist_satellite import Tones, VoipAssistSatellite
|
from homeassistant.components.voip.assist_satellite import Tones, VoipAssistSatellite
|
||||||
|
@ -51,11 +51,15 @@ from homeassistant.auth.const import GROUP_ID_ADMIN, GROUP_ID_READ_ONLY
|
|||||||
from homeassistant.auth.models import Credentials
|
from homeassistant.auth.models import Credentials
|
||||||
from homeassistant.auth.providers import homeassistant
|
from homeassistant.auth.providers import homeassistant
|
||||||
from homeassistant.components.device_tracker.legacy import Device
|
from homeassistant.components.device_tracker.legacy import Device
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.websocket_api.auth import (
|
from homeassistant.components.websocket_api.auth import (
|
||||||
TYPE_AUTH,
|
TYPE_AUTH,
|
||||||
TYPE_AUTH_OK,
|
TYPE_AUTH_OK,
|
||||||
TYPE_AUTH_REQUIRED,
|
TYPE_AUTH_REQUIRED,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# pylint: disable-next=hass-component-root-import
|
||||||
from homeassistant.components.websocket_api.http import URL
|
from homeassistant.components.websocket_api.http import URL
|
||||||
from homeassistant.config import YAML_CONFIG_FILE
|
from homeassistant.config import YAML_CONFIG_FILE
|
||||||
from homeassistant.config_entries import ConfigEntries, ConfigEntry, ConfigEntryState
|
from homeassistant.config_entries import ConfigEntries, ConfigEntry, ConfigEntryState
|
||||||
|
@ -208,6 +208,10 @@ def test_good_root_import(
|
|||||||
"from homeassistant.components.climate.const import ClimateEntityFeature",
|
"from homeassistant.components.climate.const import ClimateEntityFeature",
|
||||||
"homeassistant.components.pylint_test.climate",
|
"homeassistant.components.pylint_test.climate",
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
"from homeassistant.components.climate.entity import ClimateEntityFeature",
|
||||||
|
"homeassistant.components.pylint_test.climate",
|
||||||
|
),
|
||||||
(
|
(
|
||||||
"from homeassistant.components.climate import const",
|
"from homeassistant.components.climate import const",
|
||||||
"tests.components.pylint_test.climate",
|
"tests.components.pylint_test.climate",
|
||||||
@ -220,6 +224,10 @@ def test_good_root_import(
|
|||||||
"import homeassistant.components.climate.const as climate",
|
"import homeassistant.components.climate.const as climate",
|
||||||
"tests.components.pylint_test.climate",
|
"tests.components.pylint_test.climate",
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
"import homeassistant.components.climate.entity as climate",
|
||||||
|
"tests.components.pylint_test.climate",
|
||||||
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_bad_root_import(
|
def test_bad_root_import(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user