Browse Source

Add Flask.config_class feature

pull/775/head
Karol Kuczmarski 12 years ago
parent
commit
ec5b182f15
  1. 11
      flask/app.py
  2. 3
      flask/testsuite/__init__.py
  3. 10
      flask/testsuite/config.py

11
flask/app.py

@ -175,6 +175,15 @@ class Flask(_PackageBoundObject):
_set_request_globals_class)
del _get_request_globals_class, _set_request_globals_class
#: The class that is used for the ``config`` attribute of this app.
#: Defaults to :class:`~flask.Config`.
#:
#: Example use cases for a custom class:
#:
#: 1. Default values for certain config options.
#: 2. Access to config values through attributes in addition to keys.
config_class = Config
#: The debug flag. Set this to `True` to enable debugging of the
#: application. In debug mode the debugger will kick in when an unhandled
#: exception occurs and the integrated server will automatically reload
@ -609,7 +618,7 @@ class Flask(_PackageBoundObject):
root_path = self.root_path
if instance_relative:
root_path = self.instance_path
return Config(root_path, self.default_config)
return self.config_class(root_path, self.default_config)
def auto_find_instance_path(self):
"""Tries to locate the instance path if it was not provided to the

3
flask/testsuite/__init__.py

@ -157,6 +157,9 @@ class FlaskTestCase(unittest.TestCase):
def assert_not_in(self, x, y):
self.assertNotIn(x, y)
def assert_isinstance(self, obj, cls):
self.assertIsInstance(obj, cls)
if sys.version_info[:2] == (2, 6):
def assertIn(self, x, y):
assert x in y, "%r unexpectedly not in %r" % (x, y)

10
flask/testsuite/config.py

@ -99,6 +99,16 @@ class ConfigTestCase(FlaskTestCase):
self.assert_true(0, 'expected config')
self.assert_false(app.config.from_pyfile('missing.cfg', silent=True))
def test_custom_config_class(self):
class Config(flask.Config):
pass
class Flask(flask.Flask):
config_class = Config
app = Flask(__name__)
self.assert_isinstance(app.config, Config)
app.config.from_object(__name__)
self.common_object_test(app)
def test_session_lifetime(self):
app = flask.Flask(__name__)
app.config['PERMANENT_SESSION_LIFETIME'] = 42

Loading…
Cancel
Save