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, ))
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})
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))
def handle(self, *args, **options): public_video_id = options['video_id'] send_task('transcode_video', args=(public_video_id, )) self.stdout.write("Done.")