From 93b14fc300618e8b2c4ebfd54b9c59369ce0f417 Mon Sep 17 00:00:00 2001 From: Elrond Date: Wed, 23 Jan 2013 19:44:28 +0100 Subject: Implement ProcessingState class and use for images The idea is to have a class that has the knowledge of the currently being processed media and also has tools for that. The long term idea is to make reprocessing easier by for example hiding the way the original comes into the processing code. --- mediagoblin/processing/__init__.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'mediagoblin/processing/__init__.py') diff --git a/mediagoblin/processing/__init__.py b/mediagoblin/processing/__init__.py index e2bc1a13..738378b8 100644 --- a/mediagoblin/processing/__init__.py +++ b/mediagoblin/processing/__init__.py @@ -74,6 +74,37 @@ class FilenameBuilder(object): ext=self.ext) +class ProcessingState(object): + def __init__(self, entry): + self.entry = entry + self.workbench = None + self.queued_filename = None + + # Monkey patch us onto the entry + entry.proc_state = self + + def set_workbench(self, wb): + self.workbench = wb + + def get_queued_filename(self): + """ + Get the a filename for the original, on local storage + """ + if self.queued_filename is not None: + return self.queued_filename + queued_filepath = self.entry.queued_media_file + queued_filename = self.workbench.localized_file( + mgg.queue_store, queued_filepath, + 'source') + self.queued_filename = queued_filename + return queued_filename + + def delete_queue_file(self): + queued_filepath = self.entry.queued_media_file + mgg.queue_store.delete_file(queued_filepath) + self.entry.queued_media_file = [] + + def mark_entry_failed(entry_id, exc): """ Mark a media entry as having failed in its conversion. -- cgit v1.2.3 From e38279263704bb99d17f20e66cd4b5ab06a1c459 Mon Sep 17 00:00:00 2001 From: Elrond Date: Thu, 24 Jan 2013 10:23:38 +0100 Subject: ProcessingState: Document monkey patching. --- mediagoblin/processing/__init__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'mediagoblin/processing/__init__.py') diff --git a/mediagoblin/processing/__init__.py b/mediagoblin/processing/__init__.py index 738378b8..1760d0b9 100644 --- a/mediagoblin/processing/__init__.py +++ b/mediagoblin/processing/__init__.py @@ -81,6 +81,16 @@ class ProcessingState(object): self.queued_filename = None # Monkey patch us onto the entry + # This is needed to keep the current calling convention + # for processors: + # def process_FOO(entry): + # proc_state = entry.proc_state + # workbench = proc_state.workbench + # When all processors use the new stuff, they should be + # rewritten: + # def process_FOO(proc_state): + # entry = proc_state.entry + # workbench = proc_state.workbench entry.proc_state = self def set_workbench(self, wb): -- cgit v1.2.3 From 715ea495466a0dcebd1425dfd322775ff147aacd Mon Sep 17 00:00:00 2001 From: Elrond Date: Sat, 26 Jan 2013 15:08:12 +0100 Subject: Also refactor "copy original into public storage". This makes the processing code easier to read/write and alos will help the reprocessing once we get to it. Thanks to Joar Wandborg for testing! --- mediagoblin/processing/__init__.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'mediagoblin/processing/__init__.py') diff --git a/mediagoblin/processing/__init__.py b/mediagoblin/processing/__init__.py index 1760d0b9..28256107 100644 --- a/mediagoblin/processing/__init__.py +++ b/mediagoblin/processing/__init__.py @@ -109,6 +109,12 @@ class ProcessingState(object): self.queued_filename = queued_filename return queued_filename + def copy_original(self, target_name, keyname=u"original"): + target_filepath = create_pub_filepath(self.entry, target_name) + mgg.public_store.copy_local_to_storage(self.get_queued_filename(), + target_filepath) + self.entry.media_files[keyname] = target_filepath + def delete_queue_file(self): queued_filepath = self.entry.queued_media_file mgg.queue_store.delete_file(queued_filepath) -- cgit v1.2.3 From fb46fa663dbd80a66a3a5995dfda730dd3fd52a4 Mon Sep 17 00:00:00 2001 From: Elrond Date: Sat, 26 Jan 2013 15:28:24 +0100 Subject: Kill monkeypatching of ProcessingState. And change the process_foo() API to accept a processingstate now. image and video are tested, the others are UNTESTED. --- mediagoblin/processing/__init__.py | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'mediagoblin/processing/__init__.py') diff --git a/mediagoblin/processing/__init__.py b/mediagoblin/processing/__init__.py index 28256107..f9445e28 100644 --- a/mediagoblin/processing/__init__.py +++ b/mediagoblin/processing/__init__.py @@ -80,19 +80,6 @@ class ProcessingState(object): self.workbench = None self.queued_filename = None - # Monkey patch us onto the entry - # This is needed to keep the current calling convention - # for processors: - # def process_FOO(entry): - # proc_state = entry.proc_state - # workbench = proc_state.workbench - # When all processors use the new stuff, they should be - # rewritten: - # def process_FOO(proc_state): - # entry = proc_state.entry - # workbench = proc_state.workbench - entry.proc_state = self - def set_workbench(self, wb): self.workbench = wb -- cgit v1.2.3