Skip to content

Commit 9f1f779

Browse files
committed
Add bin/expire-submissions script for making sure old submissions are canceled automatically
- Legacy-Id: 6718
1 parent 650d831 commit 9f1f779

3 files changed

Lines changed: 67 additions & 10 deletions

File tree

ietf/bin/expire-submissions

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/usr/bin/env python
2+
3+
import datetime, os
4+
import syslog
5+
6+
from ietf import settings
7+
from django.core import management
8+
management.setup_environ(settings)
9+
10+
syslog.openlog(os.path.basename(__file__), syslog.LOG_PID, syslog.LOG_USER)
11+
12+
from ietf.person.models import Person
13+
from ietf.submit.utils import expirable_submissions, expire_submission
14+
15+
system = Person.objects.get(name="(System)")
16+
17+
for sub in expirable_submissions(older_than_days=30):
18+
expire_submission(sub, system)
19+
20+
syslog.syslog("Expired submission %s of %s-%s" % (sub.pk, sub.name, sub.rev))

ietf/submit/tests.py

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from ietf.utils.test_data import make_test_data
1515
from ietf.utils.mail import outbox
1616

17+
from ietf.submit.utils import expirable_submissions, expire_submission
18+
1719
from ietf.person.models import Person, Email
1820
from ietf.group.models import Group, Role
1921
from ietf.doc.models import *
@@ -523,6 +525,33 @@ def test_submit_all_file_types(self):
523525
self.assertTrue(os.path.exists(os.path.join(self.staging_dir, u"%s-%s.ps" % (name, rev))))
524526
self.assertTrue('This is PostScript' in open(os.path.join(self.staging_dir, u"%s-%s.ps" % (name, rev))).read())
525527

528+
def test_expire_submissions(self):
529+
s = Submission.objects.create(name="draft-ietf-mars-foo",
530+
group=None,
531+
submission_date=datetime.date.today() - datetime.timedelta(days=10),
532+
rev="00",
533+
state_id="uploaded")
534+
535+
self.assertEqual(len(expirable_submissions(older_than_days=10)), 0)
536+
self.assertEqual(len(expirable_submissions(older_than_days=9)), 1)
537+
538+
s.state_id = "cancel"
539+
s.save()
540+
541+
self.assertEqual(len(expirable_submissions(older_than_days=9)), 0)
542+
543+
s.state_id = "posted"
544+
s.save()
545+
546+
self.assertEqual(len(expirable_submissions(older_than_days=9)), 0)
547+
548+
s.state_id = "uploaded"
549+
s.save()
550+
551+
expire_submission(s, by=None)
552+
553+
self.assertEqual(s.state_id, "cancel")
554+
526555

527556
class ApprovalsTests(django.test.TestCase):
528557
def test_approvals(self):
@@ -535,17 +564,15 @@ def test_approvals(self):
535564
Preapproval.objects.create(name="draft-ietf-mars-baz", by=Person.objects.get(user__username="marschairman"))
536565

537566
Submission.objects.create(name="draft-ietf-mars-foo",
538-
group_id=Group.objects.get(acronym="mars").pk,
539-
submission_date=datetime.date.today(),
540-
rev="00",
541-
state_id="posted",
542-
access_key="abc")
567+
group=Group.objects.get(acronym="mars"),
568+
submission_date=datetime.date.today(),
569+
rev="00",
570+
state_id="posted")
543571
Submission.objects.create(name="draft-ietf-mars-bar",
544-
group_id=Group.objects.get(acronym="mars").pk,
545-
submission_date=datetime.date.today(),
546-
rev="00",
547-
state_id="grp-appr",
548-
access_key="def")
572+
group=Group.objects.get(acronym="mars"),
573+
submission_date=datetime.date.today(),
574+
rev="00",
575+
state_id="grp-appr")
549576

550577
# get
551578
r = self.client.get(url)

ietf/submit/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,3 +350,13 @@ def recently_approved_by_user(user, since):
350350

351351
# those we can reach as chair
352352
return res.filter(group__role__name="chair", group__role__person__user=user)
353+
354+
def expirable_submissions(older_than_days):
355+
cutoff = datetime.date.today() - datetime.timedelta(days=older_than_days)
356+
return Submission.objects.exclude(state__in=("cancel", "posted")).filter(submission_date__lt=cutoff)
357+
358+
def expire_submission(submission, by):
359+
submission.state_id = "cancel"
360+
submission.save()
361+
362+
SubmissionEvent.objects.create(submission=submission, by=by, desc="Canceled expired submission")

0 commit comments

Comments
 (0)