Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Moved the conversion thing into the ConfigAttribute.

  • Loading branch information...
commit 8da8a21b69cc06e58b1b28fa0ecec63b5cf3d9b4 1 parent 6dccf77
@mitsuhiko authored
Showing with 27 additions and 28 deletions.
  1. +16 −26 flask/app.py
  2. +6 −2 flask/config.py
  3. +5 −0 flask/testsuite/config.py
View
42 flask/app.py
@@ -41,6 +41,12 @@
_logger_lock = Lock()
+def _make_timedelta(value):
+ if not isinstance(value, timedelta):
+ return timedelta(seconds=value)
+ return value
+
+
def setupmethod(f):
"""Wraps a method so that it performs a check in debug mode if the
first request was already handled.
@@ -177,6 +183,16 @@ class Flask(_PackageBoundObject):
#: `SESSION_COOKIE_NAME` configuration key. Defaults to ``'session'``
session_cookie_name = ConfigAttribute('SESSION_COOKIE_NAME')
+ #: A :class:`~datetime.timedelta` which is used to set the expiration
+ #: date of a permanent session. The default is 31 days which makes a
+ #: permanent session survive for roughly one month.
+ #:
+ #: This attribute can also be configured from the config with the
+ #: `PERMANENT_SESSION_LIFETIME` configuration key. Defaults to
+ #: ``timedelta(days=31)``
+ permanent_session_lifetime = ConfigAttribute('PERMANENT_SESSION_LIFETIME',
+ get_converter=_make_timedelta)
+
#: Enable this if you want to use the X-Sendfile feature. Keep in
#: mind that the server has to support this. This only affects files
#: sent with the :func:`send_file` method.
@@ -486,32 +502,6 @@ def preserve_context_on_exception(self):
return rv
return self.debug
- def _get_permanent_session_lifetime(self):
- """A :class:`~datetime.timedelta` which is used to set the expiration
- date of a permanent session. The default is 31 days which makes a
- permanent session survive for roughly one month.
-
- This attribute can also be configured from the config with the
- `PERMANENT_SESSION_LIFETIME` configuration key. Defaults to
- ``timedelta(days=31)``.
-
- If you want to have this value as seconds you can use ``total_seconds()``::
-
- app.permanent_session_lifetime.total_seconds()
-
- Note that the config key can be a timedelta object or number of seconds
- as integer since Flask 0.8.
- """
- rv = self.config['PERMANENT_SESSION_LIFETIME']
- if not isinstance(rv, timedelta):
- return timedelta(seconds=rv)
- return rv
- def _set_permanent_session_lifetime(self, value):
- self.config['PERMANENT_SESSION_LIFETIME'] = value
- permanent_session_lifetime = property(_get_permanent_session_lifetime,
- _set_permanent_session_lifetime)
- del _get_permanent_session_lifetime, _set_permanent_session_lifetime
-
@property
def logger(self):
"""A :class:`logging.Logger` object for this application. The
View
8 flask/config.py
@@ -21,13 +21,17 @@
class ConfigAttribute(object):
"""Makes an attribute forward to the config"""
- def __init__(self, name):
+ def __init__(self, name, get_converter=None):
self.__name__ = name
+ self.get_converter = get_converter
def __get__(self, obj, type=None):
if obj is None:
return self
- return obj.config[self.__name__]
+ rv = obj.config[self.__name__]
+ if self.get_converter is not None:
+ rv = self.get_converter(rv)
+ return rv
def __set__(self, obj, value):
obj.config[self.__name__] = value
View
5 flask/testsuite/config.py
@@ -78,6 +78,11 @@ def test_config_missing(self):
self.assert_(0, 'expected config')
self.assert_(not app.config.from_pyfile('missing.cfg', silent=True))
+ def test_session_lifetime(self):
+ app = flask.Flask(__name__)
+ app.config['PERMANENT_SESSION_LIFETIME'] = 42
+ self.assert_equal(app.permanent_session_lifetime.total_seconds(), 42)
+
class InstanceTestCase(FlaskTestCase):
Please sign in to comment.
Something went wrong with that request. Please try again.