
Load entry points using 'importlib.metadata' instead of 'pkg_resources'. Include a caching layer. The cache stores the parsed text data from all of the ini input files in a single JSON file with a name based on the hash of the path entries and the mtimes. This should produce a unique filename for each import path, regardless of the use of a virtualenv. The data is stored in a format that means no other files need to be examined or parsed in order to return EntryPoint objects. Change-Id: I8b08f289d446f4775eac1e1a91997fa96f25f641 Depends-On: Ic6db7af34c87a636bfe55bacae03c42154f4b9c7 Signed-off-by: Doug Hellmann <doug@doughellmann.com>
30 lines
977 B
ReStructuredText
30 lines
977 B
ReStructuredText
=============================================================
|
|
stevedore -- Manage Dynamic Plugins for Python Applications
|
|
=============================================================
|
|
|
|
Python makes loading code dynamically easy, allowing you to configure
|
|
and extend your application by discovering and loading extensions
|
|
("*plugins*") at runtime. Many applications implement their own
|
|
library for doing this, using ``__import__`` or
|
|
:mod:`importlib`. stevedore avoids creating yet another extension
|
|
mechanism by building on top of `entry points`_. The code
|
|
for managing entry points tends to be repetitive, though, so stevedore
|
|
provides manager classes for implementing common patterns for using
|
|
dynamically loaded extensions.
|
|
|
|
.. toctree::
|
|
:glob:
|
|
:maxdepth: 2
|
|
|
|
user/index
|
|
reference/index
|
|
install/index
|
|
|
|
|
|
.. _entry points: https://docs.python.org/3/library/importlib.metadata.html#entry-points
|
|
|
|
.. rubric:: Indices and tables
|
|
|
|
* :ref:`genindex`
|
|
* :ref:`search`
|