1616import datetime , re , itertools
1717from collections import namedtuple
1818from django .db import connections
19- from ietf .review .models import (ReviewRequest , ReviewerSettings , ReviewResultName ,
20- ReviewRequestStateName , ReviewTypeName , ReviewTeamResult ,
19+ from ietf .review .models import (ReviewRequest , ReviewerSettings , ReviewResultName , ResultUsedInReviewTeam ,
20+ ReviewRequestStateName , ReviewTypeName , TypeUsedInReviewTeam ,
2121 UnavailablePeriod , NextReviewerInTeam )
2222from ietf .group .models import Group , Role , RoleName
2323from ietf .person .models import Person , Email , Alias
@@ -129,6 +129,10 @@ def parse_timestamp(t):
129129 today = datetime .date .today ()
130130 end_date = unavailable_until .date ()
131131 if end_date >= today :
132+ if end_date >= datetime .date (2020 , 1 , 1 ):
133+ # convert hacked end dates to indefinite
134+ end_date = None
135+
132136 UnavailablePeriod .objects .filter (person = email .person , team = team ).delete ()
133137
134138 UnavailablePeriod .objects .create (
@@ -162,7 +166,10 @@ def parse_timestamp(t):
162166 summaries = [v .strip ().lower () for v in row .value .split (";" ) if v .strip ()]
163167
164168 for s in summaries :
165- ReviewTeamResult .objects .get_or_create (team = team , result = results [s ])
169+ ResultUsedInReviewTeam .objects .get_or_create (team = team , result = results [s ])
170+
171+ for t in ReviewTypeName .objects .filter (slug__in = ["early" , "lc" , "telechat" ]):
172+ TypeUsedInReviewTeam .objects .get_or_create (team = team , type = t )
166173
167174# review requests
168175
@@ -186,8 +193,8 @@ def parse_timestamp(t):
186193
187194requested_re = re .compile ("(?:ADDED docname =>|Created: remote=|AUTO UPDATED status TO new|CHANGED status FROM [^ ]+ => new|CHANGE status done => working)" )
188195
189- add_docstatus_re = re .compile ('([a-zA-Z-_]+) ADD docstatus => (\w+)' )
190- update_docstatus_re = re .compile ('([a-zA-Z-_]+) (?:UPDATE|CHANGE) docstatus \w+ => (\w+)' )
196+ add_docstatus_re = re .compile ('([a-zA-Z-_@. ]+) ADD docstatus => (\w+)' )
197+ update_docstatus_re = re .compile ('([a-zA-Z-_@. ]+) (?:UPDATE|CHANGE) docstatus \w+ => (\w+)' )
191198iesgstatus_re = re .compile ('(?:ADD|ADDED|CHANGED) iesgstatus (?:FROM )?(?:[^ ]+ )?=> ([a-zA-Z-_]+)?' )
192199
193200deadline_re = re .compile ('(?:ADD|ADDED|CHANGED) deadline (?:FROM )?(?:[^ ]+ )?=> ([1-9][0-9]+)' )
@@ -196,6 +203,8 @@ def parse_timestamp(t):
196203
197204close_states = ["done" , "rejected" , "withdrawn" , "noresponse" ]
198205
206+ document_blacklist = set ([(u"tsvdir" , u"draft-arkko-ipv6-transition-guidelines-09 " )])
207+
199208with db_con .cursor () as c :
200209 c .execute ("""select docname, time, who, text from doclog where
201210 text like 'Created: remote=%'
@@ -214,6 +223,9 @@ def parse_timestamp(t):
214223 or text like '%CHANGED iesgstatus % => %'
215224 order by docname, time asc;""" )
216225 for docname , rows in itertools .groupby (namedtuplefetchall (c ), lambda row : row .docname ):
226+ if (team .acronym , docname ) in document_blacklist :
227+ continue # ignore
228+
217229 branches = {}
218230
219231 latest_requested = None
@@ -233,12 +245,12 @@ def parse_timestamp(t):
233245 else :
234246 if "ADD docstatus" in row .text :
235247 m = add_docstatus_re .match (row .text )
236- assert m , 'row.text "{}" does not match add regexp' .format (row .text )
248+ assert m , 'row.text "{}" does not match add regexp {} ' .format (row .text , docname )
237249 membername , state = m .groups ()
238250 used = True
239251 elif "UPDATE docstatus" in row .text or "CHANGE docstatus" in row .text :
240252 m = update_docstatus_re .match (row .text )
241- assert m , 'row.text "{}" does not match update regexp' .format (row .text )
253+ assert m , 'row.text "{}" does not match update regexp {} ' .format (row .text , docname )
242254 membername , state = m .groups ()
243255 used = True
244256
@@ -332,6 +344,9 @@ def parse_timestamp(t):
332344 c .execute ("select * from reviews order by reviewid;" )
333345
334346 for row in namedtuplefetchall (c ):
347+ if (team .acronym , row .docname ) in document_blacklist :
348+ continue # ignore
349+
335350 meta = doc_metadata .get ((row .docname , row .version ))
336351 if not meta :
337352 meta = doc_metadata .get (row .docname )
@@ -345,7 +360,7 @@ def parse_timestamp(t):
345360 if row .summary == "noresponse" :
346361 reviewed_rev = ""
347362
348- event_collection = None
363+ event_collection = {}
349364 branches = document_history .get (row .docname )
350365 if not branches :
351366 print "WARNING: no history for" , row .docname
0 commit comments