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 @@
{{ field.description }} | +{{ field.rfcDescription }} | {% endfor %}
---|