Browse Source

Simplify support `importlib.metadata`
996025a2ee725b626c3b77aac016d8f8c0ac4e76

shadchin 11 months ago
parent
commit
da6de0aefb
2 changed files with 16 additions and 11 deletions
  1. 13 0
      library/python/runtime_py3/importer.pxi
  2. 3 11
      library/python/runtime_py3/sitecustomize.pyx

+ 13 - 0
library/python/runtime_py3/importer.pxi

@@ -408,6 +408,19 @@ class ResourceImporter:
         path = os.path.dirname(self.get_filename(fullname))
         return _ResfsResourceReader(self, path)
 
+    @staticmethod
+    def find_distributions(*args, **kwargs):
+        """
+        Find distributions.
+
+        Return an iterable of all Distribution instances capable of
+        loading the metadata for packages matching ``context.name``
+        (or all names if ``None`` indicated) along the paths in the list
+        of directories ``context.path``.
+        """
+        from sitecustomize import MetadataArcadiaFinder
+        return MetadataArcadiaFinder.find_distributions(*args, **kwargs)
+
 
 class _ResfsResourceReader:
 

+ 3 - 11
library/python/runtime_py3/sitecustomize.pyx

@@ -8,7 +8,6 @@ import warnings
 from importlib.metadata import (
     Distribution,
     DistributionFinder,
-    PackageNotFoundError,
     Prepared,
 )
 from importlib.resources.abc import Traversable
@@ -129,7 +128,7 @@ class ArcadiaDistribution(Distribution):
         return self._path.parent / path
 
 
-class ArcadiaMetadataFinder(DistributionFinder):
+class MetadataArcadiaFinder(DistributionFinder):
     prefixes = {}
 
     @classmethod
@@ -148,8 +147,7 @@ class ArcadiaMetadataFinder(DistributionFinder):
             data = __res.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")]
+                cls.prefixes[Prepared(metadata_name.group(1)).normalized] = resource.removesuffix("METADATA")
 
     @classmethod
     def _search_prefixes(cls, name):
@@ -160,12 +158,6 @@ class ArcadiaMetadataFinder(DistributionFinder):
             try:
                 yield cls.prefixes[Prepared(name).normalized]
             except KeyError:
-                raise PackageNotFoundError(name)
+                pass
         else:
             yield from sorted(cls.prefixes.values())
-
-
-# monkeypatch standart library
-import importlib.metadata
-
-importlib.metadata.MetadataPathFinder = ArcadiaMetadataFinder