mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	gh-116608: Apply style and compatibility changes from importlib_metadata. (GH-123028)
(cherry picked from commit e913d2c87f)
Co-authored-by: Jason R. Coombs <jaraco@jaraco.com>
		
	
			
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""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)
 |