Skip to content

Commit 22b2953

Browse files
committed
Merged in ^/branch/scow/track-manual-id-posts-6.31.1.dev0, which provides secretariat support for managing draft submissions outside of the automated datatracker draft submission tool. In addition to making the secreatiat handling of draft submissions that come in by email or other paths easier, it also improves the datatracker submission and document history for these documents.
- Legacy-Id: 11959
2 parents a1efbca + c1ce79f commit 22b2953

42 files changed

Lines changed: 1966 additions & 192 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import models, migrations
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('message', '__first__'),
11+
('doc', '0013_auto_20151027_1127'),
12+
]
13+
14+
operations = [
15+
migrations.CreateModel(
16+
name='AddedMessageEvent',
17+
fields=[
18+
('docevent_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='doc.DocEvent')),
19+
('msgtype', models.CharField(max_length=25)),
20+
('in_reply_to', models.ForeignKey(related_name='doc_irtomanual', blank=True, to='message.Message', null=True)),
21+
('message', models.ForeignKey(related_name='doc_manualevents', blank=True, to='message.Message', null=True)),
22+
],
23+
options={
24+
},
25+
bases=('doc.docevent',),
26+
),
27+
migrations.AlterField(
28+
model_name='docevent',
29+
name='type',
30+
field=models.CharField(max_length=50, choices=[(b'new_revision', b'Added new revision'), (b'changed_document', b'Changed document metadata'), (b'added_comment', b'Added comment'), (b'added_message', b'Added message'), (b'deleted', b'Deleted document'), (b'changed_state', b'Changed state'), (b'changed_stream', b'Changed document stream'), (b'expired_document', b'Expired document'), (b'extended_expiry', b'Extended expiry of document'), (b'requested_resurrect', b'Requested resurrect'), (b'completed_resurrect', b'Completed resurrect'), (b'changed_consensus', b'Changed consensus'), (b'published_rfc', b'Published RFC'), (b'added_suggested_replaces', b'Added suggested replacement relationships'), (b'reviewed_suggested_replaces', b'Reviewed suggested replacement relationships'), (b'changed_group', b'Changed group'), (b'changed_protocol_writeup', b'Changed protocol writeup'), (b'changed_charter_milestone', b'Changed charter milestone'), (b'initial_review', b'Set initial review time'), (b'changed_review_announcement', b'Changed WG Review text'), (b'changed_action_announcement', b'Changed WG Action text'), (b'started_iesg_process', b'Started IESG process on document'), (b'created_ballot', b'Created ballot'), (b'closed_ballot', b'Closed ballot'), (b'sent_ballot_announcement', b'Sent ballot announcement'), (b'changed_ballot_position', b'Changed ballot position'), (b'changed_ballot_approval_text', b'Changed ballot approval text'), (b'changed_ballot_writeup_text', b'Changed ballot writeup text'), (b'changed_rfc_editor_note_text', b'Changed RFC Editor Note text'), (b'changed_last_call_text', b'Changed last call text'), (b'requested_last_call', b'Requested last call'), (b'sent_last_call', b'Sent last call'), (b'scheduled_for_telechat', b'Scheduled for telechat'), (b'iesg_approved', b'IESG approved document (no problem)'), (b'iesg_disapproved', b'IESG disapproved document (do not publish)'), (b'approved_in_minute', b'Approved in minute'), (b'iana_review', b'IANA review comment'), (b'rfc_in_iana_registry', b'RFC is in IANA registry'), (b'rfc_editor_received_announcement', b'Announcement was received by RFC Editor'), (b'requested_publication', b'Publication at RFC Editor requested')]),
31+
preserve_default=True,
32+
),
33+
]

ietf/doc/migrations/0014_auto_20160824_2218.py renamed to ietf/doc/migrations/0015_auto_20160824_2218.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
class Migration(migrations.Migration):
88

99
dependencies = [
10-
('doc', '0013_auto_20151027_1127'),
10+
('doc', '0014_auto_20160524_2147'),
1111
]
1212

1313
operations = [

ietf/doc/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,7 @@ class DocReminder(models.Model):
631631
("new_revision", "Added new revision"),
632632
("changed_document", "Changed document metadata"),
633633
("added_comment", "Added comment"),
634+
("added_message", "Added message"),
634635

635636
("deleted", "Deleted document"),
636637

@@ -823,6 +824,13 @@ class InitialReviewDocEvent(DocEvent):
823824
expires = models.DateTimeField(blank=True, null=True)
824825

825826

827+
class AddedMessageEvent(DocEvent):
828+
import ietf.message.models
829+
message = models.ForeignKey(ietf.message.models.Message, null=True, blank=True,related_name='doc_manualevents')
830+
msgtype = models.CharField(max_length=25)
831+
in_reply_to = models.ForeignKey(ietf.message.models.Message, null=True, blank=True,related_name='doc_irtomanual')
832+
833+
826834
# dumping store for removed events
827835
class DeletedEvent(models.Model):
828836
content_type = models.ForeignKey(ContentType)

ietf/doc/resources.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
DocumentAuthor, DocEvent, StateDocEvent, DocHistory, ConsensusDocEvent, DocAlias,
1212
TelechatDocEvent, DocReminder, LastCallDocEvent, NewRevisionDocEvent, WriteupDocEvent,
1313
InitialReviewDocEvent, DocHistoryAuthor, BallotDocEvent, RelatedDocument,
14-
RelatedDocHistory, BallotPositionDocEvent)
14+
RelatedDocHistory, BallotPositionDocEvent, AddedMessageEvent)
1515

