Skip to content

Commit 2021a03

Browse files
committed
Replace individual state change event types with an all-encompassing
ChangeStateGroupEvent - Legacy-Id: 3804
1 parent dceedbf commit 2021a03

6 files changed

Lines changed: 42 additions & 45 deletions

File tree

ietf/announcements/views.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def nomcom(request):
3535
'regimes' : regimes })
3636

3737
def nomcomREDESIGN(request):
38-
from group.models import Group
38+
from group.models import Group, ChangeStateGroupEvent
3939
from ietf.announcements.models import Message
4040

4141
address_re = re.compile("<.*>")
@@ -45,11 +45,11 @@ def nomcomREDESIGN(request):
4545
regimes = []
4646

4747
for n in nomcoms:
48-
e = n.latest_event(type="started")
48+
e = n.latest_event(ChangeStateGroupEvent, type="changed_state", state="active")
4949
n.start_year = e.time.year if e else 0
5050
if n.start_year <= 2003:
5151
continue
52-
e = n.latest_event(type="concluded")
52+
e = n.latest_event(ChangeStateGroupEvent, type="changed_state", state="conclude")
5353
n.end_year = e.time.year if e else ""
5454

5555
chair = n.role_set.select_related().get(name="chair")

ietf/wgcharter/utils.py

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
import re
33

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

99
def set_or_create_charter(wg):
@@ -81,8 +81,6 @@ def add_wg_comment(request, wg, text, ballot=None):
8181
e.save()
8282

8383
def log_state_changed(request, doc, by, prev_state, note=''):
84-
from doc.models import DocEvent
85-
8684
e = DocEvent(doc=doc, by=by)
8785
e.type = "changed_document"
8886
e.desc = u"State changed to <b>%s</b> from %s" % (
@@ -96,16 +94,12 @@ def log_state_changed(request, doc, by, prev_state, note=''):
9694
return e
9795

9896
def log_group_state_changed(request, wg, by, note=''):
99-
from group.models import GroupEvent
100-
101-
e = GroupEvent(group=wg, by=by)
102-
if wg.state_id == "proposed":
103-
e.type = "proposed"
104-
elif wg.state_id == "active":
105-
e.type = "started"
106-
elif wg.state_id == "conclude":
107-
e.type = "concluded"
108-
e.desc = u"%s group" % e.type.capitalize()
97+
e = ChangeStateGroupEvent(group=wg, by=by, type="changed_state")
98+
e.state = wg.state
99+
e.desc = { 'active': "Started group",
100+
'propose': "Proposed group",
101+
'conclude': "Concluded group",
102+
}[wg.state_id]
109103

110104
if note:
111105
e.desc += "<br>%s" % note
@@ -114,8 +108,6 @@ def log_group_state_changed(request, wg, by, note=''):
114108
return e
115109

116110
def log_info_changed(request, wg, by, note=''):
117-
from group.models import GroupEvent
118-
119111
e = GroupEvent(group=wg, by=by)
120112
e.type = "info_changed"
121113
e.desc = "WG info changed: "

ietf/wgcharter/views_edit.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from django import forms
99
from django.forms.util import ErrorList
1010

11-
from utils import log_state_changed, log_group_state_changed, log_info_changed, update_telechat, add_wg_comment, set_or_create_charter, save_charter_in_history, approved_revision
11+
from utils import *
1212
from mails import email_secretariat
1313
from ietf.ietfauth.decorators import group_required
1414
from ietf.iesg.models import TelechatDate
@@ -297,9 +297,10 @@ def edit_info(request, name=None):
297297
state=GroupStateName.objects.get(name="Proposed"))
298298
wg.save()
299299

300-
e = GroupEvent(group=wg, type="proposed")
300+
e = ChangeStateGroupEvent(group=wg, type="changed_state")
301301
e.time = datetime.datetime.now()
302302
e.by = login
303+
e.state_id = "proposed"
303304
e.desc = "Proposed group"
304305
e.save()
305306
if not wg.charter:

redesign/group/models.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,14 @@ class Group(GroupInfo):
3838
charter = models.OneToOneField('doc.Document', related_name='chartered_group', blank=True, null=True)
3939

4040
def latest_event(self, *args, **filter_args):
41-
"""Get latest group event with filter arguments, e.g.
42-
d.latest_event(type="xyz")."""
43-
e = GroupEvent.objects.filter(group=self).filter(**filter_args).order_by('-time', '-id')[:1]
41+
"""Get latest event of optional Python type and with filter
42+
arguments, e.g. g.latest_event(type="xyz") returns a GroupEvent
43+
while g.latest_event(ChangeStateGroupEvent, type="xyz") returns a
44+
ChangeStateGroupEvent event."""
45+
model = args[0] if args else GroupEvent
46+
e = model.objects.filter(group=self).filter(**filter_args).order_by('-time', '-id')[:1]
4447
return e[0] if e else None
45-
48+
4649
class GroupHistory(GroupInfo):
4750
group = models.ForeignKey(Group, related_name='history_set')
4851
acronym = models.CharField(max_length=40)
@@ -75,12 +78,7 @@ class GroupStateTransitions(models.Model):
7578
next_states = models.ManyToManyField('doc.State', related_name='previous_groupstatetransitions_states')
7679

