From b0a557401cbe54030b32c722be150055eda9f8a2 Mon Sep 17 00:00:00 2001 From: StSav012 Date: Fri, 18 Oct 2024 13:12:36 +0300 Subject: [PATCH] Add disallowed versions data to blacklist PySide6 6.8.0 and 6.8.0.1 --- pyproject.toml | 2 +- requirements.txt | 4 +++- setup.py | 26 ++++++++++++++++---------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 934ebb2..6a50a4f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ['setuptools>=45', 'setuptools_scm[toml]>=6.2'] +requires = ['setuptools>=45', 'packaging>=20', 'setuptools_scm[toml]>=6.2'] build-backend = 'setuptools.build_meta' [project] diff --git a/requirements.txt b/requirements.txt index 2825023..c7228e5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,4 +11,6 @@ orjson qtawesome # to build a package and install it -setuptools +setuptools>=45 +packaging>=20 +setuptools_scm[toml]>=6.2 diff --git a/setup.py b/setup.py index e334518..d65533e 100644 --- a/setup.py +++ b/setup.py @@ -15,31 +15,33 @@ def required_packages() -> list[str]: raise SystemError("Python versions prior to 3.8 are not supported") import platform - from typing import NamedTuple, Sequence + from typing import Collection, NamedTuple, Sequence - from pkg_resources import parse_version + from packaging.version import Version class PackageRequirement(NamedTuple): package_name: str min_version: str = "" + blacklisted_versions: Collection[str] = () def __str__(self) -> str: if self.min_version: - return self.package_name + " >= " + self.min_version + return self.package_name + ", ".join( + [" >= " + self.min_version] + [("!= " + blv) for blv in self.blacklisted_versions] + ) return self.package_name def is_package_importable(package_requirement: PackageRequirement) -> bool: from importlib.metadata import version, PackageNotFoundError try: - version(package_requirement.package_name) + actual_package_version: Version = Version(version(package_requirement.package_name)) except PackageNotFoundError: return False else: - if package_requirement.min_version and ( - parse_version(version(package_requirement.package_name)) - < parse_version(package_requirement.min_version) - ): + if package_requirement.min_version and (actual_package_version < Version(package_requirement.min_version)): + return False + if actual_package_version in package_requirement.blacklisted_versions: return False return True @@ -70,7 +72,7 @@ def required_package(package_requirement: PackageRequirement | Sequence[PackageR if ( # Windows 10 21H2 or later required uname.system == "Windows" - and parse_version(uname.version) < parse_version("10.0.19044") + and Version(uname.version) < Version("10.0.19044") ) or uname.machine not in ("x86_64", "AMD64"): # Qt6 does not support the OSes qt_list = [ @@ -79,7 +81,11 @@ def required_package(package_requirement: PackageRequirement | Sequence[PackageR ] else: qt_list = [ - PackageRequirement(package_name="PySide6-Essentials", min_version="6.2.0"), + PackageRequirement( + package_name="PySide6-Essentials", + min_version="6.2.0", + blacklisted_versions=("6.8.0", "6.8.0.1"), + ), PackageRequirement(package_name="PyQt6", min_version="6.2.0"), PackageRequirement(package_name="PyQt5", min_version="5.15.0"), PackageRequirement(package_name="PySide2", min_version="5.15.0"),