Python2/3 compatibility: used @python_2_unicode_compatible to provide __unicode__() versions of __str__() methods.
- Legacy-Id: 16455
This commit is contained in:
parent
2cfb81fc83
commit
ea8c84d2f6
|
@ -5,3 +5,4 @@ su - -c "apt-get update \
|
||||||
&& apt-get install -qy graphviz ghostscript apache2-utils \
|
&& apt-get install -qy graphviz ghostscript apache2-utils \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/*"
|
&& rm -rf /var/lib/apt/lists/*"
|
||||||
|
|
|
@ -1,14 +1,21 @@
|
||||||
# Copyright The IETF Trust 2012-2019, All Rights Reserved
|
# Copyright The IETF Trust 2012-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import signals
|
from django.db.models import signals
|
||||||
from django.urls import reverse as urlreverse
|
from django.urls import reverse as urlreverse
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from ietf.doc.models import Document, DocEvent, State
|
from ietf.doc.models import Document, DocEvent, State
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
from ietf.person.models import Person, Email
|
from ietf.person.models import Person, Email
|
||||||
from ietf.utils.models import ForeignKey
|
from ietf.utils.models import ForeignKey
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class CommunityList(models.Model):
|
class CommunityList(models.Model):
|
||||||
user = ForeignKey(User, blank=True, null=True)
|
user = ForeignKey(User, blank=True, null=True)
|
||||||
group = ForeignKey(Group, blank=True, null=True)
|
group = ForeignKey(Group, blank=True, null=True)
|
||||||
|
@ -34,6 +41,7 @@ class CommunityList(models.Model):
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class SearchRule(models.Model):
|
class SearchRule(models.Model):
|
||||||
# these types define the UI for setting up the rule, and also
|
# these types define the UI for setting up the rule, and also
|
||||||
# helps when interpreting the rule and matching documents
|
# helps when interpreting the rule and matching documents
|
||||||
|
@ -79,6 +87,7 @@ class SearchRule(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s %s %s/%s/%s/%s" % (self.community_list, self.rule_type, self.state, self.group, self.person, self.text)
|
return "%s %s %s/%s/%s/%s" % (self.community_list, self.rule_type, self.state, self.group, self.person, self.text)
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class EmailSubscription(models.Model):
|
class EmailSubscription(models.Model):
|
||||||
community_list = ForeignKey(CommunityList)
|
community_list = ForeignKey(CommunityList)
|
||||||
email = ForeignKey(Email)
|
email = ForeignKey(Email)
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright The IETF Trust 2012-2019, All Rights Reserved
|
# Copyright The IETF Trust 2012-2019, All Rights Reserved
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.template import Context
|
from django.template import Context
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
from ietf.name.models import DBTemplateTypeName
|
from ietf.name.models import DBTemplateTypeName
|
||||||
|
@ -19,6 +19,7 @@ TEMPLATE_TYPES = (
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class DBTemplate(models.Model):
|
class DBTemplate(models.Model):
|
||||||
path = models.CharField( max_length=255, unique=True, blank=False, null=False, )
|
path = models.CharField( max_length=255, unique=True, blank=False, null=False, )
|
||||||
title = models.CharField( max_length=255, blank=False, null=False, )
|
title = models.CharField( max_length=255, blank=False, null=False, )
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# Copyright The IETF Trust 2007-2019, All Rights Reserved
|
# Copyright The IETF Trust 2007-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
# Portion Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
|
# Portion Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
# All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
# All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
||||||
#
|
#
|
||||||
|
@ -32,11 +33,15 @@
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class TelechatAgendaItem(models.Model):
|
class TelechatAgendaItem(models.Model):
|
||||||
TYPE_CHOICES = (
|
TYPE_CHOICES = (
|
||||||
(1, "Any Other Business (WG News, New Proposals, etc.)"),
|
(1, "Any Other Business (WG News, New Proposals, etc.)"),
|
||||||
|
@ -51,7 +56,7 @@ class TelechatAgendaItem(models.Model):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
type_name = self.TYPE_CHOICES_DICT.get(self.type, str(self.type))
|
type_name = self.TYPE_CHOICES_DICT.get(self.type, str(self.type))
|
||||||
return '%s: %s' % (type_name, self.title or "")
|
return "%s: %s" % (type_name, self.title or "")
|
||||||
|
|
||||||
class Telechat(models.Model):
|
class Telechat(models.Model):
|
||||||
telechat_id = models.IntegerField(primary_key=True)
|
telechat_id = models.IntegerField(primary_key=True)
|
||||||
|
@ -77,6 +82,7 @@ class TelechatDateManager(models.Manager):
|
||||||
def active(self):
|
def active(self):
|
||||||
return self.get_queryset().filter(date__gte=datetime.date.today())
|
return self.get_queryset().filter(date__gte=datetime.date.today())
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class TelechatDate(models.Model):
|
class TelechatDate(models.Model):
|
||||||
objects = TelechatDateManager()
|
objects = TelechatDateManager()
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
# Copyright The IETF Trust 2007-2019, All Rights Reserved
|
# Copyright The IETF Trust 2007-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.urls import reverse
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.urls import reverse
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from ietf.doc.models import DocAlias
|
from ietf.doc.models import DocAlias
|
||||||
from ietf.name.models import DocRelationshipName,IprDisclosureStateName,IprLicenseTypeName,IprEventTypeName
|
from ietf.name.models import DocRelationshipName,IprDisclosureStateName,IprLicenseTypeName,IprEventTypeName
|
||||||
|
@ -12,6 +17,7 @@ from ietf.person.models import Person
|
||||||
from ietf.message.models import Message
|
from ietf.message.models import Message
|
||||||
from ietf.utils.models import ForeignKey
|
from ietf.utils.models import ForeignKey
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class IprDisclosureBase(models.Model):
|
class IprDisclosureBase(models.Model):
|
||||||
by = ForeignKey(Person) # who was logged in, or System if nobody was logged in
|
by = ForeignKey(Person) # who was logged in, or System if nobody was logged in
|
||||||
compliant = models.BooleanField("Complies to RFC3979", default=True)
|
compliant = models.BooleanField("Complies to RFC3979", default=True)
|
||||||
|
@ -148,6 +154,7 @@ class GenericIprDisclosure(IprDisclosureBase):
|
||||||
holder_contact_info = models.TextField(blank=True, help_text="Address, phone, etc.")
|
holder_contact_info = models.TextField(blank=True, help_text="Address, phone, etc.")
|
||||||
statement = models.TextField() # includes licensing info
|
statement = models.TextField() # includes licensing info
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class IprDocRel(models.Model):
|
class IprDocRel(models.Model):
|
||||||
disclosure = ForeignKey(IprDisclosureBase)
|
disclosure = ForeignKey(IprDisclosureBase)
|
||||||
document = ForeignKey(DocAlias)
|
document = ForeignKey(DocAlias)
|
||||||
|
@ -178,6 +185,7 @@ class IprDocRel(models.Model):
|
||||||
else:
|
else:
|
||||||
return "%s which applies to %s" % (self.disclosure, self.document.name)
|
return "%s which applies to %s" % (self.disclosure, self.document.name)
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class RelatedIpr(models.Model):
|
class RelatedIpr(models.Model):
|
||||||
source = ForeignKey(IprDisclosureBase,related_name='relatedipr_source_set')
|
source = ForeignKey(IprDisclosureBase,related_name='relatedipr_source_set')
|
||||||
target = ForeignKey(IprDisclosureBase,related_name='relatedipr_target_set')
|
target = ForeignKey(IprDisclosureBase,related_name='relatedipr_target_set')
|
||||||
|
@ -186,6 +194,7 @@ class RelatedIpr(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s %s %s" % (self.source.title, self.relationship.name.lower(), self.target.title)
|
return "%s %s %s" % (self.source.title, self.relationship.name.lower(), self.target.title)
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class IprEvent(models.Model):
|
class IprEvent(models.Model):
|
||||||
time = models.DateTimeField(auto_now_add=True)
|
time = models.DateTimeField(auto_now_add=True)
|
||||||
type = ForeignKey(IprEventTypeName)
|
type = ForeignKey(IprEventTypeName)
|
||||||
|
|
|
@ -1,8 +1,13 @@
|
||||||
# Copyright The IETF Trust 2007-2019, All Rights Reserved
|
# Copyright The IETF Trust 2007-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.urls import reverse as urlreverse
|
from django.urls import reverse as urlreverse
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
|
|
||||||
from ietf.person.models import Email, Person
|
from ietf.person.models import Email, Person
|
||||||
|
@ -24,6 +29,7 @@ STATE_EVENT_MAPPING = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class LiaisonStatement(models.Model):
|
class LiaisonStatement(models.Model):
|
||||||
title = models.CharField(max_length=255)
|
title = models.CharField(max_length=255)
|
||||||
from_groups = models.ManyToManyField(Group, blank=True, related_name='liaisonstatement_from_set')
|
from_groups = models.ManyToManyField(Group, blank=True, related_name='liaisonstatement_from_set')
|
||||||
|
@ -47,7 +53,6 @@ class LiaisonStatement(models.Model):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['id']
|
ordering = ['id']
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.title or "<no title>"
|
return self.title or "<no title>"
|
||||||
|
@ -198,6 +203,7 @@ class LiaisonStatement(models.Model):
|
||||||
approval_set.intersection_update(group.liaison_approvers())
|
approval_set.intersection_update(group.liaison_approvers())
|
||||||
return list(set([ r.email.address for r in approval_set ]))
|
return list(set([ r.email.address for r in approval_set ]))
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class LiaisonStatementAttachment(models.Model):
|
class LiaisonStatementAttachment(models.Model):
|
||||||
statement = ForeignKey(LiaisonStatement)
|
statement = ForeignKey(LiaisonStatement)
|
||||||
document = ForeignKey(Document)
|
document = ForeignKey(Document)
|
||||||
|
@ -207,6 +213,7 @@ class LiaisonStatementAttachment(models.Model):
|
||||||
return self.document.name
|
return self.document.name
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class RelatedLiaisonStatement(models.Model):
|
class RelatedLiaisonStatement(models.Model):
|
||||||
source = ForeignKey(LiaisonStatement, related_name='source_of_set')
|
source = ForeignKey(LiaisonStatement, related_name='source_of_set')
|
||||||
target = ForeignKey(LiaisonStatement, related_name='target_of_set')
|
target = ForeignKey(LiaisonStatement, related_name='target_of_set')
|
||||||
|
@ -216,6 +223,7 @@ class RelatedLiaisonStatement(models.Model):
|
||||||
return "%s %s %s" % (self.source.title, self.relationship.name.lower(), self.target.title)
|
return "%s %s %s" % (self.source.title, self.relationship.name.lower(), self.target.title)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class LiaisonStatementGroupContacts(models.Model):
|
class LiaisonStatementGroupContacts(models.Model):
|
||||||
group = ForeignKey(Group, unique=True, null=True)
|
group = ForeignKey(Group, unique=True, null=True)
|
||||||
contacts = models.CharField(max_length=255,blank=True)
|
contacts = models.CharField(max_length=255,blank=True)
|
||||||
|
@ -225,6 +233,7 @@ class LiaisonStatementGroupContacts(models.Model):
|
||||||
return "%s" % self.group.name
|
return "%s" % self.group.name
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class LiaisonStatementEvent(models.Model):
|
class LiaisonStatementEvent(models.Model):
|
||||||
time = models.DateTimeField(auto_now_add=True)
|
time = models.DateTimeField(auto_now_add=True)
|
||||||
type = ForeignKey(LiaisonStatementEventTypeName)
|
type = ForeignKey(LiaisonStatementEventTypeName)
|
||||||
|
|
|
@ -1,22 +1,29 @@
|
||||||
# Copyright The IETF Trust 2016-2019, All Rights Reserved
|
# Copyright The IETF Trust 2016-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.validators import validate_email
|
from django.core.validators import validate_email
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from ietf.person.models import Person
|
from ietf.person.models import Person
|
||||||
from ietf.utils.models import ForeignKey
|
from ietf.utils.models import ForeignKey
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class List(models.Model):
|
class List(models.Model):
|
||||||
name = models.CharField(max_length=32)
|
name = models.CharField(max_length=32)
|
||||||
description = models.CharField(max_length=256)
|
description = models.CharField(max_length=256)
|
||||||
advertised = models.BooleanField(default=True)
|
advertised = models.BooleanField(default=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "<List: %s>" % self.name
|
return "<List: %s>" % self.name
|
||||||
def info_url(self):
|
def info_url(self):
|
||||||
return settings.MAILING_LIST_INFO_URL % {'list_addr': self.name }
|
return settings.MAILING_LIST_INFO_URL % {'list_addr': self.name }
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Subscribed(models.Model):
|
class Subscribed(models.Model):
|
||||||
time = models.DateTimeField(auto_now_add=True)
|
time = models.DateTimeField(auto_now_add=True)
|
||||||
email = models.CharField(max_length=64, validators=[validate_email])
|
email = models.CharField(max_length=64, validators=[validate_email])
|
||||||
|
@ -26,6 +33,7 @@ class Subscribed(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name_plural = "Subscribed"
|
verbose_name_plural = "Subscribed"
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Whitelisted(models.Model):
|
class Whitelisted(models.Model):
|
||||||
time = models.DateTimeField(auto_now_add=True)
|
time = models.DateTimeField(auto_now_add=True)
|
||||||
email = models.CharField("Email address", max_length=64, validators=[validate_email])
|
email = models.CharField("Email address", max_length=64, validators=[validate_email])
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
# Copyright The IETF Trust 2015-2019, All Rights Reserved
|
# Copyright The IETF Trust 2015-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.template import Template, Context
|
from django.template import Template, Context
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from email.utils import parseaddr
|
from email.utils import parseaddr
|
||||||
from ietf.utils.mail import formataddr, get_email_addresses_from_text
|
from ietf.utils.mail import formataddr, get_email_addresses_from_text
|
||||||
|
@ -28,6 +33,7 @@ def clean_duplicates(addrlist):
|
||||||
addresses.append(addr)
|
addresses.append(addr)
|
||||||
return addresses
|
return addresses
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class MailTrigger(models.Model):
|
class MailTrigger(models.Model):
|
||||||
slug = models.CharField(max_length=32, primary_key=True)
|
slug = models.CharField(max_length=32, primary_key=True)
|
||||||
desc = models.TextField(blank=True)
|
desc = models.TextField(blank=True)
|
||||||
|
@ -40,6 +46,7 @@ class MailTrigger(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.slug
|
return self.slug
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Recipient(models.Model):
|
class Recipient(models.Model):
|
||||||
slug = models.CharField(max_length=32, primary_key=True)
|
slug = models.CharField(max_length=32, primary_key=True)
|
||||||
desc = models.TextField(blank=True)
|
desc = models.TextField(blank=True)
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
# Copyright The IETF Trust 2012-2019, All Rights Reserved
|
# Copyright The IETF Trust 2012-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import email.utils
|
import email.utils
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
import debug # pyflakes:ignore
|
import debug # pyflakes:ignore
|
||||||
|
|
||||||
|
@ -13,6 +19,7 @@ from ietf.name.models import RoleName
|
||||||
from ietf.utils.models import ForeignKey
|
from ietf.utils.models import ForeignKey
|
||||||
from ietf.utils.mail import get_email_addresses_from_text
|
from ietf.utils.mail import get_email_addresses_from_text
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Message(models.Model):
|
class Message(models.Model):
|
||||||
time = models.DateTimeField(default=datetime.datetime.now)
|
time = models.DateTimeField(default=datetime.datetime.now)
|
||||||
by = ForeignKey(Person)
|
by = ForeignKey(Person)
|
||||||
|
@ -41,6 +48,7 @@ class Message(models.Model):
|
||||||
return r if isinstance(r, list) else get_email_addresses_from_text(r)
|
return r if isinstance(r, list) else get_email_addresses_from_text(r)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class MessageAttachment(models.Model):
|
class MessageAttachment(models.Model):
|
||||||
message = ForeignKey(Message)
|
message = ForeignKey(Message)
|
||||||
filename = models.CharField(max_length=255, db_index=True, blank=True)
|
filename = models.CharField(max_length=255, db_index=True, blank=True)
|
||||||
|
@ -53,6 +61,7 @@ class MessageAttachment(models.Model):
|
||||||
return self.filename
|
return self.filename
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class SendQueue(models.Model):
|
class SendQueue(models.Model):
|
||||||
time = models.DateTimeField(default=datetime.datetime.now)
|
time = models.DateTimeField(default=datetime.datetime.now)
|
||||||
by = ForeignKey(Person)
|
by = ForeignKey(Person)
|
||||||
|
@ -71,6 +80,7 @@ class SendQueue(models.Model):
|
||||||
return "'%s' %s -> %s (sent at %s)" % (self.message.subject, self.message.frm, self.message.to, self.sent_at or "<not yet>")
|
return "'%s' %s -> %s (sent at %s)" % (self.message.subject, self.message.frm, self.message.to, self.sent_at or "<not yet>")
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class AnnouncementFrom(models.Model):
|
class AnnouncementFrom(models.Model):
|
||||||
name = ForeignKey(RoleName)
|
name = ForeignKey(RoleName)
|
||||||
group = ForeignKey(Group)
|
group = ForeignKey(Group)
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
# Copyright The IETF Trust 2010-2019, All Rights Reserved
|
# Copyright The IETF Trust 2010-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from ietf.utils.models import ForeignKey
|
from ietf.utils.models import ForeignKey
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class NameModel(models.Model):
|
class NameModel(models.Model):
|
||||||
slug = models.CharField(max_length=32, primary_key=True)
|
slug = models.CharField(max_length=32, primary_key=True)
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# Copyright The IETF Trust 2012-2019, All Rights Reserved
|
# Copyright The IETF Trust 2012-2019, All Rights Reserved
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
@ -8,6 +10,7 @@ from django.conf import settings
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.template.defaultfilters import linebreaks
|
from django.template.defaultfilters import linebreaks
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
import debug # pyflakes:ignore
|
import debug # pyflakes:ignore
|
||||||
|
|
||||||
|
@ -40,6 +43,7 @@ class ReminderDates(models.Model):
|
||||||
nomcom = ForeignKey('NomCom')
|
nomcom = ForeignKey('NomCom')
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class NomCom(models.Model):
|
class NomCom(models.Model):
|
||||||
public_key = models.FileField(storage=NoLocationMigrationFileSystemStorage(location=settings.NOMCOM_PUBLIC_KEYS_DIR),
|
public_key = models.FileField(storage=NoLocationMigrationFileSystemStorage(location=settings.NOMCOM_PUBLIC_KEYS_DIR),
|
||||||
upload_to=upload_path_handler, blank=True, null=True)
|
upload_to=upload_path_handler, blank=True, null=True)
|
||||||
|
@ -82,14 +86,14 @@ class NomCom(models.Model):
|
||||||
def pending_email_count(self):
|
def pending_email_count(self):
|
||||||
return self.feedback_set.filter(type__isnull=True).count()
|
return self.feedback_set.filter(type__isnull=True).count()
|
||||||
|
|
||||||
def encrypt(self, cleartext:str) -> bytes:
|
def encrypt(self, cleartext):
|
||||||
try:
|
try:
|
||||||
cert_file = self.public_key.path
|
cert_file = self.public_key.path
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
raise ValueError("Trying to read the NomCom public key: " + str(e))
|
raise ValueError("Trying to read the NomCom public key: " + str(e))
|
||||||
|
|
||||||
command = "%s smime -encrypt -in /dev/stdin %s" % (settings.OPENSSL_COMMAND, cert_file)
|
command = "%s smime -encrypt -in /dev/stdin %s" % (settings.OPENSSL_COMMAND, cert_file)
|
||||||
code, out, error = pipe(command, cleartext.encode())
|
code, out, error = pipe(command, cleartext.encode('utf-8'))
|
||||||
if code != 0:
|
if code != 0:
|
||||||
log("openssl error: %s:\n Error %s: %s" %(command, code, error))
|
log("openssl error: %s:\n Error %s: %s" %(command, code, error))
|
||||||
if not error:
|
if not error:
|
||||||
|
@ -106,6 +110,7 @@ def delete_nomcom(sender, **kwargs):
|
||||||
post_delete.connect(delete_nomcom, sender=NomCom)
|
post_delete.connect(delete_nomcom, sender=NomCom)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Nomination(models.Model):
|
class Nomination(models.Model):
|
||||||
position = ForeignKey('Position')
|
position = ForeignKey('Position')
|
||||||
candidate_name = models.CharField(verbose_name='Candidate name', max_length=255)
|
candidate_name = models.CharField(verbose_name='Candidate name', max_length=255)
|
||||||
|
@ -130,6 +135,7 @@ class Nomination(models.Model):
|
||||||
return "%s (%s)" % (self.candidate_name, self.candidate_email)
|
return "%s (%s)" % (self.candidate_name, self.candidate_email)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Nominee(models.Model):
|
class Nominee(models.Model):
|
||||||
|
|
||||||
email = ForeignKey(Email)
|
email = ForeignKey(Email)
|
||||||
|
@ -147,9 +153,9 @@ class Nominee(models.Model):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.email.person and self.email.person.name:
|
if self.email.person and self.email.person.name:
|
||||||
return '%s <%s> %s' % (self.email.person.plain_name(), self.email.address, self.nomcom.year())
|
return "%s <%s> %s" % (self.email.person.plain_name(), self.email.address, self.nomcom.year())
|
||||||
else:
|
else:
|
||||||
return '%s %s' % (self.email.address, self.nomcom.year())
|
return "%s %s" % (self.email.address, self.nomcom.year())
|
||||||
|
|
||||||
def name(self):
|
def name(self):
|
||||||
if self.email.person and self.email.person.name:
|
if self.email.person and self.email.person.name:
|
||||||
|
@ -157,6 +163,7 @@ class Nominee(models.Model):
|
||||||
else:
|
else:
|
||||||
return self.email.address
|
return self.email.address
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class NomineePosition(models.Model):
|
class NomineePosition(models.Model):
|
||||||
|
|
||||||
position = ForeignKey('Position')
|
position = ForeignKey('Position')
|
||||||
|
@ -186,6 +193,7 @@ class NomineePosition(models.Model):
|
||||||
nominees__in=[self.nominee])
|
nominees__in=[self.nominee])
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Position(models.Model):
|
class Position(models.Model):
|
||||||
nomcom = ForeignKey('NomCom')
|
nomcom = ForeignKey('NomCom')
|
||||||
name = models.CharField(verbose_name='Name', max_length=255, help_text='This short description will appear on the Nomination and Feedback pages. Be as descriptive as necessary. Past examples: "Transport AD", "IAB Member"')
|
name = models.CharField(verbose_name='Name', max_length=255, help_text='This short description will appear on the Nomination and Feedback pages. Be as descriptive as necessary. Past examples: "Transport AD", "IAB Member"')
|
||||||
|
@ -232,6 +240,7 @@ class Position(models.Model):
|
||||||
rendered = linebreaks(rendered)
|
rendered = linebreaks(rendered)
|
||||||
return rendered
|
return rendered
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Topic(models.Model):
|
class Topic(models.Model):
|
||||||
nomcom = ForeignKey('NomCom')
|
nomcom = ForeignKey('NomCom')
|
||||||
subject = models.CharField(verbose_name='Name', max_length=255, help_text='This short description will appear on the Feedback pages.')
|
subject = models.CharField(verbose_name='Name', max_length=255, help_text='This short description will appear on the Feedback pages.')
|
||||||
|
@ -261,6 +270,7 @@ class Topic(models.Model):
|
||||||
rendered = linebreaks(rendered)
|
rendered = linebreaks(rendered)
|
||||||
return rendered
|
return rendered
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Feedback(models.Model):
|
class Feedback(models.Model):
|
||||||
nomcom = ForeignKey('NomCom')
|
nomcom = ForeignKey('NomCom')
|
||||||
author = models.EmailField(verbose_name='Author', blank=True)
|
author = models.EmailField(verbose_name='Author', blank=True)
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
# Copyright The IETF Trust 2007-2019, All Rights Reserved
|
# Copyright The IETF Trust 2007-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from ietf.utils.models import ForeignKey
|
from ietf.utils.models import ForeignKey
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Redirect(models.Model):
|
class Redirect(models.Model):
|
||||||
"""Mapping of CGI script to url. The "rest" is a
|
"""Mapping of CGI script to url. The "rest" is a
|
||||||
sprintf-style string with %(param)s entries to insert
|
sprintf-style string with %(param)s entries to insert
|
||||||
|
@ -24,6 +30,7 @@ class Redirect(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s -> %s/%s" % (self.cgi, self.url, self.rest)
|
return "%s -> %s/%s" % (self.cgi, self.url, self.rest)
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Suffix(models.Model):
|
class Suffix(models.Model):
|
||||||
"""This is a "rest" and "remove" (see Redirect class)
|
"""This is a "rest" and "remove" (see Redirect class)
|
||||||
for requests with command=.
|
for requests with command=.
|
||||||
|
@ -35,6 +42,7 @@ class Suffix(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name_plural="Suffixes"
|
verbose_name_plural="Suffixes"
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Command(models.Model):
|
class Command(models.Model):
|
||||||
"""When a request comes in with a command= argument,
|
"""When a request comes in with a command= argument,
|
||||||
the command is looked up in this table to see if there
|
the command is looked up in this table to see if there
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
# Copyright The IETF Trust 2016-2019, All Rights Reserved
|
# Copyright The IETF Trust 2016-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from simple_history.models import HistoricalRecords
|
from simple_history.models import HistoricalRecords
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from ietf.doc.models import Document
|
from ietf.doc.models import Document
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
|
@ -13,6 +18,7 @@ from ietf.name.models import ReviewTypeName, ReviewRequestStateName, ReviewResul
|
||||||
from ietf.utils.validators import validate_regular_expression_string
|
from ietf.utils.validators import validate_regular_expression_string
|
||||||
from ietf.utils.models import ForeignKey, OneToOneField
|
from ietf.utils.models import ForeignKey, OneToOneField
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class ReviewerSettings(models.Model):
|
class ReviewerSettings(models.Model):
|
||||||
"""Keeps track of admin data associated with a reviewer in a team."""
|
"""Keeps track of admin data associated with a reviewer in a team."""
|
||||||
history = HistoricalRecords()
|
history = HistoricalRecords()
|
||||||
|
@ -39,6 +45,7 @@ class ReviewerSettings(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name_plural = "reviewer settings"
|
verbose_name_plural = "reviewer settings"
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class ReviewSecretarySettings(models.Model):
|
class ReviewSecretarySettings(models.Model):
|
||||||
"""Keeps track of admin data associated with a secretary in a team."""
|
"""Keeps track of admin data associated with a secretary in a team."""
|
||||||
team = ForeignKey(Group, limit_choices_to=~models.Q(reviewteamsettings=None))
|
team = ForeignKey(Group, limit_choices_to=~models.Q(reviewteamsettings=None))
|
||||||
|
@ -51,6 +58,7 @@ class ReviewSecretarySettings(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name_plural = "review secretary settings"
|
verbose_name_plural = "review secretary settings"
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class UnavailablePeriod(models.Model):
|
class UnavailablePeriod(models.Model):
|
||||||
team = ForeignKey(Group, limit_choices_to=~models.Q(reviewteamsettings=None))
|
team = ForeignKey(Group, limit_choices_to=~models.Q(reviewteamsettings=None))
|
||||||
person = ForeignKey(Person)
|
person = ForeignKey(Person)
|
||||||
|
@ -81,6 +89,7 @@ class UnavailablePeriod(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "{} is unavailable in {} {} - {}".format(self.person, self.team.acronym, self.start_date or "", self.end_date or "")
|
return "{} is unavailable in {} {} - {}".format(self.person, self.team.acronym, self.start_date or "", self.end_date or "")
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class ReviewWish(models.Model):
|
class ReviewWish(models.Model):
|
||||||
"""Reviewer wishes to review a document when it becomes available for review."""
|
"""Reviewer wishes to review a document when it becomes available for review."""
|
||||||
time = models.DateTimeField(default=datetime.datetime.now)
|
time = models.DateTimeField(default=datetime.datetime.now)
|
||||||
|
@ -95,6 +104,7 @@ class ReviewWish(models.Model):
|
||||||
verbose_name_plural = "review wishes"
|
verbose_name_plural = "review wishes"
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class NextReviewerInTeam(models.Model):
|
class NextReviewerInTeam(models.Model):
|
||||||
team = ForeignKey(Group, limit_choices_to=~models.Q(reviewteamsettings=None))
|
team = ForeignKey(Group, limit_choices_to=~models.Q(reviewteamsettings=None))
|
||||||
next_reviewer = ForeignKey(Person)
|
next_reviewer = ForeignKey(Person)
|
||||||
|
@ -106,6 +116,7 @@ class NextReviewerInTeam(models.Model):
|
||||||
verbose_name = "next reviewer in team setting"
|
verbose_name = "next reviewer in team setting"
|
||||||
verbose_name_plural = "next reviewer in team settings"
|
verbose_name_plural = "next reviewer in team settings"
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class ReviewRequest(models.Model):
|
class ReviewRequest(models.Model):
|
||||||
"""Represents a request for a review and the process it goes through."""
|
"""Represents a request for a review and the process it goes through."""
|
||||||
state = ForeignKey(ReviewRequestStateName)
|
state = ForeignKey(ReviewRequestStateName)
|
||||||
|
@ -130,6 +141,7 @@ class ReviewRequest(models.Model):
|
||||||
def request_closed_time(self):
|
def request_closed_time(self):
|
||||||
return self.doc.request_closed_time(self) or self.time
|
return self.doc.request_closed_time(self) or self.time
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class ReviewAssignment(models.Model):
|
class ReviewAssignment(models.Model):
|
||||||
""" One of possibly many reviews assigned in response to a ReviewRequest """
|
""" One of possibly many reviews assigned in response to a ReviewRequest """
|
||||||
review_request = ForeignKey(ReviewRequest)
|
review_request = ForeignKey(ReviewRequest)
|
||||||
|
@ -152,6 +164,7 @@ def get_default_review_types():
|
||||||
def get_default_review_results():
|
def get_default_review_results():
|
||||||
return ReviewResultName.objects.filter(slug__in=['not-ready', 'right-track', 'almost-ready', 'ready-issues', 'ready-nits', 'ready'])
|
return ReviewResultName.objects.filter(slug__in=['not-ready', 'right-track', 'almost-ready', 'ready-issues', 'ready-nits', 'ready'])
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class ReviewTeamSettings(models.Model):
|
class ReviewTeamSettings(models.Model):
|
||||||
"""Holds configuration specific to groups that are review teams"""
|
"""Holds configuration specific to groups that are review teams"""
|
||||||
group = OneToOneField(Group)
|
group = OneToOneField(Group)
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
# Copyright The IETF Trust 2013-2019, All Rights Reserved
|
# Copyright The IETF Trust 2013-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from ietf.meeting.models import Meeting
|
from ietf.meeting.models import Meeting
|
||||||
|
|
||||||
|
@ -57,6 +63,7 @@ class InterimMeeting(Meeting):
|
||||||
else:
|
else:
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Registration(models.Model):
|
class Registration(models.Model):
|
||||||
rsn = models.AutoField(primary_key=True)
|
rsn = models.AutoField(primary_key=True)
|
||||||
fname = models.CharField(max_length=255)
|
fname = models.CharField(max_length=255)
|
||||||
|
|
|
@ -831,6 +831,7 @@ MEETING_VALID_MIME_TYPE_EXTENSIONS = {
|
||||||
INTERNET_DRAFT_DAYS_TO_EXPIRE = 185
|
INTERNET_DRAFT_DAYS_TO_EXPIRE = 185
|
||||||
|
|
||||||
FLOORPLAN_MEDIA_DIR = 'floor'
|
FLOORPLAN_MEDIA_DIR = 'floor'
|
||||||
|
FLOORPLAN_DIR = os.path.join(MEDIA_ROOT, FLOORPLAN_MEDIA_DIR)
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
# Copyright The IETF Trust 2017-2019, All Rights Reserved
|
# Copyright The IETF Trust 2017-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
import debug # pyflakes:ignore
|
import debug # pyflakes:ignore
|
||||||
|
|
||||||
|
@ -10,6 +15,7 @@ from ietf.person.models import Person
|
||||||
from ietf.utils.models import ForeignKey
|
from ietf.utils.models import ForeignKey
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class AffiliationAlias(models.Model):
|
class AffiliationAlias(models.Model):
|
||||||
"""Records that alias should be treated as name for statistical
|
"""Records that alias should be treated as name for statistical
|
||||||
purposes."""
|
purposes."""
|
||||||
|
@ -27,6 +33,7 @@ class AffiliationAlias(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name_plural = "affiliation aliases"
|
verbose_name_plural = "affiliation aliases"
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class AffiliationIgnoredEnding(models.Model):
|
class AffiliationIgnoredEnding(models.Model):
|
||||||
"""Records that ending should be stripped from the affiliation for statistical purposes."""
|
"""Records that ending should be stripped from the affiliation for statistical purposes."""
|
||||||
|
|
||||||
|
@ -35,6 +42,7 @@ class AffiliationIgnoredEnding(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.ending
|
return self.ending
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class CountryAlias(models.Model):
|
class CountryAlias(models.Model):
|
||||||
"""Records that alias should be treated as country for statistical
|
"""Records that alias should be treated as country for statistical
|
||||||
purposes."""
|
purposes."""
|
||||||
|
@ -48,6 +56,7 @@ class CountryAlias(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name_plural = "country aliases"
|
verbose_name_plural = "country aliases"
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class MeetingRegistration(models.Model):
|
class MeetingRegistration(models.Model):
|
||||||
"""Registration attendee records from the IETF registration system"""
|
"""Registration attendee records from the IETF registration system"""
|
||||||
meeting = ForeignKey(Meeting)
|
meeting = ForeignKey(Meeting)
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
# Copyright The IETF Trust 2011-2019, All Rights Reserved
|
# Copyright The IETF Trust 2011-2019, All Rights Reserved
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import email
|
import email
|
||||||
|
import jsonfield
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
import jsonfield
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
import debug # pyflakes:ignore
|
import debug # pyflakes:ignore
|
||||||
|
|
||||||
|
@ -24,6 +30,7 @@ def parse_email_line(line):
|
||||||
name, addr = email.utils.parseaddr(line) if '@' in line else (line, '')
|
name, addr = email.utils.parseaddr(line) if '@' in line else (line, '')
|
||||||
return dict(name=name, email=addr)
|
return dict(name=name, email=addr)
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Submission(models.Model):
|
class Submission(models.Model):
|
||||||
state = ForeignKey(DraftSubmissionStateName)
|
state = ForeignKey(DraftSubmissionStateName)
|
||||||
remote_ip = models.CharField(max_length=100, blank=True)
|
remote_ip = models.CharField(max_length=100, blank=True)
|
||||||
|
@ -71,6 +78,7 @@ class Submission(models.Model):
|
||||||
checks = [ self.checks.filter(checker=c).latest('time') for c in self.checks.values_list('checker', flat=True).distinct() ]
|
checks = [ self.checks.filter(checker=c).latest('time') for c in self.checks.values_list('checker', flat=True).distinct() ]
|
||||||
return checks
|
return checks
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class SubmissionCheck(models.Model):
|
class SubmissionCheck(models.Model):
|
||||||
time = models.DateTimeField(default=datetime.datetime.now)
|
time = models.DateTimeField(default=datetime.datetime.now)
|
||||||
submission = ForeignKey(Submission, related_name='checks')
|
submission = ForeignKey(Submission, related_name='checks')
|
||||||
|
@ -89,6 +97,7 @@ class SubmissionCheck(models.Model):
|
||||||
def has_errors(self):
|
def has_errors(self):
|
||||||
return self.errors != '[]'
|
return self.errors != '[]'
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class SubmissionEvent(models.Model):
|
class SubmissionEvent(models.Model):
|
||||||
submission = ForeignKey(Submission)
|
submission = ForeignKey(Submission)
|
||||||
time = models.DateTimeField(default=datetime.datetime.now)
|
time = models.DateTimeField(default=datetime.datetime.now)
|
||||||
|
@ -102,6 +111,7 @@ class SubmissionEvent(models.Model):
|
||||||
ordering = ("-time", "-id")
|
ordering = ("-time", "-id")
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Preapproval(models.Model):
|
class Preapproval(models.Model):
|
||||||
"""Pre-approved draft submission name."""
|
"""Pre-approved draft submission name."""
|
||||||
name = models.CharField(max_length=255, db_index=True)
|
name = models.CharField(max_length=255, db_index=True)
|
||||||
|
@ -111,6 +121,7 @@ class Preapproval(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class SubmissionEmailEvent(SubmissionEvent):
|
class SubmissionEmailEvent(SubmissionEvent):
|
||||||
message = ForeignKey(Message, null=True, blank=True,related_name='manualevents')
|
message = ForeignKey(Message, null=True, blank=True,related_name='manualevents')
|
||||||
msgtype = models.CharField(max_length=25)
|
msgtype = models.CharField(max_length=25)
|
||||||
|
|
Loading…
Reference in a new issue