mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Validate coveragerc with hassfest (#31112)
* Validate coveragerc * Test if files exists * Print progress * Flush
This commit is contained in:
parent
7e4b9adc3d
commit
98bac43228
@ -6,7 +6,6 @@ omit =
|
|||||||
homeassistant/helpers/signal.py
|
homeassistant/helpers/signal.py
|
||||||
homeassistant/helpers/typing.py
|
homeassistant/helpers/typing.py
|
||||||
homeassistant/scripts/*.py
|
homeassistant/scripts/*.py
|
||||||
homeassistant/util/async.py
|
|
||||||
|
|
||||||
# omit pieces of code that rely on external devices being present
|
# omit pieces of code that rely on external devices being present
|
||||||
homeassistant/components/abode/__init__.py
|
homeassistant/components/abode/__init__.py
|
||||||
@ -32,7 +31,6 @@ omit =
|
|||||||
homeassistant/components/airly/const.py
|
homeassistant/components/airly/const.py
|
||||||
homeassistant/components/airvisual/sensor.py
|
homeassistant/components/airvisual/sensor.py
|
||||||
homeassistant/components/aladdin_connect/cover.py
|
homeassistant/components/aladdin_connect/cover.py
|
||||||
homeassistant/components/alarm_control_panel/manual_mqtt.py
|
|
||||||
homeassistant/components/alarmdecoder/*
|
homeassistant/components/alarmdecoder/*
|
||||||
homeassistant/components/alarmdotcom/alarm_control_panel.py
|
homeassistant/components/alarmdotcom/alarm_control_panel.py
|
||||||
homeassistant/components/alpha_vantage/sensor.py
|
homeassistant/components/alpha_vantage/sensor.py
|
||||||
@ -261,7 +259,6 @@ omit =
|
|||||||
homeassistant/components/geizhals/sensor.py
|
homeassistant/components/geizhals/sensor.py
|
||||||
homeassistant/components/gios/__init__.py
|
homeassistant/components/gios/__init__.py
|
||||||
homeassistant/components/gios/air_quality.py
|
homeassistant/components/gios/air_quality.py
|
||||||
homeassistant/components/gios/consts.py
|
|
||||||
homeassistant/components/github/sensor.py
|
homeassistant/components/github/sensor.py
|
||||||
homeassistant/components/gitlab_ci/sensor.py
|
homeassistant/components/gitlab_ci/sensor.py
|
||||||
homeassistant/components/gitter/sensor.py
|
homeassistant/components/gitter/sensor.py
|
||||||
@ -306,7 +303,6 @@ omit =
|
|||||||
homeassistant/components/homematic/notify.py
|
homeassistant/components/homematic/notify.py
|
||||||
homeassistant/components/homeworks/*
|
homeassistant/components/homeworks/*
|
||||||
homeassistant/components/honeywell/climate.py
|
homeassistant/components/honeywell/climate.py
|
||||||
homeassistant/components/hook/switch.py
|
|
||||||
homeassistant/components/horizon/media_player.py
|
homeassistant/components/horizon/media_player.py
|
||||||
homeassistant/components/hp_ilo/sensor.py
|
homeassistant/components/hp_ilo/sensor.py
|
||||||
homeassistant/components/htu21d/sensor.py
|
homeassistant/components/htu21d/sensor.py
|
||||||
@ -534,7 +530,6 @@ omit =
|
|||||||
homeassistant/components/plex/media_player.py
|
homeassistant/components/plex/media_player.py
|
||||||
homeassistant/components/plex/sensor.py
|
homeassistant/components/plex/sensor.py
|
||||||
homeassistant/components/plex/server.py
|
homeassistant/components/plex/server.py
|
||||||
homeassistant/components/plex/websockets.py
|
|
||||||
homeassistant/components/plugwise/*
|
homeassistant/components/plugwise/*
|
||||||
homeassistant/components/plum_lightpad/*
|
homeassistant/components/plum_lightpad/*
|
||||||
homeassistant/components/pocketcasts/sensor.py
|
homeassistant/components/pocketcasts/sensor.py
|
||||||
@ -728,7 +723,6 @@ omit =
|
|||||||
homeassistant/components/torque/sensor.py
|
homeassistant/components/torque/sensor.py
|
||||||
homeassistant/components/totalconnect/*
|
homeassistant/components/totalconnect/*
|
||||||
homeassistant/components/touchline/climate.py
|
homeassistant/components/touchline/climate.py
|
||||||
homeassistant/components/tplink/device_tracker.py
|
|
||||||
homeassistant/components/tplink/switch.py
|
homeassistant/components/tplink/switch.py
|
||||||
homeassistant/components/tplink_lte/*
|
homeassistant/components/tplink_lte/*
|
||||||
homeassistant/components/traccar/device_tracker.py
|
homeassistant/components/traccar/device_tracker.py
|
||||||
@ -753,7 +747,6 @@ omit =
|
|||||||
homeassistant/components/twitch/sensor.py
|
homeassistant/components/twitch/sensor.py
|
||||||
homeassistant/components/twitter/notify.py
|
homeassistant/components/twitter/notify.py
|
||||||
homeassistant/components/ubee/device_tracker.py
|
homeassistant/components/ubee/device_tracker.py
|
||||||
homeassistant/components/uber/sensor.py
|
|
||||||
homeassistant/components/ubus/device_tracker.py
|
homeassistant/components/ubus/device_tracker.py
|
||||||
homeassistant/components/ue_smart_radio/media_player.py
|
homeassistant/components/ue_smart_radio/media_player.py
|
||||||
homeassistant/components/unifiled/*
|
homeassistant/components/unifiled/*
|
||||||
@ -831,7 +824,6 @@ omit =
|
|||||||
homeassistant/components/zestimate/sensor.py
|
homeassistant/components/zestimate/sensor.py
|
||||||
homeassistant/components/zha/__init__.py
|
homeassistant/components/zha/__init__.py
|
||||||
homeassistant/components/zha/api.py
|
homeassistant/components/zha/api.py
|
||||||
homeassistant/components/zha/const.py
|
|
||||||
homeassistant/components/zha/core/channels/*
|
homeassistant/components/zha/core/channels/*
|
||||||
homeassistant/components/zha/core/const.py
|
homeassistant/components/zha/core/const.py
|
||||||
homeassistant/components/zha/core/device.py
|
homeassistant/components/zha/core/device.py
|
||||||
@ -839,7 +831,6 @@ omit =
|
|||||||
homeassistant/components/zha/core/helpers.py
|
homeassistant/components/zha/core/helpers.py
|
||||||
homeassistant/components/zha/core/patches.py
|
homeassistant/components/zha/core/patches.py
|
||||||
homeassistant/components/zha/core/registries.py
|
homeassistant/components/zha/core/registries.py
|
||||||
homeassistant/components/zha/device_entity.py
|
|
||||||
homeassistant/components/zha/entity.py
|
homeassistant/components/zha/entity.py
|
||||||
homeassistant/components/zha/light.py
|
homeassistant/components/zha/light.py
|
||||||
homeassistant/components/zha/sensor.py
|
homeassistant/components/zha/sensor.py
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
"""Validate manifests."""
|
"""Validate manifests."""
|
||||||
import pathlib
|
import pathlib
|
||||||
import sys
|
import sys
|
||||||
|
from time import monotonic
|
||||||
|
|
||||||
from . import (
|
from . import (
|
||||||
codeowners,
|
codeowners,
|
||||||
config_flow,
|
config_flow,
|
||||||
|
coverage,
|
||||||
dependencies,
|
dependencies,
|
||||||
json,
|
json,
|
||||||
manifest,
|
manifest,
|
||||||
@ -18,6 +20,7 @@ PLUGINS = [
|
|||||||
json,
|
json,
|
||||||
codeowners,
|
codeowners,
|
||||||
config_flow,
|
config_flow,
|
||||||
|
coverage,
|
||||||
dependencies,
|
dependencies,
|
||||||
manifest,
|
manifest,
|
||||||
services,
|
services,
|
||||||
@ -48,7 +51,17 @@ def main():
|
|||||||
integrations = Integration.load_dir(pathlib.Path("homeassistant/components"))
|
integrations = Integration.load_dir(pathlib.Path("homeassistant/components"))
|
||||||
|
|
||||||
for plugin in PLUGINS:
|
for plugin in PLUGINS:
|
||||||
plugin.validate(integrations, config)
|
try:
|
||||||
|
start = monotonic()
|
||||||
|
print(f"Validating {plugin.__name__.split('.')[-1]}...", end="", flush=True)
|
||||||
|
plugin.validate(integrations, config)
|
||||||
|
print(" done in {:.2f}s".format(monotonic() - start))
|
||||||
|
except RuntimeError as err:
|
||||||
|
print()
|
||||||
|
print()
|
||||||
|
print("Error!")
|
||||||
|
print(err)
|
||||||
|
return 1
|
||||||
|
|
||||||
# When we generate, all errors that are fixable will be ignored,
|
# When we generate, all errors that are fixable will be ignored,
|
||||||
# as generating them will be fixed.
|
# as generating them will be fixed.
|
||||||
|
50
script/hassfest/coverage.py
Normal file
50
script/hassfest/coverage.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
"""Validate coverage files."""
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
|
from .model import Config, Integration
|
||||||
|
|
||||||
|
|
||||||
|
def validate(integrations: Dict[str, Integration], config: Config):
|
||||||
|
"""Validate coverage."""
|
||||||
|
coverage_path = config.root / ".coveragerc"
|
||||||
|
|
||||||
|
not_found = []
|
||||||
|
checking = False
|
||||||
|
|
||||||
|
with coverage_path.open("rt") as fp:
|
||||||
|
for line in fp:
|
||||||
|
line = line.strip()
|
||||||
|
|
||||||
|
if not line or line.startswith("#"):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not checking:
|
||||||
|
if line == "omit =":
|
||||||
|
checking = True
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Finished
|
||||||
|
if line == "[report]":
|
||||||
|
break
|
||||||
|
|
||||||
|
path = Path(line)
|
||||||
|
|
||||||
|
# Discard wildcard
|
||||||
|
while "*" in path.name:
|
||||||
|
path = path.parent
|
||||||
|
|
||||||
|
if not path.exists():
|
||||||
|
not_found.append(line)
|
||||||
|
|
||||||
|
if not not_found:
|
||||||
|
return
|
||||||
|
|
||||||
|
errors = []
|
||||||
|
|
||||||
|
if not_found:
|
||||||
|
errors.append(
|
||||||
|
f".coveragerc references files that don't exist: {', '.join(not_found)}."
|
||||||
|
)
|
||||||
|
|
||||||
|
raise RuntimeError(" ".join(errors))
|
Loading…
x
Reference in New Issue
Block a user