From f68da1c034fb8b0a67d45a59a1f6589c994f97ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20La=C3=ADns?= Date: Wed, 12 May 2021 17:07:11 +0100 Subject: [PATCH] use files() API in contents() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Filipe LaĆ­ns --- importlib_resources/__init__.py | 2 +- importlib_resources/_common.py | 15 ++++++++++++++- importlib_resources/_py3.py | 21 ++------------------- importlib_resources/tests/test_resource.py | 10 +++++----- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/importlib_resources/__init__.py b/importlib_resources/__init__.py index ea4c7ef..44e096a 100644 --- a/importlib_resources/__init__.py +++ b/importlib_resources/__init__.py @@ -3,12 +3,12 @@ from ._common import ( as_file, files, + contents, ) from importlib_resources._py3 import ( Package, Resource, - contents, is_resource, open_binary, open_text, diff --git a/importlib_resources/_common.py b/importlib_resources/_common.py index e140def..d2886b5 100644 --- a/importlib_resources/_common.py +++ b/importlib_resources/_common.py @@ -6,7 +6,7 @@ import types import importlib -from typing import Union, Any, Optional +from typing import Union, Any, Optional, Iterable from .abc import ResourceReader from ._compat import wrap_spec @@ -112,3 +112,16 @@ def _(path): Degenerate behavior for pathlib.Path objects. """ yield path + + +# legacy API + + +def contents(package: Package) -> Iterable[str]: + """Return an iterable of entries in `package`. + + Note that not all entries are resources. Specifically, directories are + not considered resources. Use `is_resource()` on each entry returned here + to check if it is a resource or not. + """ + return [path.name for path in files(package).iterdir()] diff --git a/importlib_resources/_py3.py b/importlib_resources/_py3.py index ff2a883..3cd75fe 100644 --- a/importlib_resources/_py3.py +++ b/importlib_resources/_py3.py @@ -8,7 +8,7 @@ from io import BytesIO, TextIOWrapper from pathlib import Path from types import ModuleType -from typing import ContextManager, Iterable, Union +from typing import ContextManager, Union from typing import cast from typing.io import BinaryIO, TextIO from collections.abc import Sequence @@ -135,29 +135,12 @@ def is_resource(package: Package, name: str) -> bool: reader = _common.get_resource_reader(package) if reader is not None: return reader.is_resource(name) - package_contents = set(contents(package)) + package_contents = set(_common.contents(package)) if name not in package_contents: return False return (_common.from_package(package) / name).is_file() -def contents(package: Package) -> Iterable[str]: - """Return an iterable of entries in `package`. - - Note that not all entries are resources. Specifically, directories are - not considered resources. Use `is_resource()` on each entry returned here - to check if it is a resource or not. - """ - package = _common.get_package(package) - reader = _common.get_resource_reader(package) - if reader is not None: - return _ensure_sequence(reader.contents()) - transversable = _common.from_package(package) - if transversable.is_dir(): - return list(item.name for item in transversable.iterdir()) - return [] - - @singledispatch def _ensure_sequence(iterable): return list(iterable) diff --git a/importlib_resources/tests/test_resource.py b/importlib_resources/tests/test_resource.py index 5013007..c73a86b 100644 --- a/importlib_resources/tests/test_resource.py +++ b/importlib_resources/tests/test_resource.py @@ -33,14 +33,14 @@ def test_contents(self): # are not germane to this test, so just filter them out. contents.discard('__pycache__') self.assertEqual( - contents, - { + sorted(contents), + [ '__init__.py', - 'subdirectory', - 'utf-8.file', 'binary.file', + 'subdirectory', 'utf-16.file', - }, + 'utf-8.file', + ], )