From c79b40bc888832b5c4bf6d582a4dba4911e2bb35 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 1 Dec 2016 13:49:36 +0000 Subject: [PATCH] Changed the handling of DocEvent 'rev' fields in document history. We should give DocEvent a 'rev' field which is always filled in; the current handling is error prone and much to complicated. - Legacy-Id: 12433 --- ietf/doc/feeds.py | 2 +- ietf/doc/models.py | 12 ++++++++++++ ietf/doc/utils.py | 12 +++++++++++- ietf/templates/doc/document_history.html | 4 ++-- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/ietf/doc/feeds.py b/ietf/doc/feeds.py index 0c4f2a607..30c41a09c 100644 --- a/ietf/doc/feeds.py +++ b/ietf/doc/feeds.py @@ -35,7 +35,7 @@ class DocumentChangesFeed(Feed): return events def item_title(self, item): - return u"[%s] %s [rev. %s]" % (item.by, truncatewords(strip_tags(item.desc), 15), item.rev) + return u"[%s] %s [rev. %s]" % (item.by, truncatewords(strip_tags(item.desc), 15), item.get_rev()) def item_description(self, item): return truncatewords_html(format_textarea(item.desc), 20) diff --git a/ietf/doc/models.py b/ietf/doc/models.py index 355d25d07..2d4b0a8a2 100644 --- a/ietf/doc/models.py +++ b/ietf/doc/models.py @@ -749,6 +749,18 @@ class DocEvent(models.Model): def __unicode__(self): return u"%s %s by %s at %s" % (self.doc.name, self.get_type_display().lower(), self.by.plain_name(), self.time) + def get_rev(self): + e = self + # check subtypes which has a rev attribute + for sub in ['newrevisiondocevent', 'submissiondocevent', ]: + if hasattr(e, sub): + e = getattr(e, sub) + break + if hasattr(e, 'rev'): + return e.rev + else: + return None + class Meta: ordering = ['-time', '-id'] diff --git a/ietf/doc/utils.py b/ietf/doc/utils.py index 74302424e..a7a3b7be0 100644 --- a/ietf/doc/utils.py +++ b/ietf/doc/utils.py @@ -237,7 +237,12 @@ def augment_events_with_revision(doc, events): for e in sorted(events, key=lambda e: (e.time, e.id), reverse=True): while event_revisions and (e.time, e.id) < (event_revisions[-1]["time"], event_revisions[-1]["id"]): event_revisions.pop() - + + # Check for all subtypes which have 'rev' fields: + for sub in ['newrevisiondocevent', 'submissiondocevent', ]: + if hasattr(e, sub): + e = getattr(e, sub) + break if not hasattr(e, 'rev'): if event_revisions: cur_rev = event_revisions[-1]["rev"] @@ -255,6 +260,11 @@ def add_links_in_new_revision_events(doc, events, diff_revisions): if not e.type == "new_revision": continue + for sub in ['newrevisiondocevent', 'submissiondocevent', ]: + if hasattr(e, sub): + e = getattr(e, sub) + break + if not (e.doc.name, e.rev) in diff_urls: continue diff --git a/ietf/templates/doc/document_history.html b/ietf/templates/doc/document_history.html index 651d1bc5f..bc29301ad 100644 --- a/ietf/templates/doc/document_history.html +++ b/ietf/templates/doc/document_history.html @@ -103,7 +103,7 @@ {% for e in events %} {{ e.time|date:"Y-m-d" }} - {{ e.rev }} + {{ e.get_rev }} {{ e.by|escape }} {{ e.desc|format_history_text|safe }} @@ -114,4 +114,4 @@ {% block js %} -{% endblock %} \ No newline at end of file +{% endblock %}