Skip to content

Commit 4265427

Browse files
committed
Turn ReviewRequest.deadline into a date field with no time
- Legacy-Id: 11801
1 parent 3ecaf54 commit 4265427

15 files changed

Lines changed: 53 additions & 92 deletions

ietf/doc/tests_review.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import debug # pyflakes:ignore
1414

15-
from ietf.review.models import ReviewRequest, ReviewTeamResult, Reviewer
15+
from ietf.review.models import ReviewRequest, ReviewTeamResult, ReviewerSettings
1616
import ietf.review.mailarch
1717
from ietf.person.models import Email, Person
1818
from ietf.name.models import ReviewResultName, ReviewRequestStateName, ReviewTypeName
@@ -51,21 +51,20 @@ def test_request_review(self):
5151
r = self.client.get(url)
5252
self.assertEqual(r.status_code, 200)
5353

54-
deadline_date = datetime.date.today() + datetime.timedelta(days=10)
54+
deadline = datetime.date.today() + datetime.timedelta(days=10)
5555

5656
# post request
5757
r = self.client.post(url, {
5858
"type": "early",
5959
"team": review_team.pk,
60-
"deadline_date": deadline_date.isoformat(),
60+
"deadline": deadline.isoformat(),
6161
"requested_rev": "01",
6262
"requested_by": Person.objects.get(user__username="plain").pk,
6363
})
6464
self.assertEqual(r.status_code, 302)
6565

6666
req = ReviewRequest.objects.get(doc=doc, state="requested")
67-
self.assertEqual(req.deadline.date(), deadline_date)
68-
self.assertEqual(req.deadline.time(), datetime.time(23, 59, 59))
67+
self.assertEqual(req.deadline, deadline)
6968
self.assertEqual(req.team, review_team)
7069
self.assertEqual(req.requested_rev, "01")
7170
self.assertEqual(doc.latest_event().type, "requested_review")
@@ -146,14 +145,14 @@ def test_assign_reviewer(self):
146145
team=review_req.team,
147146
state=ReviewRequestStateName.objects.get(slug="completed"),
148147
reviewed_rev="01",
149-
deadline=datetime.datetime.now() - datetime.timedelta(days=80),
148+
deadline=datetime.date.today() - datetime.timedelta(days=80),
150149
reviewer=plain_email,
151150
)
152151

153-
reviewer_obj = Reviewer.objects.get(person__email=plain_email)
154-
reviewer_obj.filter_re = doc.name
155-
reviewer_obj.unavailable_until = datetime.datetime.now() + datetime.timedelta(days=10)
156-
reviewer_obj.save()
152+
reviewer_settings = ReviewerSettings.objects.get(person__email=plain_email)
153+
reviewer_settings.filter_re = doc.name
154+
reviewer_settings.unavailable_until = datetime.datetime.now() + datetime.timedelta(days=10)
155+
reviewer_settings.save()
157156

158157
assign_url = urlreverse('ietf.doc.views_review.assign_reviewer', kwargs={ "name": doc.name, "request_id": review_req.pk })
159158

ietf/doc/views_review.py

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ def clean_doc_revision(doc, rev):
3737

3838
class RequestReviewForm(forms.ModelForm):
3939
team = forms.ModelMultipleChoiceField(queryset=Group.objects.all(), widget=forms.CheckboxSelectMultiple)
40-
deadline_date = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={ "autoclose": "1", "start-date": "+0d" })
41-
deadline_time = forms.TimeField(widget=forms.TextInput(attrs={ 'placeholder': "HH:MM" }), help_text="If time is not specified, end of day is assumed", required=False)
40+
deadline = DatepickerDateField(date_format="yyyy-mm-dd", picker_settings={ "autoclose": "1", "start-date": "+0d" })
4241

4342
class Meta:
4443
model = ReviewRequest
@@ -59,7 +58,6 @@ def __init__(self, user, doc, *args, **kwargs):
5958

6059
f.initial = [group.pk for group in f.queryset if can_manage_review_requests_for_team(user, group, allow_non_team_personnel=False)]
6160

62-
self.fields["deadline"].required = False
6361
self.fields["requested_rev"].label = "Document revision"
6462

6563
if has_role(user, "Secretariat"):
@@ -68,27 +66,15 @@ def __init__(self, user, doc, *args, **kwargs):
6866
self.fields["requested_by"].widget = forms.HiddenInput()
6967
self.fields["requested_by"].initial = user.person.pk
7068

71-
def clean_deadline_date(self):
72-
v = self.cleaned_data.get('deadline_date')
69+
def clean_deadline(self):
70+
v = self.cleaned_data.get('deadline')
7371
if v < datetime.date.today():
7472
raise forms.ValidationError("Select today or a date in the future.")
7573
return v
7674

7775
def clean_requested_rev(self):
7876
return clean_doc_revision(self.doc, self.cleaned_data.get("requested_rev"))
7977

80-
def clean(self):
81-
deadline_date = self.cleaned_data.get('deadline_date')
82-
deadline_time = self.cleaned_data.get('deadline_time', None)
83-
84-
if deadline_date:
85-
if deadline_time is None:
86-
deadline_time = datetime.time(23, 59, 59)
87-
88-
self.cleaned_data["deadline"] = datetime.datetime.combine(deadline_date, deadline_time)
89-
90-
return self.cleaned_data
91-
9278
@login_required
9379
def request_review(request, name):
9480
doc = get_object_or_404(Document, name=name)

ietf/group/tests_review.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def test_manage_review_requests(self):
8787
doc=review_req1.doc,
8888
team=review_req1.team,
8989
type_id="early",
90-
deadline=datetime.datetime.combine(datetime.date.today() + datetime.timedelta(days=30), datetime.time(23, 59, 59)),
90+
deadline=datetime.date.today() + datetime.timedelta(days=30),
9191
state_id="accepted",
9292
reviewer=review_req1.reviewer,
9393
requested_by=Person.objects.get(user__username="plain"),
@@ -97,7 +97,7 @@ def test_manage_review_requests(self):
9797
doc=review_req1.doc,
9898
team=review_req1.team,
9999
type_id="early",
100-
deadline=datetime.datetime.combine(datetime.date.today() + datetime.timedelta(days=30), datetime.time(23, 59, 59)),
100+
deadline=datetime.date.today() + datetime.timedelta(days=30),
101101
state_id="requested",
102102
requested_by=Person.objects.get(user__username="plain"),
103103
)

ietf/group/views.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -653,10 +653,10 @@ def review_requests(request, acronym, group_type=None):
653653

654654
open_review_requests += suggested_review_requests_for_team(group)
655655

656-
now = datetime.datetime.now()
656+
today = datetime.date.today()
657657
for r in open_review_requests:
658-
delta = now - r.deadline
659-
r.due = max(0, int(math.ceil(delta.total_seconds() / 3600.0)))
658+
delta = today - r.deadline
659+
r.due = max(0, delta.days())
660660

