Skip to content

Commit

Permalink
Merge pull request #268 from python/feature/future-is-here
Browse files Browse the repository at this point in the history
  • Loading branch information
jaraco committed Feb 17, 2023
2 parents 1f0a098 + f5af908 commit 7f4fbb5
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 4 deletions.
8 changes: 8 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
v5.12.0
=======

* #257: ``importlib_resources`` (backport) now gives
precedence to built-in readers (file system, zip,
namespace packages), providing forward-compatibility
of behaviors like ``MultiplexedPath``.

v5.11.1
=======

Expand Down
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

0 comments on commit 7f4fbb5

Please sign in to comment.