Skip to content

Commit f2a0506

Browse files
committed
Add interim meeting import script
- Legacy-Id: 3939
1 parent 01afd80 commit f2a0506

4 files changed

Lines changed: 247 additions & 0 deletions

File tree

redesign/importing/import-all.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,5 @@ python import-announcements.py
1414
python import-docs.py
1515
python import-ipr.py # sets up links to drafts/RFCs so needs them
1616
python import-liaison.py
17+
18+
python import-interim.py # requires ietf_ams database being set up
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
#!/usr/bin/python
2+
3+
import sys, os, re, datetime, pytz
4+
5+
basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
6+
sys.path = [ basedir ] + sys.path
7+
8+
from ietf import settings
9+
settings.USE_DB_REDESIGN_PROXY_CLASSES = False
10+
11+
from django.core import management
12+
management.setup_environ(settings)
13+
14+
from django.template.defaultfilters import slugify
15+
16+
import datetime
17+
18+
from ietf.idtracker.models import AreaDirector, IETFWG, Acronym, IRTF, PersonOrOrgInfo
19+
from ietf.meeting.models import *
20+
from ietf.person.models import *
21+
from ietf.doc.models import Document, DocAlias, State, DocEvent
22+
from redesign.importing.utils import old_person_to_person, dont_save_queries
23+
from redesign.interim.models import *
24+
from ietf.name.models import *
25+
from ietf.name.utils import name
26+
27+
dont_save_queries()
28+
29+
# assumptions:
30+
# - persons have been imported
31+
# - groups have been imported
32+
# - regular meetings have been imported
33+
34+
database = "ietf_ams"
35+
36+
system_person = Person.objects.get(name="(System)")
37+
38+
agenda_doctype = name(DocTypeName, "agenda", "Agenda")
39+
minutes_doctype = name(DocTypeName, "minutes", "Minutes")
40+
slides_doctype = name(DocTypeName, "slides", "Slides")
41+
42+
group_meetings_in_year = {}
43+
44+
for o in InterimMeetings.objects.using(database).order_by("start_date"):
45+
print "importing InterimMeeting", o.pk
46+
47+
group = Group.objects.get(pk=o.group_acronym_id)
48+
meeting_key = "%s-%s" % (group.acronym, o.start_date.year)
49+
if not group.acronym in group_meetings_in_year:
50+
group_meetings_in_year[meeting_key] = 0
51+
52+
group_meetings_in_year[meeting_key] += 1
53+
54+
num = "interim-%s-%s-%s" % (o.start_date.year, group.acronym, group_meetings_in_year[meeting_key])
55+
56+
try:
57+
m = Meeting.objects.get(number=num)
58+
except:
59+
m = Meeting(number=num)
60+
m.pk = o.pk
61+
62+
m.type_id = "interim"
63+
m.date = o.start_date
64+
65+
# we don't have any other fields
66+
67+
m.save()
68+
69+
if m.session_set.all():
70+
session = m.session_set.all()[0]
71+
else:
72+
session = Session()
73+
session.meeting = m
74+
75+
session.group = group
76+
session.requested_by = system_person
77+
session.status_id = "appr"
78+
session.modified = datetime.datetime.combine(m.date, datetime.time(0, 0, 0))
79+
session.save()
80+
81+
interim_meeting = o
82+
83+
def import_material_kind(kind, doctype):
84+
# import agendas
85+
found = kind.objects.filter(meeting_num=m.pk,
86+
group_acronym_id=interim_meeting.group_acronym_id,
87+
irtf=1 if session.group.parent.acronym == "irtf" else 0,
88+
interim=1).using(database)
89+
90+
for o in found:
91+
name = "%s-%s" % (doctype.slug, m.number)
92+
if kind == InterimSlides:
93+
name += "-%s" % o.slide_num
94+
95+
name = name.lower()
96+
97+
try:
98+
d = Document.objects.get(type=doctype, docalias__name=name)
99+
except Document.DoesNotExist:
100+
d = Document(type=doctype, name=name)
101+
102+
if kind == InterimSlides:
103+
d.title = o.slide_name.strip()
104+
l = o.file_loc()
105+
d.external_url = l[l.find("slides/") + len("slides/"):]
106+
d.order = o.order_num or 1
107+
else:
108+
session_name = session.name if session.name else session.group.acronym.upper()
109+
d.title = u"%s for %s at %s" % (doctype.name, session_name, session.meeting)
110+
d.external_url = o.filename # save filenames for now as they don't appear to be quite regular
111+
d.rev = "01"
112+
d.group = session.group
113+
114+
d.save()
115+
116+
d.set_state(State.objects.get(type=doctype, slug="active"))
117+
118+
DocAlias.objects.get_or_create(document=d, name=name)
119+
120+
session.materials.add(d)
121+
122+
# try to create a doc event to figure out who uploaded it
123+
t = d.type_id
124+
if d.type_id == "slides":
125+
t = "slide, '%s" % d.title
126+
activities = InterimActivities.objects.filter(group_acronym_id=interim_meeting.group_acronym_id,
127+
meeting_num=interim_meeting.meeting_num,
128+
activity__startswith=t,
129+
activity__endswith="was uploaded").using(database)[:1]
130+
if activities:
131+
a = activities[0]
132+
try:
133+
e = DocEvent.objects.get(doc=d, type="uploaded")
134+
except DocEvent.DoesNotExist:
135+
e = DocEvent(doc=d, type="uploaded")
136+
e.time = datetime.datetime.combine(a.act_date, a.act_time)
137+
try:
138+
e.by = old_person_to_person(PersonOrOrgInfo.objects.get(pk=a.act_by)) or system_person
139+
except PersonOrOrgInfo.DoesNotExist:
140+
e.by = system_person
141+
e.desc = u"Uploaded %s" % d.type_id
142+
e.save()
143+
else:
144+
print "NO UPLOAD ACTIVITY RECORD for", d.name.encode("utf-8"), t.encode("utf-8"), interim_meeting.group_acronym_id, interim_meeting.meeting_num
145+
146+
147+
import_material_kind(InterimAgenda, agenda_doctype)
148+
import_material_kind(InterimMinutes, minutes_doctype)
149+
import_material_kind(InterimSlides, slides_doctype)
150+

