From adc8f377b6b4ab3f1cb9e7d2b8ddb9dffc1e09ab Mon Sep 17 00:00:00 2001 From: Ramazan Ibragimov <130592661+miskeens@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:47:19 +0300 Subject: [PATCH] GH-467 (review): move version checking to compatibility module --- artifactory.py | 10 ++++------ dohq_artifactory/admin.py | 9 +++++---- dohq_artifactory/compat.py | 7 +++++++ tests/conftest.py | 3 ++- tests/integration/test_integration_artifactory_path.py | 3 ++- 5 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 dohq_artifactory/compat.py diff --git a/artifactory.py b/artifactory.py index f07694d5..6bc2c8b7 100755 --- a/artifactory.py +++ b/artifactory.py @@ -33,7 +33,6 @@ import pathlib import platform import re -import sys import urllib.parse from itertools import islice @@ -50,6 +49,7 @@ from dohq_artifactory.admin import User from dohq_artifactory.auth import XJFrogArtApiAuth from dohq_artifactory.auth import XJFrogArtBearerAuth +from dohq_artifactory.compat import * # noqa: this helper only contains version flags from dohq_artifactory.exception import ArtifactoryException from dohq_artifactory.exception import raise_for_status from dohq_artifactory.logger import logger @@ -1497,9 +1497,7 @@ class ArtifactoryPath(pathlib.Path, PureArtifactoryPath): on regular constructors, but rather on templates. """ - if sys.version_info.major == 3 and sys.version_info.minor >= 10: - # see changes in pathlib.Path, slots are no more applied - # https://github.com/python/cpython/blob/ce121fd8755d4db9511ce4aab39d0577165e118e/Lib/pathlib.py#L952 + if IS_PYTHON_3_10_OR_NEWER: _accessor = _artifactory_accessor else: # in 3.9 and below Pathlib limits what members can be present in 'Path' class @@ -1571,7 +1569,7 @@ def __reduce__(self): pathlib_reduce = super().__reduce__() # pathlib.Path in 3.10+ does not have __slots__, so self.__dict__ is available; # in 3.9 and earlier there is no self.__dict__. return slots instead - if sys.version_info.major == 3 and sys.version_info.minor >= 10: + if IS_PYTHON_3_10_OR_NEWER: attributes = self.__dict__ else: attributes = {x: getattr(self, x) for x in self.__slots__} @@ -1784,7 +1782,7 @@ def __rtruediv__(self, key): obj.timeout = self.timeout return obj - if sys.version_info < (3,): + if IS_PYTHON_2: __div__ = __truediv__ __rdiv__ = __rtruediv__ diff --git a/dohq_artifactory/admin.py b/dohq_artifactory/admin.py index f51d0991..d5eb0bad 100644 --- a/dohq_artifactory/admin.py +++ b/dohq_artifactory/admin.py @@ -9,6 +9,7 @@ import jwt from dateutil.parser import isoparse +from dohq_artifactory.compat import * # noqa: this helper only contains version flags from dohq_artifactory.exception import ArtifactoryException from dohq_artifactory.exception import raise_for_status from dohq_artifactory.logger import logger @@ -51,10 +52,10 @@ def _new_function_with_secret_module(pw_len=16): return "".join(secrets.choice(string.ascii_letters) for i in range(pw_len)) -if sys.version_info < (3, 6): - generate_password = _old_function_for_secret -else: +if IS_PYTHON_3_6_OR_NEWER: generate_password = _new_function_with_secret_module +else: + generate_password = _old_function_for_secret def deprecation(message): @@ -656,7 +657,7 @@ def __truediv__(self, key): def __rtruediv__(self, key): return self.path.__truediv__(key) - if sys.version_info < (3,): + if IS_PYTHON_2: __div__ = __truediv__ __rdiv__ = __rtruediv__ diff --git a/dohq_artifactory/compat.py b/dohq_artifactory/compat.py new file mode 100644 index 00000000..cb4925ce --- /dev/null +++ b/dohq_artifactory/compat.py @@ -0,0 +1,7 @@ +import sys + +IS_PYTHON_2 = sys.version_info < (3,) +IS_PYTHON_3_6_OR_NEWER = sys.version_info >= (3, 6) +# see changes in pathlib.Path, slots are no more applied +# https://github.com/python/cpython/blob/ce121fd8755d4db9511ce4aab39d0577165e118e/Lib/pathlib.py#L952 +IS_PYTHON_3_10_OR_NEWER = sys.version_info >= (3, 10) diff --git a/tests/conftest.py b/tests/conftest.py index de2562aa..4752c758 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,12 +5,13 @@ import pytest from artifactory import ArtifactoryPath +from dohq_artifactory.compat import * # noqa: this helper only contains version flags from dohq_artifactory import Group from dohq_artifactory import PermissionTarget from dohq_artifactory import RepositoryLocal from dohq_artifactory import User -if sys.version_info[0] < 3: +if IS_PYTHON_2: import ConfigParser as configparser else: import configparser diff --git a/tests/integration/test_integration_artifactory_path.py b/tests/integration/test_integration_artifactory_path.py index 5442e99f..a9db0b22 100644 --- a/tests/integration/test_integration_artifactory_path.py +++ b/tests/integration/test_integration_artifactory_path.py @@ -8,8 +8,9 @@ import artifactory from artifactory import sha1sum from artifactory import sha256sum +from dohq_artifactory.compat import * # noqa: this helper only contains version flags -if sys.version_info[0] < 3: +if IS_PYTHON_2: import StringIO as io else: import io