diff -r 9767cc516b4f -r 083b4d454192 hooks/__init__.py --- a/hooks/__init__.py Wed Mar 10 16:07:24 2010 +0100 +++ b/hooks/__init__.py Mon Mar 01 11:26:14 2010 +0100 @@ -1,1 +1,36 @@ -"""core hooks""" +"""core hooks + +:organization: Logilab +:copyright: 2009-2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2. +:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr +:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses +""" +__docformat__ = "restructuredtext en" + +from datetime import timedelta, datetime +from cubicweb.server import hook + +class ServerStartupHook(hook.Hook): + """task to cleanup expirated auth cookie entities""" + __regid__ = 'cw_cleanup_transactions' + events = ('server_startup',) + + def __call__(self): + # XXX use named args and inner functions to avoid referencing globals + # which may cause reloading pb + lifetime = timedelta(days=self.repo.config['keep-transaction-lifetime']) + def cleanup_old_transactions(repo=self.repo, lifetime=lifetime): + mindate = datetime.now() - lifetime + session = repo.internal_session() + try: + session.system_sql( + 'DELETE FROM transaction WHERE tx_time < %(time)s', + {'time': mindate}) + # cleanup deleted entities + session.system_sql( + 'DELETE FROM deleted_entities WHERE dtime < %(time)s', + {'time': mindate}) + session.commit() + finally: + session.close() + self.repo.looping_task(60*60*24, cleanup_old_transactions, self.repo)