Steps toward working "run" reprocessing command.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Fri, 9 Aug 2013 21:12:06 +0000 (16:12 -0500)
committerRodney Ewing <ewing.rj@gmail.com>
Fri, 16 Aug 2013 22:30:16 +0000 (15:30 -0700)
This commit sponsored by Philippe Casteleyn.  Thank you!

mediagoblin/gmg_commands/reprocess.py
mediagoblin/media_types/image/processing.py
mediagoblin/processing/__init__.py

index 2af888474627a98ef1172bded781575dc89c34ef..0d8db858d79a8bf609205f2e9a47edba8bc8c6b6 100644 (file)
@@ -21,6 +21,7 @@ from mediagoblin.db.models import MediaEntry
 from mediagoblin.gmg_commands import util as commands_util
 from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
 from mediagoblin.tools.pluginapi import hook_handle
+from mediagoblin.processing import ProcessorDoesNotExist, ProcessorNotEligible
 
 
 def reprocess_parser_setup(subparser):
@@ -204,8 +205,17 @@ def _set_media_state(args):
         args[0].state = 'processed'
 
 
+class MediaEntryNotFound(Exception): pass
+
 def extract_entry_and_type(media_id):
-    raise NotImplementedError
+    """
+    Fetch a media entry, as well as its media type
+    """
+    entry = MediaEntry.query.filter_by(id=media_id).first()
+    if entry is None:
+        raise MediaEntryNotFound("Can't find media with id '%s'" % media_id)
+
+    return entry.media_type, entry
 
 
 def available(args):
@@ -247,16 +257,29 @@ def available(args):
 
 
 def run(args):
-    ### OLD CODE, review
+    media_type, media_entry = extract_entry_and_type(args.media_id)
 
-    _set_media_state(args)
-    _set_media_type(args)
-
-    # If no media_ids were given, then try to reprocess all entries
-    if not args[0].media_id:
-        return _reprocess_all(args)
+    manager_class = hook_handle(('reprocess_manager', media_type))
+    manager = manager_class()
 
-    return _run_reprocessing(args)
+    # TOOD: Specify in error
+    try:
+        processor_class = manager.get_processor(
+            args.reprocess_command, media_entry)
+    except ProcessorDoesNotExist:
+        print 'No such processor "%s" for media with id "%s"' % (
+            args.reprocess_command, media_entry.id)
+        return
+    except ProcessorNotEligible:
+        print 'Processor "%s" exists but media "%s" is not eligible' % (
+            args.reprocess_command, media_entry.id)
+        return
+
+    reprocess_parser = processor_class.generate_parser()
+    reprocess_args = reprocess_parser.parse_args(args.reprocess_args)
+
+    import pdb
+    pdb.set_trace()
 
 
 def reprocess(args):
index f4ba4e5ae3d334496929d211083000c9dc6f97c1..575e9f5fb88e4c017e3e4b153a3a49ef0245668a 100644 (file)
@@ -333,7 +333,7 @@ class InitialProcessor(CommonImageProcessor):
     description = "Initial processing"
 
     @classmethod
-    def media_is_eligibile(cls, media_entry):
+    def media_is_eligible(cls, media_entry):
         """
         Determine if this media type is eligible for processing
         """
index 9e77d2b2e9a67750a7cd159a853ce4c95776512d..6ef203cbb0a1fc2f7cef97a4c0ff39e22c6e7646 100644 (file)
@@ -126,7 +126,7 @@ class MediaProcessor(object):
         raise NotImplementedError
 
     @classmethod
-    def media_is_eligibile(cls, media_entry):
+    def media_is_eligible(cls, media_entry):
         raise NotImplementedError
 
     ###############################
@@ -146,6 +146,11 @@ class MediaProcessor(object):
     ##########################################
 
 
+class ProcessingKeyError(Exception): pass
+class ProcessorDoesNotExist(ProcessingKeyError): pass
+class ProcessorNotEligible(ProcessingKeyError): pass
+
+
 class ProcessingManager(object):
     """Manages all the processing actions available for a media type
 
@@ -183,6 +188,25 @@ class ProcessingManager(object):
         # Got to figure out what actually goes here before I can write this properly
         pass
 
+    def get_processor(self, key, entry=None):
+        """
+        Get the processor with this key.
+
+        If entry supplied, make sure this entry is actually compatible;
+        otherwise raise error.
+        """
+        try:
+            processor = self.processors[key]
+        except KeyError:
+            raise ProcessorDoesNotExist(
+                "'%s' processor does not exist for this media type" % key)
+
+        if entry and not processor.media_is_eligible(entry):
+            raise ProcessorNotEligible(
+                "This entry is not eligible for processor with name '%s'" % key)
+
+        return processor
+
     def process(self, entry, directive, request):
         """
         Process a media entry.