From ec5b182f15d711aa92fe16480011fbe0fb9d3a63 Mon Sep 17 00:00:00 2001 From: Karol Kuczmarski Date: Sat, 22 Jun 2013 22:09:30 +0200 Subject: [PATCH] Add Flask.config_class feature --- flask/app.py | 11 ++++++++++- flask/testsuite/__init__.py | 3 +++ flask/testsuite/config.py | 10 ++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/flask/app.py b/flask/app.py index addc40b4..216afd8b 100644 --- a/flask/app.py +++ b/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 diff --git a/flask/testsuite/__init__.py b/flask/testsuite/__init__.py index 7fe61484..d6c4604e 100644 --- a/flask/testsuite/__init__.py +++ b/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) diff --git a/flask/testsuite/config.py b/flask/testsuite/config.py index 477c6db9..7d074c01 100644 --- a/flask/testsuite/config.py +++ b/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