OXIESEC PANEL
- Current Dir:
/
/
usr
/
local
/
lib
/
python3.6
/
dist-packages
/
importlib_resources
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
10/28/2024 06:26:52 AM
rwxrwxr-x
📄
__init__.py
525 bytes
05/09/2024 06:58:26 AM
rw-r--r--
📁
__pycache__
-
05/09/2024 06:58:27 AM
rwxr-xr-x
📄
_adapters.py
4.4 KB
05/09/2024 06:58:26 AM
rw-r--r--
📄
_common.py
2.68 KB
05/09/2024 06:58:26 AM
rw-r--r--
📄
_compat.py
2.64 KB
05/09/2024 06:58:26 AM
rw-r--r--
📄
_itertools.py
884 bytes
05/09/2024 06:58:26 AM
rw-r--r--
📄
_legacy.py
3.41 KB
05/09/2024 06:58:26 AM
rw-r--r--
📄
abc.py
3.79 KB
05/09/2024 06:58:26 AM
rw-r--r--
📄
py.typed
0 bytes
05/09/2024 06:58:26 AM
rw-r--r--
📄
readers.py
3.48 KB
05/09/2024 06:58:26 AM
rw-r--r--
📄
simple.py
2.77 KB
05/09/2024 06:58:26 AM
rw-r--r--
📁
tests
-
05/09/2024 06:58:27 AM
rwxr-xr-x
Editing: simple.py
Close
""" Interface adapters for low-level readers. """ import abc import io import itertools from typing import BinaryIO, List from .abc import Traversable, TraversableResources class SimpleReader(abc.ABC): """ The minimum, low-level interface required from a resource provider. """ @abc.abstractproperty def package(self): # type: () -> str """ The name of the package for which this reader loads resources. """ @abc.abstractmethod def children(self): # type: () -> List['SimpleReader'] """ Obtain an iterable of SimpleReader for available child containers (e.g. directories). """ @abc.abstractmethod def resources(self): # type: () -> List[str] """ Obtain available named resources for this virtual package. """ @abc.abstractmethod def open_binary(self, resource): # type: (str) -> BinaryIO """ Obtain a File-like for a named resource. """ @property def name(self): return self.package.split('.')[-1] class ResourceHandle(Traversable): """ Handle to a named resource in a ResourceReader. """ def __init__(self, parent, name): # type: (ResourceContainer, str) -> None self.parent = parent self.name = name # type: ignore def is_file(self): return True def is_dir(self): return False def open(self, mode='r', *args, **kwargs): stream = self.parent.reader.open_binary(self.name) if 'b' not in mode: stream = io.TextIOWrapper(*args, **kwargs) return stream def joinpath(self, name): raise RuntimeError("Cannot traverse into a resource") class ResourceContainer(Traversable): """ Traversable container for a package's resources via its reader. """ def __init__(self, reader): # type: (SimpleReader) -> None self.reader = reader def is_dir(self): return True def is_file(self): return False def iterdir(self): files = (ResourceHandle(self, name) for name in self.reader.resources) dirs = map(ResourceContainer, self.reader.children()) return itertools.chain(files, dirs) def open(self, *args, **kwargs): raise IsADirectoryError() def joinpath(self, name): return next( traversable for traversable in self.iterdir() if traversable.name == name ) class TraversableReader(TraversableResources, SimpleReader): """ A TraversableResources based on SimpleReader. Resource providers may derive from this class to provide the TraversableResources interface by supplying the SimpleReader interface. """ def files(self): return ResourceContainer(self)