Import NomCom groups, and start/end events for groups
- Legacy-Id: 3060
This commit is contained in:
parent
bb2e2b10c5
commit
8762d77fd8
|
@ -4,6 +4,8 @@ from django.db import models
|
|||
from redesign.name.models import *
|
||||
from redesign.person.models import Email
|
||||
|
||||
import datetime
|
||||
|
||||
class Group(models.Model):
|
||||
name = models.CharField(max_length=80)
|
||||
acronym = models.CharField(max_length=16, db_index=True)
|
||||
|
@ -16,6 +18,31 @@ class Group(models.Model):
|
|||
comments = models.TextField(blank=True)
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
def latest_event(self, *args, **filter_args):
|
||||
"""Get latest group event with filter arguments, e.g.
|
||||
d.latest_event(type="xyz")."""
|
||||
e = GroupEvent.objects.filter(group=self).filter(**filter_args).order_by('-time', '-id')[:1]
|
||||
return e[0] if e else None
|
||||
|
||||
|
||||
GROUP_EVENT_CHOICES = [("proposed", "Proposed group"),
|
||||
("started", "Started group"),
|
||||
("concluded", "Concluded group"),
|
||||
]
|
||||
|
||||
class GroupEvent(models.Model):
|
||||
"""An occurrence for a group, used for tracking who, when and what."""
|
||||
group = models.ForeignKey(Group)
|
||||
time = models.DateTimeField(default=datetime.datetime.now, help_text="When the event happened")
|
||||
type = models.CharField(max_length=50, choices=GROUP_EVENT_CHOICES)
|
||||
by = models.ForeignKey(Email)
|
||||
desc = models.TextField()
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s %s at %s" % (self.by.get_name(), self.get_type_display().lower(), self.time)
|
||||
|
||||
class Meta:
|
||||
ordering = ['-time', 'id']
|
||||
|
||||
# This will actually be extended from Groups, but that requires Django 1.0
|
||||
# This will record the new state and the date it occurred for any changes
|
||||
|
|
|
@ -14,10 +14,12 @@ management.setup_environ(settings)
|
|||
|
||||
from redesign.group.models import *
|
||||
from redesign.name.models import *
|
||||
from ietf.idtracker.models import AreaGroup, IETFWG, Area, AreaGroup, Acronym, AreaWGURL, IRTF
|
||||
from ietf.idtracker.models import AreaGroup, IETFWG, Area, AreaGroup, Acronym, AreaWGURL, IRTF, ChairsHistory, Role
|
||||
|
||||
# imports IETFWG, Area, AreaGroup, Acronym
|
||||
|
||||
# also creates nomcom groups
|
||||
|
||||
# FIXME: should also import IRTF
|
||||
|
||||
# make sure we got the names
|
||||
|
@ -54,7 +56,38 @@ iesg_group.state = state_names["active"]
|
|||
iesg_group.type = type_names["ietf"]
|
||||
iesg_group.save()
|
||||
|
||||
system_email, _ = Email.objects.get_or_create(address="(System)")
|
||||
|
||||
|
||||
# NomCom
|
||||
Group.objects.filter(acronym="nomcom").delete()
|
||||
|
||||
for o in ChairsHistory.objects.filter(chair_type=Role.NOMCOM_CHAIR).order_by("start_year"):
|
||||
group = Group()
|
||||
group.acronym = "nomcom"
|
||||
group.name = "IAB/IESG Nominating Committee %s/%s" % (o.start_year, o.end_year)
|
||||
if o.chair_type.person == o.person:
|
||||
s = state_names["active"]
|
||||
else:
|
||||
s = state_names["conclude"]
|
||||
group.state = s
|
||||
group.type = type_names["ietf"]
|
||||
group.parent = None
|
||||
group.save()
|
||||
|
||||
# we need start/end year so fudge events
|
||||
e = GroupEvent(group=group, type="started")
|
||||
e.time = datetime.datetime(o.start_year, 5, 1, 12, 0, 0)
|
||||
e.by = system_email
|
||||
e.desc = e.get_type_display()
|
||||
e.save()
|
||||
|
||||
e = GroupEvent(group=group, type="concluded")
|
||||
e.time = datetime.datetime(o.end_year, 5, 1, 12, 0, 0)
|
||||
e.by = system_email
|
||||
e.desc = e.get_type_display()
|
||||
e.save()
|
||||
|
||||
# Area
|
||||
for o in Area.objects.all():
|
||||
group, _ = Group.objects.get_or_create(acronym=o.area_acronym.acronym)
|
||||
|
@ -70,9 +103,20 @@ for o in Area.objects.all():
|
|||
group.parent = iesg_group
|
||||
group.comments = o.comments.strip() if o.comments else ""
|
||||
|
||||
# FIXME: missing fields from old: concluded_date, last_modified_date, extra_email_addresses
|
||||
|
||||
group.save()
|
||||
|
||||
# import events
|
||||
group.groupevent_set.all().delete()
|
||||
|
||||
if o.concluded_date:
|
||||
e = GroupEvent(group=group, type="concluded")
|
||||
e.time = datetime.datetime.combine(o.concluded_date, datetime.time(12, 0, 0))
|
||||
e.by = system_email
|
||||
e.desc = e.get_type_display()
|
||||
e.save()
|
||||
|
||||
# FIXME: missing fields from old: last_modified_date, extra_email_addresses
|
||||
|
||||
|
||||
# IETFWG, AreaGroup
|
||||
for o in IETFWG.objects.all():
|
||||
|
@ -129,8 +173,24 @@ for o in IETFWG.objects.all():
|
|||
|
||||
group.list_email = o.email_address if o.email_address else ""
|
||||
group.comments = o.comments.strip() if o.comments else ""
|
||||
# FIXME: missing fields from old: proposed_date, start_date, dormant_date, concluded_date, meeting_scheduled, email_subscribe, email_keyword, email_archive, last_modified_date, meeting_scheduled_old
|
||||
|
||||
group.save()
|
||||
|
||||
# FIXME: IRTF
|
||||
# import events
|
||||
group.groupevent_set.all().delete()
|
||||
|
||||
def import_date_event(name):
|
||||
d = getattr(o, "%s_date" % name)
|
||||
if d:
|
||||
e = GroupEvent(group=group, type=name)
|
||||
e.time = datetime.datetime.combine(d, datetime.time(12, 0, 0))
|
||||
e.by = system_email
|
||||
e.desc = e.get_type_display()
|
||||
e.save()
|
||||
|
||||
import_date_event("proposed")
|
||||
import_date_event("start")
|
||||
import_date_event("concluded")
|
||||
# dormant_date is empty on all so don't bother with that
|
||||
|
||||
# FIXME: missing fields from old: meeting_scheduled, email_subscribe, email_keyword, email_archive, last_modified_date, meeting_scheduled_old
|
||||
|
|
|
@ -15,7 +15,7 @@ management.setup_environ(settings)
|
|||
from redesign.person.models import *
|
||||
from redesign.group.models import *
|
||||
from redesign.name.models import *
|
||||
from ietf.idtracker.models import IESGLogin, AreaDirector, IDAuthor, PersonOrOrgInfo, WGEditor
|
||||
from ietf.idtracker.models import IESGLogin, AreaDirector, IDAuthor, PersonOrOrgInfo, WGEditor, ChairsHistory, Role as OldRole
|
||||
|
||||
# assumptions:
|
||||
# - groups have been imported
|
||||
|
@ -23,10 +23,11 @@ from ietf.idtracker.models import IESGLogin, AreaDirector, IDAuthor, PersonOrOrg
|
|||
# PersonOrOrgInfo/PostalAddress/EmailAddress/PhoneNumber are not
|
||||
# imported, although some information is retrieved from those
|
||||
|
||||
# imports IESGLogin, AreaDirector, WGEditor and persons from IDAuthor
|
||||
# imports IESGLogin, AreaDirector, WGEditor, persons from IDAuthor,
|
||||
# NomCom chairs from ChairsHistory
|
||||
|
||||
# should probably import WGChair, WGSecretary,
|
||||
# WGTechAdvisor, Role, ChairsHistory, IRTFChair
|
||||
# WGTechAdvisor, Role, IRTFChair
|
||||
|
||||
# make sure names exist
|
||||
def name(name_class, slug, name, desc=""):
|
||||
|
@ -38,8 +39,9 @@ def name(name_class, slug, name, desc=""):
|
|||
return obj
|
||||
|
||||
area_director_role = name(RoleName, "ad", "Area Director")
|
||||
inactive_area_director_role = name(RoleName, "ex-ad", "Ex-Area Director", desc="In-active Area Director")
|
||||
inactive_area_director_role = name(RoleName, "ex-ad", "Ex-Area Director", desc="Inactive Area Director")
|
||||
wg_editor_role = name(RoleName, "wgeditor", "Working Group Editor")
|
||||
chair_role = name(RoleName, "chair", "Chair")
|
||||
|
||||
# helpers for creating the objects
|
||||
def get_or_create_email(o, create_fake):
|
||||
|
@ -73,6 +75,18 @@ def get_or_create_email(o, create_fake):
|
|||
|
||||
return e
|
||||
|
||||
nomcom_groups = list(Group.objects.filter(acronym="nomcom"))
|
||||
for o in ChairsHistory.objects.filter(chair_type=OldRole.NOMCOM_CHAIR):
|
||||
print "importing NOMCOM chair", o
|
||||
for g in nomcom_groups:
|
||||
if ("%s/%s" % (o.start_year, o.end_year)) in g.name:
|
||||
break
|
||||
|
||||
email = get_or_create_email(o, create_fake=False)
|
||||
|
||||
Role.objects.get_or_create(name=chair_role, group=g, email=email)
|
||||
|
||||
|
||||
# IESGLogin
|
||||
for o in IESGLogin.objects.all():
|
||||
print "importing IESGLogin", o.id, o.first_name, o.last_name
|
||||
|
|
Loading…
Reference in a new issue