Add materials state types, import WgProceedingActivities events for uploads
- Legacy-Id: 3667
This commit is contained in:
parent
8e7ab0b8d2
commit
9c639b3630
|
@ -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:
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -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"):
|
||||
|
|
|
@ -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"):
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue