Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
devel:languages:python
python-oscrypto
python312.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File python312.patch of Package python-oscrypto
From 3be536e4a61ac5fbd403ee80cdb54cb666f34679 Mon Sep 17 00:00:00 2001 From: Dominik 'Rathann' Mierzejewski <dominik@greysector.net> Date: Thu, 17 Aug 2023 09:05:29 +0200 Subject: [PATCH 01/13] use `importlib` instead of deprecated `imp` module This fixes tests with python 3.12 where the `imp` module was [removed](https://docs.python.org/3.12/whatsnew/3.12.html#removed). This should fix issue #74. --- tests/__init__.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) Index: oscrypto-1.3.0/tests/__init__.py =================================================================== --- oscrypto-1.3.0.orig/tests/__init__.py +++ oscrypto-1.3.0/tests/__init__.py @@ -1,10 +1,17 @@ # coding: utf-8 from __future__ import unicode_literals, division, absolute_import, print_function -import imp import os +import sys import unittest +if sys.version_info < (3, 5): + import imp +else: + import importlib + import importlib.abc + import importlib.util + __version__ = '1.3.0' __version_info__ = (1, 3, 0) @@ -66,6 +73,47 @@ def local_oscrypto(): return (_asn1crypto_module, _oscrypto_module) +if sys.version_info >= (3, 5): + class ModCryptoMetaFinder(importlib.abc.MetaPathFinder): + def setup(self): + self.modules = {} + sys.meta_path.insert(0, self) + + def add_module(self, package_name, package_path): + if package_name not in self.modules: + self.modules[package_name] = package_path + + def find_spec(self, fullname, path, target=None): + name_parts = fullname.split('.') + if name_parts[0] not in self.modules: + return None + + package = name_parts[0] + package_path = self.modules[package] + + fullpath = os.path.join(package_path, *name_parts[1:]) + + if os.path.isdir(fullpath): + filename = os.path.join(fullpath, "__init__.py") + submodule_locations = [fullpath] + else: + filename = fullpath + ".py" + submodule_locations = None + + if not os.path.exists(filename): + return None + + return importlib.util.spec_from_file_location( + fullname, + filename, + loader=None, + submodule_search_locations=submodule_locations + ) + + CUSTOM_FINDER = ModCryptoMetaFinder() + CUSTOM_FINDER.setup() + + def _import_from(mod, path, mod_dir=None): """ Imports a module from a specific path @@ -84,18 +132,44 @@ def _import_from(mod, path, mod_dir=None None if not loaded, otherwise the module """ + if mod in sys.modules: + return sys.modules[mod] + if mod_dir is None: - mod_dir = mod + full_mod = mod + else: + full_mod = mod_dir.replace(os.sep, '.') + + if mod_dir is None: + mod_dir = mod.replace('.', os.sep) if not os.path.exists(path): return None - if not os.path.exists(os.path.join(path, mod_dir)): + source_path = os.path.join(path, mod_dir, '__init__.py') + if not os.path.exists(source_path): + source_path = os.path.join(path, mod_dir + '.py') + + if not os.path.exists(source_path): return None + if os.sep in mod_dir: + append, mod_dir = mod_dir.rsplit(os.sep, 1) + path = os.path.join(path, append) + try: - mod_info = imp.find_module(mod_dir, [path]) - return imp.load_module(mod, *mod_info) + if sys.version_info < (3, 5): + mod_info = imp.find_module(mod_dir, [path]) + return imp.load_module(mod, *mod_info) + + else: + package = mod.split('.', 1)[0] + package_dir = full_mod.split('.', 1)[0] + package_path = os.path.join(path, package_dir) + CUSTOM_FINDER.add_module(package, package_path) + + return importlib.import_module(mod) + except ImportError: return None Index: oscrypto-1.3.0/dev/_import.py =================================================================== --- oscrypto-1.3.0.orig/dev/_import.py +++ oscrypto-1.3.0/dev/_import.py @@ -1,17 +1,64 @@ # coding: utf-8 from __future__ import unicode_literals, division, absolute_import, print_function -import imp import sys import os from . import build_root, package_name, package_root +if sys.version_info < (3, 5): + import imp +else: + import importlib + import importlib.abc + import importlib.util + + if sys.version_info < (3,): getcwd = os.getcwdu else: getcwd = os.getcwd +if sys.version_info >= (3, 5): + class ModCryptoMetaFinder(importlib.abc.MetaPathFinder): + def setup(self): + self.modules = {} + sys.meta_path.insert(0, self) + + def add_module(self, package_name, package_path): + if package_name not in self.modules: + self.modules[package_name] = package_path + + def find_spec(self, fullname, path, target=None): + name_parts = fullname.split('.') + if name_parts[0] not in self.modules: + return None + + package = name_parts[0] + package_path = self.modules[package] + + fullpath = os.path.join(package_path, *name_parts[1:]) + + if os.path.isdir(fullpath): + filename = os.path.join(fullpath, "__init__.py") + submodule_locations = [fullpath] + else: + filename = fullpath + ".py" + submodule_locations = None + + if not os.path.exists(filename): + return None + + return importlib.util.spec_from_file_location( + fullname, + filename, + loader=None, + submodule_search_locations=submodule_locations + ) + + CUSTOM_FINDER = ModCryptoMetaFinder() + CUSTOM_FINDER.setup() + def _import_from(mod, path, mod_dir=None, allow_error=False): """ @@ -34,14 +81,25 @@ def _import_from(mod, path, mod_dir=None None if not loaded, otherwise the module """ + if mod in sys.modules: + return sys.modules[mod] + + if mod_dir is None: + full_mod = mod + else: + full_mod = mod_dir.replace(os.sep, '.') + if mod_dir is None: mod_dir = mod.replace('.', os.sep) if not os.path.exists(path): return None - if not os.path.exists(os.path.join(path, mod_dir)) \ - and not os.path.exists(os.path.join(path, mod_dir + '.py')): + source_path = os.path.join(path, mod_dir, '__init__.py') + if not os.path.exists(source_path): + source_path = os.path.join(path, mod_dir + '.py') + + if not os.path.exists(source_path): return None if os.sep in mod_dir: @@ -49,8 +107,18 @@ def _import_from(mod, path, mod_dir=None path = os.path.join(path, append) try: - mod_info = imp.find_module(mod_dir, [path]) - return imp.load_module(mod, *mod_info) + if sys.version_info < (3, 5): + mod_info = imp.find_module(mod_dir, [path]) + return imp.load_module(mod, *mod_info) + + else: + package = mod.split('.', 1)[0] + package_dir = full_mod.split('.', 1)[0] + package_path = os.path.join(path, package_dir) + CUSTOM_FINDER.add_module(package, package_path) + + return importlib.import_module(mod) + except ImportError: if allow_error: raise Index: oscrypto-1.3.0/dev/coverage.py =================================================================== --- oscrypto-1.3.0.orig/dev/coverage.py +++ oscrypto-1.3.0/dev/coverage.py @@ -4,7 +4,6 @@ from __future__ import unicode_literals, import cgi import codecs import coverage -import imp import json import os import unittest @@ -17,6 +16,7 @@ import subprocess from fnmatch import fnmatch from . import package_name, package_root, other_packages +from ._import import _import_from if sys.version_info < (3,): str_cls = unicode # noqa @@ -103,9 +103,7 @@ def _load_package_tests(name): if not os.path.exists(package_dir): return [] - tests_module_info = imp.find_module('tests', [package_dir]) - tests_module = imp.load_module('%s.tests' % name, *tests_module_info) - return tests_module.test_classes() + return _import_from('%s_tests' % name, package_dir, 'tests').test_classes() def _env_info(): Index: oscrypto-1.3.0/dev/build.py =================================================================== --- oscrypto-1.3.0.orig/dev/build.py +++ oscrypto-1.3.0/dev/build.py @@ -1,7 +1,6 @@ # coding: utf-8 from __future__ import unicode_literals, division, absolute_import, print_function -import imp import os import tarfile import zipfile @@ -9,6 +8,7 @@ import zipfile import setuptools.sandbox from . import package_root, package_name, has_tests_package +from ._import import _import_from def _list_zip(filename): @@ -45,8 +45,8 @@ def run(): # Trying to call setuptools.sandbox.run_setup(setup, ['--version']) # resulted in a segfault, so we do this instead - module_info = imp.find_module('version', [os.path.join(package_root, package_name)]) - version_mod = imp.load_module('%s.version' % package_name, *module_info) + package_dir = os.path.join(package_root, package_name) + version_mod = _import_from('%s.version' % package_name, package_dir, 'version') pkg_name_info = (package_name, version_mod.__version__) print('Building %s-%s' % pkg_name_info)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor