summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/importlib.resources.abc.rst12
-rw-r--r--Doc/library/importlib.rst154
2 files changed, 154 insertions, 12 deletions
diff --git a/Doc/library/importlib.resources.abc.rst b/Doc/library/importlib.resources.abc.rst
index 65c4285..c508b6b 100644
--- a/Doc/library/importlib.resources.abc.rst
+++ b/Doc/library/importlib.resources.abc.rst
@@ -43,8 +43,6 @@
:const:`None`. An object compatible with this ABC should only be
returned when the specified module is a package.
- .. versionadded:: 3.7
-
.. deprecated-removed:: 3.12 3.14
Use :class:`importlib.resources.abc.TraversableResources` instead.
@@ -95,11 +93,6 @@
For a representation of the object on the file-system, use
:meth:`importlib.resources.as_file`.
- .. versionadded:: 3.9
-
- .. deprecated-removed:: 3.12 3.14
- Use :class:`importlib.resources.abc.Traversable` instead.
-
.. attribute:: name
Abstract. The base name of this object without any parent references.
@@ -153,11 +146,6 @@
Loaders that wish to support resource reading are expected to
implement this interface.
- .. versionadded:: 3.9
-
- .. deprecated-removed:: 3.12 3.14
- Use :class:`importlib.resources.abc.TraversableResources` instead.
-
.. abstractmethod:: files()
Returns a :class:`importlib.resources.abc.Traversable` object for the loaded
diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst
index d8cc707..fc95472 100644
--- a/Doc/library/importlib.rst
+++ b/Doc/library/importlib.rst
@@ -645,6 +645,160 @@ ABC hierarchy::
itself does not end in ``__init__``.
+.. class:: ResourceReader
+
+ *Superseded by TraversableResources*
+
+ An :term:`abstract base class` to provide the ability to read
+ *resources*.
+
+ From the perspective of this ABC, a *resource* is a binary
+ artifact that is shipped within a package. Typically this is
+ something like a data file that lives next to the ``__init__.py``
+ file of the package. The purpose of this class is to help abstract
+ out the accessing of such data files so that it does not matter if
+ the package and its data file(s) are stored in a e.g. zip file
+ versus on the file system.
+
+ For any of methods of this class, a *resource* argument is
+ expected to be a :term:`path-like object` which represents
+ conceptually just a file name. This means that no subdirectory
+ paths should be included in the *resource* argument. This is
+ because the location of the package the reader is for, acts as the
+ "directory". Hence the metaphor for directories and file
+ names is packages and resources, respectively. This is also why
+ instances of this class are expected to directly correlate to
+ a specific package (instead of potentially representing multiple
+ packages or a module).
+
+ Loaders that wish to support resource reading are expected to
+ provide a method called ``get_resource_reader(fullname)`` which
+ returns an object implementing this ABC's interface. If the module
+ specified by fullname is not a package, this method should return
+ :const:`None`. An object compatible with this ABC should only be
+ returned when the specified module is a package.
+
+ .. versionadded:: 3.7
+
+ .. deprecated-removed:: 3.12 3.14
+ Use :class:`importlib.resources.abc.TraversableResources` instead.
+
+ .. abstractmethod:: open_resource(resource)
+
+ Returns an opened, :term:`file-like object` for binary reading
+ of the *resource*.
+
+ If the resource cannot be found, :exc:`FileNotFoundError` is
+ raised.
+
+ .. abstractmethod:: resource_path(resource)
+
+ Returns the file system path to the *resource*.
+
+ If the resource does not concretely exist on the file system,
+ raise :exc:`FileNotFoundError`.
+
+ .. abstractmethod:: is_resource(name)
+
+ Returns ``True`` if the named *name* is considered a resource.
+ :exc:`FileNotFoundError` is raised if *name* does not exist.
+
+ .. abstractmethod:: contents()
+
+ Returns an :term:`iterable` of strings over the contents of
+ the package. Do note that it is not required that all names
+ returned by the iterator be actual resources, e.g. it is
+ acceptable to return names for which :meth:`is_resource` would
+ be false.
+
+ Allowing non-resource names to be returned is to allow for
+ situations where how a package and its resources are stored
+ are known a priori and the non-resource names would be useful.
+ For instance, returning subdirectory names is allowed so that
+ when it is known that the package and resources are stored on
+ the file system then those subdirectory names can be used
+ directly.
+
+ The abstract method returns an iterable of no items.
+
+
+.. class:: Traversable
+
+ An object with a subset of :class:`pathlib.Path` methods suitable for
+ traversing directories and opening files.
+
+ For a representation of the object on the file-system, use
+ :meth:`importlib.resources.as_file`.
+
+ .. versionadded:: 3.9
+
+ .. deprecated-removed:: 3.12 3.14
+ Use :class:`importlib.resources.abc.Traversable` instead.
+
+ .. attribute:: name
+
+ Abstract. The base name of this object without any parent references.
+
+ .. abstractmethod:: iterdir()
+
+ Yield ``Traversable`` objects in ``self``.
+
+ .. abstractmethod:: is_dir()
+
+ Return ``True`` if ``self`` is a directory.
+
+ .. abstractmethod:: is_file()
+
+ Return ``True`` if ``self`` is a file.
+
+ .. abstractmethod:: joinpath(child)
+
+ Return Traversable child in ``self``.
+
+ .. abstractmethod:: __truediv__(child)
+
+ Return ``Traversable`` child in ``self``.
+
+ .. abstractmethod:: open(mode='r', *args, **kwargs)
+
+ *mode* may be 'r' or 'rb' to open as text or binary. Return a handle
+ suitable for reading (same as :attr:`pathlib.Path.open`).
+
+ When opening as text, accepts encoding parameters such as those
+ accepted by :attr:`io.TextIOWrapper`.
+
+ .. method:: read_bytes()
+
+ Read contents of ``self`` as bytes.
+
+ .. method:: read_text(encoding=None)
+
+ Read contents of ``self`` as text.
+
+
+.. class:: TraversableResources
+
+ An abstract base class for resource readers capable of serving
+ the :meth:`importlib.resources.files` interface. Subclasses
+ :class:`importlib.resources.abc.ResourceReader` and provides
+ concrete implementations of the :class:`importlib.resources.abc.ResourceReader`'s
+ abstract methods. Therefore, any loader supplying
+ :class:`importlib.abc.TraversableResources` also supplies ResourceReader.
+
+ Loaders that wish to support resource reading are expected to
+ implement this interface.
+
+ .. versionadded:: 3.9
+
+ .. deprecated-removed:: 3.12 3.14
+ Use :class:`importlib.resources.abc.TraversableResources` instead.
+
+ .. abstractmethod:: files()
+
+ Returns a :class:`importlib.resources.abc.Traversable` object for the loaded
+ package.
+
+
:mod:`importlib.machinery` -- Importers and path hooks
------------------------------------------------------