From 9989d64fb93e33e258260848ca2ea3e4adf7dcf1 Mon Sep 17 00:00:00 2001 From: Frost Ming Date: Sat, 14 Sep 2024 11:33:09 +0800 Subject: [PATCH] feat: support generic platforms Signed-off-by: Frost Ming --- src/dep_logic/tags/os.py | 8 ++++++++ src/dep_logic/tags/platform.py | 10 +++++++--- tests/tags/test_platform.py | 5 +++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/dep_logic/tags/os.py b/src/dep_logic/tags/os.py index f086893..79e184b 100644 --- a/src/dep_logic/tags/os.py +++ b/src/dep_logic/tags/os.py @@ -82,3 +82,11 @@ class Haiku(Os): def __str__(self) -> str: return f"haiku_{self.release}" + + +@dataclass(frozen=True) +class Generic(Os): + name: str + + def __str__(self) -> str: + return self.name.lower() diff --git a/src/dep_logic/tags/platform.py b/src/dep_logic/tags/platform.py index 7772867..51fb874 100644 --- a/src/dep_logic/tags/platform.py +++ b/src/dep_logic/tags/platform.py @@ -72,9 +72,11 @@ def parse(cls, platform: str) -> Self: else: # os_name == "musllinux" return cls(os.Musllinux(int(major), int(minor)), Arch.parse(arch)) else: - raise PlatformError( - f"Unsupported platform {platform}, expected one of {cls.choices()}" - ) + os_, arch = platform.split("_", 1) + try: + return cls(os.Generic(os_), Arch.parse(arch)) + except ValueError as e: + raise PlatformError(f"Unsupported platform {platform}") from e def __str__(self) -> str: if isinstance(self.os, os.Windows) and self.arch == Arch.X86_64: @@ -228,6 +230,8 @@ def compatible_tags(self) -> list[str]: release = f"{major_ver - 3}_{other}" arch = f"{arch}_64bit" platform_tags.append(f"solaris_{release}_{arch}") + elif isinstance(os_, os.Generic): + platform_tags.append(f"{os_}_{arch}") else: raise PlatformError( f"Unsupported operating system and architecture combination: {os_} {arch}" diff --git a/tests/tags/test_platform.py b/tests/tags/test_platform.py index a384dd2..d8f1cf2 100644 --- a/tests/tags/test_platform.py +++ b/tests/tags/test_platform.py @@ -342,6 +342,11 @@ def test_platform_tags_musl(): Platform(os.Macos(12, 0), Arch.X86_64), "macos_12_0_x86_64", ), + ( + "mingw_x86_64", + Platform(os.Generic("mingw"), Arch.X86_64), + "mingw_x86_64", + ), ], ) def test_parse_platform(text, expected, normalized):