Add models and migrations needed by the notification system. See #701
- Legacy-Id: 3519
This commit is contained in:
parent
4a193ffd0f
commit
c8e37d235e
167
ietf/community/display.py
Normal file
167
ietf/community/display.py
Normal file
|
@ -0,0 +1,167 @@
|
|||
import datetime
|
||||
|
||||
from django.db.models import Q
|
||||
|
||||
|
||||
class DisplayField(object):
|
||||
|
||||
codename = ''
|
||||
description = ''
|
||||
|
||||
def get_value(self, document):
|
||||
return None
|
||||
|
||||
|
||||
class FilenameField(DisplayField):
|
||||
codename = 'filename'
|
||||
description = 'I-D filename'
|
||||
|
||||
def get_value(self, document):
|
||||
return document.name
|
||||
|
||||
|
||||
class TitleField(DisplayField):
|
||||
codename = 'title'
|
||||
description = 'I-D title'
|
||||
|
||||
def get_value(self, document):
|
||||
return document.title
|
||||
|
||||
|
||||
class DateField(DisplayField):
|
||||
codename = 'date'
|
||||
description = 'Date of current I-D'
|
||||
|
||||
def get_value(self, document):
|
||||
dates = document.documentchangedates_set.all()
|
||||
if dates and dates[0].new_version_date:
|
||||
return dates[0].new_version_date
|
||||
return document.time.strftime('%Y-%m-%d')
|
||||
|
||||
|
||||
class StatusField(DisplayField):
|
||||
codename = 'status'
|
||||
description = 'Status in the IETF process'
|
||||
|
||||
def get_value(self, document):
|
||||
return document.state
|
||||
|
||||
|
||||
class WGField(DisplayField):
|
||||
codename = 'wg_rg'
|
||||
description = 'Associated WG or RG'
|
||||
|
||||
def get_value(self, document):
|
||||
return document.group or ''
|
||||
|
||||
|
||||
class ADField(DisplayField):
|
||||
codename = 'ad'
|
||||
description = 'Associated AD, if any'
|
||||
|
||||
def get_value(self, document):
|
||||
return document.ad or ''
|
||||
|
||||
|
||||
class OneDayField(DisplayField):
|
||||
codename = '1_day'
|
||||
description = 'Changed within the last 1 day'
|
||||
|
||||
def get_value(self, document):
|
||||
now = datetime.datetime.now()
|
||||
last = now - datetime.timedelta(days=1)
|
||||
if document.documentchangedates_set.filter(
|
||||
Q(new_version_date__gte=last) |
|
||||
Q(normal_change_date__gte=last)):
|
||||
return '✔'
|
||||
return ''
|
||||
|
||||
|
||||
class TwoDaysField(DisplayField):
|
||||
codename = '2_days'
|
||||
description = 'Changed within the last 2 days'
|
||||
|
||||
def get_value(self, document):
|
||||
now = datetime.datetime.now()
|
||||
last = now - datetime.timedelta(days=2)
|
||||
if document.documentchangedates_set.filter(
|
||||
Q(new_version_date__gte=last) |
|
||||
Q(normal_change_date__gte=last)):
|
||||
return '✔'
|
||||
return ''
|
||||
|
||||
|
||||
class SevenDaysField(DisplayField):
|
||||
codename = '7_days'
|
||||
description = 'Changed within the last 7 days'
|
||||
|
||||
def get_value(self, document):
|
||||
now = datetime.datetime.now()
|
||||
last = now - datetime.timedelta(days=7)
|
||||
if document.documentchangedates_set.filter(
|
||||
Q(new_version_date__gte=last) |
|
||||
Q(normal_change_date__gte=last)):
|
||||
return '✔'
|
||||
return ''
|
||||
|
||||
|
||||
TYPES_OF_DISPLAY_FIELDS = [(i.codename, i.description) for i in DisplayField.__subclasses__()]
|
||||
|
||||
|
||||
class SortMethod(object):
|
||||
codename = ''
|
||||
description = ''
|
||||
|
||||
def get_sort_field(self):
|
||||
return 'pk'
|
||||
|
||||
|
||||
class FilenameSort(SortMethod):
|
||||
codename = 'by_filename'
|
||||
description = 'Alphabetical by I-D filename and RFC number'
|
||||
|
||||
def get_sort_field(self):
|
||||
return 'name'
|
||||
|
||||
|
||||
class TitleSort(SortMethod):
|
||||
codename = 'by_title'
|
||||
description = 'Alphabetical by document title'
|
||||
|
||||
def get_sort_field(self):
|
||||
return 'title'
|
||||
|
||||
|
||||
class WGSort(SortMethod):
|
||||
codename = 'by_wg'
|
||||
description = 'Alphabetical by associated WG'
|
||||
|
||||
def get_sort_field(self):
|
||||
return 'group__name'
|
||||
|
||||
|
||||
class PublicationSort(SortMethod):
|
||||
codename = 'date_publication'
|
||||
description = 'Date of publication of current version of the document'
|
||||
|
||||
def get_sort_field(self):
|
||||
return 'documentchangedates__new_version_date'
|
||||
|
||||
|
||||
class ChangeSort(SortMethod):
|
||||
codename = 'recent_change'
|
||||
description = 'Date of most recent change of status of any type'
|
||||
|
||||
def get_sort_field(self):
|
||||
return 'documentchangedates__normal_change_date'
|
||||
|
||||
|
||||
class SignificantSort(SortMethod):
|
||||
codename = 'recent_significant'
|
||||
description = 'Date of most recent significant change of status'
|
||||
|
||||
def get_sort_field(self):
|
||||
return 'documentchangedates__significant_change_date'
|
||||
|
||||
|
||||
TYPES_OF_SORT = [(i.codename, i.description) for i in SortMethod.__subclasses__()]
|
231
ietf/community/migrations/0002_add_display_config.py
Normal file
231
ietf/community/migrations/0002_add_display_config.py
Normal file
|
@ -0,0 +1,231 @@
|
|||
|
||||
from south.db import db
|
||||
from django.db import models
|
||||
from ietf.community.models import *
|
||||
|
||||
class Migration:
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding model 'DisplayConfiguration'
|
||||
db.create_table('community_displayconfiguration', (
|
||||
('id', orm['community.displayconfiguration:id']),
|
||||
('community_list', orm['community.displayconfiguration:community_list']),
|
||||
('sort_method', orm['community.displayconfiguration:sort_method']),
|
||||
('display_fields', orm['community.displayconfiguration:display_fields']),
|
||||
))
|
||||
db.send_create_signal('community', ['DisplayConfiguration'])
|
||||
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting model 'DisplayConfiguration'
|
||||
db.delete_table('community_displayconfiguration')
|
||||
|
||||
|
||||
|
||||
models = {
|
||||
'auth.group': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
|
||||
},
|
||||
'auth.permission': {
|
||||
'Meta': {'unique_together': "(('content_type', 'codename'),)"},
|
||||
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'auth.user': {
|
||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
|
||||
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
|
||||
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||
},
|
||||
'community.communitylist': {
|
||||
'added_ids': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']"}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'community.displayconfiguration': {
|
||||
'community_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['community.CommunityList']"}),
|
||||
'display_fields': ('django.db.models.fields.TextField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'sort_method': ('django.db.models.fields.CharField', [], {'default': "'by_filename'", 'max_length': '100'})
|
||||
},
|
||||
'community.rule': {
|
||||
'cached_ids': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']"}),
|
||||
'community_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['community.CommunityList']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'last_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||
'rule_type': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
|
||||
'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'doc.docalias': {
|
||||
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
|
||||
},
|
||||
'doc.document': {
|
||||
'abstract': ('django.db.models.fields.TextField', [], {}),
|
||||
'ad': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'ad_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
|
||||
'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['person.Email']", 'blank': 'True'}),
|
||||
'external_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'iana_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IanaDocStateName']", 'null': 'True', 'blank': 'True'}),
|
||||
'iesg_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IesgDocStateName']", 'null': 'True', 'blank': 'True'}),
|
||||
'intended_std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IntendedStdLevelName']", 'null': 'True', 'blank': 'True'}),
|
||||
'internal_comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'primary_key': 'True'}),
|
||||
'note': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'notify': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'pages': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'related': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.DocAlias']", 'blank': 'True'}),
|
||||
'rev': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
|
||||
'rfc_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.RfcDocStateName']", 'null': 'True', 'blank': 'True'}),
|
||||
'shepherd': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'shepherd_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocStateName']", 'null': 'True', 'blank': 'True'}),
|
||||
'std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StdLevelName']", 'null': 'True', 'blank': 'True'}),
|
||||
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocStreamName']", 'null': 'True', 'blank': 'True'}),
|
||||
'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['name.DocInfoTagName']", 'null': 'True', 'blank': 'True'}),
|
||||
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocTypeName']", 'null': 'True', 'blank': 'True'}),
|
||||
'wg_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.WgDocStateName']", 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'group.group': {
|
||||
'acronym': ('django.db.models.fields.CharField', [], {'max_length': '16', 'db_index': 'True'}),
|
||||
'ad': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
|
||||
'charter': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'chartered_group'", 'unique': 'True', 'null': 'True', 'to': "orm['doc.Document']"}),
|
||||
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'list_archive': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'list_email': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
|
||||
'list_subscribe': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
|
||||
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupStateName']", 'null': 'True'}),
|
||||
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupTypeName']", 'null': 'True'})
|
||||
},
|
||||
'name.docinfotagname': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.docstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.docstreamname': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.doctypename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.groupstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.grouptypename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.ianadocstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.iesgdocstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.intendedstdlevelname': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.rfcdocstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.stdlevelname': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.wgdocstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'person.email': {
|
||||
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
|
||||
'address': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}),
|
||||
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True'}),
|
||||
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
|
||||
},
|
||||
'person.person': {
|
||||
'address': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'ascii': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'ascii_short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
|
||||
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['community']
|
295
ietf/community/migrations/0003_add_notifications.py
Normal file
295
ietf/community/migrations/0003_add_notifications.py
Normal file
|
@ -0,0 +1,295 @@
|
|||
|
||||
from south.db import db
|
||||
from django.db import models
|
||||
from ietf.community.models import *
|
||||
|
||||
class Migration:
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding model 'ListNotification'
|
||||
db.create_table('community_listnotification', (
|
||||
('id', orm['community.listnotification:id']),
|
||||
('document', orm['community.listnotification:document']),
|
||||
('notification_date', orm['community.listnotification:notification_date']),
|
||||
('desc', orm['community.listnotification:desc']),
|
||||
('significant', orm['community.listnotification:significant']),
|
||||
))
|
||||
db.send_create_signal('community', ['ListNotification'])
|
||||
|
||||
# Adding model 'EmailSubscription'
|
||||
db.create_table('community_emailsubscription', (
|
||||
('id', orm['community.emailsubscription:id']),
|
||||
('community_list', orm['community.emailsubscription:community_list']),
|
||||
('email', orm['community.emailsubscription:email']),
|
||||
('significant', orm['community.emailsubscription:significant']),
|
||||
))
|
||||
db.send_create_signal('community', ['EmailSubscription'])
|
||||
|
||||
# Adding model 'DocumentChangeDates'
|
||||
db.create_table('community_documentchangedates', (
|
||||
('id', orm['community.documentchangedates:id']),
|
||||
('document', orm['community.documentchangedates:document']),
|
||||
('new_version_date', orm['community.documentchangedates:new_version_date']),
|
||||
('normal_change_date', orm['community.documentchangedates:normal_change_date']),
|
||||
('significant_change_date', orm['community.documentchangedates:significant_change_date']),
|
||||
))
|
||||
db.send_create_signal('community', ['DocumentChangeDates'])
|
||||
|
||||
# Adding model 'ExpectedChange'
|
||||
db.create_table('community_expectedchange', (
|
||||
('id', orm['community.expectedchange:id']),
|
||||
('community_list', orm['community.expectedchange:community_list']),
|
||||
('document', orm['community.expectedchange:document']),
|
||||
('expected_date', orm['community.expectedchange:expected_date']),
|
||||
))
|
||||
db.send_create_signal('community', ['ExpectedChange'])
|
||||
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting model 'ListNotification'
|
||||
db.delete_table('community_listnotification')
|
||||
|
||||
# Deleting model 'EmailSubscription'
|
||||
db.delete_table('community_emailsubscription')
|
||||
|
||||
# Deleting model 'DocumentChangeDates'
|
||||
db.delete_table('community_documentchangedates')
|
||||
|
||||
# Deleting model 'ExpectedChange'
|
||||
db.delete_table('community_expectedchange')
|
||||
|
||||
|
||||
|
||||
models = {
|
||||
'auth.group': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
|
||||
},
|
||||
'auth.permission': {
|
||||
'Meta': {'unique_together': "(('content_type', 'codename'),)"},
|
||||
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'auth.user': {
|
||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
|
||||
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
|
||||
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||
},
|
||||
'community.communitylist': {
|
||||
'added_ids': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']"}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'community.displayconfiguration': {
|
||||
'community_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['community.CommunityList']"}),
|
||||
'display_fields': ('django.db.models.fields.TextField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'sort_method': ('django.db.models.fields.CharField', [], {'default': "'by_filename'", 'max_length': '100'})
|
||||
},
|
||||
'community.documentchangedates': {
|
||||
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'new_version_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'normal_change_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'significant_change_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'community.emailsubscription': {
|
||||
'community_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['community.CommunityList']"}),
|
||||
'email': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'significant': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'})
|
||||
},
|
||||
'community.expectedchange': {
|
||||
'community_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['community.CommunityList']"}),
|
||||
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
|
||||
'expected_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'community.listnotification': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {}),
|
||||
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'notification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||
'significant': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'})
|
||||
},
|
||||
'community.rule': {
|
||||
'cached_ids': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']"}),
|
||||
'community_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['community.CommunityList']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'last_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||
'rule_type': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
|
||||
'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||
},
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'doc.docalias': {
|
||||
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
|
||||
},
|
||||
'doc.document': {
|
||||
'abstract': ('django.db.models.fields.TextField', [], {}),
|
||||
'ad': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'ad_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
|
||||
'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['person.Email']", 'blank': 'True'}),
|
||||
'external_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'iana_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IanaDocStateName']", 'null': 'True', 'blank': 'True'}),
|
||||
'iesg_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IesgDocStateName']", 'null': 'True', 'blank': 'True'}),
|
||||
'intended_std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IntendedStdLevelName']", 'null': 'True', 'blank': 'True'}),
|
||||
'internal_comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'primary_key': 'True'}),
|
||||
'note': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'notify': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'pages': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'related': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.DocAlias']", 'blank': 'True'}),
|
||||
'rev': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
|
||||
'rfc_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.RfcDocStateName']", 'null': 'True', 'blank': 'True'}),
|
||||
'shepherd': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'shepherd_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocStateName']", 'null': 'True', 'blank': 'True'}),
|
||||
'std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StdLevelName']", 'null': 'True', 'blank': 'True'}),
|
||||
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocStreamName']", 'null': 'True', 'blank': 'True'}),
|
||||
'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['name.DocInfoTagName']", 'null': 'True', 'blank': 'True'}),
|
||||
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocTypeName']", 'null': 'True', 'blank': 'True'}),
|
||||
'wg_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.WgDocStateName']", 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'group.group': {
|
||||
'acronym': ('django.db.models.fields.CharField', [], {'max_length': '16', 'db_index': 'True'}),
|
||||
'ad': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
|
||||
'charter': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'chartered_group'", 'unique': 'True', 'null': 'True', 'to': "orm['doc.Document']"}),
|
||||
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'list_archive': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'list_email': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
|
||||
'list_subscribe': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
|
||||
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupStateName']", 'null': 'True'}),
|
||||
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupTypeName']", 'null': 'True'})
|
||||
},
|
||||
'name.docinfotagname': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.docstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.docstreamname': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.doctypename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.groupstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.grouptypename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.ianadocstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.iesgdocstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.intendedstdlevelname': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.rfcdocstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.stdlevelname': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'name.wgdocstatename': {
|
||||
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
|
||||
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
|
||||
},
|
||||
'person.email': {
|
||||
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
|
||||
'address': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}),
|
||||
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True'}),
|
||||
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
|
||||
},
|
||||
'person.person': {
|
||||
'address': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}),
|
||||
'ascii': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'ascii_short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
|
||||
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['community']
|
|
@ -1,11 +1,14 @@
|
|||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.db import models
|
||||
from django.db.models import signals
|
||||
|
||||
from redesign.doc.models import Document
|
||||
from redesign.group.models import Group
|
||||
from redesign.group.models import Group, Role
|
||||
|
||||
from ietf.community.rules import TYPES_OF_RULES
|
||||
from ietf.community.rules import TYPES_OF_RULES, RuleManager
|
||||
from ietf.community.display import (TYPES_OF_SORT, DisplayField,
|
||||
SortMethod)
|
||||
|
||||
|
||||
class CommunityList(models.Model):
|
||||
|
@ -24,9 +27,9 @@ class CommunityList(models.Model):
|
|||
except:
|
||||
return False
|
||||
if self.group.type.slug == 'area':
|
||||
return bool(Role.objects.filter(name__slug='ad', email__in=person.email_set.all()).count(), group=self.group)
|
||||
return bool(Role.objects.filter(name__slug='ad', email__in=person.email_set.all(), group=self.group).count())
|
||||
elif self.group.type.slug == 'wg':
|
||||
return bool(Role.objects.filter(name__slug='chair', email__in=person.email_set.all()).count(), group=self.group)
|
||||
return bool(Role.objects.filter(name__slug='chair', email__in=person.email_set.all(), group=self.group).count())
|
||||
return False
|
||||
|
||||
def short_name(self):
|
||||
|
@ -44,12 +47,37 @@ class CommunityList(models.Model):
|
|||
def __unicode__(self):
|
||||
return self.long_name()
|
||||
|
||||
def get_public_url(self):
|
||||
if self.user:
|
||||
return reverse('view_personal_list', None, args=(self.user.username, ))
|
||||
else:
|
||||
return reverse('view_group_list', None, args=(self.group.acronym, ))
|
||||
|
||||
def get_manage_url(self):
|
||||
if self.user:
|
||||
return reverse('manage_personal_list', None, args=(self.user.username, ))
|
||||
else:
|
||||
return reverse('manage_group_list', None, args=(self.group.acronym, ))
|
||||
|
||||
def get_display_config(self):
|
||||
dconfig = getattr(self, '_cached_dconfig', None)
|
||||
if not dconfig:
|
||||
self._cached_dconfig = DisplayConfiguration.objects.get_or_create(community_list=self)[0]
|
||||
return self._cached_dconfig
|
||||
return self._cached_dconfig
|
||||
|
||||
def get_documents(self):
|
||||
docs = self.added_ids.all().distinct()
|
||||
for rule in self.rule_set.all():
|
||||
docs = docs | rule.cached_ids.all().distinct()
|
||||
sort_field = self.get_display_config().get_sort_method().get_sort_field()
|
||||
docs = docs.distinct().order_by(sort_field)
|
||||
return docs
|
||||
|
||||
def add_subscriptor(self, email, significant):
|
||||
self.emailsubscription_set.get_or_create(email=email, significant=significant)
|
||||
|
||||
|
||||
class Rule(models.Model):
|
||||
|
||||
community_list = models.ForeignKey(CommunityList)
|
||||
|
@ -63,3 +91,143 @@ class Rule(models.Model):
|
|||
|
||||
last_updated = models.DateTimeField(
|
||||
auto_now=True)
|
||||
|
||||
def get_callable_rule(self):
|
||||
for i in RuleManager.__subclasses__():
|
||||
if i.codename == self.rule_type:
|
||||
return i(self.value)
|
||||
return RuleManager(self.value)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(Rule, self).save(*args, **kwargs)
|
||||
rule = self.get_callable_rule()
|
||||
self.cached_ids = rule.get_documents()
|
||||
|
||||
|
||||
class DisplayConfiguration(models.Model):
|
||||
|
||||
community_list = models.ForeignKey(CommunityList)
|
||||
sort_method = models.CharField(
|
||||
max_length=100,
|
||||
choices=TYPES_OF_SORT,
|
||||
default='by_filename',
|
||||
blank=False,
|
||||
null=False)
|
||||
display_fields = models.TextField(
|
||||
default='filename,title,date')
|
||||
|
||||
def get_display_fields_config(self):
|
||||
fields = self.display_fields and self.display_fields.split(',') or []
|
||||
config = []
|
||||
for i in DisplayField.__subclasses__():
|
||||
config.append({
|
||||
'codename': i.codename,
|
||||
'description': i.description,
|
||||
'active': i.codename in fields,
|
||||
})
|
||||
return config
|
||||
|
||||
def get_active_fields(self):
|
||||
fields = self.display_fields and self.display_fields.split(',') or ''
|
||||
active_fields = [i for i in DisplayField.__subclasses__() if i.codename in fields]
|
||||
return active_fields
|
||||
|
||||
def get_sort_method(self):
|
||||
for i in SortMethod.__subclasses__():
|
||||
if i.codename == self.sort_method:
|
||||
return i()
|
||||
return SortMethod()
|
||||
|
||||
|
||||
class ExpectedChange(models.Model):
|
||||
|
||||
community_list = models.ForeignKey(CommunityList)
|
||||
document = models.ForeignKey(Document)
|
||||
expected_date = models.DateField(
|
||||
verbose_name='Expected date'
|
||||
)
|
||||
|
||||
|
||||
class EmailSubscription(models.Model):
|
||||
community_list = models.ForeignKey(CommunityList)
|
||||
email = models.CharField(max_length=200)
|
||||
significant = models.BooleanField(default=False)
|
||||
|
||||
|
||||
class ListNotification(models.Model):
|
||||
|
||||
document = models.ForeignKey(Document)
|
||||
notification_date = models.DateTimeField(auto_now=True)
|
||||
desc = models.TextField()
|
||||
significant = models.BooleanField(default=False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(ListNotification, self).save(*args, **kwargs)
|
||||
(changes, created) = DocumentChangeDates.objects.get_or_create(document=self.document)
|
||||
if self.significant:
|
||||
changes.significant_change_date = self.notification_date
|
||||
changes.normal_change_date = self.notification_date
|
||||
else:
|
||||
changes.normal_change_date = self.notification_date
|
||||
changes.save()
|
||||
|
||||
|
||||
def save_previous_states(sender, instance, **kwargs):
|
||||
if isinstance(instance, Document) and not instance.pk:
|
||||
instance.new_document = True
|
||||
elif isinstance(instance, Document):
|
||||
original = Document.objects.get(pk=instance.pk)
|
||||
instance.prev_state = original.state
|
||||
instance.prev_wg_state = original.wg_state
|
||||
instance.prev_iesg_state = original.iesg_state
|
||||
instance.prev_iana_state = original.iana_state
|
||||
instance.prev_rfc_state = original.rfc_state
|
||||
|
||||
|
||||
def create_notifications(sender, instance, **kwargs):
|
||||
if not isinstance(instance, Document):
|
||||
return
|
||||
if getattr(instance, 'new_document', False):
|
||||
ListNotification.objects.create(
|
||||
document=instance,
|
||||
significant=True,
|
||||
desc='New document created %s: %s' % (instance.name, instance.title)
|
||||
)
|
||||
return
|
||||
if getattr(instance, 'prev_state', False) != False:
|
||||
desc = ''
|
||||
significant = False
|
||||
if instance.prev_state != instance.state:
|
||||
desc += 'State changed from %s to %s\n' % (instance.prev_state, instance.state)
|
||||
if instance.prev_wg_state != instance.wg_state:
|
||||
desc += 'WG state changed from %s to %s\n' % (instance.prev_wg_state, instance.wg_state)
|
||||
if instance.iesg_state.name in ['Adopted by a WG', 'In WG Last Call',
|
||||
'WG Consensus: Waiting for Write-up',
|
||||
'Parked WG document', 'Dead WG document']:
|
||||
significant = True
|
||||
if instance.prev_iesg_state != instance.iesg_state:
|
||||
desc += 'IESG state changed from %s to %s\n' % (instance.prev_iesg_state, instance.iesg_state)
|
||||
if instance.iesg_state.name in ['RFC Published', 'Dead', 'Approved-announcement sent',
|
||||
'Publication Requested', 'In Last Call', 'IESG Evaluation',
|
||||
'Sent to the RFC Editor']:
|
||||
significant = True
|
||||
if instance.prev_iana_state != instance.iana_state:
|
||||
desc += 'Iana state changed from %s to %s\n' % (instance.prev_iana_state, instance.iana_state)
|
||||
if instance.prev_rfc_state != instance.rfc_state:
|
||||
desc += 'RFC state changed from %s to %s\n' % (instance.prev_rfc_state, instance.rfc_state)
|
||||
if desc:
|
||||
ListNotification.objects.create(
|
||||
document=instance,
|
||||
significant=significant,
|
||||
desc=desc
|
||||
)
|
||||
signals.pre_save.connect(save_previous_states)
|
||||
signals.post_save.connect(create_notifications)
|
||||
|
||||
|
||||
class DocumentChangeDates(models.Model):
|
||||
|
||||
document = models.ForeignKey(Document)
|
||||
new_version_date = models.DateTimeField(blank=True, null=True)
|
||||
normal_change_date = models.DateTimeField(blank=True, null=True)
|
||||
significant_change_date = models.DateTimeField(blank=True, null=True)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
from django.db.models import Q
|
||||
|
||||
from redesign.doc.models import Document
|
||||
|
||||
|
||||
class RuleManager(object):
|
||||
|
||||
codename = ''
|
||||
|
@ -10,33 +15,48 @@ class RuleManager(object):
|
|||
return value
|
||||
|
||||
def get_documents(self):
|
||||
return []
|
||||
return Document.objects.none()
|
||||
|
||||
|
||||
class WgAsociatedRule(RuleManager):
|
||||
codename = 'wg_asociated'
|
||||
description = 'All I-Ds associated with an particular WG'
|
||||
description = 'All I-Ds associated with a particular WG'
|
||||
|
||||
def get_documents(self):
|
||||
return Document.objects.filter(group__acronym=self.value)
|
||||
|
||||
|
||||
class AreaAsociatedRule(RuleManager):
|
||||
codename = 'area_asociated'
|
||||
description = 'All I-Ds associated with all WGs in an particular Area'
|
||||
description = 'All I-Ds associated with all WGs in a particular Area'
|
||||
|
||||
def get_documents(self):
|
||||
return Document.objects.filter(group__parent__acronym=self.value, group__parent__type='area')
|
||||
|
||||
|
||||
class AdResponsibleRule(RuleManager):
|
||||
codename = 'ad_responsible'
|
||||
description = 'All I-Ds with a particular responsible AD'
|
||||
|
||||
def get_documents(self):
|
||||
return Document.objects.filter(ad__name__icontains=self.value)
|
||||
|
||||
|
||||
class AuthorRule(RuleManager):
|
||||
codename = 'author'
|
||||
description = 'All I-Ds with a particular author'
|
||||
|
||||
def get_documents(self):
|
||||
return Document.objects.filter(authors__person__name__icontains=self.value)
|
||||
|
||||
|
||||
class ShepherdRule(RuleManager):
|
||||
codename = 'shepherd'
|
||||
description = 'All I-Ds with a particular document shepherd'
|
||||
|
||||
def get_documents(self):
|
||||
return Document.objects.filter(shepherd__name__icontains=self.value)
|
||||
|
||||
|
||||
class ReferenceToRFCRule(RuleManager):
|
||||
codename = 'reference_to_rfc'
|
||||
|
@ -62,5 +82,8 @@ class WithTextRule(RuleManager):
|
|||
codename = 'with_text'
|
||||
description = 'All I-Ds that contain a particular text string'
|
||||
|
||||
def get_documents(self):
|
||||
return Document.objects.filter(Q(title__icontains=self.value) | Q(abstract__icontains=self.value))
|
||||
|
||||
|
||||
TYPES_OF_RULES = [(i.codename, i.description) for i in RuleManager.__subclasses__()]
|
||||
|
|
Loading…
Reference in a new issue