From f1624a586f5ad52387ad2b515c3e662233a2800e Mon Sep 17 00:00:00 2001 From: Labrys of Knossos Date: Tue, 29 Nov 2022 01:35:03 -0500 Subject: [PATCH] Updated importlib-metadata to 2.1.3 --- libs/common/bin/beet.exe | Bin 108369 -> 108369 bytes libs/common/bin/chardetect.exe | Bin 108383 -> 108383 bytes libs/common/bin/easy_install-3.7.exe | Bin 108392 -> 108392 bytes libs/common/bin/easy_install.exe | Bin 108392 -> 108392 bytes libs/common/bin/guessit.exe | Bin 108377 -> 108377 bytes libs/common/bin/mid3cp.exe | Bin 108396 -> 108396 bytes libs/common/bin/mid3iconv.exe | Bin 108399 -> 108399 bytes libs/common/bin/mid3v2.exe | Bin 108396 -> 108396 bytes libs/common/bin/moggsplit.exe | Bin 108399 -> 108399 bytes libs/common/bin/mutagen-inspect.exe | Bin 108405 -> 108405 bytes libs/common/bin/mutagen-pony.exe | Bin 108402 -> 108402 bytes libs/common/bin/pbr.exe | Bin 108373 -> 108373 bytes libs/common/bin/srt.exe | Bin 108375 -> 108375 bytes libs/common/bin/subliminal.exe | Bin 108387 -> 108387 bytes libs/common/bin/unidecode.exe | Bin 108375 -> 108375 bytes libs/common/importlib_metadata/__init__.py | 123 ++++++++++++--------- libs/common/importlib_metadata/_compat.py | 95 ++++++++++++++-- 17 files changed, 154 insertions(+), 64 deletions(-) diff --git a/libs/common/bin/beet.exe b/libs/common/bin/beet.exe index 56dacbbb8a01e7ec29d0d7abe225dd5d42310f23..8fb4314e4e181c3202b278cb6fffbc1fec0687d1 100644 GIT binary patch delta 27 hcmcb3j_u+(wuUW?>dTnCd8TVFV|)st1(q{90sx+R3EKbw delta 27 hcmcb3j_u+(wuUW?>dTl+xudTnCc&2MEWBd%F<(4x#0sx`p3K0MR delta 27 hcmcbAj_v+AwuUW?>dTl+xTk9_WBd%F<(4x#0sx=v3F80& diff --git a/libs/common/bin/easy_install-3.7.exe b/libs/common/bin/easy_install-3.7.exe index 86b781b0042091569b3c229be1d29950150904ee..9d03bef70e2d17e00481f56d1ae7d03d370c777d 100644 GIT binary patch delta 27 hcmaEHj_t)cwuUW?>dTlsd8TVFWBdc6)t56m0sy2A3Nruz delta 27 hcmaEHj_t)cwuUW?>dTmnxudTlsd8TVFWBdc6)t56m0sy2A3Nruz delta 27 hcmaEHj_t)cwuUW?>dTmnxudTnCd8TVFV|)vuC6+Tf0sx?T3Hty5 delta 27 hcmcb4j_u|-wuUW?>dTl+xudTnCc$RA}V`K!<)3ui~IsyQk{Rvh8 delta 27 icmaEJj_u7kwuUW?>dTl+xR+}#V`K!<)3ui~IsyQj1qmns diff --git a/libs/common/bin/mid3iconv.exe b/libs/common/bin/mid3iconv.exe index 7811e559b6e655cae6236d63aef8657bc9145945..083bfe5d240690c6fc048b6cfdd0209be82e8d18 100644 GIT binary patch delta 28 jcmaEVj_v(9wuUW?>dTnCc(!XUV`OFoGN$V-XLJMrrT7VQ delta 28 jcmaEVj_v(9wuUW?>dTl+xVLLAV`OFoGN$V-XLJMrqv;7m diff --git a/libs/common/bin/mid3v2.exe b/libs/common/bin/mid3v2.exe index ffbf60c8a6d1189fc63e165bf4d3e04155da274b..d88e59c51fa1bdf6a0f5c604af703169dc0e89ee 100644 GIT binary patch delta 27 icmaEJj_u7kwuUW?>dTnCc$RA}V`K!<)3ui~IsyQk{Rvh8 delta 27 icmaEJj_u7kwuUW?>dTl+xR+}#V`K!<)3ui~IsyQj1qmns diff --git a/libs/common/bin/moggsplit.exe b/libs/common/bin/moggsplit.exe index cba468f2e6fcea277cb6d936ef4b5a5880d48bdf..9b1e0156eac89e3f056990fd4fc1fc18f5ad6bfe 100644 GIT binary patch delta 28 jcmaEVj_v(9wuUW?>dTnCc(!XUV`OFoGN$V-XLJMrrT7VQ delta 28 jcmaEVj_v(9wuUW?>dTl+xVLLAV`OFoGN$V-XLJMrqv;7m diff --git a/libs/common/bin/mutagen-inspect.exe b/libs/common/bin/mutagen-inspect.exe index 3e9d5294a00580c02a03bef7d785507c20705fca..fed6a0e4eaa65a8de31ae928a04515e631499b38 100644 GIT binary patch delta 28 jcmex*j_vC?wuUW?>dTnCc(!XUW8`E6GNzj>XLJMrr-})R delta 28 jcmex*j_vC?wuUW?>dTl+xVLLAW8`E6GNzj>XLJMrrF#in diff --git a/libs/common/bin/mutagen-pony.exe b/libs/common/bin/mutagen-pony.exe index 1544315ba95bb25e206826f5345763026a84d09d..34322b9fc18c90c7da651901726890b62299bbdd 100644 GIT binary patch delta 28 jcmex#j_uPqwuUW?>dTnCc(!XUV`O6lGNv0YXLJMrrojn* delta 28 jcmex#j_uPqwuUW?>dTl+xVLLAV`O6lGNv0YXLJMrq_PQ6 diff --git a/libs/common/bin/pbr.exe b/libs/common/bin/pbr.exe index 805e3677e4f8c740ed161fc4d6e7ba03950fbc4f..a4fea4fe74c51930d31f62d9da5dd59c15e9dcd7 100644 GIT binary patch delta 27 hcmcb5j_v9>wuUW?>dTnCc&2MEV|)psMV2!<0sx<63F!a; delta 27 hcmcb5j_v9>wuUW?>dTmnxu3Aq3O diff --git a/libs/common/bin/srt.exe b/libs/common/bin/srt.exe index 6a910ec5766773a425f85ff28e678a86a2e1eec5..5d9faa64debe81a1441364aff7eddc303a67d4f1 100644 GIT binary patch delta 27 hcmcb9j_vw6wuUW?>dTnCd8TVFV|)#w#g;QV0sx=-3G)B| delta 27 hcmcb9j_vw6wuUW?>dTl+xTk9_V|)#w#g;QV0sx)t3Bv#Y diff --git a/libs/common/bin/subliminal.exe b/libs/common/bin/subliminal.exe index c638b62b26ec2bb73bbe5642ae49b6d0e726abe5..73866871442856448fd38c6516f75c47e5336061 100644 GIT binary patch delta 27 hcmaESj_vU|wuUW?>dTmXc&2MEWBd-Hm6kI)0sx~B3MBvl delta 27 hcmaESj_vU|wuUW?>dTnSxTk9_WBd-Hm6kI)0sx^H3HJa1 diff --git a/libs/common/bin/unidecode.exe b/libs/common/bin/unidecode.exe index 9d73f7d0967faa9931addc4fb5e64cf1b1a91628..2adcf1d9312a7ac007e47259cf49f03b33e924b3 100644 GIT binary patch delta 27 hcmcb9j_vw6wuUW?>dTlsd8TVFV|)#w#g;QV0sx=R3GV;^ delta 27 hcmcb9j_vw6wuUW?>dTmnxu[\w.]+)\s*' - r'(:\s*(?P[\w.]+))?\s*' - r'(?P\[.*\])?\s*$' - ) + r'(:\s*(?P[\w.]+)\s*)?' + r'((?P\[.*\])\s*)?$' + ) """ A regular expression describing the syntax for an entry point, which might look like: @@ -115,7 +127,7 @@ class EntryPoint( cls(name, value, group) for group in config.sections() for name, value in config.items(group) - ] + ] @classmethod def _from_text(cls, text): @@ -139,7 +151,7 @@ class EntryPoint( return ( self.__class__, (self.name, self.value, self.group), - ) + ) class PackagePath(pathlib.PurePosixPath): @@ -217,8 +229,9 @@ class Distribution: raise ValueError("cannot accept context and kwargs") context = context or DistributionFinder.Context(**kwargs) return itertools.chain.from_iterable( - resolver(context) for resolver in cls._discover_resolvers() - ) + resolver(context) + for resolver in cls._discover_resolvers() + ) @staticmethod def at(path): @@ -233,20 +246,20 @@ class Distribution: def _discover_resolvers(): """Search the meta_path for resolvers.""" declared = ( - getattr(finder, 'find_distributions', None) for finder in sys.meta_path - ) + getattr(finder, 'find_distributions', None) + for finder in sys.meta_path + ) return filter(None, declared) @classmethod def _local(cls, root='.'): from pep517 import build, meta - system = build.compat_system(root) builder = functools.partial( meta.build, source_dir=root, system=system, - ) + ) return PathDistribution(zipp.Path(meta.build_as_zip(builder))) @property @@ -263,8 +276,8 @@ class Distribution: # effect is to just end up using the PathDistribution's self._path # (which points to the egg-info file) attribute unchanged. or self.read_text('') - ) - return email.message_from_string(text) + ) + return email_message_from_string(text) @property def version(self): @@ -330,10 +343,9 @@ class Distribution: section_pairs = cls._read_sections(source.splitlines()) sections = { section: list(map(operator.itemgetter('line'), results)) - for section, results in itertools.groupby( - section_pairs, operator.itemgetter('section') - ) - } + for section, results in + itertools.groupby(section_pairs, operator.itemgetter('section')) + } return cls._convert_egg_info_reqs_to_simple_reqs(sections) @staticmethod @@ -357,7 +369,6 @@ class Distribution: requirement. This method converts the former to the latter. See _test_deps_from_requires_text for an example. """ - def make_condition(name): return name and 'extra == "{name}"'.format(name=name) @@ -436,7 +447,7 @@ class FastPath: def children(self): with suppress(Exception): - return os.listdir(self.root or '') + return os.listdir(self.root or '.') with suppress(Exception): return self.zip_children() return [] @@ -446,21 +457,23 @@ class FastPath: names = zip_path.root.namelist() self.joinpath = zip_path.joinpath - return dict.fromkeys(child.split(posixpath.sep, 1)[0] for child in names) + return unique_ordered( + child.split(posixpath.sep, 1)[0] + for child in names + ) def search(self, name): return ( self.joinpath(child) for child in self.children() if name.matches(child, self.base) - ) + ) class Prepared: """ A prepared search for metadata on a possibly-named package. """ - normalized = None suffixes = '.dist-info', '.egg-info' exact_matches = [''][:0] @@ -470,7 +483,8 @@ class Prepared: if name is None: return self.normalized = self.normalize(name) - self.exact_matches = [self.normalized + suffix for suffix in self.suffixes] + self.exact_matches = [ + self.normalized + suffix for suffix in self.suffixes] @staticmethod def normalize(name): @@ -493,12 +507,13 @@ class Prepared: name, sep, rest = pre.partition('-') return ( low in self.exact_matches - or ext in self.suffixes - and (not self.normalized or name.replace('.', '_') == self.normalized) + or ext in self.suffixes and ( + not self.normalized or + name.replace('.', '_') == self.normalized + ) # legacy case: - or self.is_egg(base) - and low == 'egg-info' - ) + or self.is_egg(base) and low == 'egg-info' + ) def is_egg(self, base): normalized = self.legacy_normalize(self.name or '') @@ -507,8 +522,7 @@ class Prepared: return ( base == versionless_egg_name or base.startswith(prefix) - and base.endswith('.egg') - ) + and base.endswith('.egg')) @install @@ -535,8 +549,9 @@ class MetadataPathFinder(NullFinder, DistributionFinder): def _search_paths(cls, name, paths): """Find metadata directories in paths heuristically.""" return itertools.chain.from_iterable( - path.search(Prepared(name)) for path in map(FastPath, paths) - ) + path.search(Prepared(name)) + for path in map(FastPath, paths) + ) class PathDistribution(Distribution): @@ -549,15 +564,9 @@ class PathDistribution(Distribution): self._path = path def read_text(self, filename): - with suppress( - FileNotFoundError, - IsADirectoryError, - KeyError, - NotADirectoryError, - PermissionError, - ): + with suppress(FileNotFoundError, IsADirectoryError, KeyError, + NotADirectoryError, PermissionError): return self._path.joinpath(filename).read_text(encoding='utf-8') - read_text.__doc__ = Distribution.read_text.__doc__ def locate_file(self, path): @@ -605,11 +614,15 @@ def entry_points(): :return: EntryPoint objects for all installed packages. """ - eps = itertools.chain.from_iterable(dist.entry_points for dist in distributions()) + eps = itertools.chain.from_iterable( + dist.entry_points for dist in distributions()) by_group = operator.attrgetter('group') ordered = sorted(eps, key=by_group) grouped = itertools.groupby(ordered, by_group) - return {group: tuple(eps) for group, eps in grouped} + return { + group: tuple(eps) + for group, eps in grouped + } def files(distribution_name): diff --git a/libs/common/importlib_metadata/_compat.py b/libs/common/importlib_metadata/_compat.py index c1362d53..303d4a22 100644 --- a/libs/common/importlib_metadata/_compat.py +++ b/libs/common/importlib_metadata/_compat.py @@ -1,7 +1,59 @@ +from __future__ import absolute_import, unicode_literals + +import io +import abc import sys +import email -__all__ = ['install', 'NullFinder', 'PyPy_repr'] +if sys.version_info > (3,): # pragma: nocover + import builtins + from configparser import ConfigParser + import contextlib + FileNotFoundError = builtins.FileNotFoundError + IsADirectoryError = builtins.IsADirectoryError + NotADirectoryError = builtins.NotADirectoryError + PermissionError = builtins.PermissionError + map = builtins.map + from itertools import filterfalse +else: # pragma: nocover + from backports.configparser import ConfigParser + from itertools import imap as map # type: ignore + from itertools import ifilterfalse as filterfalse + import contextlib2 as contextlib + FileNotFoundError = IOError, OSError + IsADirectoryError = IOError, OSError + NotADirectoryError = IOError, OSError + PermissionError = IOError, OSError + +str = type('') + +suppress = contextlib.suppress + +if sys.version_info > (3, 5): # pragma: nocover + import pathlib +else: # pragma: nocover + import pathlib2 as pathlib + +try: + ModuleNotFoundError = builtins.FileNotFoundError +except (NameError, AttributeError): # pragma: nocover + ModuleNotFoundError = ImportError # type: ignore + + +if sys.version_info >= (3,): # pragma: nocover + from importlib.abc import MetaPathFinder +else: # pragma: nocover + class MetaPathFinder(object): + __metaclass__ = abc.ABCMeta + + +__metaclass__ = type +__all__ = [ + 'install', 'NullFinder', 'MetaPathFinder', 'ModuleNotFoundError', + 'pathlib', 'ConfigParser', 'map', 'suppress', 'FileNotFoundError', + 'NotADirectoryError', 'email_message_from_string', + ] def install(cls): @@ -25,12 +77,11 @@ def disable_stdlib_finder(): See #91 for more background for rationale on this sketchy behavior. """ - def matches(finder): - return getattr( - finder, '__module__', None - ) == '_frozen_importlib_external' and hasattr(finder, 'find_distributions') - + return ( + getattr(finder, '__module__', None) == '_frozen_importlib_external' + and hasattr(finder, 'find_distributions') + ) for finder in filter(matches, sys.meta_path): # pragma: nocover del finder.find_distributions @@ -40,7 +91,6 @@ class NullFinder: A "Finder" (aka "MetaClassFinder") that never finds any modules, but may find distributions. """ - @staticmethod def find_spec(*args, **kwargs): return None @@ -54,22 +104,49 @@ class NullFinder: find_module = find_spec +def py2_message_from_string(text): # nocoverpy3 + # Work around https://bugs.python.org/issue25545 where + # email.message_from_string cannot handle Unicode on Python 2. + io_buffer = io.StringIO(text) + return email.message_from_file(io_buffer) + + +email_message_from_string = ( + py2_message_from_string + if sys.version_info < (3,) else + email.message_from_string + ) + + class PyPy_repr: """ Override repr for EntryPoint objects on PyPy to avoid __iter__ access. Ref #97, #102. """ - affected = hasattr(sys, 'pypy_version_info') def __compat_repr__(self): # pragma: nocover def make_param(name): value = getattr(self, name) return '{name}={value!r}'.format(**locals()) - params = ', '.join(map(make_param, self._fields)) return 'EntryPoint({params})'.format(**locals()) if affected: # pragma: nocover __repr__ = __compat_repr__ del affected + + +# from itertools recipes +def unique_everseen(iterable): # pragma: nocover + "List unique elements, preserving order. Remember all elements ever seen." + seen = set() + seen_add = seen.add + + for element in filterfalse(seen.__contains__, iterable): + seen_add(element) + yield element + + +unique_ordered = ( + unique_everseen if sys.version_info < (3, 7) else dict.fromkeys)