Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions importlib_resources/_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,6 @@ def _file_reader(spec):
return readers.FileReader(self)

return (
# native reader if it supplies 'files'
_native_reader(self.spec)
or
# local ZipReader if a zip module
_zip_reader(self.spec)
or
Expand All @@ -83,8 +80,12 @@ def _file_reader(spec):
or
# local FileReader
_file_reader(self.spec)
or
# native reader if it supplies 'files'
_native_reader(self.spec)
or
# fallback - adapt the spec ResourceReader to TraversableReader
or _adapters.CompatibilityFiles(self.spec)
_adapters.CompatibilityFiles(self.spec)
)


Expand Down
45 changes: 45 additions & 0 deletions importlib_resources/tests/test_custom.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import unittest
import contextlib
import pathlib

import importlib_resources as resources
from ..abc import TraversableResources, ResourceReader
from . import util
from ._compat import os_helper


class SimpleLoader:
"""
A simple loader that only implements a resource reader.
"""

def __init__(self, reader: ResourceReader):
self.reader = reader

def get_resource_reader(self, package):
return self.reader


class MagicResources(TraversableResources):
"""
Magically returns the resources at path.
"""

def __init__(self, path: pathlib.Path):
self.path = path

def files(self):
return self.path


class CustomTraversableResourcesTests(unittest.TestCase):
def setUp(self):
self.fixtures = contextlib.ExitStack()
self.addCleanup(self.fixtures.close)

def test_custom_loader(self):
temp_dir = self.fixtures.enter_context(os_helper.temp_dir())
loader = SimpleLoader(MagicResources(temp_dir))
pkg = util.create_package_from_loader(loader)
files = resources.files(pkg)
assert files is temp_dir