Replaced the use of plain DocEvent for submission doc events with a SubmissionDocEvent that carries rev and a FK to submission.

- Legacy-Id: 12275
This commit is contained in:
Henrik Levkowetz 2016-11-07 18:21:34 +00:00
parent 4af0c0244b
commit 7f1c1e43f2
6 changed files with 89 additions and 20 deletions

View file

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('submit', '0016_fix_duplicate_upload_docevents'),
('doc', '0014_auto_20160524_2147'),
]
operations = [
migrations.CreateModel(
name='SubmissionDocEvent',
fields=[
('docevent_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='doc.DocEvent')),
('rev', models.CharField(max_length=16)),
('submission', models.ForeignKey(to='submit.Submission')),
],
options={
},
bases=('doc.docevent',),
),
migrations.AlterField(
model_name='docevent',
name='type',
field=models.CharField(max_length=50, choices=[(b'new_revision', b'Added new revision'), (b'new_submission', b'Uploaded 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'), (b'sync_from_rfc_editor', b'Received updated information from RFC Editor')]),
preserve_default=True,
),
]

View file

@ -663,6 +663,7 @@ class DocReminder(models.Model):
EVENT_TYPES = [
# core events
("new_revision", "Added new revision"),
("new_submission", "Uploaded new revision"),
("changed_document", "Changed document metadata"),
("added_comment", "Added comment"),
("added_message", "Added message"),
@ -865,6 +866,11 @@ class AddedMessageEvent(DocEvent):
in_reply_to = models.ForeignKey(ietf.message.models.Message, null=True, blank=True,related_name='doc_irtomanual')
class SubmissionDocEvent(DocEvent):
import ietf.submit.models
rev = models.CharField(max_length=16)
submission = models.ForeignKey(ietf.submit.models.Submission)
# dumping store for removed events
class DeletedEvent(models.Model):
content_type = models.ForeignKey(ContentType)

View file

@ -11,7 +11,7 @@ from ietf.doc.models import (BallotType, DeletedEvent, StateType, State, Documen
DocumentAuthor, DocEvent, StateDocEvent, DocHistory, ConsensusDocEvent, DocAlias,
TelechatDocEvent, DocReminder, LastCallDocEvent, NewRevisionDocEvent, WriteupDocEvent,
InitialReviewDocEvent, DocHistoryAuthor, BallotDocEvent, RelatedDocument,
RelatedDocHistory, BallotPositionDocEvent, AddedMessageEvent)
RelatedDocHistory, BallotPositionDocEvent, AddedMessageEvent, SubmissionDocEvent)
from ietf.name.resources import BallotPositionNameResource, DocTypeNameResource
@ -542,3 +542,30 @@ class AddedMessageEventResource(ModelResource):
}
api.doc.register(AddedMessageEventResource())
from ietf.person.resources import PersonResource
from ietf.submit.resources import SubmissionResource
class SubmissionDocEventResource(ModelResource):
by = ToOneField(PersonResource, 'by')
doc = ToOneField(DocumentResource, 'doc')
docevent_ptr = ToOneField(DocEventResource, 'docevent_ptr')
submission = ToOneField(SubmissionResource, 'submission')
class Meta:
queryset = SubmissionDocEvent.objects.all()
serializer = api.Serializer()
cache = SimpleCache()
#resource_name = 'submissiondocevent'
filtering = {
"id": ALL,
"time": ALL,
"type": ALL,
"desc": ALL,
"rev": ALL,
"by": ALL_WITH_RELATIONS,
"doc": ALL_WITH_RELATIONS,
"docevent_ptr": ALL_WITH_RELATIONS,
"submission": ALL_WITH_RELATIONS,
}
api.doc.register(SubmissionDocEventResource())

View file

@ -238,12 +238,12 @@ def augment_events_with_revision(doc, events):
while event_revisions and (e.time, e.id) < (event_revisions[-1]["time"], event_revisions[-1]["id"]):
event_revisions.pop()
if event_revisions:
cur_rev = event_revisions[-1]["rev"]
else:
cur_rev = "00"
e.rev = cur_rev
if not hasattr(e, 'rev'):
if event_revisions:
cur_rev = event_revisions[-1]["rev"]
else:
cur_rev = "00"
e.rev = cur_rev
def add_links_in_new_revision_events(doc, events, diff_revisions):
"""Add direct .txt links and diff links to new_revision events."""

