Skip to content

Commit 05d57f6

Browse files
committed
Added a 'rev' field to DocEvent, and removed the corresponding field from NewRevisionDocEvent and SubmissionDocEvent. Added a migration for an initial schema change, one data migration to copy and infer revision information, another schema migration to remove extraneous revision field, and another data migration to fix up bad timestamps and bad revision info from the period 2016-09-10 to 2016-10-04.
- Legacy-Id: 12974
1 parent fd9a0d1 commit 05d57f6

7 files changed

Lines changed: 130 additions & 20 deletions

File tree

ietf/doc/admin.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ class DocumentAdmin(admin.ModelAdmin):
107107
def save_model(self, request, obj, form, change):
108108
e = DocEvent.objects.create(
109109
doc=obj,
110+
rev=obj.rev,
110111
by=request.user.person,
111112
type='changed_document',
112113
desc=form.cleaned_data.get('comment_about_changes'),
@@ -149,15 +150,14 @@ class BallotTypeAdmin(admin.ModelAdmin):
149150
# events
150151

151152
class DocEventAdmin(admin.ModelAdmin):
152-
def rev(self, obj):
153-
h = obj.get_dochistory()
154-
return h.rev if h else ""
153+
def event_type(self, obj):
154+
return str(obj.type)
155155
def doc_time(self, obj):
156156
h = obj.get_dochistory()
157157
return h.time if h else ""
158158
def short_desc(self, obj):
159159
return obj.desc[:32]
160-
list_display = ["id", "doc", "type", "rev", "by", "time", "doc_time", "short_desc" ]
160+
list_display = ["id", "doc", "event_type", "rev", "by", "time", "doc_time", "short_desc" ]
161161
search_fields = ["doc__name", "by__name"]
162162
raw_id_fields = ["doc", "by"]
163163
admin.site.register(DocEvent, DocEventAdmin)

ietf/doc/feeds.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def items(self, obj):
3535
return events
3636

3737
def item_title(self, item):
38-
return u"[%s] %s [rev. %s]" % (item.by, truncatewords(strip_tags(item.desc), 15), item.get_rev())
38+
return u"[%s] %s [rev. %s]" % (item.by, truncatewords(strip_tags(item.desc), 15), item.rev)
3939

4040
def item_description(self, item):
4141
return truncatewords_html(format_textarea(item.desc), 20)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.5 on 2017-03-04 08:20
3+
from __future__ import unicode_literals
4+
5+
from django.db import models, migrations
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('doc', '0021_add_wg_states'),
11+
]
12+
13+
operations = [
14+
migrations.RenameField(
15+
model_name='newrevisiondocevent',
16+
old_name='rev',
17+
new_name='revision',
18+
),
19+
migrations.RenameField(
20+
model_name='submissiondocevent',
21+
old_name='rev',
22+
new_name='revision',
23+
),
24+
migrations.AddField(
25+
model_name='docevent',
26+
name='rev',
27+
field=models.CharField(blank=True, max_length=16, verbose_name=b'revision'),
28+
),
29+
]
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.5 on 2017-03-04 08:30
3+
from __future__ import unicode_literals, print_function
4+
5+
from tqdm import tqdm
6+
7+
from django.db import migrations
8+
9+
import debug # pyflakes:ignore
10+
11+
from ietf.doc.models import DocHistory
12+
13+
def ename(event):
14+
return u"%s %s by %s at %s" % (event.doc.name, event.get_type_display().lower(), event.by.name, event.time)
15+
16+
def get_dochistory(event):
17+
h = DocHistory.objects.filter(time__lte=event.time,doc__name=event.doc.name).order_by('-time', '-pk')
18+
if not h.exists():
19+
h = DocHistory.objects.filter(time__gte=event.time,doc__name=event.doc.name).order_by('time', 'pk')
20+
return h
21+
22+
def get_history_rev(e):
23+
h = e.get_dochistory()
24+
rev = None
25+
if h.exists():
26+
for i in h:
27+
if i.rev:
28+
break
29+
if i and i.rev:
30+
rev = i.rev
31+
return rev
32+
33+
def forwards(apps,schema_editor):
34+
DocEvent = apps.get_model('doc', 'DocEvent')
35+
DocEvent.get_dochistory = get_dochistory
36+
NewRevisionDocEvent = apps.get_model('doc', 'NewRevisionDocEvent')
37+
SubmissionDocEvent = apps.get_model('doc', 'SubmissionDocEvent')
38+
print("\nProcessing NewRevisionDocEvents:")
39+
for e in tqdm(list(NewRevisionDocEvent.objects.filter(rev=''))):
40+
if e.revision:
41+
e.rev = e.revision
42+
e.save()
43+
print("\nProcessing SubmissionDocEvents:")
44+
for e in tqdm(list(SubmissionDocEvent.objects.filter(rev=''))):
45+
if e.revision:
46+
e.rev = e.revision
47+
e.save()
48+
print("\nProcessing remaining DocEvents:")
49+
for e in tqdm(list(DocEvent.objects.filter(rev=''))):
50+
rev = get_history_rev(e)
51+
if rev:
52+
e.rev = rev
53+
e.save()
54+
55+
def backwards(apps,schema_editor):
56+
DocEvent = apps.get_model('doc', 'DocEvent')
57+
print("\nProcessing DocEvents:")
58+
for e in tqdm(list(DocEvent.objects.exclude(rev=''))):
59+
e.rev = ''
60+
e.save()
61+
62+
class Migration(migrations.Migration):
63+
64+
dependencies = [
65+
('doc', '0022_add_docevent_rev'),
66+
]
67+
68+
operations = [
69+
migrations.RunPython(forwards, backwards),
70+
]
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.5 on 2017-03-04 12:10
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('doc', '0023_set_docevent_rev_data'),
12+
]
13+
14+
operations = [
15+
migrations.RemoveField(
16+
model_name='newrevisiondocevent',
17+
name='revision',
18+
),
19+
migrations.RemoveField(
20+
model_name='submissiondocevent',
21+
name='revision',
22+
),
23+
]

