forked from adamlaska/datatracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathimport-interim.py
More file actions
executable file
·155 lines (113 loc) · 5.3 KB
/
import-interim.py
File metadata and controls
executable file
·155 lines (113 loc) · 5.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/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, make_revision_event
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()
meeting = m
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 = "00"
d.group = session.group
d.time = datetime.datetime.combine(meeting.date, datetime.time(0, 0, 0)) # we may have better estimate below
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
e = make_revision_event(d, system_person)
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]
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:
pass
d.time = e.time
d.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
e.save()
import_material_kind(InterimAgenda, agenda_doctype)
import_material_kind(InterimMinutes, minutes_doctype)
import_material_kind(InterimSlides, slides_doctype)