Add interim meeting import script

- Legacy-Id: 3939
This commit is contained in:
Ole Laursen 2012-02-21 12:11:58 +00:00
parent 01afd80e76
commit f2a05069ac
4 changed files with 247 additions and 0 deletions

View file

@ -14,3 +14,5 @@ python import-announcements.py
python import-docs.py
python import-ipr.py # sets up links to drafts/RFCs so needs them
python import-liaison.py
python import-interim.py # requires ietf_ams database being set up

View file

@ -0,0 +1,150 @@
#!/usr/bin/python
import sys, os, re, datetime, pytz
basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
sys.path = [ basedir ] + sys.path
from ietf import settings
settings.USE_DB_REDESIGN_PROXY_CLASSES = False
from django.core import management
management.setup_environ(settings)
from django.template.defaultfilters import slugify
import datetime
from ietf.idtracker.models import AreaDirector, IETFWG, Acronym, IRTF, PersonOrOrgInfo
from ietf.meeting.models import *
from ietf.person.models import *
from ietf.doc.models import Document, DocAlias, State, DocEvent
from redesign.importing.utils import old_person_to_person, dont_save_queries
from redesign.interim.models import *
from ietf.name.models import *
from ietf.name.utils import name
dont_save_queries()
# assumptions:
# - persons have been imported
# - groups have been imported
# - regular meetings have been imported
database = "ietf_ams"
system_person = Person.objects.get(name="(System)")
agenda_doctype = name(DocTypeName, "agenda", "Agenda")
minutes_doctype = name(DocTypeName, "minutes", "Minutes")
slides_doctype = name(DocTypeName, "slides", "Slides")
group_meetings_in_year = {}
for o in InterimMeetings.objects.using(database).order_by("start_date"):
print "importing InterimMeeting", o.pk
group = Group.objects.get(pk=o.group_acronym_id)
meeting_key = "%s-%s" % (group.acronym, o.start_date.year)
if not group.acronym in group_meetings_in_year:
group_meetings_in_year[meeting_key] = 0
group_meetings_in_year[meeting_key] += 1
num = "interim-%s-%s-%s" % (o.start_date.year, group.acronym, group_meetings_in_year[meeting_key])
try:
m = Meeting.objects.get(number=num)
except:
m = Meeting(number=num)
m.pk = o.pk
m.type_id = "interim"
m.date = o.start_date
# we don't have any other fields
m.save()
if m.session_set.all():
session = m.session_set.all()[0]
else:
session = Session()
session.meeting = m
session.group = group
session.requested_by = system_person
session.status_id = "appr"
session.modified = datetime.datetime.combine(m.date, datetime.time(0, 0, 0))
session.save()
interim_meeting = o
def import_material_kind(kind, doctype):
# import agendas
found = kind.objects.filter(meeting_num=m.pk,
group_acronym_id=interim_meeting.group_acronym_id,
irtf=1 if session.group.parent.acronym == "irtf" else 0,
interim=1).using(database)
for o in found:
name = "%s-%s" % (doctype.slug, m.number)
if kind == InterimSlides:
name += "-%s" % o.slide_num
name = name.lower()
try:
d = Document.objects.get(type=doctype, docalias__name=name)
except Document.DoesNotExist:
d = Document(type=doctype, name=name)
if kind == InterimSlides:
d.title = o.slide_name.strip()
l = o.file_loc()
d.external_url = l[l.find("slides/") + len("slides/"):]
d.order = o.order_num or 1
else:
session_name = session.name if session.name else session.group.acronym.upper()
d.title = u"%s for %s at %s" % (doctype.name, session_name, session.meeting)
d.external_url = o.filename # save filenames for now as they don't appear to be quite regular
d.rev = "01"
d.group = session.group
d.save()
d.set_state(State.objects.get(type=doctype, slug="active"))
DocAlias.objects.get_or_create(document=d, name=name)
session.materials.add(d)
# try to create a doc event to figure out who uploaded it
t = d.type_id
if d.type_id == "slides":
t = "slide, '%s" % d.title
activities = InterimActivities.objects.filter(group_acronym_id=interim_meeting.group_acronym_id,
meeting_num=interim_meeting.meeting_num,
activity__startswith=t,
activity__endswith="was uploaded").using(database)[:1]
if activities:
a = activities[0]
try:
e = DocEvent.objects.get(doc=d, type="uploaded")
except DocEvent.DoesNotExist:
e = DocEvent(doc=d, type="uploaded")
e.time = datetime.datetime.combine(a.act_date, a.act_time)
try:
e.by = old_person_to_person(PersonOrOrgInfo.objects.get(pk=a.act_by)) or system_person
except PersonOrOrgInfo.DoesNotExist:
e.by = system_person
e.desc = u"Uploaded %s" % d.type_id
e.save()
else:
print "NO UPLOAD ACTIVITY RECORD for", d.name.encode("utf-8"), t.encode("utf-8"), interim_meeting.group_acronym_id, interim_meeting.meeting_num
import_material_kind(InterimAgenda, agenda_doctype)
import_material_kind(InterimMinutes, minutes_doctype)
import_material_kind(InterimSlides, slides_doctype)