ietf/doc/models.py

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,7 @@ class DocEvent(models.Model):
760760
type = models.CharField(max_length=50, choices=EVENT_TYPES)
761761
by = models.ForeignKey(Person)
762762
doc = models.ForeignKey('doc.Document')
763+
rev = models.CharField(verbose_name="revision", max_length=16, blank=True)
763764
desc = models.TextField()
764765

765766
def for_current_revision(self):
@@ -772,23 +773,11 @@ def get_dochistory(self):
772773
def __unicode__(self):
773774
return u"%s %s by %s at %s" % (self.doc.name, self.get_type_display().lower(), self.by.plain_name(), self.time)
774775

775-
def get_rev(self):
776-
e = self
777-
# check subtypes which has a rev attribute
778-
for sub in ['newrevisiondocevent', 'submissiondocevent', ]:
779-
if hasattr(e, sub):
780-
e = getattr(e, sub)
781-
break
782-
if hasattr(e, 'rev'):
783-
return e.rev
784-
else:
785-
return None
786-
787776
class Meta:
788777
ordering = ['-time', '-id']
789778

790779
class NewRevisionDocEvent(DocEvent):
791-
rev = models.CharField(max_length=16)
780+
pass
792781

793782
class StateDocEvent(DocEvent):
794783
state_type = models.ForeignKey(StateType)
@@ -911,7 +900,6 @@ class AddedMessageEvent(DocEvent):
911900

912901
class SubmissionDocEvent(DocEvent):
913902
import ietf.submit.models
914-
rev = models.CharField(max_length=16)
915903
submission = models.ForeignKey(ietf.submit.models.Submission)
916904

917905
# dumping store for removed events

ietf/templates/doc/document_history.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ <h2>Document history</h2>
103103
{% for e in events %}
104104
<tr class="anchor-target" id="history-{{ e.pk }}">
105105
<td class="text-nowrap">{{ e.time|date:"Y-m-d" }}</td>
106-
<td class="text-center">{{ e.get_rev }}</td>
106+
<td class="text-center">{{ e.rev }}</td>
107107
<td>{{ e.by|escape }}</td>
108108
<td>{{ e.desc|format_history_text|safe }}</td>
109109
</tr>

0 commit comments

Comments
 (0)