17db96d56Sopenharmony_ci:mod:`importlib.resources` -- Resources
27db96d56Sopenharmony_ci---------------------------------------
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: importlib.resources
57db96d56Sopenharmony_ci    :synopsis: Package resource reading, opening, and access
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci**Source code:** :source:`Lib/importlib/resources/__init__.py`
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci--------------
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci.. versionadded:: 3.7
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciThis module leverages Python's import system to provide access to *resources*
147db96d56Sopenharmony_ciwithin *packages*.  If you can import a package, you can access resources
157db96d56Sopenharmony_ciwithin that package.  Resources can be opened or read, in either binary or
167db96d56Sopenharmony_citext mode.
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ciResources are roughly akin to files inside directories, though it's important
197db96d56Sopenharmony_cito keep in mind that this is just a metaphor.  Resources and packages **do
207db96d56Sopenharmony_cinot** have to exist as physical files and directories on the file system:
217db96d56Sopenharmony_cifor example, a package and its resources can be imported from a zip file using
227db96d56Sopenharmony_ci:py:mod:`zipimport`.
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci.. note::
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci   This module provides functionality similar to `pkg_resources
277db96d56Sopenharmony_ci   <https://setuptools.readthedocs.io/en/latest/pkg_resources.html>`_ `Basic
287db96d56Sopenharmony_ci   Resource Access
297db96d56Sopenharmony_ci   <https://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access>`_
307db96d56Sopenharmony_ci   without the performance overhead of that package.  This makes reading
317db96d56Sopenharmony_ci   resources included in packages easier, with more stable and consistent
327db96d56Sopenharmony_ci   semantics.
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci   The standalone backport of this module provides more information
357db96d56Sopenharmony_ci   on `using importlib.resources
367db96d56Sopenharmony_ci   <https://importlib-resources.readthedocs.io/en/latest/using.html>`_ and
377db96d56Sopenharmony_ci   `migrating from pkg_resources to importlib.resources
387db96d56Sopenharmony_ci   <https://importlib-resources.readthedocs.io/en/latest/migration.html>`_.
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci:class:`Loaders <importlib.abc.Loader>` that wish to support resource reading should implement a
417db96d56Sopenharmony_ci``get_resource_reader(fullname)`` method as specified by
427db96d56Sopenharmony_ci:class:`importlib.resources.abc.ResourceReader`.
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci.. data:: Package
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci    Whenever a function accepts a ``Package`` argument, you can pass in
477db96d56Sopenharmony_ci    either a :class:`module object <types.ModuleType>` or a module name
487db96d56Sopenharmony_ci    as a string.  You can only pass module objects whose
497db96d56Sopenharmony_ci    ``__spec__.submodule_search_locations`` is not ``None``.
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci    The ``Package`` type is defined as ``Union[str, ModuleType]``.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci.. function:: files(package)
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci    Returns a :class:`~importlib.resources.abc.Traversable` object
567db96d56Sopenharmony_ci    representing the resource container for the package (think directory)
577db96d56Sopenharmony_ci    and its resources (think files). A Traversable may contain other
587db96d56Sopenharmony_ci    containers (think subdirectories).
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci    *package* is either a name or a module object which conforms to the
617db96d56Sopenharmony_ci    :data:`Package` requirements.
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci    .. versionadded:: 3.9
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci.. function:: as_file(traversable)
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci    Given a :class:`~importlib.resources.abc.Traversable` object representing
687db96d56Sopenharmony_ci    a file, typically from :func:`importlib.resources.files`, return
697db96d56Sopenharmony_ci    a context manager for use in a :keyword:`with` statement.
707db96d56Sopenharmony_ci    The context manager provides a :class:`pathlib.Path` object.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci    Exiting the context manager cleans up any temporary file created when the
737db96d56Sopenharmony_ci    resource was extracted from e.g. a zip file.
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci    Use ``as_file`` when the Traversable methods
767db96d56Sopenharmony_ci    (``read_text``, etc) are insufficient and an actual file on
777db96d56Sopenharmony_ci    the file system is required.
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci    .. versionadded:: 3.9
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ciDeprecated functions
827db96d56Sopenharmony_ci--------------------
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ciAn older, deprecated set of functions is still available, but is
857db96d56Sopenharmony_cischeduled for removal in a future version of Python.
867db96d56Sopenharmony_ciThe main drawback of these functions is that they do not support
877db96d56Sopenharmony_cidirectories: they assume all resources are located directly within a *package*.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci.. data:: Resource
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci    For *resource* arguments of the functions below, you can pass in
927db96d56Sopenharmony_ci    the name of a resource as a string or
937db96d56Sopenharmony_ci    a :class:`path-like object <os.PathLike>`.
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci    The ``Resource`` type is defined as ``Union[str, os.PathLike]``.
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci.. function:: open_binary(package, resource)
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci    Open for binary reading the *resource* within *package*.
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci    *package* is either a name or a module object which conforms to the
1027db96d56Sopenharmony_ci    ``Package`` requirements.  *resource* is the name of the resource to open
1037db96d56Sopenharmony_ci    within *package*; it may not contain path separators and it may not have
1047db96d56Sopenharmony_ci    sub-resources (i.e. it cannot be a directory).  This function returns a
1057db96d56Sopenharmony_ci    ``typing.BinaryIO`` instance, a binary I/O stream open for reading.
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci    .. deprecated:: 3.11
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci       Calls to this function can be replaced by::
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci          files(package).joinpath(resource).open('rb')
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci.. function:: open_text(package, resource, encoding='utf-8', errors='strict')
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci    Open for text reading the *resource* within *package*.  By default, the
1177db96d56Sopenharmony_ci    resource is opened for reading as UTF-8.
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci    *package* is either a name or a module object which conforms to the
1207db96d56Sopenharmony_ci    ``Package`` requirements.  *resource* is the name of the resource to open
1217db96d56Sopenharmony_ci    within *package*; it may not contain path separators and it may not have
1227db96d56Sopenharmony_ci    sub-resources (i.e. it cannot be a directory).  *encoding* and *errors*
1237db96d56Sopenharmony_ci    have the same meaning as with built-in :func:`open`.
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci    This function returns a ``typing.TextIO`` instance, a text I/O stream open
1267db96d56Sopenharmony_ci    for reading.
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci    .. deprecated:: 3.11
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci       Calls to this function can be replaced by::
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci          files(package).joinpath(resource).open('r', encoding=encoding)
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci.. function:: read_binary(package, resource)
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci    Read and return the contents of the *resource* within *package* as
1387db96d56Sopenharmony_ci    ``bytes``.
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci    *package* is either a name or a module object which conforms to the
1417db96d56Sopenharmony_ci    ``Package`` requirements.  *resource* is the name of the resource to open
1427db96d56Sopenharmony_ci    within *package*; it may not contain path separators and it may not have
1437db96d56Sopenharmony_ci    sub-resources (i.e. it cannot be a directory).  This function returns the
1447db96d56Sopenharmony_ci    contents of the resource as :class:`bytes`.
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci    .. deprecated:: 3.11
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci       Calls to this function can be replaced by::
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci          files(package).joinpath(resource).read_bytes()
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ci.. function:: read_text(package, resource, encoding='utf-8', errors='strict')
1547db96d56Sopenharmony_ci
1557db96d56Sopenharmony_ci    Read and return the contents of *resource* within *package* as a ``str``.
1567db96d56Sopenharmony_ci    By default, the contents are read as strict UTF-8.
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_ci    *package* is either a name or a module object which conforms to the
1597db96d56Sopenharmony_ci    ``Package`` requirements.  *resource* is the name of the resource to open
1607db96d56Sopenharmony_ci    within *package*; it may not contain path separators and it may not have
1617db96d56Sopenharmony_ci    sub-resources (i.e. it cannot be a directory).  *encoding* and *errors*
1627db96d56Sopenharmony_ci    have the same meaning as with built-in :func:`open`.  This function
1637db96d56Sopenharmony_ci    returns the contents of the resource as :class:`str`.
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ci    .. deprecated:: 3.11
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci       Calls to this function can be replaced by::
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci          files(package).joinpath(resource).read_text(encoding=encoding)
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci.. function:: path(package, resource)
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ci    Return the path to the *resource* as an actual file system path.  This
1757db96d56Sopenharmony_ci    function returns a context manager for use in a :keyword:`with` statement.
1767db96d56Sopenharmony_ci    The context manager provides a :class:`pathlib.Path` object.
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci    Exiting the context manager cleans up any temporary file created when the
1797db96d56Sopenharmony_ci    resource needs to be extracted from e.g. a zip file.
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci    *package* is either a name or a module object which conforms to the
1827db96d56Sopenharmony_ci    ``Package`` requirements.  *resource* is the name of the resource to open
1837db96d56Sopenharmony_ci    within *package*; it may not contain path separators and it may not have
1847db96d56Sopenharmony_ci    sub-resources (i.e. it cannot be a directory).
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci    .. deprecated:: 3.11
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci       Calls to this function can be replaced using :func:`as_file`::
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci          as_file(files(package).joinpath(resource))
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci.. function:: is_resource(package, name)
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci    Return ``True`` if there is a resource named *name* in the package,
1967db96d56Sopenharmony_ci    otherwise ``False``.
1977db96d56Sopenharmony_ci    This function does not consider directories to be resources.
1987db96d56Sopenharmony_ci    *package* is either a name or a module object which conforms to the
1997db96d56Sopenharmony_ci    ``Package`` requirements.
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci    .. deprecated:: 3.11
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci       Calls to this function can be replaced by::
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci          files(package).joinpath(resource).is_file()
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci.. function:: contents(package)
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci    Return an iterable over the named items within the package.  The iterable
2117db96d56Sopenharmony_ci    returns :class:`str` resources (e.g. files) and non-resources
2127db96d56Sopenharmony_ci    (e.g. directories).  The iterable does not recurse into subdirectories.
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci    *package* is either a name or a module object which conforms to the
2157db96d56Sopenharmony_ci    ``Package`` requirements.
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci    .. deprecated:: 3.11
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci       Calls to this function can be replaced by::
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci          (resource.name for resource in files(package).iterdir() if resource.is_file())
222