Spaces:
Paused
Paused
| """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) | |