Skip to content

Commit

Permalink
[3.13] pythongh-116608: Apply style and compatibility changes from im…
Browse files Browse the repository at this point in the history
…portlib_resources. (pythonGH-123028) (python#123051)

pythongh-116608: Apply style and compatibility changes from importlib_metadata. (pythonGH-123028)
(cherry picked from commit e913d2c)

Co-authored-by: Jason R. Coombs <[email protected]>
  • Loading branch information
miss-islington and jaraco authored Aug 15, 2024
1 parent 009f9ef commit 5ac14ee
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 36 deletions.
6 changes: 1 addition & 5 deletions Lib/importlib/resources/_functional.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,7 @@ def contents(anchor, *path_names):
DeprecationWarning,
stacklevel=1,
)
return (
resource.name
for resource
in _get_resource(anchor, path_names).iterdir()
)
return (resource.name for resource in _get_resource(anchor, path_names).iterdir())


def _get_encoding_arg(path_names, encoding):
Expand Down
80 changes: 49 additions & 31 deletions Lib/test/test_importlib/resources/test_functional.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import unittest
import os

from test.support.warnings_helper import ignore_warnings, check_warnings
from test.support import warnings_helper

import importlib.resources as resources
from importlib import resources

# Since the functional API forwards to Traversable, we only test
# filesystem resources here -- not zip files, namespace packages etc.
Expand All @@ -22,8 +22,7 @@ class ModuleAnchorMixin:

