1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-24 21:06:19 +00:00

Update typing 16 (#48087)

This commit is contained in:
Marc Mueller
2021-03-18 22:58:19 +01:00
committed by GitHub
parent 0f5efca76b
commit 4cb7718192
59 changed files with 180 additions and 166 deletions

View File

@@ -1,5 +1,5 @@
"""Generate CODEOWNERS."""
from typing import Dict
from __future__ import annotations
from .model import Config, Integration
@@ -33,7 +33,7 @@ homeassistant/components/demo/weather @fabaff
"""
def generate_and_validate(integrations: Dict[str, Integration]):
def generate_and_validate(integrations: dict[str, Integration]):
"""Generate CODEOWNERS."""
parts = [BASE]
@@ -61,7 +61,7 @@ def generate_and_validate(integrations: Dict[str, Integration]):
return "\n".join(parts)
def validate(integrations: Dict[str, Integration], config: Config):
def validate(integrations: dict[str, Integration], config: Config):
"""Validate CODEOWNERS."""
codeowners_path = config.root / "CODEOWNERS"
config.cache["codeowners"] = content = generate_and_validate(integrations)
@@ -79,7 +79,7 @@ def validate(integrations: Dict[str, Integration], config: Config):
return
def generate(integrations: Dict[str, Integration], config: Config):
def generate(integrations: dict[str, Integration], config: Config):
"""Generate CODEOWNERS."""
codeowners_path = config.root / "CODEOWNERS"
with open(str(codeowners_path), "w") as fp:

View File

@@ -1,6 +1,7 @@
"""Generate config flow file."""
from __future__ import annotations
import json
from typing import Dict
from .model import Config, Integration
@@ -90,7 +91,7 @@ def validate_integration(config: Config, integration: Integration):
)
def generate_and_validate(integrations: Dict[str, Integration], config: Config):
def generate_and_validate(integrations: dict[str, Integration], config: Config):
"""Validate and generate config flow data."""
domains = []
@@ -117,7 +118,7 @@ def generate_and_validate(integrations: Dict[str, Integration], config: Config):
return BASE.format(json.dumps(domains, indent=4))
def validate(integrations: Dict[str, Integration], config: Config):
def validate(integrations: dict[str, Integration], config: Config):
"""Validate config flow file."""
config_flow_path = config.root / "homeassistant/generated/config_flows.py"
config.cache["config_flow"] = content = generate_and_validate(integrations, config)
@@ -136,7 +137,7 @@ def validate(integrations: Dict[str, Integration], config: Config):
return
def generate(integrations: Dict[str, Integration], config: Config):
def generate(integrations: dict[str, Integration], config: Config):
"""Generate config flow file."""
config_flow_path = config.root / "homeassistant/generated/config_flows.py"
with open(str(config_flow_path), "w") as fp:

View File

@@ -1,6 +1,7 @@
"""Validate coverage files."""
from __future__ import annotations
from pathlib import Path
from typing import Dict
from .model import Config, Integration
@@ -69,7 +70,7 @@ ALLOWED_IGNORE_VIOLATIONS = {
}
def validate(integrations: Dict[str, Integration], config: Config):
def validate(integrations: dict[str, Integration], config: Config):
"""Validate coverage."""
coverage_path = config.root / ".coveragerc"

View File

@@ -1,7 +1,8 @@
"""Validate dependencies."""
from __future__ import annotations
import ast
from pathlib import Path
from typing import Dict, Set
from homeassistant.requirements import DISCOVERY_INTEGRATIONS
@@ -14,7 +15,7 @@ class ImportCollector(ast.NodeVisitor):
def __init__(self, integration: Integration):
"""Initialize the import collector."""
self.integration = integration
self.referenced: Dict[Path, Set[str]] = {}
self.referenced: dict[Path, set[str]] = {}
# Current file or dir we're inspecting
self._cur_fil_dir = None
@@ -156,7 +157,7 @@ IGNORE_VIOLATIONS = {
}
def calc_allowed_references(integration: Integration) -> Set[str]:
def calc_allowed_references(integration: Integration) -> set[str]:
"""Return a set of allowed references."""
allowed_references = (
ALLOWED_USED_COMPONENTS
@@ -173,9 +174,9 @@ def calc_allowed_references(integration: Integration) -> Set[str]:
def find_non_referenced_integrations(
integrations: Dict[str, Integration],
integrations: dict[str, Integration],
integration: Integration,
references: Dict[Path, Set[str]],
references: dict[Path, set[str]],
):
"""Find intergrations that are not allowed to be referenced."""
allowed_references = calc_allowed_references(integration)
@@ -221,7 +222,7 @@ def find_non_referenced_integrations(
def validate_dependencies(
integrations: Dict[str, Integration], integration: Integration
integrations: dict[str, Integration], integration: Integration
):
"""Validate all dependencies."""
# Some integrations are allowed to have violations.
@@ -244,7 +245,7 @@ def validate_dependencies(
)
def validate(integrations: Dict[str, Integration], config):
def validate(integrations: dict[str, Integration], config):
"""Handle dependencies for integrations."""
# check for non-existing dependencies
for integration in integrations.values():

View File

@@ -1,6 +1,7 @@
"""Generate dhcp file."""
from __future__ import annotations
import json
from typing import Dict, List
from .model import Config, Integration
@@ -16,7 +17,7 @@ DHCP = {}
""".strip()
def generate_and_validate(integrations: List[Dict[str, str]]):
def generate_and_validate(integrations: list[dict[str, str]]):
"""Validate and generate dhcp data."""
match_list = []
@@ -37,7 +38,7 @@ def generate_and_validate(integrations: List[Dict[str, str]]):
return BASE.format(json.dumps(match_list, indent=4))
def validate(integrations: Dict[str, Integration], config: Config):
def validate(integrations: dict[str, Integration], config: Config):
"""Validate dhcp file."""
dhcp_path = config.root / "homeassistant/generated/dhcp.py"
config.cache["dhcp"] = content = generate_and_validate(integrations)
@@ -56,7 +57,7 @@ def validate(integrations: Dict[str, Integration], config: Config):
return
def generate(integrations: Dict[str, Integration], config: Config):
def generate(integrations: dict[str, Integration], config: Config):
"""Generate dhcp file."""
dhcp_path = config.root / "homeassistant/generated/dhcp.py"
with open(str(dhcp_path), "w") as fp:

View File

@@ -1,6 +1,7 @@
"""Validate integration JSON files."""
from __future__ import annotations
import json
from typing import Dict
from .model import Integration
@@ -20,7 +21,7 @@ def validate_json_files(integration: Integration):
return
def validate(integrations: Dict[str, Integration], config):
def validate(integrations: dict[str, Integration], config):
"""Handle JSON files inside integrations."""
if not config.specific_integrations:
return

View File

@@ -1,5 +1,6 @@
"""Manifest validation."""
from typing import Dict
from __future__ import annotations
from urllib.parse import urlparse
import voluptuous as vol
@@ -145,7 +146,7 @@ def validate_manifest(integration: Integration):
validate_version(integration)
def validate(integrations: Dict[str, Integration], config):
def validate(integrations: dict[str, Integration], config):
"""Handle all integrations manifests."""
for integration in integrations.values():
if integration.manifest:

View File

@@ -1,8 +1,10 @@
"""Models for manifest validator."""
from __future__ import annotations
import importlib
import json
import pathlib
from typing import Any, Dict, List, Optional
from typing import Any
import attr
@@ -24,12 +26,12 @@ class Error:
class Config:
"""Config for the run."""
specific_integrations: Optional[pathlib.Path] = attr.ib()
specific_integrations: pathlib.Path | None = attr.ib()
root: pathlib.Path = attr.ib()
action: str = attr.ib()
requirements: bool = attr.ib()
errors: List[Error] = attr.ib(factory=list)
cache: Dict[str, Any] = attr.ib(factory=dict)
errors: list[Error] = attr.ib(factory=list)
cache: dict[str, Any] = attr.ib(factory=dict)
def add_error(self, *args, **kwargs):
"""Add an error."""
@@ -65,9 +67,9 @@ class Integration:
return integrations
path: pathlib.Path = attr.ib()
manifest: Optional[dict] = attr.ib(default=None)
errors: List[Error] = attr.ib(factory=list)
warnings: List[Error] = attr.ib(factory=list)
manifest: dict | None = attr.ib(default=None)
errors: list[Error] = attr.ib(factory=list)
warnings: list[Error] = attr.ib(factory=list)
@property
def domain(self) -> str:
@@ -80,17 +82,17 @@ class Integration:
return self.path.as_posix().startswith("homeassistant/components")
@property
def disabled(self) -> Optional[str]:
def disabled(self) -> str | None:
"""List of disabled."""
return self.manifest.get("disabled")
@property
def requirements(self) -> List[str]:
def requirements(self) -> list[str]:
"""List of requirements."""
return self.manifest.get("requirements", [])
@property
def dependencies(self) -> List[str]:
def dependencies(self) -> list[str]:
"""List of dependencies."""
return self.manifest.get("dependencies", [])

View File

@@ -1,7 +1,8 @@
"""Generate MQTT file."""
from __future__ import annotations
from collections import defaultdict
import json
from typing import Dict
from .model import Config, Integration
@@ -17,7 +18,7 @@ MQTT = {}
""".strip()
def generate_and_validate(integrations: Dict[str, Integration]):
def generate_and_validate(integrations: dict[str, Integration]):
"""Validate and generate MQTT data."""
data = defaultdict(list)
@@ -39,7 +40,7 @@ def generate_and_validate(integrations: Dict[str, Integration]):
return BASE.format(json.dumps(data, indent=4))
def validate(integrations: Dict[str, Integration], config: Config):
def validate(integrations: dict[str, Integration], config: Config):
"""Validate MQTT file."""
mqtt_path = config.root / "homeassistant/generated/mqtt.py"
config.cache["mqtt"] = content = generate_and_validate(integrations)
@@ -57,7 +58,7 @@ def validate(integrations: Dict[str, Integration], config: Config):
return
def generate(integrations: Dict[str, Integration], config: Config):
def generate(integrations: dict[str, Integration], config: Config):
"""Generate MQTT file."""
mqtt_path = config.root / "homeassistant/generated/mqtt.py"
with open(str(mqtt_path), "w") as fp:

View File

@@ -1,4 +1,6 @@
"""Validate requirements."""
from __future__ import annotations
from collections import deque
import json
import operator
@@ -6,7 +8,6 @@ import os
import re
import subprocess
import sys
from typing import Dict, Set
from stdlib_list import stdlib_list
from tqdm import tqdm
@@ -58,7 +59,7 @@ def normalize_package_name(requirement: str) -> str:
return package
def validate(integrations: Dict[str, Integration], config: Config):
def validate(integrations: dict[str, Integration], config: Config):
"""Handle requirements for integrations."""
ensure_cache()
@@ -153,7 +154,7 @@ def ensure_cache():
PIPDEPTREE_CACHE = cache
def get_requirements(integration: Integration, packages: Set[str]) -> Set[str]:
def get_requirements(integration: Integration, packages: set[str]) -> set[str]:
"""Return all (recursively) requirements for an integration."""
ensure_cache()
@@ -184,7 +185,7 @@ def get_requirements(integration: Integration, packages: Set[str]) -> Set[str]:
return all_requirements
def install_requirements(integration: Integration, requirements: Set[str]) -> bool:
def install_requirements(integration: Integration, requirements: set[str]) -> bool:
"""Install integration requirements.
Return True if successful.

View File

@@ -1,7 +1,8 @@
"""Validate dependencies."""
from __future__ import annotations
import pathlib
import re
from typing import Dict
import voluptuous as vol
from voluptuous.humanize import humanize_error
@@ -93,7 +94,7 @@ def validate_services(integration: Integration):
)
def validate(integrations: Dict[str, Integration], config):
def validate(integrations: dict[str, Integration], config):
"""Handle dependencies for integrations."""
# check services.yaml is cool
for integration in integrations.values():

