src/pyams_utils/session.py
changeset 380 c062ab4db6cd
parent 292 b338586588ad
child 408 cf2304af0fab
--- a/src/pyams_utils/session.py	Tue Jun 18 16:53:34 2019 +0200
+++ b/src/pyams_utils/session.py	Wed Jun 26 10:39:34 2019 +0200
@@ -10,52 +10,19 @@
 # FOR A PARTICULAR PURPOSE.
 #
 
+"""PyAMS_utils session module
+
+This helper module is used to add a "session_property" method decorator, which can be used to
+store method result into user's session.
+
+It also adds to function to get and set session data.
+"""
+
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
-# import interfaces
-
-# import packages
 from pyams_utils.request import check_request
 
 
-_marker = object()
-
-
-def session_property(app, key=None, prefix=None):
-    """Define a method decorator used to store result into request's session
-
-    If no request is currently running, a new one is created.
-
-    :param str app: application identifier used to prefix session keys
-    :param str key: session's value key; if *None*, the key will be the method's object; if *key* is a callable
-        object, il will be called to get the actual session key
-    :param prefix: str; prefix to use for session key; if *None*, the prefix will be the property name
-    """
-
-    def session_decorator(func):
-
-        def wrapper(obj, app, key, *args, **kwargs):
-            request = check_request()
-            if callable(key):
-                key = key(obj, *args, **kwargs)
-            if not key:
-                key = '{1}::{0!r}'.format(obj, prefix or func.__name__)
-            data = get_session_data(request, app, key, _marker)
-            if data is _marker:
-                data = func
-                if callable(data):
-                    data = data(obj, *args, **kwargs)
-                set_session_data(request, app, key, data)
-            return data
-
-        return lambda x, *args, **kwargs: wrapper(x, app, key, *args, **kwargs)
-
-    return session_decorator
-
-
 def get_session_data(request, app, key, default=None):
     """Get data associated with current user session
 
@@ -97,3 +64,39 @@
     """
     session = request.session
     session['{0}::{1}'.format(app, key)] = value
+
+
+_marker = object()
+
+
+def session_property(app, key=None, prefix=None):
+    """Define a method decorator used to store result into request's session
+
+    If no request is currently running, a new one is created.
+
+    :param str app: application identifier used to prefix session keys
+    :param str key: session's value key; if *None*, the key will be the method's object; if *key*
+        is a callable object, il will be called to get the actual session key
+    :param prefix: str; prefix to use for session key; if *None*, the prefix will be the property
+        name
+    """
+
+    def session_decorator(func):
+
+        def wrapper(obj, app, key, *args, **kwargs):
+            request = check_request()
+            if callable(key):
+                key = key(obj, *args, **kwargs)
+            if not key:
+                key = '{1}::{0!r}'.format(obj, prefix or func.__name__)
+            data = get_session_data(request, app, key, _marker)
+            if data is _marker:
+                data = func
+                if callable(data):
+                    data = data(obj, *args, **kwargs)
+                set_session_data(request, app, key, data)
+            return data
+
+        return lambda x, *args, **kwargs: wrapper(x, app, key, *args, **kwargs)
+
+    return session_decorator