commit:     5ea488e55517f8e43b4d9a03a346d44b9e7e2bdd
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Nov  4 15:04:10 2023 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Nov  4 18:03:05 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5ea488e5

dev-python/yapsy: Backport py3.12 fixes

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 dev-python/yapsy/files/yapsy-1.12.2-py312.patch | 138 ++++++++++++++++++++++++
 dev-python/yapsy/metadata.xml                   |   2 +-
 dev-python/yapsy/yapsy-1.12.2-r2.ebuild         |  34 ++++++
 3 files changed, 173 insertions(+), 1 deletion(-)

diff --git a/dev-python/yapsy/files/yapsy-1.12.2-py312.patch 
b/dev-python/yapsy/files/yapsy-1.12.2-py312.patch
new file mode 100644
index 000000000000..6842a495af2d
--- /dev/null
+++ b/dev-python/yapsy/files/yapsy-1.12.2-py312.patch
@@ -0,0 +1,138 @@
+From 29286320673f9e853559cf20aeb3456e541afbd4 Mon Sep 17 00:00:00 2001
+From: Ameya Vikram Singh <ameya.v.si...@gmail.com>
+Date: Mon, 6 Feb 2023 13:31:23 +0530
+Subject: [PATCH] Remove Deprecated API's
+
+* Replaced packaging.version instead of distutils.version
+* Replaced imp module to importlib
+
+**Note:** Probably Deprecates Python 2.7 supports, and maybe some initial 
versions of Python 3.x.
+
+Signed-off-by: Ameya Vikram Singh <ameya.v.si...@gmail.com>
+---
+ test/test_PluginInfo.py         |  3 ++-
+ yapsy/PluginInfo.py             |  6 +++---
+ yapsy/PluginManager.py          | 17 ++++++++++-------
+ yapsy/VersionedPluginManager.py |  8 ++++----
+ 4 files changed, 19 insertions(+), 15 deletions(-)
+
+diff --git a/test/test_PluginInfo.py b/test/test_PluginInfo.py
+index 0863671..29c736a 100644
+--- a/test/test_PluginInfo.py
++++ b/test/test_PluginInfo.py
+@@ -6,6 +6,7 @@ import unittest
+ 
+ 
+ from yapsy.PluginInfo import PluginInfo
++from packaging.version import Version
+ 
+ 
+ class PluginInfoTest(unittest.TestCase):
+@@ -20,7 +21,7 @@ class PluginInfoTest(unittest.TestCase):
+               self.assertEqual(None,pi.plugin_object)
+               self.assertEqual([],pi.categories)
+               self.assertEqual(None,pi.error)
+-              self.assertEqual("0.0",pi.version)
++              self.assertEqual(Version("0.0"),pi.version)
+               self.assertEqual("Unknown",pi.author)
+               self.assertEqual("Unknown",pi.copyright)
+               self.assertEqual("None",pi.website)
+diff --git a/yapsy/PluginInfo.py b/yapsy/PluginInfo.py
+index 69d220e..700374e 100644
+--- a/yapsy/PluginInfo.py
++++ b/yapsy/PluginInfo.py
+@@ -12,7 +12,7 @@ API
+ """
+ 
+ from yapsy.compat import ConfigParser
+-from distutils.version import StrictVersion
++from packaging.version import Version
+ 
+ 
+ class PluginInfo(object):
+@@ -105,7 +105,7 @@ class PluginInfo(object):
+ 
+       
+       def __getVersion(self):
+-              return 
StrictVersion(self.details.get("Documentation","Version"))
++              return Version(self.details.get("Documentation","Version"))
+       
+       def setVersion(self, vstring):
+               """
+@@ -114,7 +114,7 @@ class PluginInfo(object):
+               Used by subclasses to provide different handling of the
+               version number.
+               """
+-              if isinstance(vstring,StrictVersion):
++              if isinstance(vstring,Version):
+                       vstring = str(vstring)
+               if not self.details.has_section("Documentation"):
+                       self.details.add_section("Documentation")
+diff --git a/yapsy/PluginManager.py b/yapsy/PluginManager.py
+index 81a7c2b..b72de93 100644
+--- a/yapsy/PluginManager.py
++++ b/yapsy/PluginManager.py
+@@ -128,10 +128,7 @@ API
+ 
+ import sys
+ import os
+-try:
+-      import importlib.abc.Loader as imp
+-except ImportError:
+-      import imp
++import importlib
+ 
+ from yapsy import log
+ from yapsy import NormalizePluginNameForModuleName
+@@ -577,11 +574,17 @@ class PluginManager(object):
+               .. note:: Isolated and provided to be reused, but not to be 
reimplemented !
+               """
+               # use imp to correctly load the plugin as a module
++              candidate_module = None
+               if os.path.isdir(candidate_filepath):
+-                      candidate_module = 
imp.load_module(plugin_module_name,None,candidate_filepath,("py","r",imp.PKG_DIRECTORY))
++                      if (spec := 
importlib.util.spec_from_file_location(candidate_filepath.split('/')[-1], 
candidate_filepath + "/__init__.py")) is not None:
++                              candidate_module = 
importlib.util.module_from_spec(spec)
++                              sys.modules[plugin_module_name] = 
candidate_module
++                              spec.loader.exec_module(candidate_module)
+               else:
+-                      with open(candidate_filepath+".py","r") as plugin_file:
+-                              candidate_module = 
imp.load_module(plugin_module_name,plugin_file,candidate_filepath+".py",("py","r",imp.PY_SOURCE))
++                      if (spec := 
importlib.util.spec_from_file_location(candidate_filepath.split('/')[-1], 
candidate_filepath + ".py")) is not None:
++                              candidate_module = 
importlib.util.module_from_spec(spec)
++                              sys.modules[plugin_module_name] = 
candidate_module
++                              spec.loader.exec_module(candidate_module)
+               return candidate_module
+       
+       def instanciateElementWithImportInfo(self, element, element_name,
+diff --git a/yapsy/VersionedPluginManager.py b/yapsy/VersionedPluginManager.py
+index 83ad4fd..686a52a 100644
+--- a/yapsy/VersionedPluginManager.py
++++ b/yapsy/VersionedPluginManager.py
+@@ -12,7 +12,7 @@ API
+ """
+ 
+ 
+-from distutils.version import StrictVersion
++from packaging.version import Version
+ 
+ from yapsy.PluginInfo import PluginInfo
+ from yapsy.IPlugin import IPlugin
+@@ -27,11 +27,11 @@ class VersionedPluginInfo(PluginInfo):
+       
+       def __init__(self, plugin_name, plugin_path):
+               PluginInfo.__init__(self, plugin_name, plugin_path)
+-              # version number is now required to be a StrictVersion object
+-              self.version    = StrictVersion("0.0")
++              # version number is now required to be a Version object
++              self.version    = Version("0.0")
+ 
+       def setVersion(self, vstring):
+-              self.version = StrictVersion(vstring)
++              self.version = Version(vstring)
+ 
+ 
+ class VersionedPluginManager(PluginManagerDecorator):
+-- 
+2.42.0
+

diff --git a/dev-python/yapsy/metadata.xml b/dev-python/yapsy/metadata.xml
index 8c2be5a80f4c..8d49735ada95 100644
--- a/dev-python/yapsy/metadata.xml
+++ b/dev-python/yapsy/metadata.xml
@@ -6,7 +6,7 @@
                <name>Python</name>
        </maintainer>
        <upstream>
-               <remote-id type="sourceforge">yapsy</remote-id>
+               <remote-id type="github">tibonihoo/yapsy</remote-id>
                <remote-id type="pypi">Yapsy</remote-id>
        </upstream>
 </pkgmetadata>

diff --git a/dev-python/yapsy/yapsy-1.12.2-r2.ebuild 
b/dev-python/yapsy/yapsy-1.12.2-r2.ebuild
new file mode 100644
index 000000000000..54be1b3e434d
--- /dev/null
+++ b/dev-python/yapsy/yapsy-1.12.2-r2.ebuild
@@ -0,0 +1,34 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} )
+
+inherit distutils-r1
+
+MY_P="Yapsy-${PV}"
+DESCRIPTION="A fat-free DIY Python plugin management toolkit"
+HOMEPAGE="
+       https://github.com/tibonihoo/yapsy/
+       https://pypi.org/project/Yapsy/
+"
+SRC_URI="mirror://sourceforge/yapsy/${MY_P}/${MY_P}.tar.gz"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~riscv ~x86"
+
+RDEPEND="
+       dev-python/packaging[${PYTHON_USEDEP}]
+"
+
+distutils_enable_sphinx doc
+distutils_enable_tests unittest
+
+PATCHES=(
+       # 
https://github.com/tibonihoo/yapsy/commit/29286320673f9e853559cf20aeb3456e541afbd4
+       "${FILESDIR}/${P}-py312.patch"
+)

Reply via email to