From 48510eebaebd2620d6b6a74f51e8478bbb2b7ad9 Mon Sep 17 00:00:00 2001 From: Tomas Orsava Date: Mon, 22 Feb 2021 13:16:24 +0100 Subject: [PATCH] scripts/pythondistdeps: Fix for Python 3.10 self.name in PathDistribution is a property in Python 3.10+ and thus we can't redefine it as an instance variable. Instead we explicitly define it as a property, which works on all supported Python versions. --- python-rpm-generators.spec | 5 ++++- pythondistdeps.py | 10 +++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/python-rpm-generators.spec b/python-rpm-generators.spec index 1992873..7550178 100644 --- a/python-rpm-generators.spec +++ b/python-rpm-generators.spec @@ -1,7 +1,7 @@ Name: python-rpm-generators Summary: Dependency generators for Python RPMs Version: 12 -Release: 2%{?dist} +Release: 3%{?dist} # Originally all those files were part of RPM, so license is kept here License: GPLv2+ @@ -47,6 +47,9 @@ install -Dpm0755 -t %{buildroot}%{_rpmconfigdir} *.py %{_rpmconfigdir}/pythonbundles.py %changelog +* Mon Feb 22 2021 Tomas Orsava - 12-3 +- scripts/pythondistdeps: Fix for Python 3.10 + * Wed Feb 17 2021 Tomas Orsava - 12-2 - scripts/pythondistdeps: Switch from using pkg_resources to importlib.metadata for reading the egg/dist-info metadata diff --git a/pythondistdeps.py b/pythondistdeps.py index dcc0a2a..9ba0590 100755 --- a/pythondistdeps.py +++ b/pythondistdeps.py @@ -53,7 +53,6 @@ class Requirement(Requirement_): class Distribution(PathDistribution): def __init__(self, path): super(Distribution, self).__init__(Path(path)) - self.name = self.metadata['Name'] self.normalized_name = normalize_name(self.name) self.legacy_normalized_name = legacy_normalize_name(self.name) self.requirements = [Requirement(r) for r in self.requires or []] @@ -61,6 +60,15 @@ class Distribution(PathDistribution): v for k, v in self.metadata.items() if k == 'Provides-Extra'] self.py_version = self._parse_py_version(path) + # `name` is defined as a property exactly like this in Python 3.10 in the + # PathDistribution class. Due to that we can't redefine `name` as a normal + # attribute. So we copied the Python 3.10 definition here into the code so + # that it works also on previous Python/importlib_metadata versions. + @property + def name(self): + """Return the 'Name' metadata for the distribution package.""" + return self.metadata['Name'] + def _parse_py_version(self, path): # Try to parse the Python version from the path the metadata # resides at (e.g. /usr/lib/pythonX.Y/site-packages/...)