jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/699952 )
Change subject: [fix] Implement Version properties from setuptools 49.4.0/vendor package 20.4 ......................................................................
[fix] Implement Version properties from setuptools 49.4.0/vendor package 20.4
This patch does not lead the bot to fail if newer pkg_resource vendor package is missing
Bug: T284939 Change-Id: I9a16345a0a1a289b790b4ff7db9573e03ccb5cbe --- M pwb.py M pywikibot/tools/__init__.py 2 files changed, 44 insertions(+), 11 deletions(-)
Approvals: JJMC89: Looks good to me, approved jenkins-bot: Verified
diff --git a/pwb.py b/pwb.py index 1b2527d..bf685f9 100755 --- a/pwb.py +++ b/pwb.py @@ -22,7 +22,6 @@ from __future__ import print_function
import os -import pkg_resources import sys import types
@@ -43,25 +42,26 @@ - Scripts version must not be older than previous Pyvikibot version due to deprecation policy """ - version = pkg_resources.packaging.version - scripts_version = version.parse(getattr(package, - '__version__', - pwb.__version__)) - wikibot_version = version.parse(pwb.__version__) + from pywikibot.tools import Version + scripts_version = Version(getattr(package, '__version__', pwb.__version__)) + wikibot_version = Version(pwb.__version__) + if scripts_version.release > wikibot_version.release: print('WARNING: Pywikibot version {} is behind scripts package ' 'version {}.\nYour Pywikibot may need an update or be ' 'misconfigured.\n'.format(wikibot_version, scripts_version))
# calculate previous minor release - prev_wikibot = version.parse('{v.major}.{}.{v.micro}' - .format(wikibot_version.minor - 1, - v=wikibot_version,)) + prev_wikibot = Version('{v.major}.{}.{v.micro}' + .format(wikibot_version.minor - 1, + v=wikibot_version,)) + if scripts_version.release < prev_wikibot.release: print('WARNING: Scripts package version {} is behind legacy Pywikibot ' 'version {} and current version {}\nYour scripts may need an ' 'update or be misconfigured.\n' .format(scripts_version, prev_wikibot, wikibot_version, )) + del Version
# The following snippet was developed by Ned Batchelder (and others) @@ -91,8 +91,6 @@ if package: main_mod.__package__ = package.__name__ check_pwb_versions(package) - global pkg_resources - del pkg_resources
# Set sys.argv and the first path element properly. old_argv = sys.argv @@ -176,6 +174,7 @@ :rtype: bool :raise RuntimeError: wrong Python version found in setup.py """ + import pkg_resources if script: from setup import script_deps dependencies = script_deps.get(Path(script).name, []) @@ -196,6 +195,7 @@ version_conflicts.append(requirement) print(e)
+ del pkg_resources del dependencies
_print_requirements(missing_requirements, script, 'missing') diff --git a/pywikibot/tools/__init__.py b/pywikibot/tools/__init__.py index efa2741..f81ee0b 100644 --- a/pywikibot/tools/__init__.py +++ b/pywikibot/tools/__init__.py @@ -45,6 +45,7 @@
from pywikibot.tools._unidata import _first_upper_exception
+pkg_Version = pkg_resources.packaging.version.Version # noqa: N816
try: import bz2 @@ -511,6 +512,38 @@ return first_upper(username)
+class Version(pkg_Version): + + """Version from pkg_resouce vendor package. + + This Version provides propreties of vendor package 20.4 shipped with + setuptools 49.4.0. + """ + + def __init__(self, version): + """Add additional properties of not provided by base class.""" + super().__init__(version) + + def __getattr__(self, name): + """Provides propreties of vendor package 20.4.""" + if name in ('epoch', 'release', 'pre', ): + return getattr(self._version, name) + if name in ('post', 'dev'): + attr = getattr(self._version, name) + return attr[1] if attr else None + if name == 'is_devrelease': + return self.dev is not None + + parts = ('major', 'minor', 'micro') + try: + index = parts.index(name) + except ValueError: + raise AttributeError('{!r} object has to attribute {!r}' + .format(type(self).__name__, name)) from None + release = self.release + return release[index] if len(release) >= index + 1 else 0 + + @total_ordering class MediaWikiVersion: