17db96d56Sopenharmony_ci:mod:`importlib.resources.abc` -- Abstract base classes for resources
27db96d56Sopenharmony_ci---------------------------------------------------------------------
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: importlib.resources.abc
57db96d56Sopenharmony_ci    :synopsis: Abstract base classes for resources
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci**Source code:** :source:`Lib/importlib/resources/abc.py`
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci--------------
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci.. versionadded:: 3.11
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci.. class:: ResourceReader
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci    *Superseded by TraversableResources*
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci    An :term:`abstract base class` to provide the ability to read
187db96d56Sopenharmony_ci    *resources*.
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci    From the perspective of this ABC, a *resource* is a binary
217db96d56Sopenharmony_ci    artifact that is shipped within a package. Typically this is
227db96d56Sopenharmony_ci    something like a data file that lives next to the ``__init__.py``
237db96d56Sopenharmony_ci    file of the package. The purpose of this class is to help abstract
247db96d56Sopenharmony_ci    out the accessing of such data files so that it does not matter if
257db96d56Sopenharmony_ci    the package and its data file(s) are stored in a e.g. zip file
267db96d56Sopenharmony_ci    versus on the file system.
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci    For any of methods of this class, a *resource* argument is
297db96d56Sopenharmony_ci    expected to be a :term:`path-like object` which represents
307db96d56Sopenharmony_ci    conceptually just a file name. This means that no subdirectory
317db96d56Sopenharmony_ci    paths should be included in the *resource* argument. This is
327db96d56Sopenharmony_ci    because the location of the package the reader is for, acts as the
337db96d56Sopenharmony_ci    "directory". Hence the metaphor for directories and file
347db96d56Sopenharmony_ci    names is packages and resources, respectively. This is also why
357db96d56Sopenharmony_ci    instances of this class are expected to directly correlate to
367db96d56Sopenharmony_ci    a specific package (instead of potentially representing multiple
377db96d56Sopenharmony_ci    packages or a module).
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci    Loaders that wish to support resource reading are expected to
407db96d56Sopenharmony_ci    provide a method called ``get_resource_reader(fullname)`` which
417db96d56Sopenharmony_ci    returns an object implementing this ABC's interface. If the module
427db96d56Sopenharmony_ci    specified by fullname is not a package, this method should return
437db96d56Sopenharmony_ci    :const:`None`. An object compatible with this ABC should only be
447db96d56Sopenharmony_ci    returned when the specified module is a package.
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci    .. versionadded:: 3.7
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci    .. abstractmethod:: open_resource(resource)
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci        Returns an opened, :term:`file-like object` for binary reading
517db96d56Sopenharmony_ci        of the *resource*.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci        If the resource cannot be found, :exc:`FileNotFoundError` is
547db96d56Sopenharmony_ci        raised.
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci    .. abstractmethod:: resource_path(resource)
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci        Returns the file system path to the *resource*.
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci        If the resource does not concretely exist on the file system,
617db96d56Sopenharmony_ci        raise :exc:`FileNotFoundError`.
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci    .. abstractmethod:: is_resource(name)
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci        Returns ``True`` if the named *name* is considered a resource.
667db96d56Sopenharmony_ci        :exc:`FileNotFoundError` is raised if *name* does not exist.
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci    .. abstractmethod:: contents()
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci        Returns an :term:`iterable` of strings over the contents of
717db96d56Sopenharmony_ci        the package. Do note that it is not required that all names
727db96d56Sopenharmony_ci        returned by the iterator be actual resources, e.g. it is
737db96d56Sopenharmony_ci        acceptable to return names for which :meth:`is_resource` would
747db96d56Sopenharmony_ci        be false.
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci        Allowing non-resource names to be returned is to allow for
777db96d56Sopenharmony_ci        situations where how a package and its resources are stored
787db96d56Sopenharmony_ci        are known a priori and the non-resource names would be useful.
797db96d56Sopenharmony_ci        For instance, returning subdirectory names is allowed so that
807db96d56Sopenharmony_ci        when it is known that the package and resources are stored on
817db96d56Sopenharmony_ci        the file system then those subdirectory names can be used
827db96d56Sopenharmony_ci        directly.
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci        The abstract method returns an iterable of no items.
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci.. class:: Traversable
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci    An object with a subset of :class:`pathlib.Path` methods suitable for
907db96d56Sopenharmony_ci    traversing directories and opening files.
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci    For a representation of the object on the file-system, use
937db96d56Sopenharmony_ci    :meth:`importlib.resources.as_file`.
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci    .. versionadded:: 3.9
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci    .. attribute:: name
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci       Abstract. The base name of this object without any parent references.
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci    .. abstractmethod:: iterdir()
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci       Yield Traversable objects in self.
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci    .. abstractmethod:: is_dir()
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci       Return True if self is a directory.
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci    .. abstractmethod:: is_file()
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci       Return True if self is a file.
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci    .. abstractmethod:: joinpath(child)
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci       Return Traversable child in self.
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci    .. abstractmethod:: __truediv__(child)
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci       Return Traversable child in self.
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci    .. abstractmethod:: open(mode='r', *args, **kwargs)
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci       *mode* may be 'r' or 'rb' to open as text or binary. Return a handle
1247db96d56Sopenharmony_ci       suitable for reading (same as :attr:`pathlib.Path.open`).
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci       When opening as text, accepts encoding parameters such as those
1277db96d56Sopenharmony_ci       accepted by :attr:`io.TextIOWrapper`.
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci    .. method:: read_bytes()
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci       Read contents of self as bytes.
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci    .. method:: read_text(encoding=None)
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci       Read contents of self as text.
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci.. class:: TraversableResources
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci    An abstract base class for resource readers capable of serving
1417db96d56Sopenharmony_ci    the :meth:`importlib.resources.files` interface. Subclasses
1427db96d56Sopenharmony_ci    :class:`importlib.resources.abc.ResourceReader` and provides
1437db96d56Sopenharmony_ci    concrete implementations of the :class:`importlib.resources.abc.ResourceReader`'s
1447db96d56Sopenharmony_ci    abstract methods. Therefore, any loader supplying
1457db96d56Sopenharmony_ci    :class:`importlib.abc.TraversableResources` also supplies ResourceReader.
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci    Loaders that wish to support resource reading are expected to
1487db96d56Sopenharmony_ci    implement this interface.
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci    .. versionadded:: 3.9
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci    .. abstractmethod:: files()
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci       Returns a :class:`importlib.resources.abc.Traversable` object for the loaded
1557db96d56Sopenharmony_ci       package.
156