Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions ietf/doc/views_material.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from ietf.doc.utils import add_state_change_event, check_common_doc_name_rules
from ietf.group.models import Group
from ietf.group.utils import can_manage_materials
from ietf.meeting.utils import resolve_uploaded_material
from ietf.utils import log
from ietf.utils.decorators import ignore_view_kwargs
from ietf.utils.meetecho import MeetechoAPIError, SlidesManager
Expand Down Expand Up @@ -179,6 +180,9 @@ def edit_material(request, name=None, acronym=None, action=None, doc_type=None):
"There was an error creating a hardlink at %s pointing to %s: %s"
% (ftp_filepath, filepath, ex)
)
else:
for meeting in set([s.meeting for s in doc.session_set.all()]):
resolve_uploaded_material(meeting=meeting, doc=doc)

if prev_rev != doc.rev:
e = NewRevisionDocEvent(type="new_revision", doc=doc, rev=doc.rev)
Expand Down
33 changes: 32 additions & 1 deletion ietf/meeting/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from django.contrib import messages
from django.core.cache import caches
from django.core.files.base import ContentFile
from django.db import IntegrityError, transaction
from django.db import IntegrityError
from django.db.models import OuterRef, Subquery, TextField, Q, Value, Max
from django.db.models.functions import Coalesce
from django.template.loader import render_to_string
Expand Down Expand Up @@ -240,6 +240,7 @@ def save_bluesheet(request, session, file, encoding='utf-8'):
save_error = handle_upload_file(file, filename, session.meeting, 'bluesheets', request=request, encoding=encoding)
if not save_error:
doc.save_with_history([e])
resolve_uploaded_material(meeting=session.meeting, doc=doc)
return save_error


Expand Down Expand Up @@ -1017,6 +1018,36 @@ def resolve_materials_for_one_meeting(meeting: Meeting):
"changed during ResolvedMaterial update"
)

def resolve_uploaded_material(meeting: Meeting, doc: Document):
resolved = []
blob = resolve_one_material(doc, rev=None, ext=None)
if blob is not None:
resolved.append(
ResolvedMaterial(
name=doc.name,
meeting_number=meeting.number,
bucket=blob.bucket,
blob=blob.name,
)
)
# request by doc name + rev
blob = resolve_one_material(doc, rev=doc.rev, ext=None)
if blob is not None:
resolved.append(
ResolvedMaterial(
name=f"{doc.name}-{doc.rev:02}",
meeting_number=meeting.number,
bucket=blob.bucket,
blob=blob.name,
)
)
ResolvedMaterial.objects.bulk_create(
resolved,
update_conflicts=True,
unique_fields=["name", "meeting_number"],
update_fields=["bucket", "blob"],
)

def create_recording(session, url, title=None, user=None):
'''
Creates the Document type=recording, setting external_url and creating
Expand Down
8 changes: 8 additions & 0 deletions ietf/meeting/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@
finalize,
generate_proceedings_content,
organize_proceedings_sessions,
resolve_uploaded_material,
sort_accept_tuple,
resolve_one_material,
)
Expand Down Expand Up @@ -3250,6 +3251,7 @@ def upload_session_minutes(request, session_id, num):
form.add_error(None, str(err))
else:
# no exception -- success!
resolve_uploaded_material(meeting=session.meeting, doc=session.minutes())
messages.success(request, f'Successfully uploaded minutes as revision {session.minutes().rev}.')
return redirect('ietf.meeting.views.session_details', num=num, acronym=session.group.acronym)
else:
Expand Down Expand Up @@ -3309,6 +3311,7 @@ def upload_session_narrativeminutes(request, session_id, num):
form.add_error(None, str(err))
else:
# no exception -- success!
resolve_uploaded_material(meeting=session.meeting, doc=session.narrative_minutes())
messages.success(request, f'Successfully uploaded narrative minutes as revision {session.narrative_minutes().rev}.')
return redirect('ietf.meeting.views.session_details', num=num, acronym=session.group.acronym)
else:
Expand Down Expand Up @@ -3455,6 +3458,7 @@ def upload_session_agenda(request, session_id, num):
form.add_error(None, save_error)
else:
doc.save_with_history([e])
resolve_uploaded_material(meeting=session.meeting, doc=doc)
messages.success(request, f'Successfully uploaded agenda as revision {doc.rev}.')
return redirect('ietf.meeting.views.session_details',num=num,acronym=session.group.acronym)
else:
Expand Down Expand Up @@ -3638,6 +3642,7 @@ def upload_session_slides(request, session_id, num, name=None):
else:
doc.save_with_history([e])
post_process(doc)
resolve_uploaded_material(meeting=session.meeting, doc=doc)

# Send MeetEcho updates even if we had a problem saving - that will keep it in sync with the
# SessionPresentation, which was already saved regardless of problems saving the file.
Expand Down Expand Up @@ -5038,6 +5043,7 @@ def err(code, text):
write_doc_for_session(session, 'chatlog', filename, json.dumps(apidata['chatlog']))
e = NewRevisionDocEvent.objects.create(doc=doc, rev=doc.rev, by=request.user.person, type='new_revision', desc='New revision available: %s'%doc.rev)
doc.save_with_history([e])
resolve_uploaded_material(meeting=session.meeting, doc=doc)
return HttpResponse(
"Done",
status=200,
Expand Down Expand Up @@ -5086,6 +5092,7 @@ def err(code, text):
write_doc_for_session(session, 'polls', filename, json.dumps(apidata['polls']))
e = NewRevisionDocEvent.objects.create(doc=doc, rev=doc.rev, by=request.user.person, type='new_revision', desc='New revision available: %s'%doc.rev)
doc.save_with_history([e])
resolve_uploaded_material(meeting=session.meeting, doc=doc)
return HttpResponse(
"Done",
status=200,
Expand Down Expand Up @@ -5468,6 +5475,7 @@ def approve_proposed_slides(request, slidesubmission_id, num):
doc.store_bytes(target_filename, retrieve_bytes("staging", submission.filename))
remove_from_storage("staging", submission.filename)
post_process(doc)
resolve_uploaded_material(meeting=submission.session.meeting, doc=doc)
DocEvent.objects.create(type="approved_slides", doc=doc, rev=doc.rev, by=request.user.person, desc="Slides approved")

# update meetecho slide info if configured
Expand Down