Steps toward working "run" reprocessing command.

This commit sponsored by Philippe Casteleyn.  Thank you!
This commit is contained in:
Christopher Allan Webber 2013-08-09 16:12:06 -05:00 committed by Rodney Ewing
parent 7a414c8d42
commit 4ba5bdd96e
3 changed files with 57 additions and 10 deletions

View 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)
manager_class = hook_handle(('reprocess_manager', media_type))
manager = manager_class()
# If no media_ids were given, then try to reprocess all entries
if not args[0].media_id:
return _reprocess_all(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
return _run_reprocessing(args)
reprocess_parser = processor_class.generate_parser()
reprocess_args = reprocess_parser.parse_args(args.reprocess_args)
import pdb
pdb.set_trace()
def reprocess(args):

View 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
"""

View 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.