import os
|
|
from pyramid.settings import asbool, aslist
|
|
|
class SettingsConfiguratorMixin(object):
|
def _set_settings(self, mapping):
|
if mapping is None:
|
mapping = {}
|
settings = Settings(mapping)
|
self.registry.settings = settings
|
return settings
|
|
def add_settings(self, settings=None, **kw):
|
"""Augment the :term:`deployment settings` with one or more
|
key/value pairs.
|
|
You may pass a dictionary::
|
|
config.add_settings({'external_uri':'http://example.com'})
|
|
Or a set of key/value pairs::
|
|
config.add_settings(external_uri='http://example.com')
|
|
This function is useful when you need to test code that accesses the
|
:attr:`pyramid.registry.Registry.settings` API (or the
|
:meth:`pyramid.config.Configurator.get_settings` API) and
|
which uses values from that API.
|
"""
|
if settings is None:
|
settings = {}
|
utility = self.registry.settings
|
if utility is None:
|
utility = self._set_settings(settings)
|
utility.update(settings)
|
utility.update(kw)
|
|
def get_settings(self):
|
"""
|
Return a :term:`deployment settings` object for the current
|
application. A deployment settings object is a dictionary-like
|
object that contains key/value pairs based on the dictionary passed
|
as the ``settings`` argument to the
|
:class:`pyramid.config.Configurator` constructor.
|
|
.. note:: the :attr:`pyramid.registry.Registry.settings` API
|
performs the same duty.
|
"""
|
return self.registry.settings
|
|
|
def Settings(d=None, _environ_=os.environ, **kw):
|
""" Deployment settings. Update application settings (usually
|
from PasteDeploy keywords) with framework-specific key/value pairs
|
(e.g. find ``PYRAMID_DEBUG_AUTHORIZATION`` in os.environ and jam into
|
keyword args)."""
|
if d is None:
|
d = {}
|
d = dict(d)
|
d.update(**kw)
|
|
eget = _environ_.get
|
|
def expand_key(key):
|
keys = [key]
|
if not key.startswith('pyramid.'):
|
keys.append('pyramid.' + key)
|
return keys
|
|
def S(settings_key, env_key=None, type_=str, default=False):
|
value = default
|
keys = expand_key(settings_key)
|
for key in keys:
|
value = d.get(key, value)
|
if env_key:
|
value = eget(env_key, value)
|
value = type_(value)
|
d.update({k: value for k in keys})
|
|
def O(settings_key, override_key): # noqa: E743
|
for key in expand_key(settings_key):
|
d[key] = d[key] or d[override_key]
|
|
S('debug_all', 'PYRAMID_DEBUG_ALL', asbool)
|
S('debug_authorization', 'PYRAMID_DEBUG_AUTHORIZATION', asbool)
|
O('debug_authorization', 'debug_all')
|
S('debug_notfound', 'PYRAMID_DEBUG_NOTFOUND', asbool)
|
O('debug_notfound', 'debug_all')
|
S('debug_routematch', 'PYRAMID_DEBUG_ROUTEMATCH', asbool)
|
O('debug_routematch', 'debug_all')
|
S('debug_templates', 'PYRAMID_DEBUG_TEMPLATES', asbool)
|
O('debug_templates', 'debug_all')
|
|
S('reload_all', 'PYRAMID_RELOAD_ALL', asbool)
|
S('reload_templates', 'PYRAMID_RELOAD_TEMPLATES', asbool)
|
O('reload_templates', 'reload_all')
|
S('reload_assets', 'PYRAMID_RELOAD_ASSETS', asbool)
|
O('reload_assets', 'reload_all')
|
S('reload_resources', 'PYRAMID_RELOAD_RESOURCES', asbool)
|
O('reload_resources', 'reload_all')
|
# reload_resources is an older alias for reload_assets
|
for k in expand_key('reload_assets') + expand_key('reload_resources'):
|
d[k] = d['reload_assets'] or d['reload_resources']
|
|
S('default_locale_name', 'PYRAMID_DEFAULT_LOCALE_NAME', str, 'en')
|
S('prevent_http_cache', 'PYRAMID_PREVENT_HTTP_CACHE', asbool)
|
S('prevent_cachebust', 'PYRAMID_PREVENT_CACHEBUST', asbool)
|
S('csrf_trusted_origins', 'PYRAMID_CSRF_TRUSTED_ORIGINS', aslist, [])
|
|
return d
|