diff options
author | Christopher Allan Webber <cwebber@dustycloud.org> | 2013-08-21 12:39:31 -0500 |
---|---|---|
committer | Christopher Allan Webber <cwebber@dustycloud.org> | 2013-08-21 12:39:38 -0500 |
commit | f6497ce572c5dedb553a474023478625c5062a93 (patch) | |
tree | b74a161659c1fb9e776ff921b9e5e9fcedf15cd6 /mediagoblin/processing/task.py | |
parent | c62d174437445565b55b220396e7571a323a159c (diff) | |
parent | 9de4fab437558d101e801a02240ca3772c590ace (diff) | |
download | mediagoblin-f6497ce572c5dedb553a474023478625c5062a93.tar.lz mediagoblin-f6497ce572c5dedb553a474023478625c5062a93.tar.xz mediagoblin-f6497ce572c5dedb553a474023478625c5062a93.zip |
Merge remote-tracking branch 'refs/remotes/rodney757/reprocessing'
Conflicts:
mediagoblin/processing/task.py
mediagoblin/submit/lib.py
Diffstat (limited to 'mediagoblin/processing/task.py')
-rw-r--r-- | mediagoblin/processing/task.py | 46 |
1 files changed, 29 insertions, 17 deletions
diff --git a/mediagoblin/processing/task.py b/mediagoblin/processing/task.py index 05cac844..7f683485 100644 --- a/mediagoblin/processing/task.py +++ b/mediagoblin/processing/task.py @@ -22,10 +22,9 @@ import celery from celery.registry import tasks from mediagoblin import mg_globals as mgg -from mediagoblin.db.models import MediaEntry -from mediagoblin.processing import (mark_entry_failed, BaseProcessingFail, - ProcessingState) +from . import mark_entry_failed, BaseProcessingFail from mediagoblin.tools.processing import json_processing_callback +from mediagoblin.processing import get_entry_and_processing_manager _log = logging.getLogger(__name__) logging.basicConfig() @@ -70,30 +69,43 @@ class ProcessMedia(celery.Task): """ Pass this entry off for processing. """ - track_started=True - - def run(self, media_id, feed_url): + def run(self, media_id, feed_url, reprocess_action, reprocess_info=None): """ Pass the media entry off to the appropriate processing function (for now just process_image...) :param feed_url: The feed URL that the PuSH server needs to be updated for. + :param reprocess: A dict containing all of the necessary reprocessing + info for the media_type. """ - entry = MediaEntry.query.get(media_id) + reprocess_info = reprocess_info or {} + entry, manager = get_entry_and_processing_manager(media_id) # Try to process, and handle expected errors. try: - entry.state = u'processing' - entry.save() - - _log.debug('Processing {0}'.format(entry)) - - proc_state = ProcessingState(entry) - with mgg.workbench_manager.create() as workbench: - proc_state.set_workbench(workbench) - # run the processing code - entry.media_manager.processor(proc_state) + processor_class = manager.get_processor(reprocess_action, entry) + + with processor_class(manager, entry) as processor: + # Initial state change has to be here because + # the entry.state gets recorded on processor_class init + entry.state = u'processing' + entry.save() + + _log.debug('Processing {0}'.format(entry)) + + try: + processor.process(**reprocess_info) + except Exception as exc: + if processor.entry_orig_state == 'processed': + _log.error( + 'Entry {0} failed to process due to the following' + ' error: {1}'.format(entry.id, exc)) + _log.info( + 'Setting entry.state back to "processed"') + pass + else: + raise # We set the state to processed and save the entry here so there's # no need to save at the end of the processing stage, probably ;) |