Kill monkeypatching of ProcessingState.
[mediagoblin.git] / mediagoblin / media_types / image / processing.py
index f5fb9a72a01bd68eb6022e0f9d281e1b809c4112..ca88d3f4ef29262c9a71eddea2eeba9de25b46d7 100644 (file)
@@ -19,7 +19,6 @@ 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, \
@@ -28,6 +27,12 @@ from mediagoblin.tools.exif import exif_fix_image_orientation, \
 
 _log = logging.getLogger(__name__)
 
+PIL_FILTERS = {
+    'NEAREST': Image.NEAREST,
+    'BILINEAR': Image.BILINEAR,
+    'BICUBIC': Image.BICUBIC,
+    'ANTIALIAS': Image.ANTIALIAS}
+
 
 def resize_image(entry, filename, new_path, exif_tags, workdir, new_size,
                  size_limits=(0, 0)):
@@ -48,22 +53,16 @@ def resize_image(entry, filename, new_path, exif_tags, workdir, new_size,
         raise BadMediaFail()
     resized = exif_fix_image_orientation(resized, exif_tags)  # Fix orientation
 
-    pil_filters = {
-        'NEAREST': Image.NEAREST,
-        'BILINEAR': Image.BILINEAR,
-        'BICUBIC': Image.BICUBIC,
-        'ANTIALIAS': Image.ANTIALIAS}
-
     filter_config = \
             mgg.global_config['media_type:mediagoblin.media_types.image']\
                 ['resize_filter']
 
     try:
-        resize_filter = pil_filters[filter_config.upper()]
+        resize_filter = PIL_FILTERS[filter_config.upper()]
     except KeyError:
         raise Exception('Filter "{0}" not found, choose one of {1}'.format(
             unicode(filter_config),
-            u', '.join(pil_filters.keys())))
+            u', '.join(PIL_FILTERS.keys())))
 
     resized.thumbnail(new_size, resize_filter)
 
@@ -95,21 +94,21 @@ def sniff_handler(media_file, **kw):
     return False
 
 
-@get_workbench
-def process_image(entry, workbench=None):
+def process_image(proc_state):
     """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.
     """
+    entry = proc_state.entry
+    workbench = proc_state.workbench
+
     # Conversions subdirectory to avoid collisions
     conversions_subdir = os.path.join(
         workbench.dir, 'conversions')
     os.mkdir(conversions_subdir)
-    queued_filepath = entry.queued_media_file
-    queued_filename = workbench.localized_file(
-        mgg.queue_store, queued_filepath,
-        'source')
+
+    queued_filename = proc_state.get_queued_filename()
     name_builder = FilenameBuilder(queued_filename)
 
     # EXIF extraction
@@ -142,18 +141,14 @@ def process_image(entry, workbench=None):
         medium_filepath = None
 
     # Copy our queued local workbench to its final destination
-    original_filepath = create_pub_filepath(
-            entry, name_builder.fill('{basename}{ext}'))
-    mgg.public_store.copy_local_to_storage(queued_filename, original_filepath)
+    proc_state.copy_original(name_builder.fill('{basename}{ext}'))
 
     # Remove queued media file from storage and database
-    mgg.queue_store.delete_file(queued_filepath)
-    entry.queued_media_file = []
+    proc_state.delete_queue_file()
 
     # Insert media file information into database
     media_files_dict = entry.setdefault('media_files', {})
     media_files_dict[u'thumb'] = thumb_filepath
-    media_files_dict[u'original'] = original_filepath
     if medium_filepath:
         media_files_dict[u'medium'] = medium_filepath