예제 #1
0
def upload_video(public_video_id, file_object):
    """
    Store a video file for transcoding.

    Args:
        public_video_id (str)
        file_object (file)
    """
    # Make upload url unavailable immediately to avoid race conditions
    models.VideoUploadUrl.objects.filter(
        public_video_id=public_video_id).update(was_used=True)

    video_upload_url = models.VideoUploadUrl.objects.get(
        public_video_id=public_video_id)

    # Upload video
    backend.get().upload_video(public_video_id, file_object)

    # Create video object
    video = models.Video.objects.create(
        public_id=video_upload_url.public_video_id,
        owner=video_upload_url.owner,
        title=file_object.name)
    if video_upload_url.playlist:
        video.playlists.add(video_upload_url.playlist)

    # Start transcoding
    send_task('transcode_video', args=(public_video_id, ))
예제 #2
0
def transcode_video_restart():
    with Lock('TASK_LOCK_TRANSCODE_VIDEO_RESTART', 60) as lock:
        if lock.is_acquired:
            for processing_state in models.ProcessingState.objects.filter(
                    status=models.ProcessingState.STATUS_RESTART):
                send_task('transcode_video',
                          args=(processing_state.video.public_id, ),
                          kwargs={'delete': False})
예제 #3
0
    def test_clean_upload_urls(self):
        factories.VideoUploadUrlFactory(public_video_id="available",
                                        expires_at=time(),
                                        was_used=False)
        factories.VideoUploadUrlFactory(public_video_id="expired",
                                        expires_at=time() - 7200,
                                        was_used=False)
        factories.VideoUploadUrlFactory(public_video_id="expired_used",
                                        expires_at=time() - 7200,
                                        was_used=True)
        send_task("clean_upload_urls")

        upload_url_ids = [
            url.public_video_id for url in models.VideoUploadUrl.objects.all()
        ]

        self.assertIn("available", upload_url_ids)
        self.assertIn("expired_used", upload_url_ids)
        self.assertEqual(2, len(upload_url_ids))
예제 #4
0
 def handle(self, *args, **options):
     public_video_id = options['video_id']
     send_task('transcode_video', args=(public_video_id, ))
     self.stdout.write("Done.")