View File

@@ -1,7 +1,8 @@
"""Generate ssdp file."""
from __future__ import annotations
from collections import OrderedDict, defaultdict
import json
from typing import Dict
from .model import Config, Integration
@@ -22,7 +23,7 @@ def sort_dict(value):
return OrderedDict((key, value[key]) for key in sorted(value))
def generate_and_validate(integrations: Dict[str, Integration]):
def generate_and_validate(integrations: dict[str, Integration]):
"""Validate and generate ssdp data."""
data = defaultdict(list)
@@ -44,7 +45,7 @@ def generate_and_validate(integrations: Dict[str, Integration]):
return BASE.format(json.dumps(data, indent=4))
def validate(integrations: Dict[str, Integration], config: Config):
def validate(integrations: dict[str, Integration], config: Config):
"""Validate ssdp file."""
ssdp_path = config.root / "homeassistant/generated/ssdp.py"
config.cache["ssdp"] = content = generate_and_validate(integrations)
@@ -62,7 +63,7 @@ def validate(integrations: Dict[str, Integration], config: Config):
return
def generate(integrations: Dict[str, Integration], config: Config):
def generate(integrations: dict[str, Integration], config: Config):
"""Generate ssdp file."""
ssdp_path = config.root / "homeassistant/generated/ssdp.py"
with open(str(ssdp_path), "w") as fp:

