Skip to content

Commit 2ed5c35

Browse files
author
Martin Qvist
committed
Disabled changing of acronym, charter lookup by DocAlias, changes to group proxy model so it gets the correct charter
- Legacy-Id: 3355
1 parent b73c535 commit 2ed5c35

13 files changed

Lines changed: 311 additions & 251 deletions

File tree

ietf/idtracker/models.py

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ def file_tag(self):
183183
return "<%s>" % (self.filename_with_rev())
184184
def filename_with_rev(self):
185185
return "%s-%s.txt" % (self.filename, self.revision_display())
186+
def name(self):
187+
# small hack to make model forward-compatible with new schema
188+
return self.filename
186189
def group_acronym(self):
187190
return self.group.acronym
188191
def group_ml_archive(self):
@@ -255,11 +258,11 @@ class PersonOrOrgInfo(models.Model):
255258
date_created = models.DateField(auto_now_add=True, null=True)
256259
created_by = models.CharField(blank=True, null=True, max_length=8)
257260
address_type = models.CharField(blank=True, null=True, max_length=4)
258-
def save(self):
261+
def save(self, **kwargs):
259262
self.first_name_key = self.first_name.upper()
260263
self.middle_initial_key = self.middle_initial.upper()
261264
self.last_name_key = self.last_name.upper()
262-
super(PersonOrOrgInfo, self).save()
265+
super(PersonOrOrgInfo, self).save(**kwargs)
263266
def __str__(self):
264267
# For django.VERSION 0.96
265268
if self.first_name == '' and self.last_name == '':
@@ -273,16 +276,12 @@ def __unicode__(self):
273276
def email(self, priority=1, type=None):
274277
name = unicode(self)
275278
email = ''
276-
types = type and [ type ] or [ "INET", "Prim", None ]
277-
for type in types:
278-
try:
279-
if type:
280-
email = self.emailaddress_set.get(priority=priority, type=type).address
281-
else:
282-
email = self.emailaddress_set.get(priority=priority).address
283-
break
284-
except (EmailAddress.DoesNotExist, AssertionError):
285-
pass
279+
addresses = self.emailaddress_set.filter(address__contains="@").order_by('priority')
280+
if addresses:
281+
email = addresses[0].address
282+
for a in addresses:
283+
if a.priority == priority:
284+
email = a.address
286285
return (name, email)
287286
# Added by Sunny Lee to display person's affiliation - 5/26/2007
288287
def affiliation(self, priority=1):
@@ -410,6 +409,9 @@ def displayname(self):
410409
return "%s.txt" % ( self.filename() )
411410
def filename(self):
412411
return "rfc%d" % ( self.rfc_number )
412+
def name(self):
413+
# small hack to make model forward-compatible with new schema
414+
return self.filename()
413415
def revision(self):
414416
return "RFC"
415417
def revision_display(self):
@@ -1137,6 +1139,23 @@ class DocumentWrapper(object):
11371139
def __init__(self, document):
11381140
self.document = document
11391141

1142+
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
1143+
InternetDraftOld = InternetDraft
1144+
IDInternalOld = IDInternal
1145+
RfcOld = Rfc
1146+
BallotInfoOld = BallotInfo
1147+
IDStateOld = IDState
1148+
IDSubStateOld = IDSubState
1149+
AreaOld = Area
1150+
AcronymOld = Acronym
1151+
IESGLoginOld = IESGLogin
1152+
IETFWGOld = IETFWG
1153+
IRTFOld = IRTF
1154+
from redesign.doc.proxy import InternetDraft, IDInternal, BallotInfo, Rfc
1155+
from redesign.name.proxy import IDState, IDSubState
1156+
from redesign.group.proxy import Area, Acronym, IETFWG, IRTF
1157+
from redesign.person.proxy import IESGLogin
1158+
11401159

11411160
# changes done by convert-096.py:changed maxlength to max_length
11421161
# removed core