class FunctionalAPIBase:
def _gen_resourcetxt_path_parts(self):
"""Yield various names of a text file in anchor02, each in a subTest
"""
"""Yield various names of a text file in anchor02, each in a subTest"""
for path_parts in (
('subdirectory', 'subsubdir', 'resource.txt'),
('subdirectory/subsubdir/resource.txt',),
Expand All @@ -36,7 +35,7 @@ def assertEndsWith(self, string, suffix):
"""Assert that `string` ends with `suffix`.
Used to ignore an architecture-specific UTF-16 byte-order mark."""
self.assertEqual(string[-len(suffix):], suffix)
self.assertEqual(string[-len(suffix) :], suffix)

def test_read_text(self):
self.assertEqual(
Expand All @@ -45,15 +44,20 @@ def test_read_text(self):
)
self.assertEqual(
resources.read_text(
self.anchor02, 'subdirectory', 'subsubdir', 'resource.txt',
self.anchor02,
'subdirectory',
'subsubdir',
'resource.txt',
encoding='utf-8',
),
'a resource',
)
for path_parts in self._gen_resourcetxt_path_parts():
self.assertEqual(
resources.read_text(
self.anchor02, *path_parts, encoding='utf-8',
self.anchor02,
*path_parts,
encoding='utf-8',
),
'a resource',
)
Expand All @@ -67,13 +71,16 @@ def test_read_text(self):
resources.read_text(self.anchor01, 'utf-16.file')
self.assertEqual(
resources.read_text(
self.anchor01, 'binary.file', encoding='latin1',
self.anchor01,
'binary.file',
encoding='latin1',
),
'\x00\x01\x02\x03',
)
self.assertEndsWith( # ignore the BOM
resources.read_text(
self.anchor01, 'utf-16.file',
self.anchor01,
'utf-16.file',
errors='backslashreplace',
),
'Hello, UTF-16 world!\n'.encode('utf-16-le').decode(
Expand All @@ -97,7 +104,8 @@ def test_open_text(self):
self.assertEqual(f.read(), 'Hello, UTF-8 world!\n')
for path_parts in self._gen_resourcetxt_path_parts():
with resources.open_text(
self.anchor02, *path_parts,
self.anchor02,
*path_parts,
encoding='utf-8',
) as f:
self.assertEqual(f.read(), 'a resource')
Expand All @@ -111,11 +119,14 @@ def test_open_text(self):
with self.assertRaises(UnicodeDecodeError):
f.read()
with resources.open_text(
self.anchor01, 'binary.file', encoding='latin1',
self.anchor01,
'binary.file',
encoding='latin1',
) as f:
self.assertEqual(f.read(), '\x00\x01\x02\x03')
with resources.open_text(
self.anchor01, 'utf-16.file',
self.anchor01,
'utf-16.file',
errors='backslashreplace',
) as f:
self.assertEndsWith( # ignore the BOM
Expand All @@ -130,16 +141,17 @@ def test_open_binary(self):
self.assertEqual(f.read(), b'Hello, UTF-8 world!\n')
for path_parts in self._gen_resourcetxt_path_parts():
with resources.open_binary(
self.anchor02, *path_parts,
self.anchor02,
*path_parts,
) as f:
self.assertEqual(f.read(), b'a resource')

def test_path(self):
with resources.path(self.anchor01, 'utf-8.file') as path:
with open(str(path)) as f:
with open(str(path), encoding='utf-8') as f:
self.assertEqual(f.read(), 'Hello, UTF-8 world!\n')
with resources.path(self.anchor01) as path:
with open(os.path.join(path, 'utf-8.file')) as f:
with open(os.path.join(path, 'utf-8.file'), encoding='utf-8') as f:
self.assertEqual(f.read(), 'Hello, UTF-8 world!\n')

def test_is_resource(self):
Expand All @@ -152,32 +164,32 @@ def test_is_resource(self):
self.assertTrue(is_resource(self.anchor02, *path_parts))

def test_contents(self):
is_resource = resources.is_resource
with check_warnings((".*contents.*", DeprecationWarning)):
with warnings_helper.check_warnings((".*contents.*", DeprecationWarning)):
c = resources.contents(self.anchor01)
self.assertGreaterEqual(
set(c),
{'utf-8.file', 'utf-16.file', 'binary.file', 'subdirectory'},
)
with (
self.assertRaises(OSError),
check_warnings((".*contents.*", DeprecationWarning)),
):
with self.assertRaises(OSError), warnings_helper.check_warnings((
".*contents.*",
DeprecationWarning,
)):
list(resources.contents(self.anchor01, 'utf-8.file'))

for path_parts in self._gen_resourcetxt_path_parts():
with (
self.assertRaises(OSError),
check_warnings((".*contents.*", DeprecationWarning)),
):
with self.assertRaises(OSError), warnings_helper.check_warnings((
".*contents.*",
DeprecationWarning,
)):
list(resources.contents(self.anchor01, *path_parts))
with check_warnings((".*contents.*", DeprecationWarning)):
with warnings_helper.check_warnings((".*contents.*", DeprecationWarning)):
c = resources.contents(self.anchor01, 'subdirectory')
self.assertGreaterEqual(
set(c),
{'binary.file'},
)

@ignore_warnings(category=DeprecationWarning)
@warnings_helper.ignore_warnings(category=DeprecationWarning)
def test_common_errors(self):
for func in (
resources.read_text,
Expand Down Expand Up @@ -208,18 +220,24 @@ def test_text_errors(self):
# Multiple path arguments need explicit encoding argument.
with self.assertRaises(TypeError):
func(
self.anchor02, 'subdirectory',
'subsubdir', 'resource.txt',
self.anchor02,
'subdirectory',
'subsubdir',
'resource.txt',
)


class FunctionalAPITest_StringAnchor(
unittest.TestCase, FunctionalAPIBase, StringAnchorMixin,
unittest.TestCase,
FunctionalAPIBase,
StringAnchorMixin,
):
pass


class FunctionalAPITest_ModuleAnchor(
unittest.TestCase, FunctionalAPIBase, ModuleAnchorMixin,
unittest.TestCase,
FunctionalAPIBase,
ModuleAnchorMixin,
):
pass

0 comments on commit 5ac14ee

Please sign in to comment.