# HG changeset patch # User Sylvain Thénault # Date 1249491382 -7200 # Node ID 09baf5175196d3f49a9ebc7226d38bc7f41f0b0d # Parent 30bcdbd9282093a47f940e29b05fcb3dba33cb55 [web session] proper reloading of the session manager on vreg update diff -r 30bcdbd92820 -r 09baf5175196 web/application.py --- a/web/application.py Wed Aug 05 18:18:12 2009 +0200 +++ b/web/application.py Wed Aug 05 18:56:22 2009 +0200 @@ -116,11 +116,20 @@ SESSION_VAR = '__session' def __init__(self, appli): - self.session_manager = appli.vreg['components'].select('sessionmanager') + self.vreg = appli.vreg + self.session_manager = self.vreg['components'].select('sessionmanager') global SESSION_MANAGER SESSION_MANAGER = self.session_manager - if not 'last_login_time' in appli.vreg.schema: + if not 'last_login_time' in self.vreg.schema: self._update_last_login_time = lambda x: None + CW_EVENT_MANAGER.bind('after-registry-reload', self.reset_session_manager) + + def reset_session_manager(self): + data = self.session_manager.dump_data() + self.session_manager = self.vreg['components'].select('sessionmanager') + self.session_manager.restore_data(data) + global SESSION_MANAGER + SESSION_MANAGER = self.session_manager def clean_sessions(self): """cleanup sessions which has not been unused since a given amount of diff -r 30bcdbd92820 -r 09baf5175196 web/views/sessions.py --- a/web/views/sessions.py Wed Aug 05 18:18:12 2009 +0200 +++ b/web/views/sessions.py Wed Aug 05 18:56:22 2009 +0200 @@ -22,6 +22,11 @@ #assert isinstance(self.authmanager, RepositoryAuthenticationManager) self._sessions = {} + def dump_data(self): + return self._sessions + def restore_data(self, data): + self._sessions = data + def current_sessions(self): return self._sessions.values()