Merge commit '9408938' from 565_workbench_cleanup (spaetz)
[mediagoblin.git] / mediagoblin / media_types / ascii / processing.py
index 7ece866e9365da4a353e5bb4a955537a56598cce..254717ebf725ab627819e0ca1688a0e41f0515ee 100644 (file)
@@ -19,22 +19,40 @@ import Image
 import logging
 
 from mediagoblin import mg_globals as mgg
-from mediagoblin.processing import create_pub_filepath, THUMB_SIZE
+from mediagoblin.decorators import get_workbench
+from mediagoblin.processing import create_pub_filepath
 from mediagoblin.media_types.ascii import asciitoimage
 
 _log = logging.getLogger(__name__)
 
-def process_ascii(entry):
-    '''
-    Code to process a txt file
-    '''
-    workbench = mgg.workbench_manager.create_workbench()
+SUPPORTED_EXTENSIONS = ['txt', 'asc', 'nfo']
+
+
+def sniff_handler(media_file, **kw):
+    if kw.get('media') is not None:
+        name, ext = os.path.splitext(kw['media'].filename)
+        clean_ext = ext[1:].lower()
+
+        if clean_ext in SUPPORTED_EXTENSIONS:
+            return True
+
+    return False
+
+
+@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']
     # Conversions subdirectory to avoid collisions
     conversions_subdir = os.path.join(
         workbench.dir, 'conversions')
     os.mkdir(conversions_subdir)
 
-    queued_filepath = entry['queued_media_file']
+    queued_filepath = entry.queued_media_file
     queued_filename = workbench.localized_file(
         mgg.queue_store, queued_filepath,
         'source')
@@ -63,13 +81,23 @@ def process_ascii(entry):
         tmp_thumb_filename = os.path.join(
             conversions_subdir, thumb_filepath[-1])
 
-        converter = asciitoimage.AsciiToImage()
+        ascii_converter_args = {}
+
+        if ascii_config['thumbnail_font']:
+            ascii_converter_args.update(
+                    {'font': ascii_config['thumbnail_font']})
+
+        converter = asciitoimage.AsciiToImage(
+               **ascii_converter_args)
 
         thumb = converter._create_image(
             queued_file.read())
 
         with file(tmp_thumb_filename, 'w') as thumb_file:
-            thumb.thumbnail(THUMB_SIZE, Image.ANTIALIAS)
+            thumb.thumbnail(
+                (mgg.global_config['media:thumb']['max_width'],
+                 mgg.global_config['media:thumb']['max_height']),
+                Image.ANTIALIAS)
             thumb.save(thumb_file)
 
         _log.debug('Copying local file to public storage')
@@ -84,7 +112,6 @@ def process_ascii(entry):
             as original_file:
             original_file.write(queued_file.read())
 
-
         queued_file.seek(0)  # Rewind *again*
 
         unicode_filepath = create_pub_filepath(entry, 'ascii-portable.txt')
@@ -101,7 +128,7 @@ def process_ascii(entry):
                     'xmlcharrefreplace'))
 
     mgg.queue_store.delete_file(queued_filepath)
-    entry['queued_media_file'] = []
+    entry.queued_media_file = []
     media_files_dict = entry.setdefault('media_files', {})
     media_files_dict['thumb'] = thumb_filepath
     media_files_dict['unicode'] = unicode_filepath