Skip to content

Commit 1ea27d2

Browse files
chapters: run task after replacing master
1 parent aab5f50 commit 1ea27d2

4 files changed

Lines changed: 22 additions & 16 deletions

File tree

cds/modules/deposit/api.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
)
7878
from ..records.minters import cds_doi_generator, is_local_doi, report_number_minter
7979
from ..records.resolver import record_resolver
80-
from ..records.utils import is_record, lowercase_value, parse_video_chapters
80+
from ..records.utils import is_record, lowercase_value, parse_video_chapters, get_existing_chapter_frame_timestamps
8181
from ..records.validators import PartialDraft4Validator
8282
from ..records.permissions import is_public
8383
from .errors import DiscardConflict
@@ -926,6 +926,10 @@ def _has_chapters_changed(self, old_record=None):
926926
if curr["seconds"] != old["seconds"] or curr["title"] != old["title"]:
927927
return True
928928

929+
if current_chapters and not get_existing_chapter_frame_timestamps(self):
930+
# Chapters did not change, but chapter frames doesn't exist
931+
return True
932+
929933
return False
930934

931935
def _trigger_chapter_frame_extraction(self):

cds/modules/flows/tasks.py

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
from ..opencast.api import OpenCast
6464
from ..opencast.error import RequestError
6565
from ..opencast.utils import get_qualities
66-
from ..records.utils import to_string, parse_video_chapters
66+
from ..records.utils import to_string, parse_video_chapters, get_existing_chapter_frame_timestamps
6767
from ..xrootd.utils import file_opener_xrootd
6868
from .deposit import index_deposit_project
6969
from .files import dispose_object_version, move_file_into_local
@@ -834,7 +834,7 @@ def run(self, *args, **kwargs):
834834
raise ValueError("Video duration is 0 - cannot extract frames")
835835

836836
# Check which timestamps already have frames
837-
existing_timestamps = self._get_existing_chapter_frame_timestamps(deposit_video)
837+
existing_timestamps = get_existing_chapter_frame_timestamps(deposit_video)
838838

839839
def progress_updater(current_chapter):
840840
"""Progress reporter."""
@@ -883,18 +883,6 @@ def progress_updater(current_chapter):
883883
self.log("Finished task {0}".format(kwargs["task_id"]))
884884
return "Created {0} chapter frames.".format(total_frames)
885885

886-
def _get_existing_chapter_frame_timestamps(self, deposit):
887-
"""Get timestamps of existing chapter frames."""
888-
master_file = CDSVideosFilesIterator.get_master_video_file(deposit)
889-
frames = CDSVideosFilesIterator.get_video_frames(master_file)
890-
891-
existing = set()
892-
for f in frames:
893-
tags = f.get("tags", {})
894-
if tags.get("is_chapter_frame") == "true":
895-
existing.add(float(tags.get("timestamp")))
896-
return existing
897-
898886
@classmethod
899887
def _create_chapter_frames(
900888
cls,

cds/modules/records/utils.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from urllib import parse
3333

3434
import six
35+
from cds.modules.records.api import CDSVideosFilesIterator
3536
from flask import current_app, g, request
3637
from flask_security import current_user
3738
from invenio_db import db
@@ -486,6 +487,19 @@ def to_string(value):
486487
return json.dumps(value)
487488

488489

490+
def get_existing_chapter_frame_timestamps(deposit):
491+
"""Get timestamps of existing chapter frames."""
492+
master_file = CDSVideosFilesIterator.get_master_video_file(deposit)
493+
frames = CDSVideosFilesIterator.get_video_frames(master_file)
494+
495+
existing = set()
496+
for f in frames:
497+
tags = f.get("tags", {})
498+
if tags.get("is_chapter_frame") == "true":
499+
existing.add(float(tags.get("timestamp")))
500+
return existing
501+
502+
489503
def parse_video_chapters(description):
490504
"""Parse YouTube-style chapter timestamps from video description.
491505

tests/unit/test_flows_tasks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ def test_extract_chapter_frames_task_cleanup(app, db, bucket, video, users):
725725
mock.patch.object(ExtractChapterFramesTask, "_base_payload", {"tags": {"duration": 100}}), \
726726
mock.patch("cds.modules.flows.tasks.ExtractFramesTask._create_object") as mock_create_object, \
727727
mock.patch("cds.modules.flows.tasks.ExtractChapterFramesTask._build_chapter_vtt"), \
728-
mock.patch("cds.modules.flows.tasks.ExtractChapterFramesTask._get_existing_chapter_frame_timestamps") as mock_existing:
728+
mock.patch("cds.modules.flows.tasks.get_existing_chapter_frame_timestamps") as mock_existing:
729729

730730
# Track created & disposed timestamps (floats)
731731
created_timestamps = set()

0 commit comments

Comments
 (0)