From 7a7e55bb200a56d5eb66d8a1454785c98b79dfc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sun, 1 Nov 2015 21:32:41 +0100 Subject: [PATCH] misc: expire old drafts (#8468) --- tests/test_formdata.py | 25 +++++++++++++++++++++++++ wcs/formdef.py | 17 +++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/tests/test_formdata.py b/tests/test_formdata.py index e229e83..e71b074 100644 --- a/tests/test_formdata.py +++ b/tests/test_formdata.py @@ -186,3 +186,28 @@ def test_date_field(pub): pub.cfg['language'] = {'language': 'fr'} assert formdata2.get_substitution_variables()['form_field_date'] == '12/05/2015' pub.cfg['language'] = {'language': 'en'} + +def test_clean_drafts(pub): + formdef = FormDef() + formdef.name = 'foo' + formdef.fields = [] + formdef.store() + formdef.data_class().wipe() + + d = formdef.data_class()() + d.status = 'draft' + d.receipt_time = time.localtime() + d.store() + d_id1 = d.id + + d = formdef.data_class()() + d.status = 'draft' + d.receipt_time = time.localtime(0) # epoch, 1970-01-01 + d.store() + d_id2 = d.id + + assert formdef.data_class().count() == 2 + from wcs.formdef import clean_drafts + clean_drafts(pub) + assert formdef.data_class().count() == 1 + assert formdef.data_class().select()[0].id == d_id1 diff --git a/wcs/formdef.py b/wcs/formdef.py index 803a6f3..f06ac06 100644 --- a/wcs/formdef.py +++ b/wcs/formdef.py @@ -23,10 +23,12 @@ import datetime from qommon.storage import StorableObject from quixote import get_request, get_publisher +from qommon.cron import CronJob from qommon.form import * from qommon.misc import simplify, get_as_datetime from qommon import get_cfg from qommon.substitution import Substitutions +from qommon.publisher import get_publisher_class from formdata import FormData from roles import logged_users_role @@ -1087,3 +1089,18 @@ A form just changed, you can consult it with this link: ''')) Substitutions.register('form_name', category=N_('Form'), comment=N_('Form Name')) + + +def clean_drafts(publisher): + import wcs.qommon.storage as st + removal_date = datetime.date.today() - datetime.timedelta(days=100) + for formdef in FormDef.select(): + for formdata in formdef.data_class().select( + [st.Equal('status', 'draft'), + st.Less('receipt_time', removal_date.timetuple())]): + formdata.remove_self() + +if get_publisher_class(): + # once a month, look for drafts to remove + get_publisher_class().register_cronjob(CronJob(clean_drafts, + days=[2], hours=[0], minutes=[0])) -- 2.6.2