Added DocEvent rev= parameter througout the code.
- Legacy-Id: 12978
This commit is contained in:
parent
ff31644ccf
commit
4daf66d11c
11
PLAN
11
PLAN
|
@ -7,13 +7,10 @@ Updated: $Date$
|
|||
Planned work in rough order
|
||||
===========================
|
||||
|
||||
* Add a 'rev' field to DocEvent, migrate 'rev' information from New
|
||||
Revision and Submit DocEvents, and infer 'rev' information for others
|
||||
|
||||
* Break out the htmlzation code used on tools in a library, and use that
|
||||
in the datatracker rendering, replacing the simpler code currently in use.
|
||||
This is also going to require some fancy caching, to avoid re-building the
|
||||
html if not needed, as it takes quite some time.
|
||||
* Break out the htmlzation code used on tools.ietf.org in a library, and use
|
||||
that in the datatracker rendering, replacing the simpler code currently in
|
||||
use. This is also going to require some fancy caching, to avoid re-building
|
||||
the html if not needed, as it takes quite some time.
|
||||
|
||||
* Use the htmlization lib to improve the rendering of draft text in the
|
||||
datatracker's /doc/draft-foo-bar/ pages.
|
||||
|
|
|
@ -143,7 +143,7 @@ def expire_draft(doc):
|
|||
if e:
|
||||
events.append(e)
|
||||
|
||||
events.append(DocEvent.objects.create(doc=doc, by=system, type="expired_document", desc="Document has expired"))
|
||||
events.append(DocEvent.objects.create(doc=doc, rev=doc.rev, by=system, type="expired_document", desc="Document has expired"))
|
||||
|
||||
doc.set_state(State.objects.get(used=True, type="draft", slug="expired"))
|
||||
doc.save_with_history(events)
|
||||
|
|
|
@ -79,6 +79,10 @@ class DocEventFactory(factory.DjangoModelFactory):
|
|||
doc = factory.SubFactory(DocumentFactory)
|
||||
desc = factory.Faker('sentence',nb_words=6)
|
||||
|
||||
@factory.lazy_attribute
|
||||
def rev(self):
|
||||
return self.doc.rev
|
||||
|
||||
class NewRevisionDocEventFactory(DocEventFactory):
|
||||
class Meta:
|
||||
model = NewRevisionDocEvent
|
||||
|
|
|
@ -28,6 +28,7 @@ def request_last_call(request, doc):
|
|||
e.type = "requested_last_call"
|
||||
e.by = request.user.person
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.desc = "Last call was requested"
|
||||
e.save()
|
||||
|
||||
|
|
|
@ -112,6 +112,7 @@ def generate_ballot_writeup(request, doc):
|
|||
e.type = "changed_ballot_writeup_text"
|
||||
e.by = request.user.person
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.desc = u"Ballot writeup was generated"
|
||||
e.text = unicode(render_to_string("doc/mail/ballot_writeup.txt", {'iana': iana}))
|
||||
|
||||
|
@ -123,6 +124,7 @@ def generate_ballot_rfceditornote(request, doc):
|
|||
e.type = "changed_ballot_rfceditornote_text"
|
||||
e.by = request.user.person
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.desc = u"RFC Editor Note for ballot was generated"
|
||||
e.text = unicode(render_to_string("doc/mail/ballot_rfceditornote.txt"))
|
||||
e.save()
|
||||
|
@ -167,6 +169,7 @@ def generate_last_call_announcement(request, doc):
|
|||
e.type = "changed_last_call_text"
|
||||
e.by = request.user.person
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.desc = u"Last call announcement was generated"
|
||||
e.text = unicode(mail)
|
||||
|
||||
|
@ -186,6 +189,7 @@ def generate_approval_mail(request, doc):
|
|||
e.type = "changed_ballot_approval_text"
|
||||
e.by = request.user.person
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.desc = u"Ballot approval text was generated"
|
||||
e.text = unicode(mail)
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ from ietf.group.models import Group
|
|||
from ietf.name.models import ( DocTypeName, DocTagName, StreamName, IntendedStdLevelName, StdLevelName,
|
||||
DocRelationshipName, DocReminderTypeName, BallotPositionName, ReviewRequestStateName )
|
||||
from ietf.person.models import Email, Person
|
||||
from ietf.utils import log
|
||||
from ietf.utils.admin import admin_link
|
||||
from ietf.utils.validators import validate_no_control_chars
|
||||
|
||||
|
@ -760,7 +761,7 @@ class DocEvent(models.Model):
|
|||
type = models.CharField(max_length=50, choices=EVENT_TYPES)
|
||||
by = models.ForeignKey(Person)
|
||||
doc = models.ForeignKey('doc.Document')
|
||||
rev = models.CharField(verbose_name="revision", max_length=16, blank=True)
|
||||
rev = models.CharField(verbose_name="revision", max_length=16, null=True, blank=True)
|
||||
desc = models.TextField()
|
||||
|
||||
def for_current_revision(self):
|
||||
|
@ -773,6 +774,10 @@ class DocEvent(models.Model):
|
|||
def __unicode__(self):
|
||||
return u"%s %s by %s at %s" % (self.doc.name, self.get_type_display().lower(), self.by.plain_name(), self.time)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(DocEvent, self).save(*args, **kwargs)
|
||||
log.assertion('self.rev != None')
|
||||
|
||||
class Meta:
|
||||
ordering = ['-time', '-id']
|
||||
|
||||
|
@ -854,7 +859,7 @@ class BallotDocEvent(DocEvent):
|
|||
norecord = BallotPositionName.objects.get(slug="norecord")
|
||||
for ad in active_ads:
|
||||
if ad not in seen:
|
||||
e = BallotPositionDocEvent(type="changed_ballot_position", doc=self.doc, ad=ad)
|
||||
e = BallotPositionDocEvent(type="changed_ballot_position", doc=self.doc, rev=self.doc.rev, ad=ad)
|
||||
e.by = ad
|
||||
e.pos = norecord
|
||||
e.old_ad = False
|
||||
|
|
|
@ -162,6 +162,7 @@ class DocEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"by": ALL_WITH_RELATIONS,
|
||||
"doc": ALL_WITH_RELATIONS,
|
||||
|
@ -184,6 +185,7 @@ class StateDocEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"by": ALL_WITH_RELATIONS,
|
||||
"doc": ALL_WITH_RELATIONS,
|
||||
|
@ -255,6 +257,7 @@ class ConsensusDocEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"consensus": ALL,
|
||||
"by": ALL_WITH_RELATIONS,
|
||||
|
@ -290,6 +293,7 @@ class TelechatDocEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"telechat_date": ALL,
|
||||
"returning_item": ALL,
|
||||
|
@ -331,6 +335,7 @@ class LastCallDocEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"expires": ALL,
|
||||
"by": ALL_WITH_RELATIONS,
|
||||
|
@ -375,6 +380,7 @@ class WriteupDocEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"text": ALL,
|
||||
"by": ALL_WITH_RELATIONS,
|
||||
|
@ -397,6 +403,7 @@ class InitialReviewDocEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"expires": ALL,
|
||||
"by": ALL_WITH_RELATIONS,
|
||||
|
@ -437,6 +444,7 @@ class BallotDocEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"by": ALL_WITH_RELATIONS,
|
||||
"doc": ALL_WITH_RELATIONS,
|
||||
|
@ -499,6 +507,7 @@ class BallotPositionDocEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"discuss": ALL,
|
||||
"discuss_time": ALL,
|
||||
|
@ -530,6 +539,7 @@ class AddedMessageEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"msgtype": ALL,
|
||||
"by": ALL_WITH_RELATIONS,
|
||||
|
@ -582,6 +592,7 @@ class ReviewRequestDocEventResource(ModelResource):
|
|||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"by": ALL_WITH_RELATIONS,
|
||||
"doc": ALL_WITH_RELATIONS,
|
||||
|
|
|
@ -119,11 +119,11 @@ class SearchTests(TestCase):
|
|||
def test_search_for_name(self):
|
||||
draft = make_test_data()
|
||||
make_meeting_test_data()
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
prev_rev = draft.rev
|
||||
draft.rev = "%02d" % (int(prev_rev) + 1)
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
# exact match
|
||||
r = self.client.get(urlreverse('ietf.doc.views_search.search_for_name', kwargs=dict(name=draft.name)))
|
||||
|
@ -526,7 +526,7 @@ Man Expires September 22, 2015 [Page 3]
|
|||
# draft published as RFC
|
||||
draft.set_state(State.objects.get(type="draft", slug="rfc"))
|
||||
draft.std_level_id = "bcp"
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="published_rfc", by=Person.objects.get(name="(System)"))])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="published_rfc", by=Person.objects.get(name="(System)"))])
|
||||
|
||||
|
||||
rfc_alias = DocAlias.objects.create(name="rfc123456", document=draft)
|
||||
|
@ -577,10 +577,10 @@ Man Expires September 22, 2015 [Page 3]
|
|||
]:
|
||||
doc = Document.objects.get(name=docname)
|
||||
# give it some history
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
doc.rev = "01"
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
r = self.client.get(urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=doc.name)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
@ -638,10 +638,11 @@ class DocTestCase(TestCase):
|
|||
ballot = doc.active_ballot()
|
||||
|
||||
# make sure we have some history
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
pos = BallotPositionDocEvent.objects.create(
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
ballot=ballot,
|
||||
type="changed_ballot_position",
|
||||
pos_id="yes",
|
||||
|
@ -715,6 +716,7 @@ class DocTestCase(TestCase):
|
|||
|
||||
appr = WriteupDocEvent.objects.create(
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
desc="Changed text",
|
||||
type="changed_ballot_approval_text",
|
||||
text="This is ballot approval text.",
|
||||
|
@ -722,6 +724,7 @@ class DocTestCase(TestCase):
|
|||
|
||||
notes = WriteupDocEvent.objects.create(
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
desc="Changed text",
|
||||
type="changed_ballot_writeup_text",
|
||||
text="This is ballot writeup notes.",
|
||||
|
@ -729,6 +732,7 @@ class DocTestCase(TestCase):
|
|||
|
||||
rfced_note = WriteupDocEvent.objects.create(
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
desc="Changed text",
|
||||
type="changed_rfc_editor_note_text",
|
||||
text="This is a note for the RFC Editor.",
|
||||
|
@ -746,6 +750,7 @@ class DocTestCase(TestCase):
|
|||
|
||||
e = DocEvent.objects.create(
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
desc="Something happened.",
|
||||
type="added_comment",
|
||||
by=Person.objects.get(name="(System)"))
|
||||
|
@ -760,6 +765,7 @@ class DocTestCase(TestCase):
|
|||
|
||||
e = DocEvent.objects.create(
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
desc="Something happened.",
|
||||
type="added_comment",
|
||||
by=Person.objects.get(name="(System)"))
|
||||
|
@ -775,6 +781,7 @@ class DocTestCase(TestCase):
|
|||
|
||||
LastCallDocEvent.objects.create(
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
desc="Last call",
|
||||
type="sent_last_call",
|
||||
by=Person.objects.get(user__username="secretary"),
|
||||
|
|
|
@ -127,14 +127,14 @@ class EditPositionTests(TestCase):
|
|||
def test_send_ballot_comment(self):
|
||||
draft = make_test_data()
|
||||
draft.notify = "somebody@example.com"
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
ad = Person.objects.get(name="Areað Irector")
|
||||
|
||||
ballot = draft.latest_event(BallotDocEvent, type="created_ballot")
|
||||
|
||||
BallotPositionDocEvent.objects.create(
|
||||
doc=draft, type="changed_ballot_position",
|
||||
doc=draft, rev=draft.rev, type="changed_ballot_position",
|
||||
by=ad, ad=ad, ballot=ballot, pos=BallotPositionName.objects.get(slug="discuss"),
|
||||
discuss="This draft seems to be lacking a clearer title?",
|
||||
discuss_time=datetime.datetime.now(),
|
||||
|
@ -257,6 +257,7 @@ class BallotWriteupsTests(TestCase):
|
|||
draft.set_state(State.objects.get(used=True, type="draft-iana-review", slug="not-ok"))
|
||||
DocEvent.objects.create(type="iana_review",
|
||||
doc=draft,
|
||||
rev=draft.rev,
|
||||
by=Person.objects.get(user__username="iana"),
|
||||
desc="IANA does not approve of this document, it does not make sense.",
|
||||
)
|
||||
|
@ -285,6 +286,7 @@ class BallotWriteupsTests(TestCase):
|
|||
# add a note to the RFC Editor
|
||||
WriteupDocEvent.objects.create(
|
||||
doc=draft,
|
||||
rev=draft.rev,
|
||||
desc="Changed text",
|
||||
type="changed_rfc_editor_note_text",
|
||||
text="This is a note for the RFC Editor.",
|
||||
|
@ -374,7 +376,7 @@ class BallotWriteupsTests(TestCase):
|
|||
draft.group = Group.objects.get(type="individ")
|
||||
draft.stream_id = "irtf"
|
||||
draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="iesg-eva"))
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
r = self.client.post(url, dict(regenerate_approval_text="1"))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
@ -403,6 +405,7 @@ class BallotWriteupsTests(TestCase):
|
|||
e.type = "changed_ballot_approval_text"
|
||||
e.by = Person.objects.get(name="(System)")
|
||||
e.doc = draft
|
||||
e.rev = draft.rev
|
||||
e.desc = u"Ballot approval text was generated"
|
||||
e.text = u"Test approval text."
|
||||
e.save()
|
||||
|
@ -412,6 +415,7 @@ class BallotWriteupsTests(TestCase):
|
|||
e.type = "changed_ballot_writeup_text"
|
||||
e.by = Person.objects.get(name="(System)")
|
||||
e.doc = draft
|
||||
e.rev = draft.rev
|
||||
e.desc = u"Ballot writeup was generated"
|
||||
e.text = u"Test ballot writeup text."
|
||||
e.save()
|
||||
|
@ -421,6 +425,7 @@ class BallotWriteupsTests(TestCase):
|
|||
e.type = "changed_ballot_rfceditornote_text"
|
||||
e.by = Person.objects.get(name="(System)")
|
||||
e.doc = draft
|
||||
e.rev = draft.rev
|
||||
e.desc = u"RFC Editor Note for ballot was generated"
|
||||
e.text = u"Test note to the RFC Editor text."
|
||||
e.save()
|
||||
|
@ -448,7 +453,7 @@ class BallotWriteupsTests(TestCase):
|
|||
verify_can_see(username, url)
|
||||
|
||||
# RFC Editor Notes for documents in the IRTF Stream
|
||||
e = DocEvent(doc=draft,by=Person.objects.get(name="(System)"),type='changed_stream')
|
||||
e = DocEvent(doc=draft, rev=draft.rev, by=Person.objects.get(name="(System)"), type='changed_stream')
|
||||
e.desc = u"Changed stream to <b>%s</b>" % 'irtf'
|
||||
e.save()
|
||||
|
||||
|
@ -463,7 +468,7 @@ class BallotWriteupsTests(TestCase):
|
|||
verify_can_see(username, url)
|
||||
|
||||
# RFC Editor Notes for documents in the IAB Stream
|
||||
e = DocEvent(doc=draft,by=Person.objects.get(name="(System)"),type='changed_stream')
|
||||
e = DocEvent(doc=draft, rev=draft.rev, by=Person.objects.get(name="(System)"), type='changed_stream')
|
||||
e.desc = u"Changed stream to <b>%s</b>" % 'ise'
|
||||
e.save()
|
||||
|
||||
|
@ -496,6 +501,7 @@ class ApproveBallotTests(TestCase):
|
|||
# add a note to the RFC Editor
|
||||
WriteupDocEvent.objects.create(
|
||||
doc=draft,
|
||||
rev=draft.rev,
|
||||
desc="Changed text",
|
||||
type="changed_rfc_editor_note_text",
|
||||
text="This is a note for the RFC Editor.",
|
||||
|
@ -606,6 +612,7 @@ class DeferUndeferTestCase(TestCase):
|
|||
|
||||
e = TelechatDocEvent(type="scheduled_for_telechat",
|
||||
doc = doc,
|
||||
rev = doc.rev,
|
||||
by = Person.objects.get(name="Areað Irector"),
|
||||
telechat_date = first_date,
|
||||
returning_item = False,
|
||||
|
@ -662,6 +669,7 @@ class DeferUndeferTestCase(TestCase):
|
|||
|
||||
e = TelechatDocEvent(type="scheduled_for_telechat",
|
||||
doc = doc,
|
||||
rev = doc.rev,
|
||||
by = Person.objects.get(name="Areað Irector"),
|
||||
telechat_date = second_date,
|
||||
returning_item = True,
|
||||
|
|
|
@ -206,12 +206,12 @@ class EditCharterTests(TestCase):
|
|||
# Make it so that the charter has been through internal review, and passed its external review
|
||||
# ballot on a previous telechat
|
||||
last_week = datetime.date.today()-datetime.timedelta(days=7)
|
||||
BallotDocEvent.objects.create(type='created_ballot',by=login,doc=charter,
|
||||
BallotDocEvent.objects.create(type='created_ballot',by=login,doc=charter, rev=charter.rev,
|
||||
ballot_type=BallotType.objects.get(doc_type=charter.type,slug='r-extrev'),
|
||||
time=last_week)
|
||||
TelechatDocEvent.objects.create(type='scheduled_for_telechat',doc=charter,by=login,telechat_date=last_week,returning_item=False)
|
||||
BallotDocEvent.objects.create(type='created_ballot',by=login,doc=charter,
|
||||
ballot_type=BallotType.objects.get(doc_type=charter.type,slug='approve'))
|
||||
TelechatDocEvent.objects.create(type='scheduled_for_telechat', doc=charter, rev=charter.rev, by=login, telechat_date=last_week, returning_item=False)
|
||||
BallotDocEvent.objects.create(type='created_ballot', by=login, doc=charter, rev=charter.rev,
|
||||
ballot_type=BallotType.objects.get(doc_type=charter.type, slug='approve'))
|
||||
|
||||
# Put the charter onto a future telechat and verify returning item is not set
|
||||
telechat_date = TelechatDate.objects.active()[1].date
|
||||
|
@ -459,6 +459,7 @@ class EditCharterTests(TestCase):
|
|||
ballot_type=BallotType.objects.get(doc_type="charter", slug="approve"),
|
||||
by=by,
|
||||
doc=charter,
|
||||
rev=charter.rev,
|
||||
desc="Created ballot",
|
||||
)
|
||||
|
||||
|
@ -507,6 +508,7 @@ class EditCharterTests(TestCase):
|
|||
ballot_type=BallotType.objects.get(doc_type="charter", slug="approve"),
|
||||
by=p,
|
||||
doc=charter,
|
||||
rev=charter.rev,
|
||||
desc="Created ballot",
|
||||
)
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ class ConflictReviewTests(TestCase):
|
|||
self.assertEqual(r.status_code, 404)
|
||||
|
||||
doc.stream = StreamName.objects.get(slug='ise')
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
# normal get should succeed and get a reasonable form
|
||||
r = self.client.get(url)
|
||||
|
@ -91,13 +91,13 @@ class ConflictReviewTests(TestCase):
|
|||
|
||||
# can't start conflict reviews on documents in some other stream
|
||||
doc.stream = StreamName.objects.get(slug='irtf')
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
r = self.client.get(url)
|
||||
self.assertEquals(r.status_code, 404)
|
||||
|
||||
# successful get
|
||||
doc.stream = StreamName.objects.get(slug='ise')
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
r = self.client.get(url)
|
||||
self.assertEquals(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
|
|
|
@ -423,7 +423,7 @@ class EditInfoTests(TestCase):
|
|||
draft.unset_state('draft-iesg')
|
||||
draft.set_state(State.objects.get(type='draft-stream-ietf',slug='writeupw'))
|
||||
draft.stream = StreamName.objects.get(slug='ietf')
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
r = self.client.post(url,
|
||||
dict(intended_std_level=str(draft.intended_std_level_id),
|
||||
ad=ad.pk,
|
||||
|
@ -455,7 +455,7 @@ class EditInfoTests(TestCase):
|
|||
self.assertEqual(draft.latest_event(ConsensusDocEvent, type="changed_consensus").consensus, True)
|
||||
|
||||
# reset
|
||||
e = DocEvent(doc=draft,by=Person.objects.get(name="(System)"),type='changed_document')
|
||||
e = DocEvent(doc=draft, rev=draft.rev, by=Person.objects.get(name="(System)"), type='changed_document')
|
||||
e.desc = u"Intended Status changed to <b>%s</b> from %s"% (draft.intended_std_level_id, 'bcp')
|
||||
e.save()
|
||||
|
||||
|
@ -464,7 +464,7 @@ class EditInfoTests(TestCase):
|
|||
r = self.client.post(url, dict(consensus="Unknown"))
|
||||
self.assertEqual(r.status_code, 403) # BCPs must have a consensus
|
||||
|
||||
e = DocEvent(doc=draft,by=Person.objects.get(name="(System)"),type='changed_document')
|
||||
e = DocEvent(doc=draft, rev=draft.rev, by=Person.objects.get(name="(System)"), type='changed_document')
|
||||
e.desc = u"Intended Status changed to <b>%s</b> from %s"% (draft.intended_std_level_id, 'inf')
|
||||
e.save()
|
||||
|
||||
|
@ -513,7 +513,7 @@ class ResurrectTests(TestCase):
|
|||
draft = make_test_data()
|
||||
draft.set_state(State.objects.get(used=True, type="draft", slug="expired"))
|
||||
|
||||
DocEvent.objects.create(doc=draft,
|
||||
DocEvent.objects.create(doc=draft, rev=draft.rev,
|
||||
type="requested_resurrect",
|
||||
by=Person.objects.get(name="Areað Irector"))
|
||||
|
||||
|
@ -598,7 +598,7 @@ class ExpireIDsTests(TestCase):
|
|||
# hack into expirable state
|
||||
draft.unset_state("draft-iesg")
|
||||
draft.expires = datetime.datetime.now() + datetime.timedelta(days=10)
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
self.assertEqual(len(list(get_soon_to_expire_drafts(14))), 1)
|
||||
|
||||
|
@ -622,7 +622,7 @@ class ExpireIDsTests(TestCase):
|
|||
# hack into expirable state
|
||||
draft.unset_state("draft-iesg")
|
||||
draft.expires = datetime.datetime.now()
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
self.assertEqual(len(list(get_expired_drafts())), 1)
|
||||
|
||||
|
@ -702,14 +702,11 @@ class ExpireIDsTests(TestCase):
|
|||
# expire draft
|
||||
draft.set_state(State.objects.get(used=True, type="draft", slug="expired"))
|
||||
draft.expires = datetime.datetime.now() - datetime.timedelta(days=1)
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
e = DocEvent()
|
||||
e.doc = draft
|
||||
e.by = Person.objects.get(name="(System)")
|
||||
e.type = "expired_document"
|
||||
e.text = "Document has expired"
|
||||
e.time = draft.expires
|
||||
e = DocEvent(doc=draft, rev=draft.rev, type= "expired_document", time=draft.expires,
|
||||
by=Person.objects.get(name="(System)"))
|
||||
e.text="Document has expired"
|
||||
e.save()
|
||||
|
||||
txt = "%s-%s.txt" % (draft.name, draft.rev)
|
||||
|
@ -734,10 +731,7 @@ class ExpireLastCallTests(TestCase):
|
|||
|
||||
self.assertEqual(len(list(get_expired_last_calls())), 0)
|
||||
|
||||
e = LastCallDocEvent()
|
||||
e.doc = draft
|
||||
e.by = secretary
|
||||
e.type = "sent_last_call"
|
||||
e = LastCallDocEvent(doc=draft, rev=draft.rev, type="sent_last_call", by=secretary)
|
||||
e.text = "Last call sent"
|
||||
e.expires = datetime.datetime.now() + datetime.timedelta(days=14)
|
||||
e.save()
|
||||
|
@ -745,10 +739,7 @@ class ExpireLastCallTests(TestCase):
|
|||
self.assertEqual(len(list(get_expired_last_calls())), 0)
|
||||
|
||||
# test expired
|
||||
e = LastCallDocEvent()
|
||||
e.doc = draft
|
||||
e.by = secretary
|
||||
e.type = "sent_last_call"
|
||||
e = LastCallDocEvent(doc=draft, rev=draft.rev, type="sent_last_call", by=secretary)
|
||||
e.text = "Last call sent"
|
||||
e.expires = datetime.datetime.now()
|
||||
e.save()
|
||||
|
@ -922,7 +913,7 @@ class IndividualInfoFormsTests(TestCase):
|
|||
|
||||
def test_doc_change_shepherd(self):
|
||||
self.doc.shepherd = None
|
||||
self.doc.save_with_history([DocEvent.objects.create(doc=self.doc, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
self.doc.save_with_history([DocEvent.objects.create(doc=self.doc, rev=self.doc.rev, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
url = urlreverse('ietf.doc.views_draft.edit_shepherd',kwargs=dict(name=self.docname))
|
||||
|
||||
|
@ -974,19 +965,19 @@ class IndividualInfoFormsTests(TestCase):
|
|||
|
||||
def test_doc_change_shepherd_email(self):
|
||||
self.doc.shepherd = None
|
||||
self.doc.save_with_history([DocEvent.objects.create(doc=self.doc, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
self.doc.save_with_history([DocEvent.objects.create(doc=self.doc, rev=self.doc.rev, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
url = urlreverse('ietf.doc.views_draft.change_shepherd_email',kwargs=dict(name=self.docname))
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 404)
|
||||
|
||||
self.doc.shepherd = Email.objects.get(person__user__username="ad1")
|
||||
self.doc.save_with_history([DocEvent.objects.create(doc=self.doc, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
self.doc.save_with_history([DocEvent.objects.create(doc=self.doc, rev=self.doc.rev, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
login_testing_unauthorized(self, "plain", url)
|
||||
|
||||
self.doc.shepherd = Email.objects.get(person__user__username="plain")
|
||||
self.doc.save_with_history([DocEvent.objects.create(doc=self.doc, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
self.doc.save_with_history([DocEvent.objects.create(doc=self.doc, rev=self.doc.rev, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
new_email = Email.objects.create(address="anotheremail@example.com", person=self.doc.shepherd.person)
|
||||
|
||||
|
@ -1021,7 +1012,7 @@ class IndividualInfoFormsTests(TestCase):
|
|||
# Try again when no longer a shepherd.
|
||||
|
||||
self.doc.shepherd = None
|
||||
self.doc.save_with_history([DocEvent.objects.create(doc=self.doc, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
self.doc.save_with_history([DocEvent.objects.create(doc=self.doc, rev=self.doc.rev, type="changed_shepherd", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code,200)
|
||||
q = PyQuery(r.content)
|
||||
|
@ -1130,7 +1121,7 @@ class RequestPublicationTests(TestCase):
|
|||
draft.stream = StreamName.objects.get(slug="iab")
|
||||
draft.group = Group.objects.get(acronym="iab")
|
||||
draft.intended_std_level = IntendedStdLevelName.objects.get(slug="inf")
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.set_state(State.objects.get(used=True, type="draft-stream-iab", slug="approved"))
|
||||
|
||||
url = urlreverse('ietf.doc.views_draft.request_publication', kwargs=dict(name=draft.name))
|
||||
|
@ -1171,7 +1162,7 @@ class AdoptDraftTests(TestCase):
|
|||
draft.stream = None
|
||||
draft.group = Group.objects.get(type="individ")
|
||||
draft.unset_state("draft-stream-ietf")
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
url = urlreverse('ietf.doc.views_draft.adopt_draft', kwargs=dict(name=draft.name))
|
||||
login_testing_unauthorized(self, "marschairman", url)
|
||||
|
|
|
@ -268,7 +268,7 @@ class ReviewTests(TestCase):
|
|||
document=doc,
|
||||
)
|
||||
doc.rev = "10"
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
# previous review
|
||||
ReviewRequest.objects.create(
|
||||
|
|
|
@ -105,7 +105,7 @@ class StatusChangeTests(TestCase):
|
|||
# successful change to Last Call Requested
|
||||
messages_before = len(outbox)
|
||||
doc.ad = Person.objects.get(user__username='ad')
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
lc_req_pk = str(State.objects.get(slug='lc-req',type__slug='statchg').pk)
|
||||
r = self.client.post(url,dict(new_state=lc_req_pk))
|
||||
self.assertEquals(r.status_code, 200)
|
||||
|
@ -253,7 +253,7 @@ class StatusChangeTests(TestCase):
|
|||
doc.relateddocument_set.create(target=DocAlias.objects.get(name='rfc9999'),relationship_id='tois')
|
||||
doc.relateddocument_set.create(target=DocAlias.objects.get(name='rfc9998'),relationship_id='tohist')
|
||||
doc.ad = Person.objects.get(name='Ad No2')
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
doc.save_with_history([DocEvent.objects.create(doc=doc, rev=doc.rev, type="changed_document", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
# get
|
||||
r = self.client.get(url)
|
||||
|
|
|
@ -172,16 +172,16 @@ def needed_ballot_positions(doc, active_positions):
|
|||
def create_ballot_if_not_open(doc, by, ballot_slug, time=None):
|
||||
if not doc.ballot_open(ballot_slug):
|
||||
if time:
|
||||
e = BallotDocEvent(type="created_ballot", by=by, doc=doc, time=time)
|
||||
e = BallotDocEvent(type="created_ballot", by=by, doc=doc, rev=doc.rev, time=time)
|
||||
else:
|
||||
e = BallotDocEvent(type="created_ballot", by=by, doc=doc)
|
||||
e = BallotDocEvent(type="created_ballot", by=by, doc=doc, rev=doc.rev)
|
||||
e.ballot_type = BallotType.objects.get(doc_type=doc.type, slug=ballot_slug)
|
||||
e.desc = u'Created "%s" ballot' % e.ballot_type.name
|
||||
e.save()
|
||||
|
||||
def close_ballot(doc, by, ballot_slug):
|
||||
if doc.ballot_open(ballot_slug):
|
||||
e = BallotDocEvent(type="closed_ballot", doc=doc, by=by)
|
||||
e = BallotDocEvent(type="closed_ballot", doc=doc, rev=doc.rev, by=by)
|
||||
e.ballot_type = BallotType.objects.get(doc_type=doc.type,slug=ballot_slug)
|
||||
e.desc = 'Closed "%s" ballot' % e.ballot_type.name
|
||||
e.save()
|
||||
|
@ -331,7 +331,7 @@ def add_state_change_event(doc, by, prev_state, new_state, prev_tags=[], new_tag
|
|||
def tags_suffix(tags):
|
||||
return (u"::" + u"::".join(t.name for t in tags)) if tags else u""
|
||||
|
||||
e = StateDocEvent(doc=doc, by=by)
|
||||
e = StateDocEvent(doc=doc, rev=doc.rev, by=by)
|
||||
e.type = "changed_state"
|
||||
e.state_type = (prev_state or new_state).type
|
||||
e.state = new_state
|
||||
|
@ -414,7 +414,7 @@ def make_notify_changed_event(request, doc, by, new_notify, time=None):
|
|||
else:
|
||||
event_type = 'added_comment'
|
||||
|
||||
e = DocEvent(type=event_type, doc=doc, by=by)
|
||||
e = DocEvent(type=event_type, doc=doc, rev=doc.rev, by=by)
|
||||
e.desc = "Notification list changed to %s" % (escape(new_notify) or "none")
|
||||
if doc.notify:
|
||||
e.desc += " from %s" % escape(doc.notify)
|
||||
|
@ -455,6 +455,7 @@ def update_telechat(request, doc, by, new_telechat_date, new_returning_item=None
|
|||
e.type = "scheduled_for_telechat"
|
||||
e.by = by
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.returning_item = returning
|
||||
e.telechat_date = new_telechat_date
|
||||
|
||||
|
@ -536,7 +537,7 @@ def set_replaces_for_document(request, doc, new_replaces, by, email_subject, com
|
|||
|
||||
events = []
|
||||
|
||||
e = DocEvent(doc=doc, by=by, type='changed_document')
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=by, type='changed_document')
|
||||
new_replaces_names = u", ".join(d.name for d in new_replaces) or u"None"
|
||||
old_replaces_names = u", ".join(d.name for d in old_replaces) or u"None"
|
||||
e.desc = u"This document now replaces <b>%s</b> instead of %s" % (new_replaces_names, old_replaces_names)
|
||||
|
@ -545,7 +546,7 @@ def set_replaces_for_document(request, doc, new_replaces, by, email_subject, com
|
|||
events.append(e)
|
||||
|
||||
if comment:
|
||||
events.append(DocEvent.objects.create(doc=doc, by=by, type="added_comment", desc=comment))
|
||||
events.append(DocEvent.objects.create(doc=doc, rev=doc.rev, by=by, type="added_comment", desc=comment))
|
||||
|
||||
for d in old_replaces:
|
||||
if d not in new_replaces:
|
||||
|
|
|
@ -138,6 +138,7 @@ def generate_ballot_writeup(request, doc):
|
|||
e.type = "changed_ballot_writeup_text"
|
||||
e.by = request.user.person
|
||||
e.doc = doc
|
||||
e.rev = doc.rev,
|
||||
e.desc = u"Ballot writeup was generated"
|
||||
e.text = unicode(render_to_string("doc/charter/ballot_writeup.txt"))
|
||||
|
||||
|
@ -151,7 +152,7 @@ def default_action_text(group, charter, by):
|
|||
action = "Rechartered"
|
||||
|
||||
addrs = gather_address_lists('ballot_approved_charter',doc=charter,group=group).as_strings(compact=False)
|
||||
e = WriteupDocEvent(doc=charter, by=by)
|
||||
e = WriteupDocEvent(doc=charter, rev=charter.rev, by=by)
|
||||
e.by = by
|
||||
e.type = "changed_action_announcement"
|
||||
e.desc = "%s action text was changed" % group.type.name
|
||||
|
@ -189,7 +190,7 @@ def default_review_text(group, charter, by):
|
|||
now = datetime.datetime.now()
|
||||
addrs = gather_address_lists('charter_external_review',group=group).as_strings(compact=False)
|
||||
|
||||
e1 = WriteupDocEvent(doc=charter, by=by)
|
||||
e1 = WriteupDocEvent(doc=charter, rev=charter.rev, by=by)
|
||||
e1.by = by
|
||||
e1.type = "changed_review_announcement"
|
||||
e1.desc = "%s review text was changed" % group.type.name
|
||||
|
@ -212,7 +213,7 @@ def default_review_text(group, charter, by):
|
|||
)
|
||||
e1.time = now
|
||||
|
||||
e2 = WriteupDocEvent(doc=charter, by=by)
|
||||
e2 = WriteupDocEvent(doc=charter, rev=charter.rev, by=by)
|
||||
e2.by = by
|
||||
e2.type = "changed_new_work_text"
|
||||
e2.desc = "%s review text was changed" % group.type.name
|
||||
|
|
|
@ -137,7 +137,7 @@ def edit_position(request, name, ballot_id):
|
|||
# save the vote
|
||||
clean = form.cleaned_data
|
||||
|
||||
pos = BallotPositionDocEvent(doc=doc, by=login)
|
||||
pos = BallotPositionDocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
pos.type = "changed_ballot_position"
|
||||
pos.ballot = ballot
|
||||
pos.ad = ad
|
||||
|
@ -159,7 +159,7 @@ def edit_position(request, name, ballot_id):
|
|||
changes.append("comment")
|
||||
|
||||
if pos.comment:
|
||||
e = DocEvent(doc=doc)
|
||||
e = DocEvent(doc=doc, rev=doc.rev)
|
||||
e.by = ad # otherwise we can't see who's saying it
|
||||
e.type = "added_comment"
|
||||
e.desc = "[Ballot comment]\n" + pos.comment
|
||||
|
@ -171,7 +171,7 @@ def edit_position(request, name, ballot_id):
|
|||
changes.append("discuss")
|
||||
|
||||
if pos.pos.blocking:
|
||||
e = DocEvent(doc=doc, by=login)
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
e.by = ad # otherwise we can't see who's saying it
|
||||
e.type = "added_comment"
|
||||
e.desc = "[Ballot %s]\n" % pos.pos.name.lower()
|
||||
|
@ -446,7 +446,7 @@ def lastcalltext(request, name):
|
|||
if form.is_valid():
|
||||
t = form.cleaned_data['last_call_text']
|
||||
if t != existing.text:
|
||||
e = WriteupDocEvent(doc=doc, by=login)
|
||||
e = WriteupDocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
e.by = login
|
||||
e.type = "changed_last_call_text"
|
||||
e.desc = "Last call announcement was changed"
|
||||
|
@ -523,7 +523,7 @@ def ballot_writeupnotes(request, name):
|
|||
if form.is_valid():
|
||||
t = form.cleaned_data["ballot_writeup"]
|
||||
if t != existing.text:
|
||||
e = WriteupDocEvent(doc=doc, by=login)
|
||||
e = WriteupDocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
e.by = login
|
||||
e.type = "changed_ballot_writeup_text"
|
||||
e.desc = "Ballot writeup was changed"
|
||||
|
@ -538,7 +538,7 @@ def ballot_writeupnotes(request, name):
|
|||
|
||||
if has_role(request.user, "Area Director") and not doc.latest_event(BallotPositionDocEvent, ad=login, ballot=ballot):
|
||||
# sending the ballot counts as a yes
|
||||
pos = BallotPositionDocEvent(doc=doc, by=login)
|
||||
pos = BallotPositionDocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
pos.ballot = ballot
|
||||
pos.type = "changed_ballot_position"
|
||||
pos.ad = login
|
||||
|
@ -568,7 +568,7 @@ def ballot_writeupnotes(request, name):
|
|||
send_mail_preformatted(request, msg, extra=extra_automation_headers(doc),
|
||||
override={ "To": "IANA <%s>"%settings.IANA_EVAL_EMAIL, "CC": None, "Bcc": None , "Reply-To": None})
|
||||
|
||||
e = DocEvent(doc=doc, by=login)
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
e.by = login
|
||||
e.type = "sent_ballot_announcement"
|
||||
e.desc = "Ballot has been issued"
|
||||
|
@ -618,7 +618,7 @@ def ballot_rfceditornote(request, name):
|
|||
if form.is_valid():
|
||||
t = form.cleaned_data["rfc_editor_note"]
|
||||
if t != existing.text:
|
||||
e = WriteupDocEvent(doc=doc, by=login)
|
||||
e = WriteupDocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
e.by = login
|
||||
e.type = "changed_rfc_editor_note_text"
|
||||
e.desc = "RFC Editor Note was changed"
|
||||
|
@ -626,7 +626,7 @@ def ballot_rfceditornote(request, name):
|
|||
e.save()
|
||||
|
||||
if request.method == 'POST' and "clear_ballot_rfceditornote" in request.POST:
|
||||
e = WriteupDocEvent(doc=doc, by=login)
|
||||
e = WriteupDocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
e.by = login
|
||||
e.type = "changed_rfc_editor_note_text"
|
||||
e.desc = "RFC Editor Note was cleared"
|
||||
|
@ -669,7 +669,7 @@ def ballot_approvaltext(request, name):
|
|||
if form.is_valid():
|
||||
t = form.cleaned_data['approval_text']
|
||||
if t != existing.text:
|
||||
e = WriteupDocEvent(doc=doc, by=login)
|
||||
e = WriteupDocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
e.by = login
|
||||
e.type = "changed_ballot_approval_text"
|
||||
e.desc = "Ballot approval text was changed"
|
||||
|
@ -771,7 +771,7 @@ def approve_ballot(request, name):
|
|||
# fixup document
|
||||
close_open_ballots(doc, login)
|
||||
|
||||
e = DocEvent(doc=doc, by=login)
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
if action == "do_not_publish":
|
||||
e.type = "iesg_disapproved"
|
||||
e.desc = "Do Not Publish note has been sent to the RFC Editor"
|
||||
|
@ -865,7 +865,7 @@ def make_last_call(request, name):
|
|||
e = add_state_change_event(doc, login, prev_state, new_state, prev_tags=prev_tags, new_tags=new_tags)
|
||||
if e:
|
||||
events.append(e)
|
||||
e = LastCallDocEvent(doc=doc, by=login)
|
||||
e = LastCallDocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
e.type = "sent_last_call"
|
||||
e.desc = "The following Last Call announcement was sent out:<br><br>"
|
||||
e.desc += announcement
|
||||
|
|
|
@ -131,13 +131,13 @@ def change_state(request, name, option=None):
|
|||
close_open_ballots(charter, by)
|
||||
|
||||
# Special log for abandoned efforts
|
||||
e = DocEvent(type="changed_document", doc=charter, by=by)
|
||||
e = DocEvent(type="changed_document", doc=charter, rev=charter.rev, by=by)
|
||||
e.desc = "Chartering effort abandoned"
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
||||
if comment:
|
||||
events.append(DocEvent.objects.create(type="added_comment", doc=charter, by=by, desc=comment))
|
||||
events.append(DocEvent.objects.create(type="added_comment", doc=charter, rev=charter.rev, by=by, desc=comment))
|
||||
|
||||
charter.save_with_history(events)
|
||||
|
||||
|
@ -167,7 +167,7 @@ def change_state(request, name, option=None):
|
|||
fix_charter_revision_after_approval(charter, by)
|
||||
|
||||
if charter_state.slug == "infrev" and clean["initial_time"] and clean["initial_time"] != 0:
|
||||
e = InitialReviewDocEvent(type="initial_review", by=by, doc=charter)
|
||||
e = InitialReviewDocEvent(type="initial_review", by=by, doc=charter, rev=charter.rev)
|
||||
e.expires = datetime.datetime.now() + datetime.timedelta(weeks=clean["initial_time"])
|
||||
e.desc = "Initial review time expires %s" % e.expires.strftime("%Y-%m-%d")
|
||||
e.save()
|
||||
|
@ -266,7 +266,7 @@ def change_title(request, name, option=None):
|
|||
|
||||
if not comment:
|
||||
comment = "Changed charter title from '%s' to '%s'." % (prev_title, new_title)
|
||||
e = DocEvent(type="added_comment", doc=charter, by=by)
|
||||
e = DocEvent(type="added_comment", doc=charter, rev=charter.rev, by=by)
|
||||
e.desc = comment
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
@ -312,7 +312,7 @@ def edit_ad(request, name):
|
|||
new_ad = form.cleaned_data['ad']
|
||||
if new_ad != charter.ad:
|
||||
events = []
|
||||
e = DocEvent(doc=charter, by=by)
|
||||
e = DocEvent(doc=charter, rev=charter.rev, by=by)
|
||||
e.desc = "Responsible AD changed to %s" % new_ad.plain_name()
|
||||
if charter.ad:
|
||||
e.desc += " from %s" % charter.ad.plain_name()
|
||||
|
@ -486,7 +486,7 @@ def review_announcement_text(request, name):
|
|||
raise Http404
|
||||
|
||||
if not existing_new_work:
|
||||
existing_new_work = WriteupDocEvent(doc=charter)
|
||||
existing_new_work = WriteupDocEvent(doc=charter, rev=charter.rev)
|
||||
existing_new_work.by = by
|
||||
existing_new_work.type = "changed_new_work_text"
|
||||
existing_new_work.desc = "%s review text was changed" % group.type.name
|
||||
|
@ -504,7 +504,7 @@ def review_announcement_text(request, name):
|
|||
|
||||
t = form.cleaned_data['announcement_text']
|
||||
if t != existing.text:
|
||||
e = WriteupDocEvent(doc=charter)
|
||||
e = WriteupDocEvent(doc=charter, rev=charter.rev)
|
||||
e.by = by
|
||||
e.type = "changed_review_announcement"
|
||||
e.desc = "%s review text was changed" % (group.type.name)
|
||||
|
@ -518,7 +518,7 @@ def review_announcement_text(request, name):
|
|||
|
||||
t = form.cleaned_data['new_work_text']
|
||||
if t != existing_new_work.text:
|
||||
e = WriteupDocEvent(doc=charter)
|
||||
e = WriteupDocEvent(doc=charter, rev=charter.rev)
|
||||
e.by = by
|
||||
e.type = "changed_new_work_text"
|
||||
e.desc = "%s new work message text was changed" % (group.type.name)
|
||||
|
@ -581,7 +581,7 @@ def action_announcement_text(request, name):
|
|||
if "save_text" in request.POST and form.is_valid():
|
||||
t = form.cleaned_data['announcement_text']
|
||||
if t != existing.text:
|
||||
e = WriteupDocEvent(doc=charter)
|
||||
e = WriteupDocEvent(doc=charter, rev=charter.rev)
|
||||
e.by = by
|
||||
e.type = "changed_action_announcement"
|
||||
e.desc = "%s action text was changed" % group.type.name
|
||||
|
@ -643,7 +643,7 @@ def ballot_writeupnotes(request, name):
|
|||
if form.is_valid():
|
||||
t = form.cleaned_data["ballot_writeup"]
|
||||
if t != existing.text:
|
||||
e = WriteupDocEvent(doc=charter, by=by)
|
||||
e = WriteupDocEvent(doc=charter, rev=charter.rev, by=by)
|
||||
e.type = "changed_ballot_writeup_text"
|
||||
e.desc = "Ballot writeup was changed"
|
||||
e.text = t
|
||||
|
@ -656,7 +656,7 @@ def ballot_writeupnotes(request, name):
|
|||
if "send_ballot" in request.POST and approval:
|
||||
if has_role(request.user, "Area Director") and not charter.latest_event(BallotPositionDocEvent, type="changed_ballot_position", ad=by, ballot=ballot):
|
||||
# sending the ballot counts as a yes
|
||||
pos = BallotPositionDocEvent(doc=charter, by=by)
|
||||
pos = BallotPositionDocEvent(doc=charter, rev=charter.rev, by=by)
|
||||
pos.type = "changed_ballot_position"
|
||||
pos.ad = by
|
||||
pos.pos_id = "yes"
|
||||
|
@ -667,7 +667,7 @@ def ballot_writeupnotes(request, name):
|
|||
msg = generate_issue_ballot_mail(request, charter, ballot)
|
||||
send_mail_preformatted(request, msg)
|
||||
|
||||
e = DocEvent(doc=charter, by=by)
|
||||
e = DocEvent(doc=charter, rev=charter.rev, by=by)
|
||||
e.by = by
|
||||
e.type = "sent_ballot_announcement"
|
||||
e.desc = "Ballot has been sent"
|
||||
|
@ -709,7 +709,7 @@ def approve(request, name):
|
|||
|
||||
events = []
|
||||
# approve
|
||||
e = DocEvent(doc=charter, by=by)
|
||||
e = DocEvent(doc=charter, rev=charter.rev, by=by)
|
||||
e.type = "iesg_approved"
|
||||
e.desc = "IESG has approved the charter"
|
||||
e.save()
|
||||
|
|
|
@ -41,7 +41,7 @@ def change_state(request, name, option=None):
|
|||
comment = clean['comment'].rstrip()
|
||||
|
||||
if comment:
|
||||
c = DocEvent(type="added_comment", doc=review, by=login)
|
||||
c = DocEvent(type="added_comment", doc=review, rev=review.rev, by=login)
|
||||
c.desc = comment
|
||||
c.save()
|
||||
|
||||
|
@ -60,7 +60,7 @@ def change_state(request, name, option=None):
|
|||
if has_role(request.user, "Area Director") and not review.latest_event(BallotPositionDocEvent, ad=login, ballot=ballot, type="changed_ballot_position"):
|
||||
|
||||
# The AD putting a conflict review into iesgeval who doesn't already have a position is saying "yes"
|
||||
pos = BallotPositionDocEvent(doc=review, by=login)
|
||||
pos = BallotPositionDocEvent(doc=review, rev=review.rev, by=login)
|
||||
pos.ballot = ballot
|
||||
pos.type = "changed_ballot_position"
|
||||
pos.ad = login
|
||||
|
@ -225,7 +225,7 @@ def edit_ad(request, name):
|
|||
if form.is_valid():
|
||||
review.ad = form.cleaned_data['ad']
|
||||
|
||||
c = DocEvent(type="added_comment", doc=review, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=review, rev=review.rev, by=request.user.person)
|
||||
c.desc = "Shepherding AD changed to "+review.ad.name
|
||||
c.save()
|
||||
|
||||
|
@ -305,7 +305,7 @@ def approve(request, name):
|
|||
|
||||
close_open_ballots(review, login)
|
||||
|
||||
e = DocEvent(doc=review, by=login)
|
||||
e = DocEvent(doc=review, rev=review.rev, by=login)
|
||||
e.type = "iesg_approved"
|
||||
e.desc = "IESG has approved the conflict review response"
|
||||
e.save()
|
||||
|
@ -316,7 +316,7 @@ def approve(request, name):
|
|||
# send announcement
|
||||
send_mail_preformatted(request, form.cleaned_data['announcement_text'])
|
||||
|
||||
c = DocEvent(type="added_comment", doc=review, by=login)
|
||||
c = DocEvent(type="added_comment", doc=review, rev=review.rev, by=login)
|
||||
c.desc = "The following approval message was sent\n"+form.cleaned_data['announcement_text']
|
||||
c.save()
|
||||
|
||||
|
@ -406,11 +406,11 @@ def build_conflict_review_document(login, doc_to_review, ad, notify, create_in_s
|
|||
|
||||
conflict_review.relateddocument_set.create(target=DocAlias.objects.get(name=doc_to_review.name),relationship_id='conflrev')
|
||||
|
||||
c = DocEvent(type="added_comment", doc=conflict_review, by=login)
|
||||
c = DocEvent(type="added_comment", doc=conflict_review, rev=conflict_review.rev, by=login)
|
||||
c.desc = "IETF conflict review requested"
|
||||
c.save()
|
||||
|
||||
c = DocEvent(type="added_comment", doc=doc_to_review, by=login)
|
||||
c = DocEvent(type="added_comment", doc=doc_to_review, rev=doc_to_review.rev, by=login)
|
||||
# Is it really OK to put html tags into comment text?
|
||||
c.desc = 'IETF conflict review initiated - see <a href="%s">%s</a>' % (reverse('ietf.doc.views_doc.document_main', kwargs={'name':conflict_review.name}),conflict_review.name)
|
||||
c.save()
|
||||
|
|
|
@ -997,7 +997,7 @@ def add_comment(request, name):
|
|||
if form.is_valid():
|
||||
c = form.cleaned_data['comment']
|
||||
|
||||
e = DocEvent(doc=doc, by=login)
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
e.type = "added_comment"
|
||||
e.desc = c
|
||||
e.save()
|
||||
|
@ -1145,7 +1145,7 @@ def edit_sessionpresentation(request,name,session_id):
|
|||
new_selection = form.cleaned_data['version']
|
||||
if initial['version'] != new_selection:
|
||||
doc.sessionpresentation_set.filter(pk=sp.pk).update(rev=None if new_selection=='current' else new_selection)
|
||||
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=doc, rev=doc.rev, by=request.user.person)
|
||||
c.desc = "Revision for session %s changed to %s" % (sp.session,new_selection)
|
||||
c.save()
|
||||
return redirect('ietf.doc.views_doc.all_presentations', name=name)
|
||||
|
@ -1166,7 +1166,7 @@ def remove_sessionpresentation(request,name,session_id):
|
|||
|
||||
if request.method == 'POST':
|
||||
doc.sessionpresentation_set.filter(pk=sp.pk).delete()
|
||||
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=doc, rev=doc.rev, by=request.user.person)
|
||||
c.desc = "Removed from session: %s" % (sp.session)
|
||||
c.save()
|
||||
return redirect('ietf.doc.views_doc.all_presentations', name=name)
|
||||
|
@ -1203,7 +1203,7 @@ def add_sessionpresentation(request,name):
|
|||
version = version_form.cleaned_data['version']
|
||||
rev = None if version=='current' else version
|
||||
doc.sessionpresentation_set.create(session_id=session_id,rev=rev)
|
||||
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=doc, rev=doc.rev, by=request.user.person)
|
||||
c.desc = "%s to session: %s" % ('Added -%s'%rev if rev else 'Added', Session.objects.get(pk=session_id))
|
||||
c.save()
|
||||
return redirect('ietf.doc.views_doc.all_presentations', name=name)
|
||||
|
|
|
@ -106,6 +106,7 @@ def change_state(request, name):
|
|||
if comment:
|
||||
c = DocEvent(type="added_comment")
|
||||
c.doc = doc
|
||||
c.rev = doc.rev
|
||||
c.by = login
|
||||
c.desc = comment
|
||||
c.save()
|
||||
|
@ -248,14 +249,14 @@ def change_stream(request, name):
|
|||
|
||||
events = []
|
||||
|
||||
e = DocEvent(doc=doc,by=login,type='changed_document')
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=login, type='changed_document')
|
||||
e.desc = u"Stream changed to <b>%s</b> from %s"% (new_stream, old_stream or "None")
|
||||
e.save()
|
||||
|
||||
events.append(e)
|
||||
|
||||
if comment:
|
||||
c = DocEvent(doc=doc,by=login,type="added_comment")
|
||||
c = DocEvent(doc=doc, rev=doc.rev, by=login, type="added_comment")
|
||||
c.desc = comment
|
||||
c.save()
|
||||
events.append(c)
|
||||
|
@ -379,7 +380,7 @@ def review_possibly_replaces(request, name):
|
|||
events = []
|
||||
|
||||
# all suggestions reviewed, so get rid of them
|
||||
events.append(DocEvent.objects.create(doc=doc, by=by, type="reviewed_suggested_replaces",
|
||||
events.append(DocEvent.objects.create(doc=doc, rev=doc.rev, by=by, type="reviewed_suggested_replaces",
|
||||
desc="Reviewed suggested replacement relationships: %s" % ", ".join(d.name for d in suggested)))
|
||||
RelatedDocument.objects.filter(source=doc, target__in=suggested,relationship__slug='possibly-replaces').delete()
|
||||
|
||||
|
@ -389,7 +390,7 @@ def review_possibly_replaces(request, name):
|
|||
comment=comment))
|
||||
|
||||
if comment:
|
||||
events.append(DocEvent.objects.create(doc=doc, by=by, type="added_comment", desc=comment))
|
||||
events.append(DocEvent.objects.create(doc=doc, rev=doc.rev, by=by, type="added_comment", desc=comment))
|
||||
|
||||
doc.save_with_history(events)
|
||||
|
||||
|
@ -431,13 +432,13 @@ def change_intention(request, name):
|
|||
doc.intended_std_level = new_level
|
||||
|
||||
events = []
|
||||
e = DocEvent(doc=doc,by=login,type='changed_document')
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=login, type='changed_document')
|
||||
e.desc = u"Intended Status changed to <b>%s</b> from %s"% (new_level,old_level)
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
||||
if comment:
|
||||
c = DocEvent(doc=doc,by=login,type="added_comment")
|
||||
c = DocEvent(doc=doc, rev=doc.rev, by=login, type="added_comment")
|
||||
c.desc = comment
|
||||
c.save()
|
||||
events.append(c)
|
||||
|
@ -445,7 +446,7 @@ def change_intention(request, name):
|
|||
de = doc.latest_event(ConsensusDocEvent, type="changed_consensus")
|
||||
prev_consensus = de and de.consensus
|
||||
if not prev_consensus and doc.intended_std_level_id in ("std", "ds", "ps", "bcp"):
|
||||
ce = ConsensusDocEvent(doc=doc, by=login, type="changed_consensus")
|
||||
ce = ConsensusDocEvent(doc=doc, rev=doc.rev, by=login, type="changed_consensus")
|
||||
ce.consensus = True
|
||||
ce.desc = "Changed consensus to <b>%s</b> from %s" % (nice_consensus(True),
|
||||
nice_consensus(prev_consensus))
|
||||
|
@ -553,6 +554,7 @@ def to_iesg(request,name):
|
|||
e.type = "started_iesg_process"
|
||||
e.by = by
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.desc = "IESG process started in state <b>%s</b>" % target_state['iesg'].name
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
@ -578,7 +580,7 @@ def to_iesg(request,name):
|
|||
changes.append(previous_writeup.text)
|
||||
|
||||
for c in changes:
|
||||
e = DocEvent(doc=doc, by=by)
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=by)
|
||||
e.desc = c
|
||||
e.type = "changed_document"
|
||||
e.save()
|
||||
|
@ -648,6 +650,7 @@ def edit_info(request, name):
|
|||
e.type = "changed_document"
|
||||
e.by = by
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.desc = "Working group state set to %s" % submitted_state.name
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
@ -660,6 +663,7 @@ def edit_info(request, name):
|
|||
e.type = "added_comment"
|
||||
e.by = Person.objects.get(name="(System)")
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.desc = "Earlier history may be found in the Comment Log for <a href=\"%s\">%s</a>" % (replaces[0], replaces[0].get_absolute_url())
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
@ -668,6 +672,7 @@ def edit_info(request, name):
|
|||
e.type = "started_iesg_process"
|
||||
e.by = by
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.desc = "IESG process started in state <b>%s</b>" % doc.get_state("draft-iesg").name
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
@ -716,7 +721,7 @@ def edit_info(request, name):
|
|||
doc.group = r["area"]
|
||||
|
||||
for c in changes:
|
||||
events.append(DocEvent.objects.create(doc=doc, by=by, desc=c, type="changed_document"))
|
||||
events.append(DocEvent.objects.create(doc=doc, rev=doc.rev, by=by, desc=c, type="changed_document"))
|
||||
|
||||
# Todo - chase this
|
||||
e = update_telechat(request, doc, by,
|
||||
|
@ -767,7 +772,7 @@ def request_resurrect(request, name):
|
|||
|
||||
email_resurrect_requested(request, doc, by)
|
||||
|
||||
e = DocEvent(doc=doc, by=by)
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=by)
|
||||
e.type = "requested_resurrect"
|
||||
e.desc = "Resurrection was requested"
|
||||
e.save()
|
||||
|
@ -795,7 +800,7 @@ def resurrect(request, name):
|
|||
email_resurrection_completed(request, doc, requester=resurrect_requested_by)
|
||||
|
||||
events = []
|
||||
e = DocEvent(doc=doc, by=request.user.person)
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=request.user.person)
|
||||
e.type = "completed_resurrect"
|
||||
e.desc = "Resurrection was completed"
|
||||
e.save()
|
||||
|
@ -842,7 +847,7 @@ def edit_iesg_note(request, name):
|
|||
else:
|
||||
log_message = "Note added '%s'" % new_note
|
||||
|
||||
c = DocEvent(type="added_comment", doc=doc, by=login)
|
||||
c = DocEvent(type="added_comment", doc=doc, rev=doc.rev, by=login)
|
||||
c.desc = log_message
|
||||
c.save()
|
||||
|
||||
|
@ -893,7 +898,7 @@ def edit_shepherd_writeup(request, name):
|
|||
writeup = from_file
|
||||
else:
|
||||
writeup = form.cleaned_data['content']
|
||||
e = WriteupDocEvent(doc=doc, by=login, type="changed_protocol_writeup")
|
||||
e = WriteupDocEvent(doc=doc, rev=doc.rev, by=login, type="changed_protocol_writeup")
|
||||
|
||||
# Add the shepherd writeup to description if the document is in submitted for publication state
|
||||
stream_state = doc.get_state("draft-stream-%s" % doc.stream_id)
|
||||
|
@ -958,7 +963,7 @@ def edit_shepherd(request, name):
|
|||
|
||||
doc.shepherd = form.cleaned_data['shepherd']
|
||||
|
||||
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=doc, rev=doc.rev, by=request.user.person)
|
||||
c.desc = "Document shepherd changed to "+ (doc.shepherd.person.name if doc.shepherd else "(None)")
|
||||
c.save()
|
||||
events.append(c)
|
||||
|
@ -1013,7 +1018,7 @@ def change_shepherd_email(request, name):
|
|||
doc.shepherd = form.cleaned_data['shepherd']
|
||||
|
||||
events = []
|
||||
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=doc, rev=doc.rev, by=request.user.person)
|
||||
c.desc = "Document shepherd email changed"
|
||||
c.save()
|
||||
events.append(c)
|
||||
|
@ -1056,7 +1061,7 @@ def edit_ad(request, name):
|
|||
if form.is_valid():
|
||||
doc.ad = form.cleaned_data['ad']
|
||||
|
||||
c = DocEvent(type="added_comment", doc=doc, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=doc, rev=doc.rev, by=request.user.person)
|
||||
c.desc = "Shepherding AD changed to "+doc.ad.name
|
||||
c.save()
|
||||
|
||||
|
@ -1094,7 +1099,7 @@ def edit_consensus(request, name):
|
|||
form = ConsensusForm(request.POST)
|
||||
if form.is_valid():
|
||||
if form.cleaned_data["consensus"] != prev_consensus:
|
||||
e = ConsensusDocEvent(doc=doc, type="changed_consensus", by=request.user.person)
|
||||
e = ConsensusDocEvent(doc=doc, rev=doc.rev, type="changed_consensus", by=request.user.person)
|
||||
e.consensus = {"Unknown":None,"Yes":True,"No":False}[form.cleaned_data["consensus"]]
|
||||
if not e.consensus and doc.intended_std_level_id in ("std", "ds", "ps", "bcp"):
|
||||
return HttpResponseForbidden("BCPs and Standards Track documents must include the consensus boilerplate")
|
||||
|
@ -1166,7 +1171,7 @@ def request_publication(request, name):
|
|||
(m.to, m.cc) = gather_address_lists('pubreq_rfced_iana',doc=doc)
|
||||
send_mail_message(request, m, extra=extra_automation_headers(doc))
|
||||
|
||||
e = DocEvent(doc=doc, type="requested_publication", by=request.user.person)
|
||||
e = DocEvent(doc=doc, type="requested_publication", rev=doc.rev, by=request.user.person)
|
||||
e.desc = "Sent request for publication to the RFC Editor"
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
@ -1272,7 +1277,7 @@ def adopt_draft(request, name):
|
|||
|
||||
# stream
|
||||
if doc.stream != new_stream:
|
||||
e = DocEvent(type="changed_stream", by=by, doc=doc)
|
||||
e = DocEvent(type="changed_stream", doc=doc, rev=doc.rev, by=by)
|
||||
e.desc = u"Changed stream to <b>%s</b>" % new_stream.name
|
||||
if doc.stream:
|
||||
e.desc += u" from %s" % doc.stream.name
|
||||
|
@ -1285,7 +1290,7 @@ def adopt_draft(request, name):
|
|||
|
||||
# group
|
||||
if group != doc.group:
|
||||
e = DocEvent(type="changed_group", by=by, doc=doc)
|
||||
e = DocEvent(type="changed_group", doc=doc, rev=doc.rev, by=by)
|
||||
e.desc = u"Changed group to <b>%s (%s)</b>" % (group.name, group.acronym.upper())
|
||||
if doc.group.type_id != "individ":
|
||||
e.desc += " from %s (%s)" % (doc.group.name, doc.group.acronym.upper())
|
||||
|
@ -1316,7 +1321,7 @@ def adopt_draft(request, name):
|
|||
|
||||
# comment
|
||||
if comment:
|
||||
e = DocEvent(type="added_comment", by=by, doc=doc)
|
||||
e = DocEvent(type="added_comment", doc=doc, rev=doc.rev, by=by)
|
||||
e.desc = comment
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
@ -1438,7 +1443,7 @@ def change_stream_state(request, name, state_type):
|
|||
if existing_tags != new_tags:
|
||||
doc.tags = new_tags
|
||||
|
||||
e = DocEvent(type="changed_document", by=by, doc=doc)
|
||||
e = DocEvent(type="changed_document", doc=doc, rev=doc.rev, by=by)
|
||||
added_tags = new_tags - existing_tags
|
||||
removed_tags = existing_tags - new_tags
|
||||
l = []
|
||||
|
@ -1454,7 +1459,7 @@ def change_stream_state(request, name, state_type):
|
|||
|
||||
# comment
|
||||
if comment:
|
||||
e = DocEvent(type="added_comment", by=by, doc=doc)
|
||||
e = DocEvent(type="added_comment", doc=doc, rev=doc.rev, by=by)
|
||||
e.desc = comment
|
||||
e.save()
|
||||
events.append(e)
|
||||
|
|
|
@ -151,7 +151,7 @@ def edit_material(request, name=None, acronym=None, action=None, doc_type=None):
|
|||
events.append(e)
|
||||
|
||||
if prev_title != doc.title:
|
||||
e = DocEvent(doc=doc, by=request.user.person, type='changed_document')
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=request.user.person, type='changed_document')
|
||||
e.desc = u"Changed title to <b>%s</b>" % doc.title
|
||||
if prev_title:
|
||||
e.desc += u" from %s" % prev_title
|
||||
|
|
|
@ -121,6 +121,7 @@ def request_review(request, name):
|
|||
ReviewRequestDocEvent.objects.create(
|
||||
type="requested_review",
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
by=request.user.person,
|
||||
desc="Requested {} review by {}".format(review_req.type.name, review_req.team.acronym.upper()),
|
||||
time=review_req.time,
|
||||
|
@ -313,6 +314,7 @@ def reject_reviewer_assignment(request, name, request_id):
|
|||
ReviewRequestDocEvent.objects.create(
|
||||
type="closed_review_request",
|
||||
doc=review_req.doc,
|
||||
rev=review_req.doc.rev,
|
||||
by=request.user.person,
|
||||
desc="Assignment of request for {} review by {} to {} was rejected".format(
|
||||
review_req.type.name,
|
||||
|
@ -530,6 +532,7 @@ def complete_review(request, name, request_id):
|
|||
close_event = ReviewRequestDocEvent(type="closed_review_request", review_request=review_req)
|
||||
|
||||
close_event.doc = review_req.doc
|
||||
close_event.rev = review_req.doc.rev
|
||||
close_event.by = request.user.person
|
||||
close_event.desc = desc
|
||||
close_event.state = review_req.state
|
||||
|
|
|
@ -43,7 +43,7 @@ def change_state(request, name, option=None):
|
|||
comment = clean['comment'].rstrip()
|
||||
|
||||
if comment:
|
||||
c = DocEvent(type="added_comment", doc=status_change, by=login)
|
||||
c = DocEvent(type="added_comment", doc=status_change, rev=status_change.rev, by=login)
|
||||
c.desc = comment
|
||||
c.save()
|
||||
|
||||
|
@ -60,7 +60,7 @@ def change_state(request, name, option=None):
|
|||
if has_role(request.user, "Area Director") and not status_change.latest_event(BallotPositionDocEvent, ad=login, ballot=ballot, type="changed_ballot_position"):
|
||||
|
||||
# The AD putting a status change into iesgeval who doesn't already have a position is saying "yes"
|
||||
pos = BallotPositionDocEvent(doc=status_change, by=login)
|
||||
pos = BallotPositionDocEvent(doc=status_change, rev=status_change.rev, by=login)
|
||||
pos.ballot = ballot
|
||||
pos.type = "changed_ballot_position"
|
||||
pos.ad = login
|
||||
|
@ -210,7 +210,7 @@ def edit_title(request, name):
|
|||
|
||||
status_change.title = form.cleaned_data['title']
|
||||
|
||||
c = DocEvent(type="added_comment", doc=status_change, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=status_change, rev=status_change.rev, by=request.user.person)
|
||||
c.desc = "Title changed to '%s'"%status_change.title
|
||||
c.save()
|
||||
|
||||
|
@ -241,7 +241,7 @@ def edit_ad(request, name):
|
|||
if form.is_valid():
|
||||
status_change.ad = form.cleaned_data['ad']
|
||||
|
||||
c = DocEvent(type="added_comment", doc=status_change, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=status_change, rev=status_change.rev, by=request.user.person)
|
||||
c.desc = "Shepherding AD changed to "+status_change.ad.name
|
||||
c.save()
|
||||
|
||||
|
@ -339,7 +339,7 @@ def approve(request, name):
|
|||
|
||||
close_open_ballots(status_change, login)
|
||||
|
||||
e = DocEvent(doc=status_change, by=login)
|
||||
e = DocEvent(doc=status_change, rev=status_change.rev, by=login)
|
||||
e.type = "iesg_approved"
|
||||
e.desc = "IESG has approved the status change"
|
||||
e.save()
|
||||
|
@ -352,13 +352,13 @@ def approve(request, name):
|
|||
|
||||
send_mail_preformatted(request,form.cleaned_data['announcement_text'])
|
||||
|
||||
c = DocEvent(type="added_comment", doc=status_change, by=login)
|
||||
c = DocEvent(type="added_comment", doc=status_change, rev=status_change.rev, by=login)
|
||||
c.desc = "The following approval message was sent\n"+form.cleaned_data['announcement_text']
|
||||
c.save()
|
||||
|
||||
for rel in status_change.relateddocument_set.filter(relationship__slug__in=STATUSCHANGE_RELATIONS):
|
||||
# Add a document event to each target
|
||||
c = DocEvent(type="added_comment", doc=rel.target.document, by=login)
|
||||
c = DocEvent(type="added_comment", doc=rel.target.document, rev=rel.target.document.rev, by=login)
|
||||
c.desc = "New status of %s approved by the IESG\n%s%s" % (newstatus(rel), settings.IDTRACKER_BASE_URL,reverse('ietf.doc.views_doc.document_main', kwargs={'name': status_change.name}))
|
||||
c.save()
|
||||
|
||||
|
@ -575,7 +575,7 @@ def edit_relations(request, name):
|
|||
for key in new_relations:
|
||||
status_change.relateddocument_set.create(target=DocAlias.objects.get(name=key),
|
||||
relationship_id=new_relations[key])
|
||||
c = DocEvent(type="added_comment", doc=status_change, by=login)
|
||||
c = DocEvent(type="added_comment", doc=status_change, rev=status_change.rev, by=login)
|
||||
c.desc = "Affected RFC list changed.\nOLD:"
|
||||
for relname,relslug in (set(old_relations.items())-set(new_relations.items())):
|
||||
c.desc += "\n "+relname+": "+DocRelationshipName.objects.get(slug=relslug).name
|
||||
|
@ -627,6 +627,7 @@ def generate_last_call_text(request, doc):
|
|||
e.type = 'changed_last_call_text'
|
||||
e.by = request.user.person
|
||||
e.doc = doc
|
||||
e.rev = doc.rev
|
||||
e.desc = 'Last call announcement was generated'
|
||||
e.text = unicode(new_text)
|
||||
e.save()
|
||||
|
@ -655,7 +656,7 @@ def last_call(request, name):
|
|||
|
||||
t = form.cleaned_data['last_call_text']
|
||||
if t != last_call_event.text:
|
||||
e = WriteupDocEvent(doc=status_change, by=login)
|
||||
e = WriteupDocEvent(doc=status_change, rev=status_change.rev, by=login)
|
||||
e.by = login
|
||||
e.type = "changed_last_call_text"
|
||||
e.desc = "Last call announcement was changed"
|
||||
|
|
|
@ -287,7 +287,7 @@ def edit_milestones(request, acronym, group_type=None, milestone_set="current"):
|
|||
continue
|
||||
|
||||
if milestone_set == "charter":
|
||||
DocEvent.objects.create(doc=group.charter, type="changed_charter_milestone",
|
||||
DocEvent.objects.create(doc=group.charter, rev=group.charter.rev, type="changed_charter_milestone",
|
||||
by=request.user.person, desc=change)
|
||||
else:
|
||||
MilestoneGroupEvent.objects.create(group=group, type="changed_milestone",
|
||||
|
@ -353,6 +353,7 @@ def reset_charter_milestones(request, group_type, acronym):
|
|||
|
||||
DocEvent.objects.create(type="changed_charter_milestone",
|
||||
doc=group.charter,
|
||||
rev=group.charter.rev,
|
||||
desc='Deleted milestone "%s"' % m.desc,
|
||||
by=request.user.person,
|
||||
)
|
||||
|
@ -369,6 +370,7 @@ def reset_charter_milestones(request, group_type, acronym):
|
|||
|
||||
DocEvent.objects.create(type="changed_charter_milestone",
|
||||
doc=group.charter,
|
||||
rev=group.charter.rev,
|
||||
desc='Added milestone "%s", due %s, from current group milestones' % (new.desc, new.due.strftime("%B %Y")),
|
||||
by=request.user.person,
|
||||
)
|
||||
|
|
|
@ -43,7 +43,7 @@ class StreamTests(TestCase):
|
|||
def test_stream_documents(self):
|
||||
draft = make_test_data()
|
||||
draft.stream_id = "iab"
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
r = self.client.get(urlreverse("ietf.group.views_stream.stream_documents", kwargs=dict(acronym="iab")))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
|
|
@ -378,6 +378,7 @@ class GroupPagesTests(TestCase):
|
|||
|
||||
de = DocEvent.objects.create(
|
||||
doc=group.charter,
|
||||
rev=group.charter.rev,
|
||||
desc="Something else happened.",
|
||||
type="added_comment",
|
||||
by=Person.objects.get(name="(System)"))
|
||||
|
|
|
@ -57,6 +57,7 @@ class ReviewTests(TestCase):
|
|||
type="scheduled_for_telechat",
|
||||
by=Person.objects.get(name="(System)"),
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
telechat_date=TelechatDate.objects.all().first().date,
|
||||
)
|
||||
doc.rev = "10"
|
||||
|
|
|
@ -78,7 +78,7 @@ class IndexTests(TestCase):
|
|||
draft.set_state(State.objects.get(type="draft", slug="active"))
|
||||
draft.set_state(State.objects.get(type="draft-iesg", slug="review-e"))
|
||||
|
||||
NewRevisionDocEvent.objects.create(doc=draft, type="new_revision", rev=draft.rev, by=draft.ad)
|
||||
NewRevisionDocEvent.objects.create(doc=draft, rev=draft.rev, type="new_revision", by=draft.ad)
|
||||
|
||||
self.write_draft_file("%s-%s.txt" % (draft.name, draft.rev), 5000)
|
||||
self.write_draft_file("%s-%s.pdf" % (draft.name, draft.rev), 5000)
|
||||
|
@ -124,7 +124,7 @@ class IndexTests(TestCase):
|
|||
draft.set_state(State.objects.get(type="draft", slug="active"))
|
||||
draft.set_state(State.objects.get(type="draft-iesg", slug="lc"))
|
||||
|
||||
e = LastCallDocEvent.objects.create(doc=draft, type="sent_last_call", expires=datetime.datetime.now() + datetime.timedelta(days=14), by=draft.ad)
|
||||
e = LastCallDocEvent.objects.create(doc=draft, rev=draft.rev, type="sent_last_call", expires=datetime.datetime.now() + datetime.timedelta(days=14), by=draft.ad)
|
||||
|
||||
t = get_fields(all_id2_txt())
|
||||
self.assertEqual(t[11], e.expires.strftime("%Y-%m-%d"))
|
||||
|
|
|
@ -29,6 +29,7 @@ class IESGTests(TestCase):
|
|||
pos.pos_id = "discuss"
|
||||
pos.type = "changed_ballot_position"
|
||||
pos.doc = draft
|
||||
pos.rev = draft.rev
|
||||
pos.ad = pos.by = Person.objects.get(user__username="ad")
|
||||
pos.save()
|
||||
|
||||
|
@ -57,6 +58,7 @@ class IESGTests(TestCase):
|
|||
|
||||
e = DocEvent(type="iesg_approved")
|
||||
e.doc = draft
|
||||
e.rev = draft.rev
|
||||
e.by = Person.objects.get(name="Areað Irector")
|
||||
e.save()
|
||||
|
||||
|
@ -80,7 +82,7 @@ class IESGAgendaTests(TestCase):
|
|||
|
||||
ise_draft = Document.objects.get(name="draft-imaginary-independent-submission")
|
||||
ise_draft.stream = StreamName.objects.get(slug="ise")
|
||||
ise_draft.save_with_history([DocEvent(doc=ise_draft, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
ise_draft.save_with_history([DocEvent(doc=ise_draft, rev=ise_draft.rev, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
self.telechat_docs = {
|
||||
"ietf_draft": Document.objects.get(name="draft-ietf-mars-test"),
|
||||
|
@ -102,6 +104,7 @@ class IESGAgendaTests(TestCase):
|
|||
for d in self.telechat_docs.values():
|
||||
TelechatDocEvent.objects.create(type="scheduled_for_telechat",
|
||||
doc=d,
|
||||
rev=d.rev,
|
||||
by=by,
|
||||
telechat_date=date,
|
||||
returning_item=True)
|
||||
|
@ -123,6 +126,7 @@ class IESGAgendaTests(TestCase):
|
|||
telechat_event = TelechatDocEvent.objects.create(
|
||||
type="scheduled_for_telechat",
|
||||
doc=draft,
|
||||
rev=draft.rev,
|
||||
by=Person.objects.get(name="Areað Irector"),
|
||||
telechat_date=date,
|
||||
returning_item=False)
|
||||
|
@ -131,7 +135,7 @@ class IESGAgendaTests(TestCase):
|
|||
# 2.1 protocol WG submissions
|
||||
draft.intended_std_level_id = "ps"
|
||||
draft.group = Group.objects.get(acronym="mars")
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.set_state(State.objects.get(type="draft-iesg", slug="iesg-eva"))
|
||||
self.assertTrue(draft in agenda_data(date_str)["sections"]["2.1.1"]["docs"])
|
||||
|
||||
|
@ -146,7 +150,7 @@ class IESGAgendaTests(TestCase):
|
|||
|
||||
# 2.2 protocol individual submissions
|
||||
draft.group = Group.objects.get(type="individ")
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.set_state(State.objects.get(type="draft-iesg", slug="iesg-eva"))
|
||||
self.assertTrue(draft in agenda_data(date_str)["sections"]["2.2.1"]["docs"])
|
||||
|
||||
|
@ -162,7 +166,7 @@ class IESGAgendaTests(TestCase):
|
|||
# 3.1 document WG submissions
|
||||
draft.intended_std_level_id = "inf"
|
||||
draft.group = Group.objects.get(acronym="mars")
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.set_state(State.objects.get(type="draft-iesg", slug="iesg-eva"))
|
||||
self.assertTrue(draft in agenda_data(date_str)["sections"]["3.1.1"]["docs"])
|
||||
|
||||
|
@ -177,7 +181,7 @@ class IESGAgendaTests(TestCase):
|
|||
|
||||
# 3.2 document individual submissions
|
||||
draft.group = Group.objects.get(type="individ")
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.set_state(State.objects.get(type="draft-iesg", slug="iesg-eva"))
|
||||
self.assertTrue(draft in agenda_data(date_str)["sections"]["3.2.1"]["docs"])
|
||||
|
||||
|
@ -200,7 +204,7 @@ class IESGAgendaTests(TestCase):
|
|||
relationship_id="tohist")
|
||||
|
||||
statchg.group = Group.objects.get(acronym="mars")
|
||||
statchg.save_with_history([DocEvent.objects.create(doc=statchg, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
statchg.save_with_history([DocEvent.objects.create(doc=statchg, rev=statchg.rev, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
statchg.set_state(State.objects.get(type="statchg", slug="iesgeval"))
|
||||
self.assertTrue(statchg in agenda_data(date_str)["sections"]["2.3.1"]["docs"])
|
||||
|
||||
|
@ -218,7 +222,7 @@ class IESGAgendaTests(TestCase):
|
|||
relation.save()
|
||||
|
||||
statchg.group = Group.objects.get(acronym="mars")
|
||||
statchg.save_with_history([DocEvent.objects.create(doc=statchg, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
statchg.save_with_history([DocEvent.objects.create(doc=statchg, rev=statchg.rev, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
statchg.set_state(State.objects.get(type="statchg", slug="iesgeval"))
|
||||
self.assertTrue(statchg in agenda_data(date_str)["sections"]["3.3.1"]["docs"])
|
||||
|
||||
|
@ -236,7 +240,7 @@ class IESGAgendaTests(TestCase):
|
|||
telechat_event.save()
|
||||
|
||||
conflrev.group = Group.objects.get(acronym="mars")
|
||||
conflrev.save_with_history([DocEvent.objects.create(doc=conflrev, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
conflrev.save_with_history([DocEvent.objects.create(doc=conflrev, rev=conflrev.rev, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
conflrev.set_state(State.objects.get(type="conflrev", slug="iesgeval"))
|
||||
self.assertTrue(conflrev in agenda_data(date_str)["sections"]["3.4.1"]["docs"])
|
||||
|
||||
|
@ -255,7 +259,7 @@ class IESGAgendaTests(TestCase):
|
|||
telechat_event.save()
|
||||
|
||||
charter.group = Group.objects.get(acronym="mars")
|
||||
charter.save_with_history([DocEvent.objects.create(doc=charter, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
charter.save_with_history([DocEvent.objects.create(doc=charter, rev=charter.rev, type="changed_group", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
|
||||
charter.group.state_id = "bof"
|
||||
charter.group.save()
|
||||
|
@ -413,6 +417,7 @@ class RescheduleOnAgendaTests(TestCase):
|
|||
# add to schedule
|
||||
e = TelechatDocEvent(type="scheduled_for_telechat")
|
||||
e.doc = draft
|
||||
e.rev = draft.rev
|
||||
e.by = Person.objects.get(name="Areað Irector")
|
||||
e.telechat_date = TelechatDate.objects.active()[0].date
|
||||
e.returning_item = True
|
||||
|
|
|
@ -1125,7 +1125,7 @@ def add_session_drafts(request, session_id, num):
|
|||
if form.is_valid():
|
||||
for draft in form.cleaned_data['drafts']:
|
||||
session.sessionpresentation_set.create(document=draft,rev=None)
|
||||
c = DocEvent(type="added_comment", doc=draft, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=draft, rev=draft.rev, by=request.user.person)
|
||||
c.desc = "Added to session: %s" % session
|
||||
c.save()
|
||||
return redirect('ietf.meeting.views.session_details', num=session.meeting.number, acronym=session.group.acronym)
|
||||
|
@ -1189,7 +1189,7 @@ def upload_session_bluesheets(request, session_id, num):
|
|||
session.sessionpresentation_set.create(document=doc,rev='00')
|
||||
filename = '%s-%s%s'% ( doc.name, doc.rev, ext)
|
||||
doc.external_url = filename
|
||||
e = NewRevisionDocEvent.objects.create(doc=doc,by=request.user.person,type='new_revision',desc='New revision available: %s'%doc.rev,rev=doc.rev)
|
||||
e = NewRevisionDocEvent.objects.create(doc=doc, rev=doc.rev, by=request.user.person, type='new_revision', desc='New revision available: %s'%doc.rev)
|
||||
doc.save_with_history([e])
|
||||
handle_upload_file(file, filename, session.meeting, 'bluesheets')
|
||||
return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym)
|
||||
|
@ -1284,7 +1284,7 @@ def upload_session_minutes(request, session_id, num):
|
|||
other_session.sessionpresentation_set.create(document=doc,rev=doc.rev)
|
||||
filename = '%s-%s%s'% ( doc.name, doc.rev, ext)
|
||||
doc.external_url = filename
|
||||
e = NewRevisionDocEvent.objects.create(doc=doc,time=doc.time,by=request.user.person,type='new_revision',desc='New revision available: %s'%doc.rev,rev=doc.rev)
|
||||
e = NewRevisionDocEvent.objects.create(doc=doc, time=doc.time, by=request.user.person, type='new_revision', desc='New revision available: %s'%doc.rev, rev=doc.rev)
|
||||
doc.save_with_history([e])
|
||||
# The way this function builds the filename it will never trigger the file delete in handle_file_upload.
|
||||
handle_upload_file(file, filename, session.meeting, 'minutes')
|
||||
|
@ -1531,7 +1531,7 @@ def remove_sessionpresentation(request, session_id, num, name):
|
|||
return HttpResponseForbidden("The materials cutoff for this session has passed. Contact the secretariat for further action.")
|
||||
if request.method == 'POST':
|
||||
session.sessionpresentation_set.filter(pk=sp.pk).delete()
|
||||
c = DocEvent(type="added_comment", doc=sp.document, by=request.user.person)
|
||||
c = DocEvent(type="added_comment", doc=sp.document, rev=sp.document.rev, by=request.user.person)
|
||||
c.desc = "Removed from session: %s" % (session)
|
||||
c.save()
|
||||
return redirect('ietf.meeting.views.session_details', num=session.meeting.number, acronym=session.group.acronym)
|
||||
|
|
|
@ -599,7 +599,7 @@ with db_con.cursor() as c:
|
|||
|
||||
e = ReviewRequestDocEvent.objects.filter(type="closed_review_request", doc=review_req.doc, review_request=review_req).first()
|
||||
if not e:
|
||||
e = ReviewRequestDocEvent(type="closed_review_request", doc=review_req.doc, review_request=review_req)
|
||||
e = ReviewRequestDocEvent(type="closed_review_request", doc=review_req.doc, rev=review_req.doc.rev, review_request=review_req)
|
||||
e.time = parse_timestamp(timestamp)
|
||||
e.by = by
|
||||
e.state = states.get(state) if state else None
|
||||
|
@ -647,7 +647,7 @@ with db_con.cursor() as c:
|
|||
|
||||
e = ReviewRequestDocEvent.objects.filter(type="requested_review", doc=review_req.doc, review_request=review_req).first()
|
||||
if not e:
|
||||
e = ReviewRequestDocEvent(type="requested_review", doc=review_req.doc, review_request=review_req)
|
||||
e = ReviewRequestDocEvent(type="requested_review", doc=review_req.doc, rev=review_req.doc.rev, review_request=review_req)
|
||||
e.time = request_time
|
||||
e.by = by
|
||||
e.desc = "Requested {} review by {}".format(review_req.type.name, review_req.team.acronym.upper())
|
||||
|
@ -659,7 +659,7 @@ with db_con.cursor() as c:
|
|||
elif key == "assigned":
|
||||
e = ReviewRequestDocEvent.objects.filter(type="assigned_review_request", doc=review_req.doc, review_request=review_req).first()
|
||||
if not e:
|
||||
e = ReviewRequestDocEvent(type="assigned_review_request", doc=review_req.doc, review_request=review_req)
|
||||
e = ReviewRequestDocEvent(type="assigned_review_request", doc=review_req.doc, rev=review_req.doc.rev, review_request=review_req)
|
||||
e.time = parse_timestamp(timestamp)
|
||||
e.by = by
|
||||
e.desc = "Request for {} review by {} is assigned to {}".format(
|
||||
|
@ -675,7 +675,7 @@ with db_con.cursor() as c:
|
|||
elif key == "closed" and review_req.state_id not in ("requested", "accepted"):
|
||||
e = ReviewRequestDocEvent.objects.filter(type="closed_review_request", doc=review_req.doc, review_request=review_req).first()
|
||||
if not e:
|
||||
e = ReviewRequestDocEvent(type="closed_review_request", doc=review_req.doc, review_request=review_req)
|
||||
e = ReviewRequestDocEvent(type="closed_review_request", doc=review_req.doc, rev=review_req.doc.rev, review_request=review_req)
|
||||
e.time = parse_timestamp(timestamp)
|
||||
e.by = by
|
||||
e.state = states.get(state) if state else None
|
||||
|
@ -765,7 +765,7 @@ with db_con.cursor() as c:
|
|||
if "closed" not in event_collection and "assigned" in event_collection:
|
||||
e = ReviewRequestDocEvent.objects.filter(type="closed_review_request", doc=review_req.doc, review_request=review_req).first()
|
||||
if not e:
|
||||
e = ReviewRequestDocEvent(type="closed_review_request", doc=review_req.doc, review_request=review_req)
|
||||
e = ReviewRequestDocEvent(type="closed_review_request", doc=review_req.doc, rev=review_req.doc.rev, review_request=review_req)
|
||||
e.time = donetime or datetime.datetime.now()
|
||||
e.by = by
|
||||
e.state = review_req.state
|
||||
|
|
|
@ -440,6 +440,7 @@ def assign_review_request_to_reviewer(request, review_req, reviewer, add_skip=Fa
|
|||
ReviewRequestDocEvent.objects.create(
|
||||
type="assigned_review_request",
|
||||
doc=review_req.doc,
|
||||
rev=review_req.doc.rev,
|
||||
by=request.user.person,
|
||||
desc="Request for {} review by {} is assigned to {}".format(
|
||||
review_req.type.name,
|
||||
|
@ -513,6 +514,7 @@ def close_review_request(request, review_req, close_state):
|
|||
ReviewRequestDocEvent.objects.create(
|
||||
type="closed_review_request",
|
||||
doc=review_req.doc,
|
||||
rev=review_req.doc.rev,
|
||||
by=request.user.person,
|
||||
desc="Closed request for {} review by {} with state '{}'".format(
|
||||
review_req.type.name, review_req.team.acronym.upper(), close_state.name),
|
||||
|
|
|
@ -82,6 +82,7 @@ def handle_substate(doc):
|
|||
system = Person.objects.get(name="(system)")
|
||||
DocEvent.objects.create(type="changed_document",
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
desc="Sub state has been changed to <b>AD Followup</b> from <b>Revised ID Needed</b>",
|
||||
by=system)
|
||||
|
||||
|
@ -173,6 +174,7 @@ def do_extend(draft, request):
|
|||
type='changed_document',
|
||||
by=request.user.person,
|
||||
doc=draft,
|
||||
rev=draft.rev,
|
||||
time=draft.time,
|
||||
desc='Extended expiry',
|
||||
)
|
||||
|
@ -203,6 +205,7 @@ def do_replace(draft, request):
|
|||
type='changed_document',
|
||||
by=request.user.person,
|
||||
doc=replaced_by,
|
||||
rev=replaced_by.rev,
|
||||
time=draft.time,
|
||||
desc='This document now replaces <b>%s</b>' % request.session['data']['replaced'],
|
||||
)
|
||||
|
@ -689,6 +692,7 @@ def edit(request, id):
|
|||
e = DocEvent.objects.create(type='changed_document',
|
||||
by=request.user.person,
|
||||
doc=draft,
|
||||
rev=draft.rev,
|
||||
desc='Changed field(s): %s' % ','.join(form.changed_data))
|
||||
# see EditModelForm.save() for detailed logic
|
||||
form.save(commit=False)
|
||||
|
@ -824,6 +828,7 @@ def makerfc(request, id):
|
|||
e = DocEvent.objects.create(type='published_rfc',
|
||||
by=request.user.person,
|
||||
doc=rfc,
|
||||
rev=draft.rev,
|
||||
desc="Published RFC")
|
||||
|
||||
# change state
|
||||
|
|
|
@ -604,6 +604,7 @@ def post_process(doc):
|
|||
type='changed_document',
|
||||
by=Person.objects.get(name="(System)"),
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
desc='Converted document to PDF',
|
||||
)
|
||||
doc.save_with_history([e])
|
||||
|
|
|
@ -251,6 +251,7 @@ def process_pdfs(request, meeting_num):
|
|||
type='changed_document',
|
||||
by=Person.objects.get(name="(System)"),
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
desc='Set URL to PDF version',
|
||||
)
|
||||
doc.save_with_history([e])
|
||||
|
@ -336,6 +337,7 @@ def recording_edit(request, meeting_num, name):
|
|||
type='changed_document',
|
||||
by=request.user.person,
|
||||
doc=recording,
|
||||
rev=recording.rev,
|
||||
desc=u'Changed URL to %s' % recording.external_url,
|
||||
)
|
||||
recording.save_with_history([e])
|
||||
|
|
|
@ -219,7 +219,7 @@ def doc_detail(request, date, name):
|
|||
# create new BallotPositionDocEvent
|
||||
clean = form.cleaned_data
|
||||
ad = Person.objects.get(id=clean['id'])
|
||||
pos = BallotPositionDocEvent(doc=doc,by=login)
|
||||
pos = BallotPositionDocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
pos.type = "changed_ballot_position"
|
||||
pos.ad = ad
|
||||
pos.ballot = doc.latest_event(BallotDocEvent, type="created_ballot")
|
||||
|
|
125
ietf/submit/migrations/0018_fix_more_bad_submission_docevents.py
Normal file
125
ietf/submit/migrations/0018_fix_more_bad_submission_docevents.py
Normal file
|
@ -0,0 +1,125 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.10.5 on 2017-03-04 11:59
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import datetime
|
||||
import sys
|
||||
from tqdm import tqdm
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
rev_fix_desc = [
|
||||
"Uploaded new revision",
|
||||
"Request for posting confirmation",
|
||||
"New version approved",
|
||||
"Posted submission manually",
|
||||
]
|
||||
|
||||
time_fix_desc = rev_fix_desc + [
|
||||
"New version available",
|
||||
]
|
||||
|
||||
untouchable_type = ['new_revision', ]
|
||||
untouchable_desc = [
|
||||
"IANA Action state changed",
|
||||
"IANA Review state changed",
|
||||
"RFC Editor state changed",
|
||||
]
|
||||
|
||||
name_shown = False
|
||||
|
||||
def ename(event):
|
||||
return u"event #%d %s %s by %s at %s" % (event.pk, event.doc.name, event.get_type_display().lower(), event.by.name, event.time)
|
||||
|
||||
def change_rev(e, r):
|
||||
global name_shown
|
||||
if not name_shown:
|
||||
#debug.say("")
|
||||
#debug.show('e.doc.name')
|
||||
name_shown = True
|
||||
#debug.say('Changing rev %s -> %s for %s' % (e.rev, r.rev, ename(e)))
|
||||
e.rev = r.rev
|
||||
e.save()
|
||||
|
||||
def forwards(apps, schema_editor):
|
||||
global name_shown
|
||||
DocEvent = apps.get_model('doc', 'DocEvent')
|
||||
events = DocEvent.objects.filter(time__gt='2016-09-10', time__lt='2016-10-04', doc__type='draft').order_by('id')
|
||||
#debug.say('')
|
||||
#debug.show('events.count()')
|
||||
docs = set()
|
||||
for e in events:
|
||||
docs.add(e.doc)
|
||||
sys.stdout.write('\n')
|
||||
for doc in tqdm(docs):
|
||||
name_shown = False
|
||||
if events.filter(doc=doc, type='new_revision').exists():
|
||||
# first scan from past towards present and fix up time:
|
||||
docevents = DocEvent.objects.filter(doc=doc).order_by('id')
|
||||
prev = docevents.first()
|
||||
for event in docevents:
|
||||
# review_request-related events may have out-of-order times
|
||||
# because of import of historical data:
|
||||
if event.time < prev.time and not 'review_request' in event.type:
|
||||
for desc_start in time_fix_desc:
|
||||
if event.desc.startswith(desc_start):
|
||||
if not name_shown:
|
||||
#debug.say("")
|
||||
#debug.show('doc.name')
|
||||
name_shown = True
|
||||
#debug.say("Fixing up time -> %s for %s" % (prev.time, ename(event)))
|
||||
event.time = prev.time
|
||||
event.save()
|
||||
break
|
||||
else:
|
||||
if event.type in untouchable_type:
|
||||
break
|
||||
for desc_start in untouchable_desc:
|
||||
if event.desc.startswith(desc_start):
|
||||
break
|
||||
else:
|
||||
#debug.say("** Out of order time for event %s" % (ename(event),))
|
||||
pass
|
||||
prev = event
|
||||
#
|
||||
# then scan from present towards past and fix up revision:
|
||||
docevents = DocEvent.objects.filter(doc=doc).order_by('-id')
|
||||
seen = None
|
||||
for event in docevents:
|
||||
if event.type == 'new_revision':
|
||||
if seen and event.rev == seen.rev:
|
||||
if (seen.time - event.time) < datetime.timedelta(seconds=60):
|
||||
#debug.say("Two new_revision events with the same rev: %s on %s and %s. Deleting the first." % (event.rev, seen.time, event.time))
|
||||
event.delete()
|
||||
else:
|
||||
#debug.say("** Two new_revision events with the same rev: %s on %s and %s. Differnt time, not deleting." % (event.rev, seen.time, event.time))
|
||||
pass
|
||||
else:
|
||||
seen = event
|
||||
else:
|
||||
pass
|
||||
for desc_start in rev_fix_desc:
|
||||
if event.desc.startswith(desc_start) and seen and event.rev != seen.rev:
|
||||
if (seen.time-event.time) < datetime.timedelta(hours=2): # 2 hours is a bit arbitrary
|
||||
change_rev(event, seen)
|
||||
break
|
||||
elif name_shown:
|
||||
#debug.say('Skipping change %s -> %s (at %s) for %s ' % (event.rev, seen.rev, seen.time, ename(event), ))
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
|
||||
def backwards(apps, schema_editor):
|
||||
pass
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('submit', '0017_auto_20161207_1046'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forwards, backwards),
|
||||
]
|
|
@ -284,7 +284,7 @@ class SubmitTests(TestCase):
|
|||
draft.group.save()
|
||||
if not stream_type=='ietf':
|
||||
draft.stream_id=stream_type
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="added_comment", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="added_comment", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
if not change_authors:
|
||||
draft.documentauthor_set.all().delete()
|
||||
ensure_person_email_info_exists('Author Name','author@example.com')
|
||||
|
@ -300,7 +300,7 @@ class SubmitTests(TestCase):
|
|||
draft.set_state(State.objects.get(used=True, type="draft-iana-review", slug="not-ok"))
|
||||
|
||||
# pretend it was approved to check that we notify the RFC Editor
|
||||
e = DocEvent(type="iesg_approved", doc=draft)
|
||||
e = DocEvent(type="iesg_approved", doc=draft, rev=draft.rev)
|
||||
e.time = draft.time
|
||||
e.by = Person.objects.get(name="(System)")
|
||||
e.desc = "The IESG approved the document"
|
||||
|
@ -312,6 +312,7 @@ class SubmitTests(TestCase):
|
|||
ballot_position.pos_id = "discuss"
|
||||
ballot_position.type = "changed_ballot_position"
|
||||
ballot_position.doc = draft
|
||||
ballot_position.rev = draft.rev
|
||||
ballot_position.ad = ballot_position.by = Person.objects.get(user__username="ad2")
|
||||
ballot_position.save()
|
||||
|
||||
|
@ -520,7 +521,7 @@ class SubmitTests(TestCase):
|
|||
def test_submit_update_individual(self):
|
||||
draft = make_test_data()
|
||||
draft.group = None
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, type="added_comment", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="added_comment", by=Person.objects.get(user__username="secretary"), desc="Test")])
|
||||
replaces_count = draft.relateddocument_set.filter(relationship_id='replaces').count()
|
||||
name = draft.name
|
||||
rev = '%02d'%(int(draft.rev)+1)
|
||||
|
|
|
@ -280,7 +280,7 @@ def post_submission(request, submission, approvedDesc):
|
|||
draft.tags.remove("need-rev")
|
||||
draft.tags.add("ad-f-up")
|
||||
|
||||
e = DocEvent(type="changed_document", doc=draft)
|
||||
e = DocEvent(type="changed_document", doc=draft, rev=draft.rev)
|
||||
e.desc = "Sub state has been changed to <b>AD Followup</b> from <b>Revised ID Needed</b>"
|
||||
e.by = system
|
||||
e.save()
|
||||
|
@ -366,7 +366,7 @@ def update_replaces_from_submission(request, submission, draft):
|
|||
for r in suggested:
|
||||
RelatedDocument.objects.create(source=draft, target=r, relationship=possibly_replaces)
|
||||
|
||||
DocEvent.objects.create(doc=draft, by=by, type="added_suggested_replaces",
|
||||
DocEvent.objects.create(doc=draft, rev=draft.rev, by=by, type="added_suggested_replaces",
|
||||
desc="Added suggested replacement relationships: %s" % ", ".join(d.name for d in suggested))
|
||||
|
||||
return approved, suggested
|
||||
|
|
|
@ -48,7 +48,7 @@ def update_rfc_log_from_protocol_page(rfc_names, rfc_must_published_later_than):
|
|||
).distinct()
|
||||
|
||||
for d in docs:
|
||||
e = DocEvent(doc=d)
|
||||
e = DocEvent(doc=d, rev=d.rev)
|
||||
e.by = system
|
||||
e.type = "rfc_in_iana_registry"
|
||||
e.desc = "IANA registries were updated to include %s" % d.display_name()
|
||||
|
@ -296,7 +296,7 @@ def add_review_comment(doc_name, review_time, by, comment):
|
|||
e = DocEvent.objects.get(doc__name=doc_name, time=review_time, type="iana_review")
|
||||
except DocEvent.DoesNotExist:
|
||||
doc = Document.objects.get(name=doc_name)
|
||||
e = DocEvent(doc=doc, time=review_time, type="iana_review")
|
||||
e = DocEvent(doc=doc, rev=doc.rev, time=review_time, type="iana_review")
|
||||
|
||||
e.desc = comment
|
||||
e.by = by
|
||||
|
|
|
@ -163,7 +163,7 @@ def update_drafts_from_queue(drafts):
|
|||
|
||||
# check if we've noted it's been received
|
||||
if d.get_state_slug("draft-iesg") == "ann" and not prev_state and not d.latest_event(DocEvent, type="rfc_editor_received_announcement"):
|
||||
e = DocEvent(doc=d, by=system, type="rfc_editor_received_announcement")
|
||||
e = DocEvent(doc=d, rev=d.rev, by=system, type="rfc_editor_received_announcement")
|
||||
e.desc = "Announcement was received by RFC Editor"
|
||||
e.save()
|
||||
send_mail_text(None, "iesg-secretary@ietf.org", None,
|
||||
|
@ -409,7 +409,7 @@ def update_docs_from_rfc_index(data, skip_older_than_date=None):
|
|||
doc.group = Group.objects.get(type="individ") # fallback for newly created doc
|
||||
|
||||
if not doc.latest_event(type="published_rfc"):
|
||||
e = DocEvent(doc=doc, type="published_rfc")
|
||||
e = DocEvent(doc=doc, rev=doc.rev, type="published_rfc")
|
||||
# unfortunately, rfc_published_date doesn't include the correct day
|
||||
# at the moment because the data only has month/year, so
|
||||
# try to deduce it
|
||||
|
@ -481,6 +481,7 @@ def update_docs_from_rfc_index(data, skip_older_than_date=None):
|
|||
if changes:
|
||||
events.append(DocEvent.objects.create(
|
||||
doc=doc,
|
||||
rev=doc.rev,
|
||||
by=system,
|
||||
type="sync_from_rfc_editor",
|
||||
desc=u"Received changes through RFC Editor sync (%s)" % u", ".join(changes),
|
||||
|
|
|
@ -22,7 +22,7 @@ class IANASyncTests(TestCase):
|
|||
def test_protocol_page_sync(self):
|
||||
draft = make_test_data()
|
||||
DocAlias.objects.create(name="rfc1234", document=draft)
|
||||
DocEvent.objects.create(doc=draft, type="published_rfc", by=Person.objects.get(name="(System)"))
|
||||
DocEvent.objects.create(doc=draft, rev=draft.rev, type="published_rfc", by=Person.objects.get(name="(System)"))
|
||||
|
||||
rfc_names = iana.parse_protocol_page('<html><a href="/go/rfc1234/">RFC 1234</a></html>')
|
||||
self.assertEqual(len(rfc_names), 1)
|
||||
|
|
|
@ -298,6 +298,7 @@ def make_test_data():
|
|||
type="started_iesg_process",
|
||||
by=ad,
|
||||
doc=draft,
|
||||
rev=draft.rev,
|
||||
desc="Started IESG process",
|
||||
)
|
||||
|
||||
|
@ -314,6 +315,7 @@ def make_test_data():
|
|||
ballot_type=BallotType.objects.get(doc_type="draft", slug="approve"),
|
||||
by=ad,
|
||||
doc=draft,
|
||||
rev=draft.rev,
|
||||
desc="Created ballot",
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue