Use IntEnum for hassfest quality scale (#85817)

This commit is contained in:
epenet 2023-01-14 10:19:18 +01:00 committed by GitHub
parent 1fcd25130f
commit 8fbcb93ab4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,6 +1,7 @@
"""Manifest validation.""" """Manifest validation."""
from __future__ import annotations from __future__ import annotations
from enum import IntEnum
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
from urllib.parse import urlparse from urllib.parse import urlparse
@ -23,7 +24,17 @@ DOCUMENTATION_URL_HOST = "www.home-assistant.io"
DOCUMENTATION_URL_PATH_PREFIX = "/integrations/" DOCUMENTATION_URL_PATH_PREFIX = "/integrations/"
DOCUMENTATION_URL_EXCEPTIONS = {"https://www.home-assistant.io/hassio"} DOCUMENTATION_URL_EXCEPTIONS = {"https://www.home-assistant.io/hassio"}
SUPPORTED_QUALITY_SCALES = ["gold", "internal", "platinum", "silver"]
class QualityScale(IntEnum):
"""Supported manifest quality scales."""
INTERNAL = -1
SILVER = 1
GOLD = 2
PLATINUM = 3
SUPPORTED_QUALITY_SCALES = [enum.name.lower() for enum in QualityScale]
SUPPORTED_IOT_CLASSES = [ SUPPORTED_IOT_CLASSES = [
"assumed_state", "assumed_state",
"calculated", "calculated",
@ -337,10 +348,11 @@ def validate_manifest(integration: Integration, core_components_dir: Path) -> No
"Virtual integration points to non-existing supported_by integration", "Virtual integration points to non-existing supported_by integration",
) )
if (quality_scale := integration.manifest.get("quality_scale")) in { if (
"gold", (quality_scale := integration.manifest.get("quality_scale"))
"platinum", and QualityScale[quality_scale.upper()] > QualityScale.SILVER
} and not integration.manifest.get("codeowners"): and not integration.manifest.get("codeowners")
):
integration.add_error( integration.add_error(
"manifest", "manifest",
f"{quality_scale} integration does not have a code owner", f"{quality_scale} integration does not have a code owner",