Source code for plaster.interfaces
import abc
[docs]
class ILoader(metaclass=abc.ABCMeta):
"""
An abstraction over an source of configuration settings.
It is required to implement ``get_sections``, ``get_settings`` and
``setup_logging``.
Optionally, it may also implement other :term:`loader protocol` interfaces
to provide extra functionality. For example,
:class:`plaster.protocols.IWSGIProtocol` which requires ``get_wsgi_app``,
and ``get_wsgi_server`` for loading WSGI configurations. Services that
depend on such functionality should document the required functionality
behind a particular :term:`loader protocol` which custom loaders can
implement.
:ivar uri: The :class:`plaster.PlasterURL` object used to find the
:class:`plaster.ILoaderFactory`.
"""
[docs]
@abc.abstractmethod
def get_sections(self):
"""
Load the list of section names available.
"""
[docs]
@abc.abstractmethod
def get_settings(self, section=None, defaults=None):
"""
Load the settings for the named ``section``.
:param section: The name of the section in the config file. If this is
``None`` then it is up to the loader to determine a sensible
default usually derived from the fragment in the ``path#name``
syntax of the ``config_uri``.
:param defaults: A ``dict`` of default values used to populate the
settings and support variable interpolation. Any values in
``defaults`` may be overridden by the loader prior to returning
the final configuration dictionary.
:returns: A ``dict`` of settings. This should return a dictionary
object even if the section is missing.
:raises ValueError: If a section name is missing and cannot be
determined from the ``config_uri``.
"""
[docs]
@abc.abstractmethod
def setup_logging(self, defaults=None):
"""
Execute the logging configuration defined in the config file.
This function should, at least, configure the Python standard logging
module. However, it may also be used to configure any other logging
subsystems that serve a similar purpose.
:param defaults: A ``dict`` of default values used to populate the
settings and support variable interpolation. Any values in
``defaults`` may be overridden by the loader prior to returning
the final configuration dictionary.
"""
[docs]
class ILoaderFactory(metaclass=abc.ABCMeta):
[docs]
@abc.abstractmethod
def __call__(self, uri):
"""
A factory which accepts a :class:`plaster.PlasterURL` and returns a
:class:`plaster.ILoader` object.
"""
[docs]
class ILoaderInfo(metaclass=abc.ABCMeta):
"""
An info object describing a specific :class:`plaster.ILoader`.
:ivar scheme: The full scheme of the loader.
:ivar protocols: Zero or more supported :term:`loader protocol`
identifiers.
:ivar factory: The :class:`plaster.ILoaderFactory`.
"""
[docs]
@abc.abstractmethod
def load(self, config_uri):
"""
Create and return an :class:`plaster.ILoader` instance.
:param config_uri: Anything that can be parsed by
:func:`plaster.parse_uri`.
"""