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