@@ -53,7 +53,7 @@ def file_type(self):
5353 for t in possible_types :
5454 if m .endswith (t ):
5555 res .add (t )
56- return "," .join (res )
56+ return "," .join (res ) or ".txt"
5757 #txt_page_count = models.IntegerField()
5858 @property
5959 def txt_page_count (self ):
@@ -113,7 +113,7 @@ def b_sent_date(self):
113113 @property
114114 def b_approve_date (self ):
115115 e = self .latest_event (type = "iesg_approved" )
116- return e .time if e else None
116+ return e .time . date () if e else None
117117
118118 #wgreturn_date = models.DateField(null=True, blank=True) # unused
119119
@@ -148,13 +148,13 @@ def replaces_set(self):
148148
149149 #review_by_rfc_editor = models.BooleanField()
150150 @property
151- def review_by_rfc_editor (self ): raise NotImplemented # should use tag
151+ def review_by_rfc_editor (self ):
152+ return bool (self .tags .filter (slug = 'rfc-rev' ))
152153
153154 #expired_tombstone = models.BooleanField()
154155 @property
155156 def expired_tombstone (self ):
156- # FIXME: this is probably not perfect, what happens when we delete it again
157- return self .latest_event (type = "added_tombstone" )
157+ return bool (self .tags .filter (slug = 'exp-tomb' ))
158158
159159 #idinternal = FKAsOneToOne('idinternal', reverse=True, query=models.Q(rfc_flag = 0))
160160 @property
@@ -176,7 +176,8 @@ def revision_display(self):
176176 r = max (r - 1 , 0 )
177177 return "%02d" % r
178178 def expiration (self ):
179- return self .revision_date + datetime .timedelta (self .DAYS_TO_EXPIRE )
179+ e = self .latest_event (type__in = ("completed_resurrect" , "new_revision" ))
180+ return e .time .date () + datetime .timedelta (self .DAYS_TO_EXPIRE )
180181 def can_expire (self ):
181182 # Copying the logic from expire-ids-1 without thinking
182183 # much about it.
@@ -234,22 +235,22 @@ def ballot(self):
234235
235236 #primary_flag = models.IntegerField(blank=True, null=True)
236237 @property
237- def primary (self ):
238- return True # left-over from multi-ballot documents?
238+ def primary_flag (self ):
239+ # left-over from multi-ballot documents which we don't really
240+ # support anymore, just pretend we're always primary
241+ return True
239242
240- #group_flag = models.IntegerField(blank=True, default=0) # unused?
243+ #group_flag = models.IntegerField(blank=True, default=0) # not used anymore, contained the group acronym_id once upon a time (so it wasn't a flag)
241244
242245 #token_name = models.CharField(blank=True, max_length=25)
243246 @property
244247 def token_name (self ):
245- e = self .latest_event ()
246- return e .by .person .name if e else None
248+ return self .ad .get_name ()
247249
248250 #token_email = models.CharField(blank=True, max_length=255)
249251 @property
250252 def token_email (self ):
251- e = self .latest_event ()
252- return e .by .address if e else None
253+ return self .ad .address
253254
254255 #note = models.TextField(blank=True) # same name
255256
@@ -273,7 +274,7 @@ def cur_state(self):
273274 #prev_state = models.ForeignKey(IDState, db_column='prev_state', related_name='docs_prev')
274275 @property
275276 def prev_state (self ):
276- ds = self .dochistory_set .all ( ).order_by ('-time' )[:1 ]
277+ ds = self .dochistory_set .exclude ( iesg_state = self . iesg_state ).order_by ('-time' )[:1 ]
277278 return ds [0 ].iesg_state if ds else None
278279
279280 #assigned_to = models.CharField(blank=True, max_length=25) # unused
@@ -282,7 +283,8 @@ def prev_state(self):
282283 @property
283284 def mark_by (self ):
284285 e = self .latest_event ()
285- return e .by if e else None
286+ from person .proxy import IESGLogin as IESGLoginProxy
287+ return IESGLoginProxy (e .by ) if e else None
286288
287289 # job_owner = models.ForeignKey(IESGLogin, db_column='job_owner', related_name='documents')
288290 @property
@@ -310,10 +312,12 @@ def area_acronym(self):
310312 #cur_sub_state = BrokenForeignKey(IDSubState, related_name='docs', null=True, blank=True, null_values=(0, -1))
311313 @property
312314 def cur_sub_state (self ):
313- return ", " .join (self .tags .all ())
315+ s = self .tags .filter (slug__in = ['extpty' , 'need-rev' , 'ad-f-up' , 'point' ])
316+ return s [0 ] if s else None
314317 @property
315318 def cur_sub_state_id (self ):
316- return 0
319+ s = self .cur_sub_state
320+ return 1 if s else 0 # need to return something numeric
317321
318322 #prev_sub_state = BrokenForeignKey(IDSubState, related_name='docs_prev', null=True, blank=True, null_values=(0, -1))
319323 @property
@@ -339,7 +343,7 @@ def telechat_date(self):
339343 #via_rfc_editor = models.IntegerField(null=True, blank=True)
340344 @property
341345 def via_rfc_editor (self ):
342- return bool (self .tags .filter (slug = 'viarfceditor ' ))
346+ return bool (self .tags .filter (slug = 'via-rfc ' ))
343347
344348 #state_change_notice_to = models.CharField(blank=True, max_length=255)
345349 @property
@@ -349,23 +353,27 @@ def state_change_notice_to(self):
349353 #dnp = models.IntegerField(null=True, blank=True)
350354 @property
351355 def dnp (self ):
352- return self .latest_event (type = "resolved_to_do_not_publish" )
356+ e = self .latest_event (type__in = ("iesg_disapproved" , "iesg_approved" ))
357+ return e != None and e .type == "iesg_disapproved"
353358
354359 #dnp_date = models.DateField(null=True, blank=True)
355360 @property
356361 def dnp_date (self ):
357- e = self .latest_event (type = "resolved_to_do_not_publish" )
358- return e .time if e else None
362+ e = self .latest_event (type__in = ( "iesg_disapproved" , "iesg_approved" ) )
363+ return e .time . date () if e != None and e . type == "iesg_disapproved" else None
359364
360365 #noproblem = models.IntegerField(null=True, blank=True)
361366 @property
362367 def noproblem (self ):
363- return self .latest_event (type = "resolved_to_no_problem" )
368+ e = self .latest_event (type__in = ("iesg_disapproved" , "iesg_approved" ))
369+ return e != None and e .type == "iesg_approved"
364370
365371 #resurrect_requested_by = BrokenForeignKey(IESGLogin, db_column='resurrect_requested_by', related_name='docsresurrected', null=True, blank=True)
366372 @property
367373 def resurrect_requested_by (self ):
368- return self .latest_event (type = "requested_resurrect" )
374+ e = self .latest_event (type__in = ("requested_resurrect" , "completed_resurrect" ))
375+ from person .proxy import IESGLogin as IESGLoginProxy
376+ return IESGLoginProxy (e .by ) if e and e .type == "requested_resurrect" else None
369377
370378 #approved_in_minute = models.IntegerField(null=True, blank=True)
371379 @property
@@ -404,7 +412,8 @@ def change_state(self, state, sub_state):
404412 #active = models.BooleanField()
405413 @property
406414 def active (self ):
407- return self .iesg_state and self .iesg_state .name in ['In Last Call' , 'Waiting for Writeup' , 'Waiting for AD Go-Ahead' , 'IESG Evaluation' , 'IESG Evaluation - Defer' ]
415+ # taken from BallotWrapper
416+ return self .latest_event (type = "sent_ballot_announcement" ) and self .iesg_state and self .iesg_state .name in ['In Last Call' , 'Waiting for Writeup' , 'Waiting for AD Go-Ahead' , 'IESG Evaluation' , 'IESG Evaluation - Defer' ] and (self .state_id == "rfc" or self .state_id == "active" )
408417
409418 #an_sent = models.BooleanField()
410419 @property
@@ -421,42 +430,45 @@ def an_sent_date(self):
421430 @property
422431 def an_sent_by (self ):
423432 e = self .latest_event (type = "iesg_approved" )
424- return e .by if e else None
433+ from person .proxy import IESGLogin as IESGLoginProxy
434+ return IESGLoginProxy (e .by ) if e else None
425435
426436 #defer = models.BooleanField()
427437 @property
428438 def defer (self ):
429- return bool (self .latest_event (type = "deferred_ballot" ))
439+ # we're deferred if we're in the deferred state
440+ return self .iesg_state and self .iesg_state .name == "IESG Evaluation - Defer"
430441
431442 #defer_by = models.ForeignKey(IESGLogin, db_column='defer_by', related_name='deferred', null=True)
432443 @property
433444 def defer_by (self ):
434- e = self .latest_event (type = "deferred_ballot" )
435- return e .by if e else None
445+ e = self .latest_event (type = "changed_document" , desc__startswith = "State changed to <b>IESG Evaluation - Defer</b>" )
446+ from person .proxy import IESGLogin as IESGLoginProxy
447+ return IESGLoginProxy (e .by ) if e else None
436448
437449 #defer_date = models.DateField(null=True, blank=True)
438450 @property
439451 def defer_date (self ):
440- e = self .latest_event (type = "deferred_ballot " )
441- return e .time if e else None
452+ e = self .latest_event (type = "changed_document" , desc__startswith = "State changed to <b>IESG Evaluation - Defer</b> " )
453+ return e .time . date () if e else None
442454
443455 #approval_text = models.TextField(blank=True)
444456 @property
445457 def approval_text (self ):
446- e = self .latest_event (type = "changed_ballot_approval_text" )
447- return e .text . content if e else ""
458+ e = self .latest_event (Text , type = "changed_ballot_approval_text" )
459+ return e .content if e else ""
448460
449461 #last_call_text = models.TextField(blank=True)
450462 @property
451463 def last_call_text (self ):
452- e = self .latest_event (type = "changed_last_call_text" )
453- return e .text . content if e else ""
464+ e = self .latest_event (Text , type = "changed_last_call_text" )
465+ return e .content if e else ""
454466
455467 #ballot_writeup = models.TextField(blank=True)
456468 @property
457469 def ballot_writeup (self ):
458- e = self .latest_event (type = "changed_ballot_writeup_text" )
459- return e .text . content if e else ""
470+ e = self .latest_event (Text , type = "changed_ballot_writeup_text" )
471+ return e .content if e else ""
460472
461473 #ballot_issued = models.IntegerField(null=True, blank=True)
462474 @property
0 commit comments