A loader interface around multiple config file formats.
.. image:: https://img.shields.io/pypi/v/plaster.svg :target: https://pypi.python.org/pypi/plaster
.. image:: https://github.com/Pylons/plaster/workflows/Build%20and%20test/badge.svg?branch=master :target: https://github.com/Pylons/plaster/actions?query=workflow%3A%22Build+and+test%22 :alt: master CI Status
.. image:: https://readthedocs.org/projects/plaster/badge/?version=latest :target: https://readthedocs.org/projects/plaster/?badge=latest :alt: Documentation Status
plaster
is a loader interface around multiple config file formats. It
exists to define a common API for applications to use when they wish to load
configuration. The library itself does not aim to handle anything except
a basic API that applications may use to find and load configuration settings.
Any specific constraints should be implemented in a pluggable loader which can
be registered via an entrypoint.
See https://docs.pylonsproject.org/projects/plaster/en/latest/ or
docs/index.rst
in this distribution for detailed documentation.
Add support for Python 3.11.
Fix an bug introduced in 1.1 on some systems where
plaster.exceptions.MultipleLoadersFound
would be raised due to
lib
and lib64
being symlinked to each other and both added to the
sys.path
.
See https://github.com/Pylons/plaster/pull/27
Drop support for Python 2.7, 3.4, 3.5, 3.6.
Add support for Python 3.8, 3.9, 3.10.
Drop runtime dependency on setuptools / pkg_resources by switching to
importlib.metadata
.
InvalidURI
to show the config_uri
.
See https://github.com/Pylons/plaster/pull/17When a scheme is not supplied, plaster.parse_uri
will now autogenerate
a scheme from the file extension with the format file+<ext>
instead of
simply <ext>
(for example, file+ini
instead of ini
).
See https://github.com/Pylons/plaster/pull/16
Absolute lookups are now pulled from the start of the scheme instead of
the end. This means that if you want to explicitly define the package that
the loader is pulled from, use package+scheme
instead of
scheme+package
.
See https://github.com/Pylons/plaster/pull/16
Removed the plaster.NoSectionError
exception. It's expected that
individual loaders should return an empty dictionary of settings in the
case that a section cannot be found.
See https://github.com/Pylons/plaster/pull/12
Expect the wsgi
protocol to raise LookupError
exceptions when
a named wsgi component cannot be found.
See https://github.com/Pylons/plaster/pull/12
Lookup now works differently. First "foo+bar" looks for an installed project distribution named "bar" with a loader named "foo". If this fails then it looks for any loader named "foo+bar".
Rename the loader entry point to plaster.loader_factory
.
Add the concept of protocols to plaster.get_loader
and
plaster.find_loaders
.
plaster.find_loaders
now works on just schemes and protocols
instead of full PlasterURL
objects and implements the lookup
algorithm for finding loader factories.
Change the ILoaderInfo
interface to avoid being coupled to a
particular uri. ILoaderInfo.load
now takes a config_uri
parameter.
Add a options
dictionary to PlasterURL
containing any arguments
decoded from the query string. Loaders may use these for whatever they wish
but one good option is default values in a config file.
Define the IWSGIProtocol
interface which addons can use to implement
a loader that can return full wsgi apps, servers and filters.
The scheme is now case-insensitive.
Allow config_uri
syntax scheme:path
alongside scheme://path
.
See https://github.com/Pylons/plaster/issues/3
Improve errors to show the user-supplied values in the error message. See https://github.com/Pylons/plaster/pull/4
Add plaster.find_loaders
which can be used by people who need a way
to recover when ambiguous loaders are discovered via plaster.get_loader
.
See https://github.com/Pylons/plaster/pull/5
Rename plaster.Loader
to plaster.ILoader
to signify its purpose
as an interface with no actual implementation.
See https://github.com/Pylons/plaster/pull/5
Introduce plaster.ILoaderFactory
to document what the entry point targets
are expected to implement.
See https://github.com/Pylons/plaster/pull/5