View file

View file

@ -0,0 +1,95 @@
from django.db import models
class InterimActivities(models.Model):
id = models.IntegerField(primary_key=True)
group_acronym_id = models.IntegerField()
meeting_num = models.IntegerField()
activity = models.TextField()
act_date = models.DateField()
act_time = models.TimeField()
act_by = models.IntegerField()
class Meta:
db_table = u'interim_activities'
class InterimAgenda(models.Model):
id = models.IntegerField(primary_key=True)
meeting_num = models.IntegerField()
group_acronym_id = models.IntegerField()
filename = models.CharField(max_length=765)
irtf = models.IntegerField()
interim = models.IntegerField()
class Meta:
db_table = u'interim_agenda'
class InterimInfo(models.Model):
id = models.IntegerField(primary_key=True)
group_acronym_id = models.IntegerField(null=True, blank=True)
meeting_num = models.IntegerField(null=True, blank=True)
meeting_date = models.CharField(max_length=765, blank=True)
message_body = models.TextField(blank=True)
class Meta:
db_table = u'interim_info'
class InterimMeetings(models.Model):
meeting_num = models.IntegerField(primary_key=True)
start_date = models.DateField(null=True, blank=True)
end_date = models.DateField(null=True, blank=True)
city = models.CharField(max_length=765, blank=True)
state = models.CharField(max_length=765, blank=True)
country = models.CharField(max_length=765, blank=True)
time_zone = models.IntegerField(null=True, blank=True)
ack = models.TextField(blank=True)
agenda_html = models.TextField(blank=True)
agenda_text = models.TextField(blank=True)
future_meeting = models.TextField(blank=True)
overview1 = models.TextField(blank=True)
overview2 = models.TextField(blank=True)
group_acronym_id = models.IntegerField(null=True, blank=True)
class Meta:
db_table = u'interim_meetings'
class InterimMinutes(models.Model):
id = models.IntegerField(primary_key=True)
meeting_num = models.IntegerField()
group_acronym_id = models.IntegerField()
filename = models.CharField(max_length=765)
irtf = models.IntegerField()
interim = models.IntegerField()
class Meta:
db_table = u'interim_minutes'
class InterimSlides(models.Model):
id = models.IntegerField(primary_key=True)
meeting_num = models.IntegerField()
group_acronym_id = models.IntegerField(null=True, blank=True)
slide_num = models.IntegerField(null=True, blank=True)
slide_type_id = models.IntegerField()
slide_name = models.CharField(max_length=765)
irtf = models.IntegerField()
interim = models.IntegerField()
order_num = models.IntegerField(null=True, blank=True)
in_q = models.IntegerField(null=True, blank=True)
class Meta:
db_table = u'interim_slides'
def file_loc(self):
from ietf.idtracker.models import Acronym
dir = self.meeting_num
acronym = Acronym.objects.get(pk=self.group_acronym_id).acronym
if self.slide_type_id==1:
#return "%s/slides/%s-%s/sld1.htm" % (dir,self.acronym(),self.slide_num)
return "%s/slides/%s-%s/%s-%s.htm" % (dir,acronym,self.slide_num,self.acronym,self.slide_num)
else:
if self.slide_type_id == 2:
ext = ".pdf"
elif self.slide_type_id == 3:
ext = ".txt"
elif self.slide_type_id == 4:
ext = ".ppt"
elif self.slide_type_id == 5:
ext = ".doc"
elif self.slide_type_id == 6:
ext = ".pptx"
else:
ext = ""
return "%s/slides/%s-%s%s" % (dir,acronym,self.slide_num,ext)