aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/importlib-metadata
diff options
context:
space:
mode:
authormaxim-yurchuk <maxim-yurchuk@yandex-team.com>2024-10-09 12:29:46 +0300
committermaxim-yurchuk <maxim-yurchuk@yandex-team.com>2024-10-09 13:14:22 +0300
commit9731d8a4bb7ee2cc8554eaf133bb85498a4c7d80 (patch)
treea8fb3181d5947c0d78cf402aa56e686130179049 /contrib/python/importlib-metadata
parenta44b779cd359f06c3ebbef4ec98c6b38609d9d85 (diff)
downloadydb-9731d8a4bb7ee2cc8554eaf133bb85498a4c7d80.tar.gz
publishFullContrib: true for ydb
<HIDDEN_URL> commit_hash:c82a80ac4594723cebf2c7387dec9c60217f603e
Diffstat (limited to 'contrib/python/importlib-metadata')
-rw-r--r--contrib/python/importlib-metadata/py2/.yandex_meta/yamaker.yaml2
-rw-r--r--contrib/python/importlib-metadata/py2/patches/01-add-arcadia-support.patch93
-rw-r--r--contrib/python/importlib-metadata/py2/patches/02-fix-for-support-system-python.patch59
-rw-r--r--contrib/python/importlib-metadata/py3/patches/01-add-arcadia-support.patch66
-rw-r--r--contrib/python/importlib-metadata/py3/patches/02-fix-for-support-system-python.patch51
5 files changed, 271 insertions, 0 deletions
diff --git a/contrib/python/importlib-metadata/py2/.yandex_meta/yamaker.yaml b/contrib/python/importlib-metadata/py2/.yandex_meta/yamaker.yaml
new file mode 100644
index 0000000000..b7b7b7e703
--- /dev/null
+++ b/contrib/python/importlib-metadata/py2/.yandex_meta/yamaker.yaml
@@ -0,0 +1,2 @@
+requirements:
+ - library/python/resource
diff --git a/contrib/python/importlib-metadata/py2/patches/01-add-arcadia-support.patch b/contrib/python/importlib-metadata/py2/patches/01-add-arcadia-support.patch
new file mode 100644
index 0000000000..6fd93b08c5
--- /dev/null
+++ b/contrib/python/importlib-metadata/py2/patches/01-add-arcadia-support.patch
@@ -0,0 +1,93 @@
+--- contrib/python/importlib-metadata/py2/.dist-info/METADATA (index)
++++ contrib/python/importlib-metadata/py2/.dist-info/METADATA (working tree)
+@@ -15,7 +15,6 @@ Classifier: Topic :: Software Development :: Libraries
+ Classifier: Programming Language :: Python :: 2
+ Requires-Python: !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7
+ License-File: LICENSE
+-Requires-Dist: zipp (>=0.5)
+ Requires-Dist: pathlib2 ; python_version < "3"
+ Requires-Dist: contextlib2 ; python_version < "3"
+ Requires-Dist: configparser (>=3.5) ; python_version < "3"
+--- contrib/python/importlib-metadata/py2/importlib_metadata/__init__.py (index)
++++ contrib/python/importlib-metadata/py2/importlib_metadata/__init__.py (working tree)
+@@ -6,7 +6,6 @@ import re
+ import abc
+ import csv
+ import sys
+-import zipp
+ import operator
+ import functools
+ import itertools
+@@ -525,7 +525,7 @@ class Prepared:
+ and base.endswith('.egg'))
+
+
+-@install
++#@install
+ class MetadataPathFinder(NullFinder, DistributionFinder):
+ """A degenerate finder for distribution packages on the file system.
+
+@@ -573,6 +572,63 @@ class PathDistribution(Distribution):
+ return self._path.parent / path
+
+
++class ArcadiaDistribution(Distribution):
++
++ def __init__(self, prefix):
++ self.prefix = prefix
++
++ def read_text(self, filename):
++ from library.python.resource import resfs_read
++ data = resfs_read('{}{}'.format(self.prefix, filename))
++ if data:
++ return data.decode('utf-8')
++ read_text.__doc__ = Distribution.read_text.__doc__
++
++ def locate_file(self, path):
++ return '{}{}'.format(self.prefix, path)
++
++
++@install
++class ArcadiaMetadataFinder(NullFinder, DistributionFinder):
++
++ prefixes = {}
++
++ @classmethod
++ def find_distributions(cls, context=DistributionFinder.Context()):
++ found = cls._search_prefixes(context.name)
++ return map(ArcadiaDistribution, found)
++
++ @classmethod
++ def _init_prefixes(cls):
++ from library.python.resource import resfs_read, resfs_files
++ cls.prefixes.clear()
++
++ METADATA_NAME = re.compile('^Name: (.*)$', re.MULTILINE)
++
++ for resource in resfs_files():
++ if not resource.endswith('METADATA'):
++ continue
++ data = resfs_read(resource).decode('utf-8')
++ metadata_name = METADATA_NAME.search(data)
++ if metadata_name:
++ metadata_name = Prepared(metadata_name.group(1))
++ cls.prefixes[metadata_name.normalized] = resource[:-len('METADATA')]
++
++ @classmethod
++ def _search_prefixes(cls, name):
++ if not cls.prefixes:
++ cls._init_prefixes()
++
++ if name:
++ try:
++ yield cls.prefixes[Prepared(name).normalized]
++ except KeyError:
++ raise PackageNotFoundError(name)
++ else:
++ for prefix in sorted(cls.prefixes.values()):
++ yield prefix
++
++
+ def distribution(distribution_name):
+ """Get the ``Distribution`` instance for the named package.
+
diff --git a/contrib/python/importlib-metadata/py2/patches/02-fix-for-support-system-python.patch b/contrib/python/importlib-metadata/py2/patches/02-fix-for-support-system-python.patch
new file mode 100644
index 0000000000..b45958358c
--- /dev/null
+++ b/contrib/python/importlib-metadata/py2/patches/02-fix-for-support-system-python.patch
@@ -0,0 +1,59 @@
+--- contrib/python/importlib-metadata/py2/importlib_metadata/__init__.py (index)
++++ contrib/python/importlib-metadata/py2/importlib_metadata/__init__.py (working tree)
+@@ -33,6 +33,11 @@ from ._compat import (
+ from importlib import import_module
+ from itertools import starmap
+
++try:
++ import library.python.resource
++ ARCADIA = True
++except ImportError:
++ ARCADIA = False
+
+ __metaclass__ = type
+
+@@ -524,7 +529,7 @@ class Prepared:
+ and base.endswith('.egg'))
+
+
+-#@install
++@install(ARCADIA == False)
+ class MetadataPathFinder(NullFinder, DistributionFinder):
+ """A degenerate finder for distribution packages on the file system.
+
+@@ -588,7 +593,7 @@ class ArcadiaDistribution(Distribution):
+ return '{}{}'.format(self.prefix, path)
+
+
+-@install
++@install(ARCADIA == True)
+ class ArcadiaMetadataFinder(NullFinder, DistributionFinder):
+
+ prefixes = {}
+--- contrib/python/importlib-metadata/py2/importlib_metadata/_compat.py (index)
++++ contrib/python/importlib-metadata/py2/importlib_metadata/_compat.py (working tree)
+@@ -56,7 +56,7 @@ __all__ = [
+ ]
+
+
+-def install(cls):
++def install(flag):
+ """
+ Class decorator for installation on sys.meta_path.
+
+@@ -64,9 +64,12 @@ def install(cls):
+ attempts to disable the finder functionality of the stdlib
+ DistributionFinder.
+ """
+- sys.meta_path.append(cls())
+- disable_stdlib_finder()
+- return cls
++ def dec_install(cls):
++ if flag:
++ sys.meta_path.append(cls())
++ disable_stdlib_finder()
++ return cls
++ return dec_install
+
+
+ def disable_stdlib_finder():
diff --git a/contrib/python/importlib-metadata/py3/patches/01-add-arcadia-support.patch b/contrib/python/importlib-metadata/py3/patches/01-add-arcadia-support.patch
new file mode 100644
index 0000000000..33e804574e
--- /dev/null
+++ b/contrib/python/importlib-metadata/py3/patches/01-add-arcadia-support.patch
@@ -0,0 +1,66 @@
+--- contrib/python/importlib-metadata/py3/.dist-info/METADATA (index)
++++ contrib/python/importlib-metadata/py3/.dist-info/METADATA (working tree)
+@@ -15,1 +15,0 @@ Classifier: License :: OSI Approved :: Apache Software License
+-Requires-Dist: zipp >=3.20
+--- contrib/python/importlib-metadata/py3/importlib_metadata/__init__.py (index)
++++ contrib/python/importlib-metadata/py3/importlib_metadata/__init__.py (working tree)
+@@ -796,6 +795,59 @@ class PathDistribution(Distribution):
+ return name
+
+
++class ArcadiaDistribution(Distribution):
++ def __init__(self, prefix):
++ self._prefix = prefix
++ self._path = pathlib.Path(prefix)
++
++ def read_text(self, filename):
++ data = res.resfs_read(f"{self._prefix}{filename}")
++ if data is not None:
++ return data.decode("utf-8")
++
++ read_text.__doc__ = Distribution.read_text.__doc__
++
++ def locate_file(self, path):
++ return self._path.parent / path
++
++
++@install
++class MetadataArcadiaFinder(DistributionFinder):
++ METADATA_NAME = re.compile("^Name: (.*)$", re.MULTILINE)
++ prefixes = {}
++
++ @classmethod
++ def find_distributions(cls, context=DistributionFinder.Context()):
++ found = cls._search_prefixes(context.name)
++ return map(ArcadiaDistribution, found)
++
++ @classmethod
++ def _init_prefixes(cls):
++ cls.prefixes.clear()
++
++ for resource in res.resfs_files():
++ resource = resource.decode("utf-8")
++ if not resource.endswith("METADATA"):
++ continue
++ data = res.resfs_read(resource).decode("utf-8")
++ metadata_name = cls.METADATA_NAME.search(data)
++ if metadata_name:
++ cls.prefixes[Prepared(metadata_name.group(1)).normalized] = resource.removesuffix("METADATA")
++
++ @classmethod
++ def _search_prefixes(cls, name):
++ if not cls.prefixes:
++ cls._init_prefixes()
++
++ if name:
++ try:
++ yield cls.prefixes[Prepared(name).normalized]
++ except KeyError:
++ pass
++ else:
++ yield from sorted(cls.prefixes.values())
++
++
+ def distribution(distribution_name: str) -> Distribution:
+ """Get the ``Distribution`` instance for the named package.
+
diff --git a/contrib/python/importlib-metadata/py3/patches/02-fix-for-support-system-python.patch b/contrib/python/importlib-metadata/py3/patches/02-fix-for-support-system-python.patch
new file mode 100644
index 0000000000..0babc06099
--- /dev/null
+++ b/contrib/python/importlib-metadata/py3/patches/02-fix-for-support-system-python.patch
@@ -0,0 +1,51 @@
+--- contrib/python/importlib-metadata/py3/importlib_metadata/__init__.py (index)
++++ contrib/python/importlib-metadata/py3/importlib_metadata/__init__.py (working tree)
+@@ -31,4 +31,10 @@ from importlib.abc import MetaPathFinder
+ from typing import List, Mapping, Optional
+
++try:
++ import __res as res
++ ARCADIA = True
++except ImportError:
++ ARCADIA = False
++
+
+ __all__ = [
+@@ -712,3 +718,3 @@ class Prepared:
+
+-@install
++@install(ARCADIA == False)
+ class MetadataPathFinder(NullFinder, DistributionFinder):
+@@ -813,3 +819,3 @@ class ArcadiaDistribution(Distribution):
+
+-@install
++@install(ARCADIA == True)
+ class ArcadiaMetadataFinder(NullFinder, DistributionFinder):
+--- contrib/python/importlib-metadata/py3/importlib_metadata/_compat.py (index)
++++ contrib/python/importlib-metadata/py3/importlib_metadata/_compat.py (working tree)
+@@ -15,11 +15,14 @@ except ImportError: # pragma: no cover
+-def install(cls):
+- """
+- Class decorator for installation on sys.meta_path.
+-
+- Adds the backport DistributionFinder to sys.meta_path and
+- attempts to disable the finder functionality of the stdlib
+- DistributionFinder.
+- """
+- sys.meta_path.append(cls())
+- disable_stdlib_finder()
+- return cls
++def install(flag):
++ def dec_install(cls):
++ """
++ Class decorator for installation on sys.meta_path.
++
++ Adds the backport DistributionFinder to sys.meta_path and
++ attempts to disable the finder functionality of the stdlib
++ DistributionFinder.
++ """
++ if flag:
++ sys.meta_path.append(cls())
++ disable_stdlib_finder()
++ return cls
++ return dec_install