A loader implementing the PasteDeploy syntax to be used by plaster.
.. image:: https://img.shields.io/pypi/v/plaster_pastedeploy.svg :target: https://pypi.python.org/pypi/plaster_pastedeploy
.. image:: https://github.com/Pylons/plaster_pastedeploy/workflows/Build%20and%20test/badge.svg?branch=master :target: https://github.com/Pylons/plaster_pastedeploy/actions?query=workflow%3A%22Build+and+test%22 :alt: master CI Status
plaster_pastedeploy
is a plaster_ plugin that provides a plaster.Loader
that can parse ini files according to the standard set by PasteDeploy_. It
supports the wsgi
plaster protocol, implementing the
plaster.protocols.IWSGIProtocol
interface.
Applications should use plaster_pastedeploy
to load settings from named
sections in a configuration source (usually a file).
Please look at the documentation for plaster_ on how to integrate this loader into your application.
Please look at the documentation for PasteDeploy_ on the specifics of the supported INI file format.
Most applications will want to use
plaster.get_loader(uri, protocols=['wsgi'])
to get this loader. It then
exposes get_wsgi_app
, get_wsgi_app_settings
, get_wsgi_filter
and
get_wsgi_server
.
.. code-block:: python
import plaster
loader = plaster.get_loader('development.ini', protocols=['wsgi'])
# to get any section out of the config file
settings = loader.get_settings('app:main')
# to get settings for a WSGI app
app_config = loader.get_wsgi_app_settings() # defaults to main
# to get an actual WSGI app
app = loader.get_wsgi_app() # defaults to main
# to get a filter and compose it with an app
filter = loader.get_wsgi_filter('filt')
app = filter(app)
# to get a WSGI server
server = loader.get_wsgi_server() # defaults to main
# to start the WSGI server
server(app)
Any plaster.PlasterURL
options are forwarded as defaults to the loader.
Some examples are below:
development.ini#myapp
development.ini?http_port=8080#main
pastedeploy+ini:///path/to/development.ini
pastedeploy+ini://development.ini#foo
egg:MyApp?debug=false#foo
.. _PasteDeploy: https://pastedeploy.readthedocs.io/en/latest/ .. _plaster: https://docs.pylonsproject.org/projects/plaster/en/latest/
Drop support for Python 2.7, 3.4, 3.5, 3.6.
Add support for Python 3.8, 3.9, 3.10.
Blackify the codebase.
Switch CI to Github Actions.
Support Python 3.7.
Depend on pastedeploy >= 2.0
to enforce new behavior when overriding
defaults. Default values passed into the loader will now override values in
the [DEFAULT]
section.
See https://github.com/Pylons/plaster_pastedeploy/pull/17
setup_logging
to invoke logging.config.fileConfig
with
disable_existing_loggers=False
to avoid disabling any loggers that were
imported prior to configuration of the logging system.
See https://github.com/Pylons/plaster_pastedeploy/pull/16ConfigDict.copy
so that it works.
See https://github.com/Pylons/plaster_pastedeploy/pull/14Disable environment variable support on Python 2. PasteDeploy does not support escaping the contents on Python 2 which means any variable with a value of the format %(foo)s would break the parser. Because this is implicit behavior it was deemed too error prone to support. See https://github.com/Pylons/plaster_pastedeploy/pull/10
Escape environment variables such that their contents are not subject to interpolation. See https://github.com/Pylons/plaster_pastedeploy/pull/10
Invoke logging.basicConfig
when setup_logging
is called and the
config file doesn't contain any logging setup or the URI is using the
egg:
protocol. See https://github.com/Pylons/plaster_pastedeploy/pull/11
Fix get_settings
for an arbitrary section to follow the same rules as
PasteDeploy with regards to the handling of defaults. The goal of this
package is to be compliant with PasteDeploy's format for all sections in
the file such that there are no surprising format changes in various
sections.
Supported added for set default_foo = bar
and get foo = default_foo
syntax to override a default value and to pull a default value into the
settings, respectively. In the above example the value foo = bar
would
be returned. Any other defaults not pulled into the section via either
interpolation or the get
syntax will be ignored.
See https://github.com/Pylons/plaster_pastedeploy/pull/6
Inject environment variables into the defaults automatically. These will
be available for interpolation as ENV_<foo>
. For example if environment
variable APP_DEBUG=true
then %(ENV_APP_DEBUG)s
will work within the
ini file. See https://github.com/Pylons/plaster_pastedeploy/pull/7
get_settings
and get_wsgi_app_settings
both return only the local
config now. However, the returned object has a global_conf
attribute
containing the defaults as well as a loader
attribute pointing at
the loader instance.
See https://github.com/Pylons/plaster_pastedeploy/pull/8
NoSectionError
would not be properly caught on
Python 2.7 if the configparser
module was installed from PyPI.
See https://github.com/Pylons/plaster_pastedeploy/issues/5pastedeploy+egg
scheme as an egg
type.ini
scheme and replace with file+ini
and pastedeploy
.
Also rename ini+pastedeploy
and egg+pastedeploy
to
pastedeploy+ini
and pastedeploy+egg
respectively.
See https://github.com/Pylons/plaster_pastedeploy/pull/4plaster.NoSectionError
exceptions. Empty dictionaries
are returned for missing sections and a user should check get_sections
for the list of valid sections.