Add materials state types, import WgProceedingActivities events for uploads

- Legacy-Id: 3667
This commit is contained in:
Ole Laursen 2011-11-17 15:12:29 +00:00
parent 8e7ab0b8d2
commit 9c639b3630
6 changed files with 73 additions and 25 deletions

View file

@ -360,7 +360,7 @@ class WgMeetingSessionProxy(TimeSlot):
return "%s at %s" % (self.acronym(), self.meeting)
def agenda_file(self,interimvar=0):
if not hasattr(self, '_agenda_file'):
docs = self.materials.filter(type="agenda")
docs = self.materials.filter(type="agenda", states__type="agenda", states__slug="active")
if not docs:
return ""
@ -371,7 +371,7 @@ class WgMeetingSessionProxy(TimeSlot):
return self._agenda_file
def minute_file(self,interimvar=0):
docs = self.materials.filter(type="minutes")
docs = self.materials.filter(type="minutes", states__type="minutes", states__slug="active")
if not docs:
return ""
@ -410,7 +410,7 @@ class WgMeetingSessionProxy(TimeSlot):
return "plenaryw"
if "Technical" in self.name:
return "plenaryt"
for m in self.materials.filter(type="agenda"):
for m in self.materials.filter(type="agenda", states__type="agenda", states__slug="active"):
if "plenaryw" in m.name:
return "plenaryw"
if "plenaryt" in m.name:

View file

