Spaces:
Sleeping
Sleeping
"""Simplified function-based API for importlib.resources""" | |
import warnings | |
from ._common import files, as_file | |
_MISSING = object() | |
def open_binary(anchor, *path_names): | |
"""Open for binary reading the *resource* within *package*.""" | |
return _get_resource(anchor, path_names).open('rb') | |
def open_text(anchor, *path_names, encoding=_MISSING, errors='strict'): | |
"""Open for text reading the *resource* within *package*.""" | |
encoding = _get_encoding_arg(path_names, encoding) | |
resource = _get_resource(anchor, path_names) | |
return resource.open('r', encoding=encoding, errors=errors) | |
def read_binary(anchor, *path_names): | |
"""Read and return contents of *resource* within *package* as bytes.""" | |
return _get_resource(anchor, path_names).read_bytes() | |
def read_text(anchor, *path_names, encoding=_MISSING, errors='strict'): | |
"""Read and return contents of *resource* within *package* as str.""" | |
encoding = _get_encoding_arg(path_names, encoding) | |
resource = _get_resource(anchor, path_names) | |
return resource.read_text(encoding=encoding, errors=errors) | |
def path(anchor, *path_names): | |
"""Return the path to the *resource* as an actual file system path.""" | |
return as_file(_get_resource(anchor, path_names)) | |
def is_resource(anchor, *path_names): | |
"""Return ``True`` if there is a resource named *name* in the package, | |
Otherwise returns ``False``. | |
""" | |
return _get_resource(anchor, path_names).is_file() | |
def contents(anchor, *path_names): | |
"""Return an iterable over the named resources within the package. | |
The iterable returns :class:`str` resources (e.g. files). | |
The iterable does not recurse into subdirectories. | |
""" | |
warnings.warn( | |
"importlib.resources.contents is deprecated. " | |
"Use files(anchor).iterdir() instead.", | |
DeprecationWarning, | |
stacklevel=1, | |
) | |
return (resource.name for resource in _get_resource(anchor, path_names).iterdir()) | |
def _get_encoding_arg(path_names, encoding): | |
# For compatibility with versions where *encoding* was a positional | |
# argument, it needs to be given explicitly when there are multiple | |
# *path_names*. | |
# This limitation can be removed in Python 3.15. | |
if encoding is _MISSING: | |
if len(path_names) > 1: | |
raise TypeError( | |
"'encoding' argument required with multiple path names", | |
) | |
else: | |
return 'utf-8' | |
return encoding | |
def _get_resource(anchor, path_names): | |
if anchor is None: | |
raise TypeError("anchor must be module or string, got None") | |
return files(anchor).joinpath(*path_names) | |