ietf/templates/wgrecord/edit_info.html

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,23 +54,13 @@ <h1>{% if wg %}
5454
<tr>
5555
<th>{{ field.label_tag }}:</th>
5656
<td>{{ field }}
57-
{% ifequal field.name "acronym" %}
58-
{% ifequal field.errors "error" %}
59-
<ul><li>Acronym already in use.</label></li></ul>
60-
{% endifequal %}
61-
{% ifequal field.errors "warning" %}
62-
<ul><li>Acronym previously used. Use anyway? <label><input type="checkbox" name="confirm_acronym" /></label></li></ul>
63-
{% endifequal %}
64-
{% endifequal %}
6557
{% ifequal field.name "ad" %}
6658
{% if user|in_group:"Area_Director" %}
6759
<label><input type="checkbox" name="ad" value="{{ login.pk }}" /> Assign to me</label>
6860
{% endif %}
6961
{% endifequal %}
7062
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
71-
{% ifnotequal field.name "acronym" %}
72-
{{ field.errors }}
73-
{% endifnotequal %}
63+
{{ field.errors }}
7464
</td>
7565
</tr>
7666
{% endfor %}

ietf/wgrecord/tests.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ def setUp(self, *args, **kwargs):
3838
class WgFileTestCase(django.test.TestCase):
3939
def testFileExistence(self):
4040
print " Testing if WG charter texts exist locally"
41-
fpath = os.path.join(settings.CHARTER_PATH, "charter-ietf-example-01.txt")
41+
fpath = os.path.join(settings.CHARTER_PATH, "charter-ietf-core-01.txt")
4242
if not os.path.exists(fpath):
43-
print "\nERROR: exampe charter text not found in "+settings.CHARTER_PATH
43+
print "\nERROR: charter text not found in "+settings.CHARTER_PATH
4444
print "Needed for testing WG record pages."
45-
print "Remember to set CHARTER_PATH in settings_local.py\n"
45+
print "Remember to set CHARTER_PATH in settings.py\n"
4646
else:
4747
print "OK (seem to exist)"
4848

ietf/wgrecord/utils.py

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,76 @@
33

44
from datetime import datetime
55
from group.models import GroupEvent
6-
from doc.models import Document
6+
from doc.models import Document, DocAlias, DocHistory, RelatedDocument, DocumentAuthor
77
from ietf.utils.history import find_history_active_at
88

99
def set_or_create_charter(wg):
1010
try:
11-
charter = Document.objects.get(name="charter-ietf-" + wg.acronym)
11+
charter = Document.objects.get(docalias__name="charter-ietf-%s" % wg.acronym)
1212
except Document.DoesNotExist:
1313
charter = Document.objects.create(
14-
name="charter-ietf-%s" % wg.acronym,
14+
name="charter-ietf-" + wg.acronym,
1515
time=datetime.now(),
1616
type_id="charter",
1717
title=wg.name,
1818
group=wg,
1919
abstract=wg.name,
2020
rev="",
2121
)
22-
wg.charter = charter
23-
wg.save()
22+
# Create an alias as well
23+
DocAlias.objects.create(
24+
name = charter.name,
25+
document = charter
26+
)
27+
if wg.charter != charter:
28+
wg.charter = charter
29+
wg.save()
2430
return charter
2531