@ -266,10 +266,13 @@ EVENT_TYPES = [
# core events
("new_revision", "Added new revision"),
("changed_document", "Changed document metadata"),
# misc document events
("changed_stream", "Changed document stream"),
("added_comment", "Added comment"),
("uploaded", "Uploaded document"),
("deleted", "Deleted document"),
# misc draft/RFC events
("changed_stream", "Changed document stream"),
("expired_document", "Expired document"),
("requested_resurrect", "Requested resurrect"),
("completed_resurrect", "Completed resurrect"),

View file

@ -17,7 +17,7 @@ from redesign.doc.models import *
from redesign.doc.utils import get_tags_for_stream_id
from redesign.group.models import *
from redesign.name.models import *
from redesign.importing.utils import old_person_to_person, person_name
from redesign.importing.utils import old_person_to_person, person_name, dont_save_queries
from redesign.name.utils import name
from ietf.idtracker.models import InternetDraft, IDInternal, IESGLogin, DocumentComment, PersonOrOrgInfo, Rfc, IESGComment, IESGDiscuss, BallotInfo, Position
from ietf.idrfc.models import RfcIndex, DraftVersions
@ -30,13 +30,7 @@ document_name_to_import = None
if len(sys.argv) > 1:
document_name_to_import = sys.argv[1]
# prevent memory from leaking when settings.DEBUG=True
from django.db import connection
class DontSaveQueries(object):
def append(self, x):
pass
connection.queries = DontSaveQueries()
dont_save_queries()
# assumptions:
# - states have been imported
@ -779,7 +773,7 @@ def import_from_idinternal(d, idinternal):
all_drafts = InternetDraft.objects.all().select_related()
all_drafts = InternetDraft.objects.all().order_by('pk').select_related()
if document_name_to_import:
if document_name_to_import.startswith("rfc"):
all_drafts = all_drafts.filter(rfc_number=document_name_to_import[3:])
@ -1047,7 +1041,7 @@ def get_or_create_rfc_document(rfc_number):
return (d, alias)
all_rfcs = RfcIndex.objects.all()
all_rfcs = RfcIndex.objects.all().order_by("rfc_number")
if all_drafts.count() != InternetDraft.objects.count():
if document_name_to_import and document_name_to_import.startswith("rfc"):

View file

@ -13,17 +13,22 @@ management.setup_environ(settings)
from django.template.defaultfilters import slugify
from ietf.idtracker.models import AreaDirector, IETFWG, Acronym, IRTF
import datetime
from ietf.idtracker.models import AreaDirector, IETFWG, Acronym, IRTF, PersonOrOrgInfo
from ietf.meeting.models import *
from ietf.proceedings.models import Meeting as MeetingOld, MeetingVenue, MeetingRoom, NonSession, WgMeetingSession, WgAgenda, Minute, Slide
from ietf.proceedings.models import Meeting as MeetingOld, MeetingVenue, MeetingRoom, NonSession, WgMeetingSession, WgAgenda, Minute, Slide, WgProceedingsActivities
from redesign.person.models import *
from redesign.doc.models import Document, DocAlias
from redesign.importing.utils import get_or_create_email, old_person_to_person
from redesign.doc.models import Document, DocAlias, State, DocEvent
from redesign.importing.utils import old_person_to_person, dont_save_queries
from redesign.name.models import *
from redesign.name.utils import name
dont_save_queries()
# imports Meeting, MeetingVenue, MeetingRoom, NonSession, WgMeetingSession, WgAgenda, Minute, Slide
# imports Meeting, MeetingVenue, MeetingRoom, NonSession,
# WgMeetingSession, WgAgenda, Minute, Slide, upload events from
# WgProceedingsActivities
# assumptions:
# - persons have been imported
@ -198,7 +203,7 @@ def import_materials(wg_meeting_session, timeslot=None, session=None):
session_name = timeslot.name
if kind == Slide:
d.title = o.slide_name
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
@ -209,16 +214,43 @@ def import_materials(wg_meeting_session, timeslot=None, session=None):
d.group = session.group if session else None
d.save()
d.set_state(State.objects.get(type=doctype, slug="active"))
DocAlias.objects.get_or_create(document=d, name=name)
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 = WgProceedingsActivities.objects.filter(group_acronym=wg_meeting_session.group_acronym_id,
meeting=wg_meeting_session.meeting_id,
activity__startswith=t,
activity__endswith="was uploaded")[: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, datetime.time(*[int(s) for s in a.act_time.split(":")]))
try:
e.by = old_person_to_person(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, t, wg_meeting_session.group_acronym_id, wg_meeting_session.meeting_id
import_material_kind(WgAgenda, agenda_doctype)
import_material_kind(Minute, minutes_doctype)
import_material_kind(Slide, slides_doctype)
for o in WgMeetingSession.objects.all().order_by("pk"):
for o in WgMeetingSession.objects.all().order_by("pk").iterator():
# num_session is unfortunately not quite reliable, seems to be
# right for 1 or 2 but not 3 and it's sometimes null
sessions = o.num_session or 1
@ -336,7 +368,7 @@ for o in WgMeetingSession.objects.all().order_by("pk"):
# status id, third session required AD approval),
# combined_room_id1/2, combined_time_id1/2
for o in NonSession.objects.all().order_by('pk').select_related("meeting"):
for o in NonSession.objects.all().order_by('pk').select_related("meeting").iterator():
print "importing NonSession", o.pk
if o.time_desc in ("", "0"):

View file

@ -22,7 +22,8 @@ from redesign.importing.utils import *
# imports AreaDirector persons that are connected to an IETFWG,
# persons from IDAuthor, announcement originators from Announcements,
# requesters from WgMeetingSession, LiaisonDetail persons,
# LiaisonManagers/SDOAuthorizedIndividual persons
# LiaisonManagers/SDOAuthorizedIndividual persons,
# WgProceedingsActivities persons
# should probably import
# PersonOrOrgInfo/PostalAddress/EmailAddress/PhoneNumber fully
@ -162,6 +163,12 @@ for o in LiaisonDetail.objects.exclude(person=None).order_by("pk"):
addr = o.from_email().address
possibly_import_other_priority_email(email, addr)
# WgProceedingsActivities persons
for o in PersonOrOrgInfo.objects.filter(wgproceedingsactivities__id__gte=1).order_by("pk").distinct():
print "importing WgProceedingsActivities person", o.pk, o.first_name.encode('utf-8'), o.last_name.encode('utf-8')
email = get_or_create_email(o, create_fake=True)
# IDAuthor persons
for o in IDAuthor.objects.all().order_by('id').select_related('person').iterator():
print "importing IDAuthor", o.id, o.person_id, o.person.first_name.encode('utf-8'), o.person.last_name.encode('utf-8')

View file

@ -30,6 +30,11 @@ irtf_type, _ = StateType.objects.get_or_create(slug="draft-stream-irtf", label="
ise_type, _ = StateType.objects.get_or_create(slug="draft-stream-ise", label="ISE state")
iab_type, _ = StateType.objects.get_or_create(slug="draft-stream-iab", label="IAB state")
slides_type, _ = StateType.objects.get_or_create(slug="slides", label="State")
minutes_type, _ = StateType.objects.get_or_create(slug="minutes", label="State")
agenda_type, _ = StateType.objects.get_or_create(slug="agenda", label="State")
liaison_att_type, _ = StateType.objects.get_or_create(slug="liai-att", label="State")
# draft states
print "Importing draft states"
State.objects.get_or_create(type=draft_type, slug="active", name="Active", order=1)
@ -168,3 +173,10 @@ for state_type, workflow in workflows:
print "MISSING state", name, "in workflow", workflow.name
continue
s.next_states = [states[t.destination.name] for t in o.transitions.filter(workflow=workflow)]
# meeting material states
for t in (slides_type, minutes_type, agenda_type):
print "importing states for", t.slug
State.objects.get_or_create(type=t, slug="active", name="Active", order=1)
State.objects.get_or_create(type=t, slug="deleted", name="Deleted", order=2)