1616

1717
from ietf.name.resources import BallotPositionNameResource, DocTypeNameResource
@@ -513,3 +513,32 @@ class Meta:
513513
}
514514
api.doc.register(BallotPositionDocEventResource())
515515

516+
517+
518+
from ietf.person.resources import PersonResource
519+
from ietf.message.resources import MessageResource
520+
class AddedMessageEventResource(ModelResource):
521+
by = ToOneField(PersonResource, 'by')
522+
doc = ToOneField(DocumentResource, 'doc')
523+
docevent_ptr = ToOneField(DocEventResource, 'docevent_ptr')
524+
message = ToOneField(MessageResource, 'message', null=True)
525+
in_reply_to = ToOneField(MessageResource, 'in_reply_to', null=True)
526+
class Meta:
527+
queryset = AddedMessageEvent.objects.all()
528+
serializer = api.Serializer()
529+
cache = SimpleCache()
530+
#resource_name = 'addedmessageevent'
531+
filtering = {
532+
"id": ALL,
533+
"time": ALL,
534+
"type": ALL,
535+
"desc": ALL,
536+
"msgtype": ALL,
537+
"by": ALL_WITH_RELATIONS,
538+
"doc": ALL_WITH_RELATIONS,
539+
"docevent_ptr": ALL_WITH_RELATIONS,
540+
"message": ALL_WITH_RELATIONS,
541+
"in_reply_to": ALL_WITH_RELATIONS,
542+
}
543+
api.doc.register(AddedMessageEventResource())
544+

ietf/doc/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,16 @@ def add_links_in_new_revision_events(doc, events, diff_revisions):
278278
prev = diff_url
279279

280280

281+
def add_events_message_info(events):
282+
for e in events:
283+
if not e.type == "added_message":
284+
continue
285+
286+
e.message = e.addedmessageevent.message
287+
e.msgtype = e.addedmessageevent.msgtype
288+
e.in_reply_to = e.addedmessageevent.in_reply_to
289+
290+
281291
def get_document_content(key, filename, split=True, markup=True):
282292
try:
283293
with open(filename, 'rb') as f:

ietf/doc/views_doc.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@
5050
from ietf.doc.utils import ( add_links_in_new_revision_events, augment_events_with_revision,
5151
can_adopt_draft, get_chartering_type, get_document_content, get_tags_for_stream_id,
5252
needed_ballot_positions, nice_consensus, prettify_std_name, update_telechat, has_same_ballot,
53-
get_initial_notify, make_notify_changed_event, crawl_history, default_consensus)
53+
get_initial_notify, make_notify_changed_event, crawl_history, default_consensus,
54+
add_events_message_info)
5455
from ietf.community.utils import augment_docs_with_tracking_info
5556
from ietf.group.models import Role
5657
from ietf.group.utils import can_manage_group, can_manage_materials
@@ -657,6 +658,7 @@ def document_history(request, name):
657658

