hooks/__init__.py
changeset 4913 083b4d454192
parent 2835 04034421b072
child 5101 0d01acee1f0a
equal deleted inserted replaced
4912:9767cc516b4f 4913:083b4d454192
     1 """core hooks"""
     1 """core hooks
       
     2 
       
     3 :organization: Logilab
       
     4 :copyright: 2009-2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.
       
     5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
       
     6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
       
     7 """
       
     8 __docformat__ = "restructuredtext en"
       
     9 
       
    10 from datetime import timedelta, datetime
       
    11 from cubicweb.server import hook
       
    12 
       
    13 class ServerStartupHook(hook.Hook):
       
    14     """task to cleanup expirated auth cookie entities"""
       
    15     __regid__ = 'cw_cleanup_transactions'
       
    16     events = ('server_startup',)
       
    17 
       
    18     def __call__(self):
       
    19         # XXX use named args and inner functions to avoid referencing globals
       
    20         # which may cause reloading pb
       
    21         lifetime = timedelta(days=self.repo.config['keep-transaction-lifetime'])
       
    22         def cleanup_old_transactions(repo=self.repo, lifetime=lifetime):
       
    23             mindate = datetime.now() - lifetime
       
    24             session = repo.internal_session()
       
    25             try:
       
    26                 session.system_sql(
       
    27                     'DELETE FROM transaction WHERE tx_time < %(time)s',
       
    28                     {'time': mindate})
       
    29                 # cleanup deleted entities
       
    30                 session.system_sql(
       
    31                     'DELETE FROM deleted_entities WHERE dtime < %(time)s',
       
    32                     {'time': mindate})
       
    33                 session.commit()
       
    34             finally:
       
    35                 session.close()
       
    36         self.repo.looping_task(60*60*24, cleanup_old_transactions, self.repo)