Fixes for small bugs

There were some blocking issues in the code. They are small, but break
tests and/or production. Fixed some of them.
This commit is contained in:
Boris Bobrov 2018-07-12 18:27:44 +02:00
parent 0eeb2adad7
commit 4551a808be
5 changed files with 34 additions and 19 deletions

View File

@ -40,7 +40,7 @@ class VideoMediaManager(MediaManagerBase):
video_res = video_config['available_resolutions'] video_res = video_config['available_resolutions']
video_res.remove(video_config['default_resolution']) video_res.remove(video_config['default_resolution'])
video_res.insert(0, video_config['default_resolution']) video_res.insert(0, video_config['default_resolution'])
video_res = map((lambda x: unicode('webm_' + str(x), 'utf-8')), video_res) video_res = ['webm_{}'.format(x) for x in video_res]
return ([u'webm_video'] + video_res + [u'original']) return ([u'webm_video'] + video_res + [u'original'])

View File

@ -172,29 +172,34 @@ def main_task(entry_id, resolution, medium_size, **process_info):
entry, manager = get_entry_and_processing_manager(entry_id) entry, manager = get_entry_and_processing_manager(entry_id)
with CommonVideoProcessor(manager, entry) as processor: with CommonVideoProcessor(manager, entry) as processor:
processor.common_setup(resolution) processor.common_setup(resolution)
processor.transcode(medium_size=tuple(medium_size), vp8_quality=process_info['vp8_quality'], processor.transcode(medium_size=tuple(medium_size),
vp8_threads=process_info['vp8_threads'], vorbis_quality=process_info['vorbis_quality']) vp8_quality=process_info['vp8_quality'],
vp8_threads=process_info['vp8_threads'],
vorbis_quality=process_info['vorbis_quality'])
processor.generate_thumb(thumb_size=process_info['thumb_size']) processor.generate_thumb(thumb_size=process_info['thumb_size'])
processor.store_orig_metadata() processor.store_orig_metadata()
# Make state of entry as processed # Make state of entry as processed
entry.state = u'processed' entry.state = u'processed'
entry.save() entry.save()
_log.info(u'MediaEntry ID {0} is processed (transcoded to default resolution' _log.info(u'MediaEntry ID {0} is processed (transcoded to default'
'): {1}'.format(unicode(entry.id), unicode(medium_size))) ' resolution): {1}'.format(entry.id, medium_size))
_log.debug('MediaEntry processed') _log.debug('MediaEntry processed')
@celery.task() @celery.task()
def complementary_task(entry_id, resolution, medium_size, **process_info): def complementary_task(entry_id, resolution, medium_size, **process_info):
""" """
Side celery task to transcode the video to other resolutions Side celery task to transcode the video to other resolutions
""" """
entry, manager = get_entry_and_processing_manager(entry_id) entry, manager = get_entry_and_processing_manager(entry_id)
with CommonVideoProcessor(manager, entry) as processor: with CommonVideoProcessor(manager, entry) as processor:
processor.common_setup(resolution) processor.common_setup(resolution)
processor.transcode(medium_size=tuple(medium_size), vp8_quality=process_info['vp8_quality'], processor.transcode(medium_size=tuple(medium_size),
vp8_threads=process_info['vp8_threads'], vorbis_quality=process_info['vorbis_quality']) vp8_quality=process_info['vp8_quality'],
_log.info(u'MediaEntry ID {0} is transcoded to {1}'.format(unicode(entry.id), unicode(medium_size))) vp8_threads=process_info['vp8_threads'],
vorbis_quality=process_info['vorbis_quality'])
_log.info(u'MediaEntry ID {0} is transcoded to {1}'.format(
entry.id, medium_size))
@celery.task() @celery.task()
@ -215,7 +220,7 @@ class CommonVideoProcessor(MediaProcessor):
Provides a base for various video processing steps Provides a base for various video processing steps
""" """
acceptable_files = ['original, best_quality', 'webm_144p', 'webm_360p', acceptable_files = ['original, best_quality', 'webm_144p', 'webm_360p',
'webm_480p', 'webm_720p', 'webm_1080p', 'webm_video'] 'webm_480p', 'webm_720p', 'webm_1080p', 'webm_video']
def common_setup(self, resolution=None): def common_setup(self, resolution=None):
self.video_config = mgg \ self.video_config = mgg \
@ -225,7 +230,7 @@ class CommonVideoProcessor(MediaProcessor):
self.process_filename = get_process_filename( self.process_filename = get_process_filename(
self.entry, self.workbench, self.acceptable_files) self.entry, self.workbench, self.acceptable_files)
self.name_builder = FilenameBuilder(self.process_filename) self.name_builder = FilenameBuilder(self.process_filename)
self.transcoder = transcoders.VideoTranscoder() self.transcoder = transcoders.VideoTranscoder()
self.did_transcode = False self.did_transcode = False
@ -336,7 +341,12 @@ class CommonVideoProcessor(MediaProcessor):
else: else:
_log.debug('Entered transcoder') _log.debug('Entered transcoder')
video_config = (mgg.global_config['plugins']
['mediagoblin.media_types.video'])
num_res = len(video_config['available_resolutions'])
default_res = video_config['default_resolution']
self.transcoder.transcode(self.process_filename, tmp_dst, self.transcoder.transcode(self.process_filename, tmp_dst,
default_res, num_res,
vp8_quality=vp8_quality, vp8_quality=vp8_quality,
vp8_threads=vp8_threads, vp8_threads=vp8_threads,
vorbis_quality=vorbis_quality, vorbis_quality=vorbis_quality,
@ -569,7 +579,7 @@ class VideoProcessingManager(ProcessingManager):
def workflow(self, entry, feed_url, reprocess_action, reprocess_info=None): def workflow(self, entry, feed_url, reprocess_action, reprocess_info=None):
video_config = mgg.global_config['plugins'][MEDIA_TYPE] video_config = mgg.global_config['plugins'][MEDIA_TYPE]
def_res = video_config['default_resolution'] def_res = video_config['default_resolution']
priority_num = len(video_config['available_resolutions']) + 1 priority_num = len(video_config['available_resolutions']) + 1

View File

@ -158,7 +158,7 @@ class VideoTranscoder(object):
self.progress_percentage = 0 self.progress_percentage = 0
self.loop = GLib.MainLoop() self.loop = GLib.MainLoop()
def transcode(self, src, dst, **kwargs): def transcode(self, src, dst, default_res, num_res, **kwargs):
''' '''
Transcode a video file into a 'medium'-sized version. Transcode a video file into a 'medium'-sized version.
''' '''
@ -187,9 +187,8 @@ class VideoTranscoder(object):
self._progress_callback = kwargs.get('progress_callback') or None self._progress_callback = kwargs.get('progress_callback') or None
# Get number of resolutions available for the video # Get number of resolutions available for the video
video_config = mgg.global_config['plugins']['mediagoblin.media_types.video'] self.num_of_resolutions = num_res
self.num_of_resolutions = len(video_config['available_resolutions']) self.default_resolution = default_res
self.default_resolution = video_config['default_resolution']
if not type(self.destination_dimensions) == tuple: if not type(self.destination_dimensions) == tuple:
raise Exception('dimensions must be tuple: (width, height)') raise Exception('dimensions must be tuple: (width, height)')

View File

@ -47,7 +47,10 @@ import os
import pytest import pytest
import webtest.forms import webtest.forms
import pkg_resources import pkg_resources
import mock try:
import mock
except ImportError:
import unittest.mock as mock
import six.moves.urllib.parse as urlparse import six.moves.urllib.parse as urlparse
@ -635,7 +638,7 @@ class TestSubmissionVideo(BaseTestSubmission):
manager.workflow(entry, feed_url=None, reprocess_action='initial') manager.workflow(entry, feed_url=None, reprocess_action='initial')
# test section # test section
mock_main_task.assert_called_once_with(args=(entry.id, def_res, mock_main_task.assert_called_once_with(args=(entry.id, def_res,
ACCEPTED_RESOLUTIONS[def_res]), ACCEPTED_RESOLUTIONS[def_res]),
kwargs=reprocess_info, queue='default', kwargs=reprocess_info, queue='default',
priority=main_priority, immutable=True) priority=main_priority, immutable=True)
@ -724,7 +727,7 @@ class TestSubmissionVideo(BaseTestSubmission):
manager = VideoProcessingManager() manager = VideoProcessingManager()
processor = CommonVideoProcessor(manager, entry) processor = CommonVideoProcessor(manager, entry)
acceptable_files = ['original, best_quality', 'webm_144p', 'webm_360p', acceptable_files = ['original, best_quality', 'webm_144p', 'webm_360p',
'webm_480p', 'webm_720p', 'webm_1080p', 'webm_video'] 'webm_480p', 'webm_720p', 'webm_1080p', 'webm_video']
assert processor.acceptable_files == acceptable_files assert processor.acceptable_files == acceptable_files

View File

@ -32,6 +32,7 @@ from mediagoblin.media_types.video.transcoders import (capture_thumb,
VideoTranscoder) VideoTranscoder)
from mediagoblin.media_types.video.util import ACCEPTED_RESOLUTIONS from mediagoblin.media_types.video.util import ACCEPTED_RESOLUTIONS
from mediagoblin.media_types.tools import discover from mediagoblin.media_types.tools import discover
from mediagoblin.tests.tools import get_app
@contextmanager @contextmanager
def create_data(suffix=None, make_audio=False): def create_data(suffix=None, make_audio=False):
@ -115,6 +116,7 @@ def test_transcoder():
transcoder = VideoTranscoder() transcoder = VideoTranscoder()
transcoder.transcode( transcoder.transcode(
video_name, result_name, video_name, result_name,
'480p', 1,
vp8_quality=8, vp8_quality=8,
vp8_threads=0, # autodetect vp8_threads=0, # autodetect
vorbis_quality=0.3, vorbis_quality=0.3,
@ -125,6 +127,7 @@ def test_transcoder():
transcoder = VideoTranscoder() transcoder = VideoTranscoder()
transcoder.transcode( transcoder.transcode(
video_name, result_name, video_name, result_name,
'480p', 1,
vp8_quality=8, vp8_quality=8,
vp8_threads=0, # autodetect vp8_threads=0, # autodetect
vorbis_quality=0.3, vorbis_quality=0.3,