diff --git a/redesign/importing/import-all.sh b/redesign/importing/import-all.sh index 0cc93a317..2d28895a3 100755 --- a/redesign/importing/import-all.sh +++ b/redesign/importing/import-all.sh @@ -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 diff --git a/redesign/importing/import-interim.py b/redesign/importing/import-interim.py new file mode 100755 index 000000000..dd5d51f07 --- /dev/null +++ b/redesign/importing/import-interim.py @@ -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) + diff --git a/redesign/interim/__init__.py b/redesign/interim/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/redesign/interim/models.py b/redesign/interim/models.py new file mode 100644 index 000000000..231552ce5 --- /dev/null +++ b/redesign/interim/models.py @@ -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)