Server IP : 66.29.132.122 / Your IP : 3.141.27.132 Web Server : LiteSpeed System : Linux business142.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : admazpex ( 531) PHP Version : 7.2.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/self/root/opt/alt/python310/lib64/python3.10/importlib/ |
Upload File : |
from contextlib import suppress from . import abc class SpecLoaderAdapter: """ Adapt a package spec to adapt the underlying loader. """ def __init__(self, spec, adapter=lambda spec: spec.loader): self.spec = spec self.loader = adapter(spec) def __getattr__(self, name): return getattr(self.spec, name) class TraversableResourcesLoader: """ Adapt a loader to provide TraversableResources. """ def __init__(self, spec): self.spec = spec def get_resource_reader(self, name): return DegenerateFiles(self.spec)._native() class DegenerateFiles: """ Adapter for an existing or non-existant resource reader to provide a degenerate .files(). """ class Path(abc.Traversable): def iterdir(self): return iter(()) def is_dir(self): return False is_file = exists = is_dir # type: ignore def joinpath(self, other): return DegenerateFiles.Path() @property def name(self): return '' def open(self, mode='rb', *args, **kwargs): raise ValueError() def __init__(self, spec): self.spec = spec @property def _reader(self): with suppress(AttributeError): return self.spec.loader.get_resource_reader(self.spec.name) def _native(self): """ Return the native reader if it supports files(). """ reader = self._reader return reader if hasattr(reader, 'files') else self def __getattr__(self, attr): return getattr(self._reader, attr) def files(self): return DegenerateFiles.Path() def wrap_spec(package): """ Construct a package spec with traversable compatibility on the spec/loader/reader. """ return SpecLoaderAdapter(package.__spec__, TraversableResourcesLoader)