Skip to content

Commit

Permalink
_adapters: replace DegenerateFiles with CompatibilityFiles
Browse files Browse the repository at this point in the history
Signed-off-by: Filipe Laíns <lains@riseup.net>
  • Loading branch information
FFY00 committed May 13, 2021
1 parent c280918 commit 1a2ce97
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 11 deletions.
47 changes: 37 additions & 10 deletions importlib_resources/_adapters.py
Expand Up @@ -25,32 +25,59 @@ def __init__(self, spec):
self.spec = spec

def get_resource_reader(self, name):
return DegenerateFiles(self.spec)._native()
return CompatibilityFiles(self.spec)._native()


class DegenerateFiles:
class CompatibilityFiles:
"""
Adapter for an existing or non-existant resource reader
to provide a degenerate .files().
to provide a compability .files().
"""

class Path(abc.Traversable):
def __init__(self, spec, reader, name=None):
if not spec and not name:
raise ValueError('Need at least a module spec or a resource name')
self._spec = spec
self._reader = reader
self._name = name

def iterdir(self):
return iter(())
if not self._spec or not self._reader:
return iter(())
return iter(
[
CompatibilityFiles.Path(None, self._reader, path)
for path in self._reader.contents()
]
)

def is_dir(self):
return False
raise FileNotFoundError("Can't access resource {}".format(self.name))

is_file = exists = is_dir # type: ignore

def joinpath(self, other):
return DegenerateFiles.Path()

if not self._spec:
raise FileNotFoundError(
'Orphan resource {} has no sub-resources'.format(other)
)
if not self._reader or other not in list(self._reader.contents()):
raise FileNotFoundError(
'Module {} does not have resource {}'.format(self._spec.name, other)
)
return CompatibilityFiles.Path(None, self._reader, other)

@property
def name(self):
return ''
return self._name if self._name is not None else self._spec.name

def open(self):
raise ValueError()
if self._name is None:
raise FileNotFoundError(
"Can't open module {} as a resource".format(self._spec.name)
)
return self._reader.open_resource(self.name)

def __init__(self, spec):
self.spec = spec
Expand All @@ -71,7 +98,7 @@ def __getattr__(self, attr):
return getattr(self._reader, attr)

def files(self):
return DegenerateFiles.Path()
return CompatibilityFiles.Path(self.spec, self._reader)


def wrap_spec(package):
Expand Down
2 changes: 1 addition & 1 deletion importlib_resources/_compat.py
Expand Up @@ -73,7 +73,7 @@ def _file_reader(spec):
or
# local FileReader
_file_reader(self.spec)
or _adapters.DegenerateFiles(self.spec)
or _adapters.CompatibilityFiles(self.spec)
)


Expand Down

0 comments on commit 1a2ce97

Please sign in to comment.