From 8d80e3b3925274a1002ad6f08da93d111f7da1e9 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Wed, 13 Mar 2013 15:31:36 +0000 Subject: [PATCH] Merged [5509] from ietf@augustcellars.com: Add new rules to the atom tracker for picking up documents in specific states Add new rules to the atom tracker for picking up RFCs Change the header fields on the RFC table so that they reflect RFC descriptions rather than I-D descriptions. - Legacy-Id: 5561 Note: SVN reference [5509] has been migrated to Git commit 7ef255b0b1ef537cd569c6476ab7b1d41f92065d --- ietf/community/display.py | 10 ++ ietf/community/rules.py | 157 +++++++++++++++++++++++++ ietf/templates/community/raw_view.html | 2 +- 3 files changed, 168 insertions(+), 1 deletion(-) diff --git a/ietf/community/display.py b/ietf/community/display.py index 72d0c3514..ac93159d0 100644 --- a/ietf/community/display.py +++ b/ietf/community/display.py @@ -11,6 +11,7 @@ class DisplayField(object): codename = '' description = '' + rfcDescription = '' def get_value(self, document, raw=False): return None @@ -19,6 +20,7 @@ class DisplayField(object): class FilenameField(DisplayField): codename = 'filename' description = 'I-D filename' + rfcDescription = 'RFC Number' def get_value(self, document, raw=False): if not raw: @@ -30,6 +32,7 @@ class FilenameField(DisplayField): class TitleField(DisplayField): codename = 'title' description = 'I-D title' + rfcDescription = 'RFC Title' def get_value(self, document, raw=False): return document.title @@ -38,6 +41,7 @@ class TitleField(DisplayField): class DateField(DisplayField): codename = 'date' description = 'Date of current I-D' + rfcDescription = 'Date of RFC' def get_value(self, document, raw=False): date = document.latest_event(type='new_revision') @@ -49,6 +53,7 @@ class DateField(DisplayField): class StatusField(DisplayField): codename = 'status' description = 'Status in the IETF process' + rfcDescription = description def get_value(self, document, raw=False): draft_state = document.get_state('draft') @@ -79,6 +84,7 @@ class StatusField(DisplayField): class WGField(DisplayField): codename = 'wg_rg' description = 'Associated WG or RG' + rfcDescription = description def get_value(self, document, raw=False): if raw: @@ -90,6 +96,7 @@ class WGField(DisplayField): class ADField(DisplayField): codename = 'ad' description = 'Associated AD, if any' + rfcDescription = description def get_value(self, document, raw=False): return document.ad or '' @@ -98,6 +105,7 @@ class ADField(DisplayField): class OneDayField(DisplayField): codename = '1_day' description = 'Changed within the last 1 day' + rfcDescription = description def get_value(self, document, raw=False): now = datetime.datetime.now() @@ -110,6 +118,7 @@ class OneDayField(DisplayField): class TwoDaysField(DisplayField): codename = '2_days' description = 'Changed within the last 2 days' + rfcDescription = description def get_value(self, document, raw=False): now = datetime.datetime.now() @@ -122,6 +131,7 @@ class TwoDaysField(DisplayField): class SevenDaysField(DisplayField): codename = '7_days' description = 'Changed within the last 7 days' + rfcDescription = description def get_value(self, document, raw=False): now = datetime.datetime.now() diff --git a/ietf/community/rules.py b/ietf/community/rules.py index b1b8f903f..61c64a9c5 100644 --- a/ietf/community/rules.py +++ b/ietf/community/rules.py @@ -3,6 +3,7 @@ from django.db.models import Q from ietf.doc.models import Document from ietf.group.models import Group from ietf.person.models import Person +from ietf.doc.models import State class RuleManager(object): @@ -133,5 +134,161 @@ class WithTextRule(RuleManager): def get_documents(self): return Document.objects.filter(type='draft', states__slug='active').filter(name__icontains=self.value).distinct() +class IABInState(RuleManager): + codename = 'in_iab_state' + description = 'All I-Ds that are in a particular IAB state' + + def get_documents(self): + return Document.objects.filter(states__type='draft-stream-iab', states__slug=self.value).distinct() + + def options(self): + return [(i.slug, i.name) for i in State.objects.filter(type='draft-stream-iab').order_by('name')] + + def show_value(self): + try: + return State.objects.get(type='draft-stream-iab', slug=self.value).name + except State.DoesNotExist: + return self.value + +class IANAInState(RuleManager): + codename = 'in_iana_state' + description = 'All I-Ds that are in a particular IANA state' + + def get_documents(self): + return Document.objects.filter(states__type='draft-iana-review', states__slug=self.value).distinct() + + def options(self): + return [(i.slug, i.name) for i in State.objects.filter(type='draft-iana-review').order_by('name')] + + def show_value(self): + try: + return State.objects.get(type='draft-iana-review', slug=self.value).name + except State.DoesNotExist: + return self.value + +class IESGInState(RuleManager): + codename = 'in_iesg_state' + description = 'All I-Ds that are in a particular IESG state' + + def get_documents(self): + return Document.objects.filter(states__type='draft-iesg', states__slug=self.value).distinct() + + def options(self): + return [(i.slug, i.name) for i in State.objects.filter(type='draft-iesg').order_by('name')] + + def show_value(self): + try: + return State.objects.get(type='draft-iesg', slug=self.value).name + except State.DoesNotExist: + return self.value + +class IRTFInState(RuleManager): + codename = 'in_irtf_state' + description = 'All I-Ds that are in a particular IRTF state' + + def get_documents(self): + return Document.objects.filter(states__type='draft-stream-irtf', states__slug=self.value).distinct() + + def options(self): + return [(i.slug, i.name) for i in State.objects.filter(type='draft-stream-irtf').order_by('name')] + + def show_value(self): + try: + return State.objects.get(type='draft-stream-irtf', slug=self.value).name + except State.DoesNotExist: + return self.value + +class ISEInState(RuleManager): + codename = 'in_ise_state' + description = 'All I-Ds that are in a particular ISE state' + + def get_documents(self): + return Document.objects.filter(states__type='draft-stream-ise', states__slug=self.value).distinct() + + def options(self): + return [(i.slug, i.name) for i in State.objects.filter(type='draft-stream-ise').order_by('name')] + + def show_value(self): + try: + return State.objects.get(type='draft-stream-ise', slug=self.value).name + except State.DoesNotExist: + return self.value + +class RfcEditorInState(RuleManager): + codename = 'in_rfcEdit_state' + description = 'All I-Ds that are in a particular RFC Editor state' + + def get_documents(self): + return Document.objects.filter(states__type='draft-rfceditor', states__slug=self.value).distinct() + + def options(self): + return [(i.slug, i.type_id + ": " + i.name) for i in State.objects.filter(type='draft-rfceditor').order_by('name')] + + def show_value(self): + try: + return State.objects.get(type='draft-rfceditor', slug=self.value).name + except State.DoesNotExist: + return self.value + +class WGInState(RuleManager): + codename = 'in_wg_state' + description = 'All I-Ds that are in a particular Working Group state' + + def get_documents(self): + return Document.objects.filter(states__type='draft-stream-ietf', states__slug=self.value).distinct() + + def options(self): + return [(i.slug, i.type_id + ": " + i.name) for i in State.objects.filter(type='draft-stream-ietf').order_by('name')] + + def show_value(self): + try: + return State.objects.get(type='draft-stream-ietf', slug=self.value).name + except State.DoesNotExist: + return self.value + +class RfcWgAsociatedRule(RuleManager): + codename = 'wg_asociated_rfc' + description = 'All RFCs associated with a particular WG' + + def get_documents(self): + return Document.objects.filter(type='draft', states__slug='rfc').filter(group__acronym=self.value).distinct() + + def options(self): + return [(i.acronym, "%s — %s"%(i.acronym, i.name)) for i in Group.objects.filter(type='wg').distinct().order_by('acronym')] + + def show_value(self): + try: + return Group.objects.get(type='draft', acronym=self.value).name + except Group.DoesNotExist: + return self.value + + +class RfcAreaAsociatedRule(RuleManager): + codename = 'area_asociated_rfc' + description = 'All RFCs associated with all WGs in a particular Area' + + def get_documents(self): + return Document.objects.filter(type='draft', states__slug='rfc').filter(group__parent__acronym=self.value, group__parent__type='area').distinct() + + def options(self): + return [(i.acronym, "%s — %s"%(i.acronym, i.name)) for i in Group.objects.filter(type='area').distinct().order_by('name')] + + def show_value(self): + try: + return Group.objects.get(type='draft', acronym=self.value).name + except Group.DoesNotExist: + return self.value + + +class RfcAuthorRule(RuleManager): + codename = 'author_rfc' + description = 'All RFCs with a particular author' + + def get_documents(self): + return Document.objects.filter(type='draft', states__slug='rfc').filter(authors__person__name__icontains=self.value).distinct() + + TYPES_OF_RULES = [(i.codename, i.description) for i in RuleManager.__subclasses__()] + + diff --git a/ietf/templates/community/raw_view.html b/ietf/templates/community/raw_view.html index 6d2bd91cf..4f31ad5b9 100644 --- a/ietf/templates/community/raw_view.html +++ b/ietf/templates/community/raw_view.html @@ -26,7 +26,7 @@ {% for field in fields %} - + {% endfor %} {% for doc in documents.0 %}
{{ field.description }}{{ field.rfcDescription }}