forked from orbit-oss/flask
Merge branch 'config-namespaces' of https://github.com/mattupstate/flask into config-namespaces
Conflicts: flask/config.py
This commit is contained in:
commit
0674ee875d
2 changed files with 49 additions and 0 deletions
|
|
@ -193,5 +193,39 @@ class Config(dict):
|
|||
self[key] = obj[key]
|
||||
return True
|
||||
|
||||
def get_namespace(self, namespace, lowercase=True):
|
||||
"""Returns a dictionary containing a subset of configuration options
|
||||
that match the specified namespace/prefix. Example usage::
|
||||
|
||||
app.config['IMAGE_STORE_TYPE'] = 'fs'
|
||||
app.config['IMAGE_STORE_PATH'] = '/var/app/images'
|
||||
app.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com'
|
||||
image_store_config = app.config.get_namespace('IMAGE_STORE_')
|
||||
|
||||
The resulting dictionary `image_store` would look like::
|
||||
|
||||
{
|
||||
'type': 'fs',
|
||||
'path': '/var/app/images',
|
||||
'base_url': 'http://img.website.com'
|
||||
}
|
||||
|
||||
This is often useful when configuration options map directly to
|
||||
keyword arguments in functions or class constructors.
|
||||
|
||||
:param namespace: a configuration namespace
|
||||
:param lowercase: a flag indicating if the keys of the resulting
|
||||
dictionary should be lowercase
|
||||
"""
|
||||
rv = {}
|
||||
for k, v in self.iteritems():
|
||||
if not k.startswith(namespace):
|
||||
continue
|
||||
key = k[len(namespace):]
|
||||
if lowercase:
|
||||
key = key.lower()
|
||||
rv[key] = v
|
||||
return rv
|
||||
|
||||
def __repr__(self):
|
||||
return '<%s %s>' % (self.__class__.__name__, dict.__repr__(self))
|
||||
|
|
|
|||
|
|
@ -134,6 +134,21 @@ class ConfigTestCase(FlaskTestCase):
|
|||
app.config['PERMANENT_SESSION_LIFETIME'] = 42
|
||||
self.assert_equal(app.permanent_session_lifetime.seconds, 42)
|
||||
|
||||
def test_get_namespace(self):
|
||||
app = flask.Flask(__name__)
|
||||
app.config['FOO_OPTION_1'] = 'foo option 1'
|
||||
app.config['FOO_OPTION_2'] = 'foo option 2'
|
||||
app.config['BAR_STUFF_1'] = 'bar stuff 1'
|
||||
app.config['BAR_STUFF_2'] = 'bar stuff 2'
|
||||
foo_options = app.config.get_namespace('FOO_')
|
||||
self.assert_equal(2, len(foo_options))
|
||||
self.assert_equal('foo option 1', foo_options['option_1'])
|
||||
self.assert_equal('foo option 2', foo_options['option_2'])
|
||||
bar_options = app.config.get_namespace('BAR_', lowercase=False)
|
||||
self.assert_equal(2, len(bar_options))
|
||||
self.assert_equal('bar stuff 1', bar_options['STUFF_1'])
|
||||
self.assert_equal('bar stuff 2', bar_options['STUFF_2'])
|
||||
|
||||
|
||||
class LimitedLoaderMockWrapper(object):
|
||||
def __init__(self, loader):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue