Import NomCom groups, and start/end events for groups

- Legacy-Id: 3060
This commit is contained in:
Ole Laursen 2011-04-26 13:29:39 +00:00
parent bb2e2b10c5
commit 8762d77fd8
3 changed files with 110 additions and 9 deletions

View file

@ -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

View file

@ -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

View file

@ -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