From 8fbcb93ab43c2b7a708225800f815ea08656739b Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Sat, 14 Jan 2023 10:19:18 +0100 Subject: [PATCH] Use IntEnum for hassfest quality scale (#85817) --- script/hassfest/manifest.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/script/hassfest/manifest.py b/script/hassfest/manifest.py index c2a73e0bed1..6f41b02878c 100644 --- a/script/hassfest/manifest.py +++ b/script/hassfest/manifest.py @@ -1,6 +1,7 @@ """Manifest validation.""" from __future__ import annotations +from enum import IntEnum from pathlib import Path from typing import Any from urllib.parse import urlparse @@ -23,7 +24,17 @@ DOCUMENTATION_URL_HOST = "www.home-assistant.io" DOCUMENTATION_URL_PATH_PREFIX = "/integrations/" 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 = [ "assumed_state", "calculated", @@ -337,10 +348,11 @@ def validate_manifest(integration: Integration, core_components_dir: Path) -> No "Virtual integration points to non-existing supported_by integration", ) - if (quality_scale := integration.manifest.get("quality_scale")) in { - "gold", - "platinum", - } and not integration.manifest.get("codeowners"): + if ( + (quality_scale := integration.manifest.get("quality_scale")) + and QualityScale[quality_scale.upper()] > QualityScale.SILVER + and not integration.manifest.get("codeowners") + ): integration.add_error( "manifest", f"{quality_scale} integration does not have a code owner",