git: c6b11c8202d1 - main - sysutils/py-mitogen: update to 0.3.2
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 24 May 2022 13:17:14 UTC
The branch main has been updated by dch: URL: https://cgit.FreeBSD.org/ports/commit/?id=c6b11c8202d18d5327584d6f2f1338a8e82b5419 commit c6b11c8202d18d5327584d6f2f1338a8e82b5419 Author: Dave Cottlehuber <dch@FreeBSD.org> AuthorDate: 2022-05-24 13:16:23 +0000 Commit: Dave Cottlehuber <dch@FreeBSD.org> CommitDate: 2022-05-24 13:16:54 +0000 sysutils/py-mitogen: update to 0.3.2 This drops ansible 2.x compatibility as upstream ansible version is also no longer supported. Includes backported fix for #906, which breaks mitogen if py-distro is also installed. https://github.com/mitogen-hq/mitogen/issues/906 Sponsored by: SkunkWerks, GmbH --- sysutils/py-mitogen/Makefile | 5 +- sysutils/py-mitogen/distinfo | 8 +- sysutils/py-mitogen/files/patch-mitogen_core.py | 32 ++++ sysutils/py-mitogen/files/patch-mitogen_master.py | 214 ++++++++++++++++++++++ 4 files changed, 255 insertions(+), 4 deletions(-) diff --git a/sysutils/py-mitogen/Makefile b/sysutils/py-mitogen/Makefile index 692e82bdf5ae..258ba5b37a29 100644 --- a/sysutils/py-mitogen/Makefile +++ b/sysutils/py-mitogen/Makefile @@ -1,9 +1,12 @@ PORTNAME= mitogen -DISTVERSION= 0.2.9 +DISTVERSION= 0.3.2 CATEGORIES= sysutils python MASTER_SITES= CHEESESHOP PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} +# PATCH_SITES= https://github.com/mitogen-hq/${PORTNAME}/pull/ +# PATCHFILES+= 913.patch:-p1 # https://github.com/mitogen-hq/mitogen/pull/913.patch + MAINTAINER= dch@FreeBSD.org COMMENT= Ansible accelerator & python library for writing distributed programs diff --git a/sysutils/py-mitogen/distinfo b/sysutils/py-mitogen/distinfo index 643135251318..d34920fb5b9e 100644 --- a/sysutils/py-mitogen/distinfo +++ b/sysutils/py-mitogen/distinfo @@ -1,3 +1,5 @@ -TIMESTAMP = 1587412579 -SHA256 (mitogen-0.2.9.tar.gz) = 76cb9afef92596818a4639afb2a0bb0384ce7b6699b353af55662057b08b1e57 -SIZE (mitogen-0.2.9.tar.gz) = 210868 +TIMESTAMP = 1653396026 +SHA256 (mitogen-0.3.2.tar.gz) = 49e1e391cb4fa3627e290fea656a3c38cce990778137f013291d7e7085304c3d +SIZE (mitogen-0.3.2.tar.gz) = 218661 +SHA256 (913.patch) = 29e678a1eb6fbea615b25f3114f17cd5504ae2a11bb691124bef253ca2e9ba98 +SIZE (913.patch) = 16016 diff --git a/sysutils/py-mitogen/files/patch-mitogen_core.py b/sysutils/py-mitogen/files/patch-mitogen_core.py new file mode 100644 index 000000000000..66abd739671b --- /dev/null +++ b/sysutils/py-mitogen/files/patch-mitogen_core.py @@ -0,0 +1,32 @@ +--- mitogen/core.py.orig 2022-01-12 07:45:19 UTC ++++ mitogen/core.py +@@ -1357,6 +1357,16 @@ class Importer(object): + fp.close() + + def find_module(self, fullname, path=None): ++ """ ++ Return a loader (ourself) or None, for the module with fullname. ++ ++ Implements importlib.abc.MetaPathFinder.find_module(). ++ Deprecrated in Python 3.4+, replaced by find_spec(). ++ Raises ImportWarning in Python 3.10+. ++ ++ fullname A (fully qualified?) module name, e.g. "os.path". ++ path __path__ of parent packge. None for a top level module. ++ """ + if hasattr(_tls, 'running'): + return None + +@@ -1478,6 +1488,12 @@ class Importer(object): + callback() + + def load_module(self, fullname): ++ """ ++ Return the loaded module specified by fullname. ++ ++ Implements importlib.abc.Loader.load_module(). ++ Deprecated in Python 3.4+, replaced by create_module() & exec_module(). ++ """ + fullname = to_text(fullname) + _v and self._log.debug('requesting %s', fullname) + self._refuse_imports(fullname) diff --git a/sysutils/py-mitogen/files/patch-mitogen_master.py b/sysutils/py-mitogen/files/patch-mitogen_master.py new file mode 100644 index 000000000000..6e669e792c55 --- /dev/null +++ b/sysutils/py-mitogen/files/patch-mitogen_master.py @@ -0,0 +1,214 @@ +--- mitogen/master.py.orig 2022-01-12 07:45:19 UTC ++++ mitogen/master.py +@@ -122,6 +122,13 @@ def is_stdlib_name(modname): + """ + Return :data:`True` if `modname` appears to come from the standard library. + """ ++ # `imp.is_builtin()` isn't a documented as part of Python's stdlib API. ++ # ++ # """ ++ # Main is a little special - imp.is_builtin("__main__") will return False, ++ # but BuiltinImporter is still the most appropriate initial setting for ++ # its __loader__ attribute. ++ # """ -- comment in CPython pylifecycle.c:add_main_module() + if imp.is_builtin(modname) != 0: + return True + +@@ -512,42 +519,57 @@ class PkgutilMethod(FinderMethod): + Find `fullname` using :func:`pkgutil.find_loader`. + """ + try: ++ # If fullname refers to a submodule that's not already imported ++ # then the containing package is imported. + # Pre-'import spec' this returned None, in Python3.6 it raises + # ImportError. + loader = pkgutil.find_loader(fullname) + except ImportError: + e = sys.exc_info()[1] +- LOG.debug('%r._get_module_via_pkgutil(%r): %s', +- self, fullname, e) ++ LOG.debug('%r: find_loader(%r) failed: %s', self, fullname, e) + return None + +- IOLOG.debug('%r._get_module_via_pkgutil(%r) -> %r', +- self, fullname, loader) + if not loader: ++ LOG.debug('%r: find_loader(%r) returned %r, aborting', ++ self, fullname, loader) + return + + try: +- path, is_special = _py_filename(loader.get_filename(fullname)) +- source = loader.get_source(fullname) +- is_pkg = loader.is_package(fullname) +- +- # workaround for special python modules that might only exist in memory +- if is_special and is_pkg and not source: +- source = '\n' ++ path = loader.get_filename(fullname) + except (AttributeError, ImportError): +- # - Per PEP-302, get_source() and is_package() are optional, +- # calling them may throw AttributeError. + # - get_filename() may throw ImportError if pkgutil.find_loader() + # picks a "parent" package's loader for some crap that's been + # stuffed in sys.modules, for example in the case of urllib3: + # "loader for urllib3.contrib.pyopenssl cannot handle + # requests.packages.urllib3.contrib.pyopenssl" + e = sys.exc_info()[1] +- LOG.debug('%r: loading %r using %r failed: %s', +- self, fullname, loader, e) ++ LOG.debug('%r: %r.get_file_name(%r) failed: %r', self, loader, fullname, e) + return + ++ path, is_special = _py_filename(path) ++ ++ try: ++ source = loader.get_source(fullname) ++ except AttributeError: ++ # Per PEP-302, get_source() is optional, ++ e = sys.exc_info()[1] ++ LOG.debug('%r: %r.get_source() failed: %r', self, loader, fullname, e) ++ return ++ ++ try: ++ is_pkg = loader.is_package(fullname) ++ except AttributeError: ++ # Per PEP-302, is_package() is optional, ++ e = sys.exc_info()[1] ++ LOG.debug('%r: %r.is_package(%r) failed: %r', self, loader, fullname, e) ++ return ++ ++ # workaround for special python modules that might only exist in memory ++ if is_special and is_pkg and not source: ++ source = '\n' ++ + if path is None or source is None: ++ LOG.debug('%r: path=%r, source=%r, aborting', self, path, source) + return + + if isinstance(source, mitogen.core.UnicodeType): +@@ -567,23 +589,37 @@ class SysModulesMethod(FinderMethod): + """ + Find `fullname` using its :data:`__file__` attribute. + """ +- module = sys.modules.get(fullname) ++ try: ++ module = sys.modules[fullname] ++ except KeyError: ++ LOG.debug('%r: sys.modules[%r] absent, aborting', self, fullname) ++ return ++ + if not isinstance(module, types.ModuleType): +- LOG.debug('%r: sys.modules[%r] absent or not a regular module', +- self, fullname) ++ LOG.debug('%r: sys.modules[%r] is %r, aborting', ++ self, fullname, module) + return + +- LOG.debug('_get_module_via_sys_modules(%r) -> %r', fullname, module) +- alleged_name = getattr(module, '__name__', None) +- if alleged_name != fullname: +- LOG.debug('sys.modules[%r].__name__ is incorrect, assuming ' +- 'this is a hacky module alias and ignoring it. ' +- 'Got %r, module object: %r', +- fullname, alleged_name, module) ++ try: ++ resolved_name = module.__name__ ++ except AttributeError: ++ LOG.debug('%r: %r has no __name__, aborting', self, module) + return + +- path, _ = _py_filename(getattr(module, '__file__', '')) ++ if resolved_name != fullname: ++ LOG.debug('%r: %r.__name__ is %r, aborting', ++ self, module, resolved_name) ++ return ++ ++ try: ++ path = module.__file__ ++ except AttributeError: ++ LOG.debug('%r: %r has no __file__, aborting', self, module) ++ return ++ ++ path, _ = _py_filename(path) + if not path: ++ LOG.debug('%r: %r.__file__ is %r, aborting', self, module, path) + return + + LOG.debug('%r: sys.modules[%r]: found %s', self, fullname, path) +@@ -628,10 +664,24 @@ class ParentEnumerationMethod(FinderMethod): + module object or any parent package's :data:`__path__`, since they have all + been overwritten. Some men just want to watch the world burn. + """ ++ ++ @staticmethod ++ def _iter_parents(fullname): ++ """ ++ >>> list(ParentEnumerationMethod._iter_parents('a')) ++ [('', 'a')] ++ >>> list(ParentEnumerationMethod._iter_parents('a.b.c')) ++ [('a.b', 'c'), ('a', 'b'), ('', 'a')] ++ """ ++ while fullname: ++ fullname, _, modname = str_rpartition(fullname, u'.') ++ yield fullname, modname ++ + def _find_sane_parent(self, fullname): + """ + Iteratively search :data:`sys.modules` for the least indirect parent of +- `fullname` that is loaded and contains a :data:`__path__` attribute. ++ `fullname` that's from the same package and has a :data:`__path__` ++ attribute. + + :return: + `(parent_name, path, modpath)` tuple, where: +@@ -644,21 +694,40 @@ class ParentEnumerationMethod(FinderMethod): + * `modpath`: list of module name components leading from `path` + to the target module. + """ +- path = None + modpath = [] +- while True: +- pkgname, _, modname = str_rpartition(to_text(fullname), u'.') ++ for pkgname, modname in self._iter_parents(fullname): + modpath.insert(0, modname) + if not pkgname: + return [], None, modpath + +- pkg = sys.modules.get(pkgname) +- path = getattr(pkg, '__path__', None) +- if pkg and path: +- return pkgname.split('.'), path, modpath ++ try: ++ pkg = sys.modules[pkgname] ++ except KeyError: ++ LOG.debug('%r: sys.modules[%r] absent, skipping', self, pkgname) ++ continue + +- LOG.debug('%r: %r lacks __path__ attribute', self, pkgname) +- fullname = pkgname ++ try: ++ resolved_pkgname = pkg.__name__ ++ except AttributeError: ++ LOG.debug('%r: %r has no __name__, skipping', self, pkg) ++ continue ++ ++ if resolved_pkgname != pkgname: ++ LOG.debug('%r: %r.__name__ is %r, skipping', ++ self, pkg, resolved_pkgname) ++ continue ++ ++ try: ++ path = pkg.__path__ ++ except AttributeError: ++ LOG.debug('%r: %r has no __path__, skipping', self, pkg) ++ continue ++ ++ if not path: ++ LOG.debug('%r: %r.__path__ is %r, skipping', self, pkg, path) ++ continue ++ ++ return pkgname.split('.'), path, modpath + + def _found_package(self, fullname, path): + path = os.path.join(path, '__init__.py')