Skip to content

Commit daf08da

Browse files
committed
Import remaining missing attributes in InternetDraft, IDInternal and Ballot, fix bugs
- Legacy-Id: 2736
1 parent 0ada078 commit daf08da

6 files changed

Lines changed: 254 additions & 108 deletions

File tree

ietf/idrfc/views_doc.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ def _get_history(doc, versions):
165165
results.append({'comment':e, 'info':info, 'date':e.time, 'is_com':True})
166166

167167
prev_rev = "00"
168-
for o in reversed(results):
168+
results.sort(key=lambda x: x['date'])
169+
for o in results:
169170
e = o["comment"]
170171
if e.type == "new_revision":
171172
e.version = e.newrevision.rev

redesign/doc/models.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,10 @@ class SendQueue(models.Model):
164164
("added_tombstone", "Added tombstone"),
165165
("expired_document", "Expired document"),
166166
("requested_resurrect", "Requested resurrect"),
167+
("completed_resurrect", "Completed resurrect"),
167168

168169
# IESG events
169170
("sent_ballot_announcement", "Sent ballot announcement"),
170-
("deferred_ballot", "Deferred ballot"),
171171
("changed_ballot_position", "Changed ballot position"),
172172
("changed_ballot_approval_text", "Changed ballot approval text"),
173173
("changed_ballot_writeup_text", "Changed ballot writeup text"),
@@ -180,9 +180,8 @@ class SendQueue(models.Model):
180180

181181
("scheduled_for_telechat", "Scheduled for telechat"),
182182

183-
("resolved_to_do_not_publish", "Resolved to 'do not publish'"),
184-
("resolved_to_no_problem", "Resolved to 'no problem'"),
185-
("iesg_approved", "IESG approved document"),
183+
("iesg_approved", "IESG approved document (no problem)"),
184+
("iesg_disapproved", "IESG disapproved document (do not publish)"),
186185

187186
("approved_in_minute", "Approved in minute"),
188187
]
@@ -221,10 +220,10 @@ class BallotPosition(Event):
221220
comment_time = models.DateTimeField(help_text="Time optional comment was written", blank=True, null=True)
222221

223222
class Status(Event):
224-
date = models.DateField()
223+
date = models.DateField(blank=True, null=True)
225224

226225
class Expiration(Event):
227-
expires = models.DateTimeField()
226+
expires = models.DateTimeField(blank=True, null=True)
228227

229228
class Telechat(Event):
230229
telechat_date = models.DateField(blank=True, null=True)

redesign/doc/proxy.py

Lines changed: 48 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)