redesign/interim/__init__.py

Whitespace-only changes.

redesign/interim/models.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
from django.db import models
2+
3+
class InterimActivities(models.Model):
4+
id = models.IntegerField(primary_key=True)
5+
group_acronym_id = models.IntegerField()
6+
meeting_num = models.IntegerField()
7+
activity = models.TextField()
8+
act_date = models.DateField()
9+
act_time = models.TimeField()
10+
act_by = models.IntegerField()
11+
class Meta:
12+
db_table = u'interim_activities'
13+
14+
class InterimAgenda(models.Model):
15+
id = models.IntegerField(primary_key=True)
16+
meeting_num = models.IntegerField()
17+
group_acronym_id = models.IntegerField()
18+
filename = models.CharField(max_length=765)
19+
irtf = models.IntegerField()
20+
interim = models.IntegerField()
21+
class Meta:
22+
db_table = u'interim_agenda'
23+
24+
class InterimInfo(models.Model):
25+
id = models.IntegerField(primary_key=True)
26+
group_acronym_id = models.IntegerField(null=True, blank=True)
27+
meeting_num = models.IntegerField(null=True, blank=True)
28+
meeting_date = models.CharField(max_length=765, blank=True)
29+
message_body = models.TextField(blank=True)
30+
class Meta:
31+
db_table = u'interim_info'
32+
33+
class InterimMeetings(models.Model):
34+
meeting_num = models.IntegerField(primary_key=True)
35+
start_date = models.DateField(null=True, blank=True)
36+
end_date = models.DateField(null=True, blank=True)
37+
city = models.CharField(max_length=765, blank=True)
38+
state = models.CharField(max_length=765, blank=True)
39+
country = models.CharField(max_length=765, blank=True)
40+
time_zone = models.IntegerField(null=True, blank=True)
41+
ack = models.TextField(blank=True)
42+
agenda_html = models.TextField(blank=True)
43+
agenda_text = models.TextField(blank=True)
44+
future_meeting = models.TextField(blank=True)
45+
overview1 = models.TextField(blank=True)
46+
overview2 = models.TextField(blank=True)
47+
group_acronym_id = models.IntegerField(null=True, blank=True)
48+
class Meta:
49+
db_table = u'interim_meetings'
50+
51+
class InterimMinutes(models.Model):
52+
id = models.IntegerField(primary_key=True)
53+
meeting_num = models.IntegerField()
54+
group_acronym_id = models.IntegerField()
55+
filename = models.CharField(max_length=765)
56+
irtf = models.IntegerField()
57+
interim = models.IntegerField()
58+
class Meta:
59+
db_table = u'interim_minutes'
60+
61+
class InterimSlides(models.Model):
62+
id = models.IntegerField(primary_key=True)
63+
meeting_num = models.IntegerField()
64+
group_acronym_id = models.IntegerField(null=True, blank=True)
65+
slide_num = models.IntegerField(null=True, blank=True)
66+
slide_type_id = models.IntegerField()
67+
slide_name = models.CharField(max_length=765)
68+
irtf = models.IntegerField()
69+
interim = models.IntegerField()
70+
order_num = models.IntegerField(null=True, blank=True)
71+
in_q = models.IntegerField(null=True, blank=True)
72+
class Meta:
73+
db_table = u'interim_slides'
74+
75+
def file_loc(self):
76+
from ietf.idtracker.models import Acronym
77+
dir = self.meeting_num
78+
acronym = Acronym.objects.get(pk=self.group_acronym_id).acronym
79+
if self.slide_type_id==1:
80+
#return "%s/slides/%s-%s/sld1.htm" % (dir,self.acronym(),self.slide_num)
81+
return "%s/slides/%s-%s/%s-%s.htm" % (dir,acronym,self.slide_num,self.acronym,self.slide_num)
82+
else:
83+
if self.slide_type_id == 2:
84+
ext = ".pdf"
85+
elif self.slide_type_id == 3:
86+
ext = ".txt"
87+
elif self.slide_type_id == 4:
88+
ext = ".ppt"
89+
elif self.slide_type_id == 5:
90+
ext = ".doc"
91+
elif self.slide_type_id == 6:
92+
ext = ".pptx"
93+
else:
94+
ext = ""
95+
return "%s/slides/%s-%s%s" % (dir,acronym,self.slide_num,ext)

0 commit comments

Comments
 (0)