32+
def save_charter_in_history(charter):
33+
'''This is a modified save_document_in_history that save the name
34+
as charter-ietf-wgacronym with wgacronym being the current Group
35+
acronym. The charter Document may have an old name which is no longer
36+
in use'''
37+
def get_model_fields_as_dict(obj):
38+
return dict((field.name, getattr(obj, field.name))
39+
for field in obj._meta.fields
40+
if field is not obj._meta.pk)
41+
42+
# copy fields
43+
fields = get_model_fields_as_dict(charter)
44+
fields["doc"] = charter
45+
fields["name"] = 'charter-ietf-%s' % charter.chartered_group.acronym
46+
47+
chist = DocHistory(**fields)
48+
chist.save()
49+
50+
# copy many to many
51+
for field in charter._meta.many_to_many:
52+
if not field.rel.through:
53+
# just add the attributes
54+
rel = getattr(chist, field.name)
55+
for item in getattr(charter, field.name).all():
56+
rel.add(item)
57+
58+
# copy remaining tricky many to many
59+
def transfer_fields(obj, HistModel):
60+
mfields = get_model_fields_as_dict(item)
61+
# map charter -> chist
62+
for k, v in mfields.iteritems():
63+
if v == charter:
64+
mfields[k] = chist
65+
HistModel.objects.create(**mfields)
66+
67+
for item in RelatedDocument.objects.filter(source=charter):
68+
transfer_fields(item, RelatedDocHistory)
69+
70+
for item in DocumentAuthor.objects.filter(document=charter):
71+
transfer_fields(item, DocHistoryAuthor)
72+
73+
return chist
74+
75+
2676
def add_wg_comment(request, wg, text, ballot=None):
2777
if request:
2878
login = request.user.get_profile()
@@ -86,7 +136,19 @@ def get_charter_for_revision(charter, r):
86136
if l != []:
87137
return l[0]
88138
else:
89-
return charter
139+
# Get the lastest history entry
140+
l = list(charter.history_set.all().order_by('-time'))
141+
if l != []:
142+
class FakeHistory(object):
143+
def __init__(self, name, rev, time):
144+
self.name = name
145+
self.rev = rev
146+
self.time = time
147+
148+
return FakeHistory(l[0].name, charter.rev, charter.time)
149+
else:
150+
# no history, just return charter
151+
return charter
90152

91153
def get_group_for_revision(wg, r):
92154
if r == None:
@@ -118,6 +180,12 @@ def next_revision(rev):
118180
else:
119181
return "%s-00" % (m.group('major'))
120182

183+
def approved_revision(rev):
184+
if rev == "":
185+
return ""
186+
m = re.match(r"(?P<major>[0-9][0-9])(-(?P<minor>[0-9][0-9]))?", rev)
187+
return m.group('major')
188+
121189
def next_approved_revision(rev):
122190
if rev == "":
123191
return "01"

ietf/wgrecord/views_ballot.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from utils import *
2323
from group.models import Group, GroupHistory, GroupEvent, save_group_in_history
2424
from name.models import GroupBallotPositionName, CharterDocStateName, GroupStateName
25-
from doc.models import Document, DocEvent, GroupBallotPositionDocEvent, save_document_in_history, WriteupDocEvent
25+
from doc.models import Document, DocEvent, GroupBallotPositionDocEvent, WriteupDocEvent
2626

2727
def default_action_text(wg, doc, user):
2828
e = WriteupDocEvent(doc=doc, by=user)
@@ -100,7 +100,7 @@ def edit_position(request, name):
100100
else:
101101
raise Http404
102102

103-
doc = get_object_or_404(Document, name=wg.charter.name)
103+
doc = set_or_create_charter(wg)
104104
started_process = doc.latest_event(type="started_iesg_process")
105105

106106
ad = login = request.user.get_profile()
@@ -230,7 +230,7 @@ def send_ballot_comment(request, name):
230230
else:
231231
raise Http404
232232

233-
doc = wg.charter
233+
doc = set_or_create_charter(wg)
234234
started_process = doc.latest_event(type="started_iesg_process")
235235
if not started_process:
236236
raise Http404()
@@ -319,7 +319,7 @@ def announcement_text(request, name, ann):
319319
else:
320320
raise Http404
321321

322-
doc = wg.charter
322+
doc = set_or_create_charter(wg)
323323

324324
login = request.user.get_profile()
325325

@@ -370,7 +370,7 @@ def approve_ballot(request, name):
370370
else:
371371
raise Http404
372372

373-
doc = wg.charter
373+
doc = set_or_create_charter(wg)
374374

375375
login = request.user.get_profile()
376376

@@ -384,7 +384,7 @@ def approve_ballot(request, name):
384384
new_state = GroupStateName.objects.get(slug="active")
385385
new_charter_state = CharterDocStateName.objects.get(slug="approved")
386386

387-
save_document_in_history(doc)
387+
save_charter_in_history(doc)
388388
save_group_in_history(wg)
389389

390390
prev_state = wg.state

0 commit comments

Comments
 (0)