7780
GROUP_EVENT_CHOICES = [
78-
# core events
79-
("proposed", "Proposed group"),
80-
("started", "Started group"),
81-
("concluded", "Concluded group"),
82-
83-
# misc group events
81+
("changed_state", "Changed state"),
8482
("added_comment", "Added comment"),
8583
("info_changed", "Changed metadata"),
8684
]
@@ -99,6 +97,9 @@ def __unicode__(self):
9997
class Meta:
10098
ordering = ['-time', 'id']
10199

100+
class ChangeStateGroupEvent(GroupEvent):
101+
state = models.ForeignKey(GroupStateName)
102+
102103
class Role(models.Model):
103104
name = models.ForeignKey(RoleName)
104105
group = models.ForeignKey(Group)

redesign/group/proxy.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class IETFWG(Group):
105105
group_type=lambda v: ("type", { 1: "wg" }[int(v)]),
106106
status=lambda v: ("state", { 1: "active" }[int(v)]),
107107
areagroup__area__status=lambda v: ("parent__state", { 1: "active" }[v]),
108-
start_date__isnull=lambda v: None if v else ("groupevent__type", "started")
108+
start_date__isnull=lambda v: None if v else ("groupevent__changestategroupevent__state__slug__in", ("proposed", "active"))
109109
),
110110
always_filter=dict(type__in=("wg", "individ")))
111111

@@ -125,7 +125,7 @@ def group_acronym(self):
125125
#start_date = models.DateField(null=True, blank=True)
126126
@property
127127
def start_date(self):
128-
e = self.latest_event(type="started")
128+
e = self.latest_event(ChangeStateGroupEvent, type="changed_state", state="active")
129129
return e.time.date() if e else None
130130

131131
#dormant_date = models.DateField(null=True, blank=True)

redesign/importing/import-groups.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -161,16 +161,18 @@
161161
# we need start/end year so fudge events
162162
group.groupevent_set.all().delete()
163163

164-
e = GroupEvent(group=group, type="started")
164+
e = ChangeStateGroupEvent(group=group, type="changed_state")
165165
e.time = datetime.datetime(o.start_year, 5, 1, 12, 0, 0)
166166
e.by = system
167-
e.desc = e.get_type_display()
167+
e.desc = "Started group"
168+
e.state = state_names["active"]
168169
e.save()
169170

170-
e = GroupEvent(group=group, type="concluded")
171+
e = ChangeStateGroupEvent(group=group, type="changed_state")
171172
e.time = datetime.datetime(o.end_year, 5, 1, 12, 0, 0)
172173
e.by = system
173-
e.desc = e.get_type_display()
174+
e.desc = "Concluded group"
175+
e.state = state_names["conclude"]
174176
e.save()
175177

176178
# IRTF
@@ -208,13 +210,14 @@
208210
group.acronym = slugify(group.name)
209211
group.save()
210212

211-
def import_date_event(group, name, type_name):
213+
def import_date_event(group, name, state_id, desc):
212214
d = getattr(o, "%s_date" % name)
213215
if d:
214-
e = GroupEvent(group=group, type=type_name)
216+
e = ChangeStateGroupEvent(group=group, type="changed_state")
215217
e.time = datetime.datetime.combine(d, datetime.time(12, 0, 0))
216218
e.by = system
217-
e.desc = e.get_type_display()
219+
e.state = state_names[state_id]
220+
e.desc = desc
218221
e.save()
219222

220223
# Area
@@ -254,8 +257,8 @@ def import_date_event(group, name, type_name):
254257
# import events
255258
group.groupevent_set.all().delete()
256259

257-
import_date_event(group, "start", "started")
258-
import_date_event(group, "concluded", "concluded")
260+
import_date_event(group, "start", "active", "Started group")
261+
import_date_event(group, "concluded", "conclude", "Concluded group")
259262

260263
# FIXME: missing fields from old: extra_email_addresses
261264

@@ -391,9 +394,9 @@ def import_date_event(group, name, type_name):
391394
# import events
392395
group.groupevent_set.all().delete()
393396

394-
import_date_event(group, "proposed", "proposed")
395-
import_date_event(group, "start", "started")
396-
import_date_event(group, "concluded", "concluded")
397+
import_date_event(group, "proposed", "proposed", "Proposed group")
398+
import_date_event(group, "start", "active", "Started group")
399+
import_date_event(group, "concluded", "conclude", "Concluded group")
397400
# dormant_date is empty on all so don't bother with that
398401

399402
# FIXME: missing fields from old: meeting_scheduled, email_keyword, meeting_scheduled_old

0 commit comments

Comments
 (0)