View file

@ -374,7 +374,7 @@ class SubmitTests(TestCase):
self.assertEqual(r.status_code, 302)
# check we have document events
doc_events = draft.docevent_set.filter(type="added_comment")
doc_events = draft.docevent_set.filter(type__in=["new_submission", "added_comment"])
edescs = '::'.join([x.desc for x in doc_events])
self.assertTrue('New version approved' in edescs)
self.assertTrue('Uploaded new revision' in edescs)
@ -386,17 +386,17 @@ class SubmitTests(TestCase):
docevents = list(draft.docevent_set.all().order_by("-time", "-id"))
# Latest events are first (this is the default, but we make it explicit)
# Assert event content in chronological order:
self.assertEqual(docevents[4].type, "added_comment")
self.assertEqual(docevents[4].type, "new_submission")
self.assertIn("Uploaded new revision", docevents[4].desc)
self.assertEqual(docevents[4].by.name, "Submitter Name")
self.assertGreater(docevents[4].id, docevents[5].id)
#
self.assertEqual(docevents[3].type, "added_comment")
self.assertEqual(docevents[3].type, "new_submission")
self.assertIn("Request for posting confirmation", docevents[3].desc)
self.assertEqual(docevents[3].by.name, "(System)")
self.assertGreater(docevents[3].id, docevents[4].id)
#
self.assertEqual(docevents[2].type, "added_comment")
self.assertEqual(docevents[2].type, "new_submission")
self.assertIn("New version approved", docevents[2].desc)
self.assertEqual(docevents[2].by.name, "(System)")
self.assertGreater(docevents[2].id, docevents[3].id)

View file

@ -5,7 +5,7 @@ from django.conf import settings
import debug # pyflakes:ignore
from ietf.doc.models import ( Document, State, DocAlias, DocEvent,
from ietf.doc.models import ( Document, State, DocAlias, DocEvent, SubmissionDocEvent,
DocumentAuthor, AddedMessageEvent )
from ietf.doc.models import NewRevisionDocEvent
from ietf.doc.models import RelatedDocument, DocRelationshipName
@ -129,11 +129,13 @@ def docevent_from_submission(request, submission, desc, who=None):
else:
by = system
e = DocEvent.objects.create(
e = SubmissionDocEvent.objects.create(
doc=draft,
by = by,
type = "added_comment",
type = "new_submission",
desc = desc,
submission = submission,
rev = submission.rev,
)
return e
@ -145,12 +147,12 @@ def post_rev00_submission_events(draft, submission, submitter):
desc = subevent.desc
if desc.startswith("Uploaded submission"):
desc = "Uploaded new revision"
e = DocEvent(type="added_comment", doc=draft)
e = SubmissionDocEvent(type="new_submission", doc=draft, submission=submission, rev=submission.rev )
elif desc.startswith("Submission created"):
e = DocEvent(type="added_comment", doc=draft)
e = SubmissionDocEvent(type="new_submission", doc=draft, submission=submission, rev=submission.rev)
elif desc.startswith("Set submitter to"):
pos = subevent.desc.find("sent confirmation email")
e = DocEvent(type="added_comment", doc=draft)
e = SubmissionDocEvent(type="new_submission", doc=draft, submission=submission, rev=submission.rev)
if pos > 0:
desc = "Request for posting confirmation emailed %s" % (subevent.desc[pos + 23:])
else:
@ -224,11 +226,13 @@ def post_submission(request, submission, approvedDesc):
events += post_rev00_submission_events(draft, submission, submitter)
# Add an approval docevent
e = DocEvent.objects.create(
type="added_comment",
e = SubmissionDocEvent.objects.create(
type="new_submission",
doc=draft,
by=system,
desc=approvedDesc
desc=approvedDesc,
submission=submission,
rev=submission.rev,
)
events.append(e)