' % strftime('%T', localtime(self.last_usage_time))
- return sstr
-
- def __getattribute__(self, name):
- try:
- return super(ConnectionProxy, self).__getattribute__(name)
- except AttributeError:
- return getattr(self.__cnx, name)
-
- def _set_last_usage_time(self, value):
- self.__is_dirty = True
- self.__record['last_usage_time'] = value
- def _get_last_usage_time(self):
- return self.__record['last_usage_time']
-
- last_usage_time = property(_get_last_usage_time, _set_last_usage_time)
-
- @property
- def anonymous_connection(self):
- # use get() for bw compat if sessions without anonymous information are
- # found. Set default to True to limit lifetime of those sessions.
- return self.__record.get('anonymous_connection', True)
-
- @property
- @cached
- def data(self):
- if self.__record.get('data') is not None:
- try:
- return loads(self.__record['data'])
- except:
- self.__is_dirty = True
- self.exception('corrupted session data for session %s',
- self.__cnx)
- return {}
-
- def get_session_data(self, key, default=None, pop=False):
- """return value associated to `key` in session data"""
- if pop:
- try:
- value = self.data.pop(key)
- self.__is_dirty = True
- return value
- except KeyError:
- return default
- else:
- return self.data.get(key, default)
-
- def set_session_data(self, key, value):
- """set value associated to `key` in session data"""
- self.data[key] = value
- self.__is_dirty = True
-
- def del_session_data(self, key):
- """remove value associated to `key` in session data"""
- try:
- del self.data[key]
- self.__is_dirty = True
- except KeyError:
- pass
-
- def commit(self):
- if self.__is_dirty:
- self.__save()
- self.__cnx.commit()
-
- def rollback(self):
- self.__save()
- self.__cnx.rollback()
-
- def close(self):
- if self.__cnx is not None:
- self.__cnx.close()
- Delete(self.__record)
-
- def __save(self):
- if self.__is_dirty:
- self.__record['data'] = Blob(dumps(self.data))
- Put(self.__record)
- self.__is_dirty = False
-
- def user(self, req=None, props=None):
- """return the User object associated to this connection"""
- return self.__user
-
-
-import logging
-from cubicweb import set_log_methods
-set_log_methods(ConnectionProxy, logging.getLogger('cubicweb.web.goa.session'))
-
-
-from cubicweb.view import StartupView
-from cubicweb.web import application
-
-class SessionsCleaner(StartupView):
- id = 'cleansessions'
- __select__ = none_rset() & match_user_groups('managers')
-
- def call(self):
- # clean web session
- session_manager = application.SESSION_MANAGER
- nbclosed, remaining = session_manager.clean_sessions()
- self.w(u'')
- self.w(u'%s web sessions closed
\n' % nbclosed)
- # clean repository sessions
- repo = self.config.repository(vreg=self.vreg)
- nbclosed = repo.clean_sessions()
- self.w(u'%s repository sessions closed
\n' % nbclosed)
- self.w(u'%s remaining sessions
\n' % remaining)
- self.w(u'
')
-
-
-def registration_callback(vreg):
- vreg.register(SessionsCleaner)
- vreg.register(GAEAuthenticationManager, clear=True)
- vreg.register(GAEPersistentSessionManager, clear=True)