Add interim meeting import script
- Legacy-Id: 3939
This commit is contained in:
parent
01afd80e76
commit
f2a05069ac
|
@ -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
|
||||
|
|
150
redesign/importing/import-interim.py
Executable file
150
redesign/importing/import-interim.py
Executable 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)
|
||||
|
0
redesign/interim/__init__.py
Normal file
0
redesign/interim/__init__.py
Normal file
95
redesign/interim/models.py
Normal file
95
redesign/interim/models.py
Normal 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)
|
Loading…
Reference in a new issue