mirror of
https://github.com/home-assistant/core.git
synced 2025-12-26 14:08:21 +00:00
Load requirements and dependencies from manifests. Fallback to current REQUIREMENTS and DEPENDENCIES (#22717)
* Load dependencies from manifests. Fallback to current DEPENDENCIES * Fix typing * Ignore typing correctly * Split out dependency processing to a new method * Fix tests * Only pull from manifest if dependencies is non empty * Inline temporary function * Fix light tests [skip ci] * Fix tests/common * Fix some mqtt tests [skip ci] * Fix tests and component manifests which have only one platform * Fix rflink tests * Fix more tests and manifests * Readability over shorthand format * Fix demo/notify tests * Load dependencies from manifests. Fallback to current DEPENDENCIES * Load requirements from manifests. Fallback to current REQUIREMENTS * Fix typing * Ignore typing correctly * Split out dependency processing to a new method * Only pull from manifest if dependencies is non empty * Inline temporary function * Fix tests and component manifests which have only one platform * Fix rflink tests * Readability over shorthand format * Clean up requirements * Use integration to resolve deps/reqs * Lint * Lint * revert a change * Revert a test change * Fix types * Fix types * Add back cache for load component * Fix test_component_not_found * Move light.test and device_tracker.test into test package instead with manifest to fix tests * Fix broken device_tracker tests * Add docstrings to __init__ * Fix all of the light tests that I broke earlier * Embed the test.switch platform to fix other tests * Embed and fix the test.imagimage_processing platform * Fix tests for nx584 * Add dependencies from platform file's DEPENDENCIES * Try to setup component when entity_platform is setting up Fix tests in helpers folder * Rewrite test_setup * Simplify * Lint * Disable demo component if running in test Temp workaround to unblock CI tests * Skip demo tests * Fix config entry test * Fix repeat test * Clarify doc * One extra guard * Fix import * Lint * Workaround google tts
This commit is contained in:
@@ -52,11 +52,11 @@ LOOKUP_PATHS = [PACKAGE_CUSTOM_COMPONENTS, PACKAGE_BUILTIN]
|
||||
_UNDEF = object()
|
||||
|
||||
|
||||
def manifest_from_legacy_module(module: Any) -> Dict:
|
||||
def manifest_from_legacy_module(module: ModuleType) -> Dict:
|
||||
"""Generate a manifest from a legacy module."""
|
||||
return {
|
||||
'domain': module.DOMAIN,
|
||||
'name': module.DOMAIN,
|
||||
'domain': module.DOMAIN, # type: ignore
|
||||
'name': module.DOMAIN, # type: ignore
|
||||
'documentation': None,
|
||||
'requirements': getattr(module, 'REQUIREMENTS', []),
|
||||
'dependencies': getattr(module, 'DEPENDENCIES', []),
|
||||
@@ -68,10 +68,10 @@ class Integration:
|
||||
"""An integration in Home Assistant."""
|
||||
|
||||
@classmethod
|
||||
def resolve_from_root(cls, hass: 'HomeAssistant', root_module: Any,
|
||||
def resolve_from_root(cls, hass: 'HomeAssistant', root_module: ModuleType,
|
||||
domain: str) -> 'Optional[Integration]':
|
||||
"""Resolve an integration from a root module."""
|
||||
for base in root_module.__path__:
|
||||
for base in root_module.__path__: # type: ignore
|
||||
manifest_path = (
|
||||
pathlib.Path(base) / domain / 'manifest.json'
|
||||
)
|
||||
@@ -117,15 +117,22 @@ class Integration:
|
||||
self.dependencies = manifest['dependencies'] # type: List[str]
|
||||
self.requirements = manifest['requirements'] # type: List[str]
|
||||
|
||||
def get_component(self) -> Any:
|
||||
def get_component(self) -> ModuleType:
|
||||
"""Return the component."""
|
||||
return importlib.import_module(self.pkg_path)
|
||||
cache = self.hass.data.setdefault(DATA_KEY, {})
|
||||
if self.domain not in cache:
|
||||
cache[self.domain] = importlib.import_module(self.pkg_path)
|
||||
return cache[self.domain] # type: ignore
|
||||
|
||||
def get_platform(self, platform_name: str) -> Any:
|
||||
def get_platform(self, platform_name: str) -> ModuleType:
|
||||
"""Return a platform for an integration."""
|
||||
return importlib.import_module(
|
||||
"{}.{}".format(self.pkg_path, platform_name)
|
||||
)
|
||||
cache = self.hass.data.setdefault(DATA_KEY, {})
|
||||
full_name = "{}.{}".format(self.domain, platform_name)
|
||||
if full_name not in cache:
|
||||
cache[full_name] = importlib.import_module(
|
||||
"{}.{}".format(self.pkg_path, platform_name)
|
||||
)
|
||||
return cache[full_name] # type: ignore
|
||||
|
||||
|
||||
async def async_get_integration(hass: 'HomeAssistant', domain: str)\
|
||||
|
||||
Reference in New Issue
Block a user