@@ -27,9 +27,8 @@ class DocumentInfo(models.Model):
2727 abstract = models .TextField ()
2828 rev = models .CharField (max_length = 16 )
2929 pages = models .IntegerField (blank = True , null = True )
30- intended_std_level = models .ForeignKey (IntendedStatusName , blank = True , null = True )
31- std_level = models .ForeignKey (StdStatusName , blank = True , null = True )
32- authors = models .ManyToManyField (Email , blank = True , null = True )
30+ intended_std_level = models .ForeignKey (IntendedStdLevelName , blank = True , null = True )
31+ std_level = models .ForeignKey (StdLevelName , blank = True , null = True )
3332 ad = models .ForeignKey (Email , related_name = 'ad_%(class)s_set' , blank = True , null = True )
3433 shepherd = models .ForeignKey (Email , related_name = 'shepherd_%(class)s_set' , blank = True , null = True )
3534 notify = models .CharField (max_length = 255 , blank = True )
@@ -42,9 +41,10 @@ class Meta:
4241 def author_list (self ):
4342 return ", " .join (email .address for email in self .authors .all ())
4443 def latest_event (self , * args , ** filter_args ):
45- """Get latest event with specific requirements, e.g.
46- d.latest_event(type="xyz") returns an Event while
47- d.latest_event(Status, type="xyz") returns a Status event."""
44+ """Get latest event of optional Python type and with filter
45+ arguments, e.g. d.latest_event(type="xyz") returns an Event
46+ while d.latest_event(Status, type="xyz") returns a Status
47+ event."""
4848 model = args [0 ] if args else Event
4949 e = model .objects .filter (doc = self ).filter (** filter_args ).order_by ('-time' )[:1 ]
5050 return e [0 ] if e else None
@@ -56,9 +56,21 @@ class RelatedDocument(models.Model):
5656 def __unicode__ (self ):
5757 return u"%s %s %s" % (self .document .name , self .relationship .name .lower (), self .doc_alias .name )
5858
59+ class DocumentAuthor (models .Model ):
60+ document = models .ForeignKey ('Document' )
61+ author = models .ForeignKey (Email )
62+ order = models .IntegerField ()
63+
64+ def __unicode__ (self ):
65+ return u"%s %s (%s)" % (self .document .name , self .email .get_name (), self .order )
66+
67+ class Meta :
68+ ordering = ["document" , "order" ]
69+
5970class Document (DocumentInfo ):
6071 name = models .CharField (max_length = 255 , primary_key = True ) # immutable
6172 related = models .ManyToManyField ('DocAlias' , through = RelatedDocument , blank = True , related_name = "reversely_related_document_set" )
73+ authors = models .ManyToManyField (Email , through = DocumentAuthor , blank = True )
6274 def __unicode__ (self ):
6375 return self .name
6476 def values (self ):
@@ -89,7 +101,7 @@ def save_with_history(self, force_insert=False, force_update=False):
89101 snap = DocHistory (** fields )
90102 snap .save ()
91103 for m in many2many :
92- # FIXME: check that this works with related
104+ # FIXME: check that this works with related/authors
93105 #print "m2m:", m, many2many[m]
94106 rel = getattr (snap , m )
95107 for item in many2many [m ]:
@@ -107,11 +119,23 @@ class RelatedDocHistory(models.Model):
107119 doc_alias = models .ForeignKey ('DocAlias' , related_name = "reversely_related_document_history_set" ) # target
108120 relationship = models .ForeignKey (DocRelationshipName )
109121 def __unicode__ (self ):
110- return u"%s %s %s" % (self .document .name , self .relationship .name .lower (), self .doc_alias .name )
122+ return u"%s %s %s" % (self .document .doc . name , self .relationship .name .lower (), self .doc_alias .name )
111123
124+ class DocHistoryAuthor (models .Model ):
125+ document = models .ForeignKey ('DocHistory' )
126+ author = models .ForeignKey (Email )
127+ order = models .IntegerField ()
128+
129+ def __unicode__ (self ):
130+ return u"%s %s (%s)" % (self .document .doc .name , self .email .get_name (), self .order )
131+
132+ class Meta :
133+ ordering = ["document" , "order" ]
134+
112135class DocHistory (DocumentInfo ):
113136 doc = models .ForeignKey (Document ) # ID of the Document this relates to
114137 related = models .ManyToManyField ('DocAlias' , through = RelatedDocHistory , blank = True )
138+ authors = models .ManyToManyField (Email , through = DocHistoryAuthor , blank = True )
115139 def __unicode__ (self ):
116140 return unicode (self .doc .name )
117141
@@ -169,6 +193,7 @@ class SendQueue(models.Model):
169193 ("published_rfc" , "Published RFC" ),
170194
171195 # IESG events
196+ ("started_iesg_process" , "Started IESG process on document" ),
172197 ("sent_ballot_announcement" , "Sent ballot announcement" ),
173198 ("changed_ballot_position" , "Changed ballot position" ),
174199 ("changed_ballot_approval_text" , "Changed ballot approval text" ),
0 commit comments