View File

@@ -1,9 +1,10 @@
"""Validate integration translation files."""
from __future__ import annotations
from functools import partial
from itertools import chain
import json
import re
from typing import Dict
import voluptuous as vol
from voluptuous.humanize import humanize_error
@@ -295,7 +296,7 @@ def validate_translation_file(config: Config, integration: Integration, all_stri
)
def validate(integrations: Dict[str, Integration], config: Config):
def validate(integrations: dict[str, Integration], config: Config):
"""Handle JSON files inside integrations."""
if config.specific_integrations:
all_strings = None

View File

@@ -1,7 +1,8 @@
"""Generate zeroconf file."""
from __future__ import annotations
from collections import OrderedDict, defaultdict
import json
from typing import Dict
from .model import Config, Integration
@@ -19,7 +20,7 @@ HOMEKIT = {}
""".strip()
def generate_and_validate(integrations: Dict[str, Integration]):
def generate_and_validate(integrations: dict[str, Integration]):
"""Validate and generate zeroconf data."""
service_type_dict = defaultdict(list)
homekit_dict = {}
@@ -89,7 +90,7 @@ def generate_and_validate(integrations: Dict[str, Integration]):
return BASE.format(json.dumps(zeroconf, indent=4), json.dumps(homekit, indent=4))
def validate(integrations: Dict[str, Integration], config: Config):
def validate(integrations: dict[str, Integration], config: Config):
"""Validate zeroconf file."""
zeroconf_path = config.root / "homeassistant/generated/zeroconf.py"
config.cache["zeroconf"] = content = generate_and_validate(integrations)
@@ -108,7 +109,7 @@ def validate(integrations: Dict[str, Integration], config: Config):
return
def generate(integrations: Dict[str, Integration], config: Config):
def generate(integrations: dict[str, Integration], config: Config):
"""Generate zeroconf file."""
zeroconf_path = config.root / "homeassistant/generated/zeroconf.py"
with open(str(zeroconf_path), "w") as fp: