51
51
from django .contrib .auth .decorators import login_required
52
52
from django .db .models import Count , F , OuterRef , Prefetch , Q , Subquery , TextField , Value
53
53
from django .db .models .functions import Coalesce
54
- from django .http import HttpResponse , HttpResponseRedirect , Http404 , JsonResponse
54
+ from django .http import (
55
+ HttpResponse ,
56
+ HttpResponseRedirect ,
57
+ Http404 ,
58
+ JsonResponse ,
59
+ HttpResponseBadRequest ,
60
+ )
55
61
from django .shortcuts import render , redirect , get_object_or_404
56
62
from django .template .loader import render_to_string
57
63
from django .urls import reverse as urlreverse
96
102
from ietf .review .policies import get_reviewer_queue_policy
97
103
from ietf .review .utils import (can_manage_review_requests_for_team ,
98
104
can_access_review_stats_for_team ,
99
-
100
105
extract_revision_ordered_review_requests_for_documents_and_replaced ,
101
106
assign_review_request_to_reviewer ,
102
107
close_review_request ,
103
-
104
108
suggested_review_requests_for_team ,
105
109
unavailable_periods_to_list ,
106
110
current_unavailable_periods_for_reviewers ,
@@ -686,13 +690,30 @@ def history(request, acronym, group_type=None):
686
690
"can_add_comment" : can_add_comment ,
687
691
}))
688
692
693
+
694
+ class RequestsHistoryParamsForm (forms .Form ):
695
+ SINCE_CHOICES = (
696
+ (None , "1 month" ),
697
+ ("3m" , "3 months" ),
698
+ ("6m" , "6 months" ),
699
+ ("1y" , "1 year" ),
700
+ ("2y" , "2 years" ),
701
+ ("all" , "All" ),
702
+ )
703
+
704
+ reviewer_email = forms .EmailField (required = False )
705
+ since = forms .ChoiceField (choices = SINCE_CHOICES , required = False )
706
+
689
707
def review_requests_history (request , acronym , group_type = None ):
690
708
group = get_group_or_404 (acronym , group_type )
691
709
if not group .features .has_reviews :
692
710
raise Http404
693
711
694
- reviewer_email = request .GET .get ("reviewer_email" , None )
712
+ params = RequestsHistoryParamsForm (request .GET )
713
+ if not params .is_valid ():
714
+ return HttpResponseBadRequest ("Invalid parameters" )
695
715
716
+ reviewer_email = params .cleaned_data ["reviewer_email" ] or None
696
717
if reviewer_email :
697
718
history = ReviewAssignment .history .model .objects .filter (
698
719
review_request__team__acronym = acronym ,
@@ -702,19 +723,7 @@ def review_requests_history(request, acronym, group_type=None):
702
723
review_request__team__acronym = acronym )
703
724
reviewer_email = ''
704
725
705
- since_choices = [
706
- (None , "1 month" ),
707
- ("3m" , "3 months" ),
708
- ("6m" , "6 months" ),
709
- ("1y" , "1 year" ),
710
- ("2y" , "2 years" ),
711
- ("all" , "All" ),
712
- ]
713
- since = request .GET .get ("since" , None )
714
-
715
- if since not in [key for key , label in since_choices ]:
716
- since = None
717
-
726
+ since = params .cleaned_data ["since" ] or None
718
727
if since != "all" :
719
728
date_limit = {
720
729
None : datetime .timedelta (days = 31 ),
@@ -731,7 +740,7 @@ def review_requests_history(request, acronym, group_type=None):
731
740
"group" : group ,
732
741
"acronym" : acronym ,
733
742
"history" : history ,
734
- "since_choices" : since_choices ,
743
+ "since_choices" : params . SINCE_CHOICES ,
735
744
"since" : since ,
736
745
"reviewer_email" : reviewer_email
737
746
}))
0 commit comments