658659
augment_events_with_revision(doc, events)
659660
add_links_in_new_revision_events(doc, events, diff_revisions)
661+
add_events_message_info(events)
660662

661663
# figure out if the current user can add a comment to the history
662664
if doc.type_id == "draft" and doc.group != None:
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import migrations
5+
6+
7+
def forward(apps, schema_editor):
8+
9+
Recipient=apps.get_model('mailtrigger','Recipient')
10+
11+
rc = Recipient.objects.create
12+
13+
rc(slug='submission_manualpost_handling',
14+
desc='IETF manual post handling',
15+
template='<ietf-manualpost@ietf.org>')
16+
17+
18+
def reverse(apps, schema_editor):
19+
Recipient=apps.get_model('mailtrigger','Recipient')
20+
21+
Recipient.objects.filter(slug='submission_manualpost_handling').delete()
22+
23+
24+
class Migration(migrations.Migration):
25+
26+
dependencies = [
27+
('mailtrigger', '0005_interim_trigger'),
28+
]
29+
30+
operations = [
31+
migrations.RunPython(forward, reverse)
32+
]

ietf/mailtrigger/utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ def starts_with(prefix):
8080
rule_list.append((mailtrigger.slug,mailtrigger.desc,addrs.to,addrs.cc))
8181
return sorted(rule_list)
8282

83+
def get_base_submission_message_address():
84+
return Recipient.objects.get(slug='submission_manualpost_handling').gather()[0]
85+
8386
def get_base_ipr_request_address():
8487
return Recipient.objects.get(slug='ipr_requests').gather()[0]
8588

ietf/message/models.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,19 @@ class Meta:
2828
def __unicode__(self):
2929
return "'%s' %s -> %s" % (self.subject, self.frm, self.to)
3030

31+
32+
class MessageAttachment(models.Model):
33+
message = models.ForeignKey(Message)
34+
filename = models.CharField(max_length=255, db_index=True, blank=True)
35+
content_type = models.CharField(max_length=255, blank=True)
36+
encoding = models.CharField(max_length=255, blank=True)
37+
removed = models.BooleanField(default=False)
38+
body = models.TextField()
39+
40+
def __unicode__(self):
41+
return self.filename
42+
43+
3144
class SendQueue(models.Model):
3245
time = models.DateTimeField(default=datetime.datetime.now)
3346
by = models.ForeignKey(Person)

ietf/message/resources.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@
77

88
from ietf import api
99

10-
from ietf.message.models import Message, SendQueue
11-
12-
10+
from ietf.message.models import Message, SendQueue, MessageAttachment
1311
from ietf.person.resources import PersonResource
1412
from ietf.group.resources import GroupResource
1513
from ietf.doc.resources import DocumentResource
14+
1615
class MessageResource(ModelResource):
1716
by = ToOneField(PersonResource, 'by')
1817
related_groups = ToManyField(GroupResource, 'related_groups', null=True)
@@ -59,3 +58,21 @@ class Meta:
5958
}
6059
api.message.register(SendQueueResource())
6160

61+
62+
63+
class MessageAttachmentResource(ModelResource):
64+
message = ToOneField(MessageResource, 'message')
65+
class Meta:
66+
queryset = MessageAttachment.objects.all()
67+
serializer = api.Serializer()
68+
cache = SimpleCache()
69+
#resource_name = 'messageattachment'
70+
filtering = {
71+
"id": ALL,
72+
"filename": ALL,
73+
"removed": ALL,
74+
"body": ALL,
75+
"message": ALL_WITH_RELATIONS,
76+
}
77+
api.message.register(MessageAttachmentResource())
78+

0 commit comments

Comments
 (0)