661661
closed_review_requests = ReviewRequest.objects.filter(
662662
team=group,

ietf/review/import_from_review_tool.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import datetime
1717
from collections import namedtuple
1818
from django.db import connections
19-
from ietf.review.models import ReviewRequest, Reviewer, ReviewResultName
19+
from ietf.review.models import ReviewRequest, ReviewerSettings, ReviewResultName
2020
from ietf.review.models import ReviewRequestStateName, ReviewTypeName, ReviewTeamResult
2121
from ietf.group.models import Group, Role, RoleName
2222
from ietf.person.models import Person, Email, Alias
@@ -105,7 +105,7 @@ def parse_timestamp(t):
105105
if created:
106106
print "created role", unicode(role).encode("utf-8")
107107

108-
reviewer, created = Reviewer.objects.get_or_create(
108+
reviewer, created = ReviewerSettings.objects.get_or_create(
109109
team=team,
110110
person=email.person,
111111
)
@@ -217,7 +217,7 @@ def parse_timestamp(t):
217217
defaults={
218218
"state": states["requested"],
219219
"type": type_name,
220-
"deadline": deadline,
220+
"deadline": deadline.date(),
221221
"requested_by": system_person,
222222
}
223223
)
@@ -228,7 +228,7 @@ def parse_timestamp(t):
228228
req.type = type_name
229229
req.time = time
230230
req.reviewed_rev = reviewed_rev
231-
req.deadline = deadline
231+
req.deadline = deadline.date()
232232
req.save()
233233

234234
# FIXME: add log entries

ietf/review/migrations/0001_initial.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,24 @@
22
from __future__ import unicode_literals
33

44
from django.db import models, migrations
5+
import datetime
56

67

78
class Migration(migrations.Migration):
89

910
dependencies = [
10-
('name', '0012_insert_review_name_data'),
11+
('name', '0013_auto_20160623_0621'),
1112
('group', '0008_auto_20160505_0523'),
1213
('person', '0014_auto_20160613_0751'),
1314
('doc', '0012_auto_20160207_0537'),
1415
]
1516

1617
operations = [
1718
migrations.CreateModel(
18-
name='Reviewer',
19+
name='ReviewerSettings',
1920
fields=[
2021
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
21-
('frequency', models.IntegerField(default=30, help_text=b'Can review every N days')),
22+
('frequency', models.IntegerField(default=30, help_text=b'Can review every N days', choices=[(7, b'Once per week'), (14, b'Once per fortnight'), (30, b'Once per month'), (61, b'Once per two months'), (91, b'Once per quarter')])),
2223
('unavailable_until', models.DateTimeField(help_text=b'When will this reviewer be available again', null=True, blank=True)),
2324
('filter_re', models.CharField(max_length=255, blank=True)),
2425
('skip_next', models.IntegerField(default=0, help_text=b'Skip the next N review assignments')),
@@ -34,15 +35,15 @@ class Migration(migrations.Migration):
3435
fields=[
3536
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
3637
('old_id', models.IntegerField(help_text=b'ID in previous review system', null=True, blank=True)),
37-
('time', models.DateTimeField(auto_now_add=True)),
38-
('deadline', models.DateTimeField()),
38+
('time', models.DateTimeField(default=datetime.datetime.now)),
39+
('deadline', models.DateField()),
3940
('requested_rev', models.CharField(help_text=b'Fill in if a specific revision is to be reviewed, e.g. 02', max_length=16, verbose_name=b'requested revision', blank=True)),
4041
('reviewed_rev', models.CharField(max_length=16, verbose_name=b'reviewed revision', blank=True)),
4142
('doc', models.ForeignKey(related_name='review_request_set', to='doc.Document')),
43+
('requested_by', models.ForeignKey(to='person.Person')),
4244
('result', models.ForeignKey(blank=True, to='name.ReviewResultName', null=True)),
4345
('review', models.OneToOneField(null=True, blank=True, to='doc.Document')),
4446
('reviewer', models.ForeignKey(blank=True, to='person.Email', null=True)),
45-
('requested_by', models.ForeignKey(to='person.Person')),
4647
('state', models.ForeignKey(to='name.ReviewRequestStateName')),
4748
('team', models.ForeignKey(to='group.Group')),
4849
('type', models.ForeignKey(to='name.ReviewTypeName')),

ietf/review/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from ietf.person.models import Person, Email
88
from ietf.name.models import ReviewTypeName, ReviewRequestStateName, ReviewResultName
99

10-
class Reviewer(models.Model):
10+
class ReviewerSettings(models.Model):
1111
"""Keeps track of admin data associated with the reviewer in the
1212
particular team. There will be one record for each combination of
1313
reviewer and team."""
@@ -50,7 +50,7 @@ class ReviewRequest(models.Model):
5050
type = models.ForeignKey(ReviewTypeName)
5151
doc = models.ForeignKey(Document, related_name='review_request_set')
5252
team = models.ForeignKey(Group, limit_choices_to=~models.Q(reviewteamresult=None))
53-
deadline = models.DateTimeField()
53+
deadline = models.DateField()
5454
requested_by = models.ForeignKey(Person)
5555
requested_rev = models.CharField(verbose_name="requested revision", max_length=16, blank=True, help_text="Fill in if a specific revision is to be reviewed, e.g. 02")
5656

ietf/review/resources.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@
77
from ietf import api
88
from ietf.api import ToOneField # pyflakes:ignore
99

10-
from ietf.review.models import Reviewer, ReviewRequest, ReviewTeamResult
10+
from ietf.review.models import ReviewerSettings, ReviewRequest, ReviewTeamResult
1111

1212

1313
from ietf.person.resources import PersonResource
1414
from ietf.group.resources import GroupResource
15-
class ReviewerResource(ModelResource):
15+
class ReviewerSettingsResource(ModelResource):
1616
team = ToOneField(GroupResource, 'team')
1717
person = ToOneField(PersonResource, 'person')
1818
class Meta:
19-
queryset = Reviewer.objects.all()
19+
queryset = ReviewerSettings.objects.all()
2020
serializer = api.Serializer()
2121
cache = SimpleCache()
2222
#resource_name = 'reviewer'
@@ -29,7 +29,7 @@ class Meta:
2929
"team": ALL_WITH_RELATIONS,
3030
"person": ALL_WITH_RELATIONS,
3131
}
32-
api.review.register(ReviewerResource())
32+
api.review.register(ReviewerSettingsResource())
3333

3434
from ietf.doc.resources import DocumentResource
3535
from ietf.group.resources import RoleResource, GroupResource

ietf/review/utils.py

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from ietf.iesg.models import TelechatDate
1010
from ietf.person.models import Person, Email
1111
from ietf.ietfauth.utils import has_role, is_authorized_in_doc_stream
12-
from ietf.review.models import ReviewRequest, ReviewRequestStateName, ReviewTypeName, Reviewer
12+
from ietf.review.models import ReviewRequest, ReviewRequestStateName, ReviewTypeName, ReviewerSettings
1313
from ietf.utils.mail import send_mail
1414
from ietf.doc.utils import extract_complete_replaces_ancestor_mapping_for_docs
1515

@@ -151,11 +151,6 @@ def close_review_request(request, review_req, close_state):
151151
by=request.user.person, notify_secretary=False, notify_reviewer=True, notify_requested_by=True)
152152

153153
def suggested_review_requests_for_team(team):
154-
def fixup_deadline(d):
155-
if d.time() == datetime.time(0):
156-
d = d - datetime.timedelta(seconds=1) # 23:59:59 is treated specially in the view code
157-
return d
158-
159154
system_person = Person.objects.get(name="(System)")
160155

161156
seen_deadlines = {}
@@ -170,9 +165,9 @@ def fixup_deadline(d):
170165
last_call_docs = Document.objects.filter(states=State.objects.get(type="draft-iesg", slug="lc", used=True))
171166
last_call_expires = { e.doc_id: e.expires for e in LastCallDocEvent.objects.order_by("time", "id") }
172167
for doc in last_call_docs:
173-
deadline = fixup_deadline(last_call_expires.get(doc.pk)) if doc.pk in last_call_expires else datetime.datetime.now()
168+
deadline = last_call_expires[doc.pk].date() if doc.pk in last_call_expires else datetime.date.today()
174169

175-
if deadline > seen_deadlines.get(doc.pk, datetime.datetime.max):
170+
if deadline > seen_deadlines.get(doc.pk, datetime.date.max):
176171
continue
177172

178173
requests[doc.pk] = ReviewRequest(
@@ -200,9 +195,9 @@ def fixup_deadline(d):
200195
if d not in telechat_dates:
201196
continue
202197

203-
deadline = datetime.datetime.combine(d - telechat_deadline_delta, datetime.time(23, 59, 59))
198+
deadline = d - telechat_deadline_delta
204199

205-
if deadline > seen_deadlines.get(doc.pk, datetime.datetime.max):
200+
if deadline > seen_deadlines.get(doc.pk, datetime.date.max):
206201
continue
207202

208203
requests[doc.pk] = ReviewRequest(
@@ -302,7 +297,7 @@ def make_assignment_choices(email_queryset, review_req):
302297

303298
aliases = DocAlias.objects.filter(document=doc).values_list("name", flat=True)
304299

305-
reviewers = { r.person_id: r for r in Reviewer.objects.filter(team=team, person__in=[e.person_id for e in possible_emails]) }
300+
reviewers = { r.person_id: r for r in ReviewerSettings.objects.filter(team=team, person__in=[e.person_id for e in possible_emails]) }
306301

307302
# time since past assignment
308303
latest_assignment_for_reviewer = dict(ReviewRequest.objects.filter(
@@ -347,7 +342,7 @@ def add_boolean_score(scores, direction, expr, expl):
347342
for e in possible_emails:
348343
reviewer = reviewers.get(e.person_id)
349344
if not reviewer:
350-
reviewer = Reviewer()
345+
reviewer = ReviewerSettings()
351346

352347
explanations = []
353348
scores = [] # build up score in separate independent components

ietf/templates/doc/mail/review_request_changed.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{% autoescape off %}
22
{{ review_req.type.name }} review of: {{ review_req.doc.name }} ({% if review_req.requested_rev %}rev. {{ review_req.requested_rev }}{% else %}no specific version{% endif %})
3-
Deadline: {% if review_req.deadline|date:"H:i" != "23:59" %}{{ review_req.deadline|date:"Y-m-d H:i" }}{% else %}{{ review_req.deadline|date:"Y-m-d" }}{% endif %}
3+
Deadline: {{ review_req.deadline|date:"Y-m-d" }}
44

55
{{ review_req_url }}
66

0 commit comments

Comments
 (0)