Add bin/expire-submissions script for making sure old submissions are canceled automatically
- Legacy-Id: 6718
This commit is contained in:
parent
650d8316eb
commit
9f1f7790e2
ietf
20
ietf/bin/expire-submissions
Normal file
20
ietf/bin/expire-submissions
Normal file
|
@ -0,0 +1,20 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import datetime, os
|
||||
import syslog
|
||||
|
||||
from ietf import settings
|
||||
from django.core import management
|
||||
management.setup_environ(settings)
|
||||
|
||||
syslog.openlog(os.path.basename(__file__), syslog.LOG_PID, syslog.LOG_USER)
|
||||
|
||||
from ietf.person.models import Person
|
||||
from ietf.submit.utils import expirable_submissions, expire_submission
|
||||
|
||||
system = Person.objects.get(name="(System)")
|
||||
|
||||
for sub in expirable_submissions(older_than_days=30):
|
||||
expire_submission(sub, system)
|
||||
|
||||
syslog.syslog("Expired submission %s of %s-%s" % (sub.pk, sub.name, sub.rev))
|
|
@ -14,6 +14,8 @@ from ietf.utils.test_utils import login_testing_unauthorized
|
|||
from ietf.utils.test_data import make_test_data
|
||||
from ietf.utils.mail import outbox
|
||||
|
||||
from ietf.submit.utils import expirable_submissions, expire_submission
|
||||
|
||||
from ietf.person.models import Person, Email
|
||||
from ietf.group.models import Group, Role
|
||||
from ietf.doc.models import *
|
||||
|
@ -523,6 +525,33 @@ class SubmitTests(django.test.TestCase):
|
|||
self.assertTrue(os.path.exists(os.path.join(self.staging_dir, u"%s-%s.ps" % (name, rev))))
|
||||
self.assertTrue('This is PostScript' in open(os.path.join(self.staging_dir, u"%s-%s.ps" % (name, rev))).read())
|
||||
|
||||
def test_expire_submissions(self):
|
||||
s = Submission.objects.create(name="draft-ietf-mars-foo",
|
||||
group=None,
|
||||
submission_date=datetime.date.today() - datetime.timedelta(days=10),
|
||||
rev="00",
|
||||
state_id="uploaded")
|
||||
|
||||
self.assertEqual(len(expirable_submissions(older_than_days=10)), 0)
|
||||
self.assertEqual(len(expirable_submissions(older_than_days=9)), 1)
|
||||
|
||||
s.state_id = "cancel"
|
||||
s.save()
|
||||
|
||||
self.assertEqual(len(expirable_submissions(older_than_days=9)), 0)
|
||||
|
||||
s.state_id = "posted"
|
||||
s.save()
|
||||
|
||||
self.assertEqual(len(expirable_submissions(older_than_days=9)), 0)
|
||||
|
||||
s.state_id = "uploaded"
|
||||
s.save()
|
||||
|
||||
expire_submission(s, by=None)
|
||||
|
||||
self.assertEqual(s.state_id, "cancel")
|
||||
|
||||
|
||||
class ApprovalsTests(django.test.TestCase):
|
||||
def test_approvals(self):
|
||||
|
@ -535,17 +564,15 @@ class ApprovalsTests(django.test.TestCase):
|
|||
Preapproval.objects.create(name="draft-ietf-mars-baz", by=Person.objects.get(user__username="marschairman"))
|
||||
|
||||
Submission.objects.create(name="draft-ietf-mars-foo",
|
||||
group_id=Group.objects.get(acronym="mars").pk,
|
||||
submission_date=datetime.date.today(),
|
||||
rev="00",
|
||||
state_id="posted",
|
||||
access_key="abc")
|
||||
group=Group.objects.get(acronym="mars"),
|
||||
submission_date=datetime.date.today(),
|
||||
rev="00",
|
||||
state_id="posted")
|
||||
Submission.objects.create(name="draft-ietf-mars-bar",
|
||||
group_id=Group.objects.get(acronym="mars").pk,
|
||||
submission_date=datetime.date.today(),
|
||||
rev="00",
|
||||
state_id="grp-appr",
|
||||
access_key="def")
|
||||
group=Group.objects.get(acronym="mars"),
|
||||
submission_date=datetime.date.today(),
|
||||
rev="00",
|
||||
state_id="grp-appr")
|
||||
|
||||
# get
|
||||
r = self.client.get(url)
|
||||
|
|
|
@ -350,3 +350,13 @@ def recently_approved_by_user(user, since):
|
|||
|
||||
# those we can reach as chair
|
||||
return res.filter(group__role__name="chair", group__role__person__user=user)
|
||||
|
||||
def expirable_submissions(older_than_days):
|
||||
cutoff = datetime.date.today() - datetime.timedelta(days=older_than_days)
|
||||
return Submission.objects.exclude(state__in=("cancel", "posted")).filter(submission_date__lt=cutoff)
|
||||
|
||||
def expire_submission(submission, by):
|
||||
submission.state_id = "cancel"
|
||||
submission.save()
|
||||
|
||||
SubmissionEvent.objects.create(submission=submission, by=by, desc="Canceled expired submission")
|
||||
|
|
Loading…
Reference in a new issue