Switch over media processor to use the get_workbench decorator (#565)
This makes workbench getting more convenient by eliminating some boilerplate and more robust by cleaning the workbench up even if processing ends with an Exception. Finally, this fixes the bugs in the ascii and video backends to never call workbench.destroy, so those workbenches were never cleaned up. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
parent
f91dcc9d96
commit
45ab3e07ef
@ -19,6 +19,7 @@ import Image
|
||||
import logging
|
||||
|
||||
from mediagoblin import mg_globals as mgg
|
||||
from mediagoblin.decorators import get_workbench
|
||||
from mediagoblin.processing import create_pub_filepath
|
||||
from mediagoblin.media_types.ascii import asciitoimage
|
||||
|
||||
@ -38,12 +39,14 @@ def sniff_handler(media_file, **kw):
|
||||
return False
|
||||
|
||||
|
||||
def process_ascii(entry):
|
||||
'''
|
||||
Code to process a txt file
|
||||
'''
|
||||
@get_workbench
|
||||
def process_ascii(entry, workbench=None):
|
||||
"""Code to process a txt file. Will be run by celery.
|
||||
|
||||
A Workbench() represents a local tempory dir. It is automatically
|
||||
cleaned up when this function exits.
|
||||
"""
|
||||
ascii_config = mgg.global_config['media_type:mediagoblin.media_types.ascii']
|
||||
workbench = mgg.workbench_manager.create_workbench()
|
||||
# Conversions subdirectory to avoid collisions
|
||||
conversions_subdir = os.path.join(
|
||||
workbench.dir, 'conversions')
|
||||
|
@ -19,6 +19,7 @@ from tempfile import NamedTemporaryFile
|
||||
import os
|
||||
|
||||
from mediagoblin import mg_globals as mgg
|
||||
from mediagoblin.decorators import get_workbench
|
||||
from mediagoblin.processing import (create_pub_filepath, BadMediaFail,
|
||||
FilenameBuilder, ProgressCallback)
|
||||
|
||||
@ -42,10 +43,14 @@ def sniff_handler(media_file, **kw):
|
||||
return False
|
||||
|
||||
|
||||
def process_audio(entry):
|
||||
audio_config = mgg.global_config['media_type:mediagoblin.media_types.audio']
|
||||
@get_workbench
|
||||
def process_audio(entry, workbench=None):
|
||||
"""Code to process uploaded audio. Will be run by celery.
|
||||
|
||||
workbench = mgg.workbench_manager.create_workbench()
|
||||
A Workbench() represents a local tempory dir. It is automatically
|
||||
cleaned up when this function exits.
|
||||
"""
|
||||
audio_config = mgg.global_config['media_type:mediagoblin.media_types.audio']
|
||||
|
||||
queued_filepath = entry.queued_media_file
|
||||
queued_filename = workbench.localized_file(
|
||||
@ -143,6 +148,3 @@ def process_audio(entry):
|
||||
entry.media_files['thumb'] = ['fake', 'thumb', 'path.jpg']
|
||||
|
||||
mgg.queue_store.delete_file(queued_filepath)
|
||||
|
||||
# clean up workbench
|
||||
workbench.destroy_self()
|
||||
|
@ -19,6 +19,7 @@ import os
|
||||
import logging
|
||||
|
||||
from mediagoblin import mg_globals as mgg
|
||||
from mediagoblin.decorators import get_workbench
|
||||
from mediagoblin.processing import BadMediaFail, \
|
||||
create_pub_filepath, FilenameBuilder
|
||||
from mediagoblin.tools.exif import exif_fix_image_orientation, \
|
||||
@ -76,11 +77,13 @@ def sniff_handler(media_file, **kw):
|
||||
return False
|
||||
|
||||
|
||||
def process_image(entry):
|
||||
@get_workbench
|
||||
def process_image(entry, workbench=None):
|
||||
"""Code to process an image. Will be run by celery.
|
||||
|
||||
A Workbench() represents a local tempory dir. It is automatically
|
||||
cleaned up when this function exits.
|
||||
"""
|
||||
Code to process an image
|
||||
"""
|
||||
workbench = mgg.workbench_manager.create_workbench()
|
||||
# Conversions subdirectory to avoid collisions
|
||||
conversions_subdir = os.path.join(
|
||||
workbench.dir, 'conversions')
|
||||
@ -147,8 +150,6 @@ def process_image(entry):
|
||||
gps_data['gps_' + key] = gps_data.pop(key)
|
||||
entry.media_data_init(**gps_data)
|
||||
|
||||
# clean up workbench
|
||||
workbench.destroy_self()
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
|
@ -21,6 +21,7 @@ import subprocess
|
||||
import pkg_resources
|
||||
|
||||
from mediagoblin import mg_globals as mgg
|
||||
from mediagoblin.decorators import get_workbench
|
||||
from mediagoblin.processing import create_pub_filepath, \
|
||||
FilenameBuilder
|
||||
|
||||
@ -75,11 +76,13 @@ def blender_render(config):
|
||||
env=env)
|
||||
|
||||
|
||||
def process_stl(entry):
|
||||
@get_workbench
|
||||
def process_stl(entry, workbench=None):
|
||||
"""Code to process an stl or obj model. Will be run by celery.
|
||||
|
||||
A Workbench() represents a local tempory dir. It is automatically
|
||||
cleaned up when this function exits.
|
||||
"""
|
||||
Code to process an stl or obj model.
|
||||
"""
|
||||
workbench = mgg.workbench_manager.create_workbench()
|
||||
queued_filepath = entry.queued_media_file
|
||||
queued_filename = workbench.localized_file(
|
||||
mgg.queue_store, queued_filepath, 'source')
|
||||
@ -164,7 +167,7 @@ def process_stl(entry):
|
||||
# Remove queued media file from storage and database
|
||||
mgg.queue_store.delete_file(queued_filepath)
|
||||
entry.queued_media_file = []
|
||||
|
||||
|
||||
# Insert media file information into database
|
||||
media_files_dict = entry.setdefault('media_files', {})
|
||||
media_files_dict[u'original'] = model_filepath
|
||||
@ -185,6 +188,3 @@ def process_stl(entry):
|
||||
"file_type" : ext,
|
||||
}
|
||||
entry.media_data_init(**dimensions)
|
||||
|
||||
# clean up workbench
|
||||
workbench.destroy_self()
|
||||
|
@ -18,6 +18,7 @@ from tempfile import NamedTemporaryFile
|
||||
import logging
|
||||
|
||||
from mediagoblin import mg_globals as mgg
|
||||
from mediagoblin.decorators import get_workbench
|
||||
from mediagoblin.processing import \
|
||||
create_pub_filepath, FilenameBuilder, BaseProcessingFail, ProgressCallback
|
||||
from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
|
||||
@ -51,16 +52,17 @@ def sniff_handler(media_file, **kw):
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def process_video(entry):
|
||||
@get_workbench
|
||||
def process_video(entry, workbench=None):
|
||||
"""
|
||||
Process a video entry, transcode the queued media files (originals) and
|
||||
create a thumbnail for the entry.
|
||||
|
||||
A Workbench() represents a local tempory dir. It is automatically
|
||||
cleaned up when this function exits.
|
||||
"""
|
||||
video_config = mgg.global_config['media_type:mediagoblin.media_types.video']
|
||||
|
||||
workbench = mgg.workbench_manager.create_workbench()
|
||||
|
||||
queued_filepath = entry.queued_media_file
|
||||
queued_filename = workbench.localized_file(
|
||||
mgg.queue_store, queued_filepath,
|
||||
|
Loading…
x
Reference in New Issue
Block a user