Use workbench for temp files, refactor _set_pdf_filename, and correct imports

This commit is contained in:
Rodney Ewing 2013-08-14 09:40:47 -07:00
parent 696b0ec64b
commit 40554b3395

View File

@ -13,17 +13,18 @@
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import argparse
import os import os
import logging import logging
import dateutil.parser import dateutil.parser
from subprocess import PIPE, Popen from subprocess import PIPE, Popen
from mediagoblin import mg_globals as mgg from mediagoblin import mg_globals as mgg
from mediagoblin.processing import (create_pub_filepath, from mediagoblin.processing import (
FilenameBuilder, BadMediaFail, FilenameBuilder, BadMediaFail,
MediaProcessor, ProcessingManager, MediaProcessor, ProcessingManager,
request_from_args, get_orig_filename, request_from_args, get_orig_filename,
store_public, copy_original) store_public, copy_original)
from mediagoblin.tools.translate import fake_ugettext_passthrough as _ from mediagoblin.tools.translate import fake_ugettext_passthrough as _
_log = logging.getLogger(__name__) _log = logging.getLogger(__name__)
@ -252,8 +253,11 @@ class CommonPdfProcessor(MediaProcessor):
def _set_pdf_filename(self): def _set_pdf_filename(self):
if self.name_builder.ext == 'pdf': if self.name_builder.ext == 'pdf':
self.pdf_filename = self.orig_filename self.pdf_filename = self.orig_filename
elif self.entry.media_files.get('pdf'):
self.pdf_filename = self.workbench.local_file(
mgg.public_store, self.entry.media_files['pdf'])
else: else:
self.pdf_filename = self.name_builder.fill('{basename}.pdf') self.pdf_filename = self._generate_pdf()
def copy_original(self): def copy_original(self):
copy_original( copy_original(
@ -266,7 +270,9 @@ class CommonPdfProcessor(MediaProcessor):
mgg.global_config['media:thumb']['max_height']) mgg.global_config['media:thumb']['max_height'])
# Note: pdftocairo adds '.png', so don't include an ext # Note: pdftocairo adds '.png', so don't include an ext
thumb_filename = self.name_builder.fill('{basename}.thumbnail') thumb_filename = os.path.join(self.workbench.dir,
self.name_builder.fill(
'{basename}.thumbnail'))
executable = where('pdftocairo') executable = where('pdftocairo')
args = [executable, '-scale-to', str(thumb_size), args = [executable, '-scale-to', str(thumb_size),
@ -278,25 +284,27 @@ class CommonPdfProcessor(MediaProcessor):
store_public(self.entry, 'thumb', thumb_filename, store_public(self.entry, 'thumb', thumb_filename,
self.name_builder.fill('{basename}.thumbnail.png')) self.name_builder.fill('{basename}.thumbnail.png'))
def generate_pdf(self): def _generate_pdf(self):
""" """
Store the pdf. If the file is not a pdf, make it a pdf Store the pdf. If the file is not a pdf, make it a pdf
""" """
if self.name_builder.ext != 'pdf': unoconv = where('unoconv')
unoconv = where('unoconv') Popen(executable=unoconv,
Popen(executable=unoconv, args=[unoconv, '-v', '-f', 'pdf', self.orig_filename]).wait()
args=[unoconv, '-v', '-f', 'pdf', self.orig_filename]).wait()
if not os.path.exists(self.pdf_filename): if not os.path.exists(self.pdf_filename):
_log.debug('unoconv failed to convert file to pdf') _log.debug('unoconv failed to convert file to pdf')
raise BadMediaFail() raise BadMediaFail()
store_public(self.entry, 'pdf', self.pdf_filename, store_public(self.entry, 'pdf', self.pdf_filename,
self.name_builder.fill('{basename}.pdf')) self.name_builder.fill('{basename}.pdf'))
return self.workbench.local_file(
mgg.public_store, self.entry.media_files['pdf'])
def extract_pdf_info(self): def extract_pdf_info(self):
pdf_info_dict = pdf_info(self.pdf_filename) pdf_info_dict = pdf_info(self.pdf_filename)
entry.media_data_init(**pdf_info_dict) self.entry.media_data_init(**pdf_info_dict)
def generate_medium(self, size=None): def generate_medium(self, size=None):
if not size: if not size:
@ -304,7 +312,8 @@ class CommonPdfProcessor(MediaProcessor):
mgg.global_config['media:medium']['max_height']) mgg.global_config['media:medium']['max_height'])
# Note: pdftocairo adds '.png', so don't include an ext # Note: pdftocairo adds '.png', so don't include an ext
filename = self.name_builder.fill('{basename}.medium') filename = os.path.join(self.workbench.dir,
self.name_builder.fill('{basename}.medium'))
executable = where('pdftocairo') executable = where('pdftocairo')
args = [executable, '-scale-to', str(size), args = [executable, '-scale-to', str(size),
@ -316,6 +325,7 @@ class CommonPdfProcessor(MediaProcessor):
store_public(self.entry, 'thumb', filename, store_public(self.entry, 'thumb', filename,
self.name_builder.fill('{basename}.medium.png')) self.name_builder.fill('{basename}.medium.png'))
class InitialProcessor(CommonPdfProcessor): class InitialProcessor(CommonPdfProcessor):
""" """
Initial processing step for new pdfs Initial processing step for new pdfs
@ -360,7 +370,6 @@ class InitialProcessor(CommonPdfProcessor):
def process(self, size=None, thumb_size=None): def process(self, size=None, thumb_size=None):
self.common_setup() self.common_setup()
self.generate_pdf()
self.extract_pdf_info() self.extract_pdf_info()
self.copy_original() self.copy_original()
self.generate_medium(size=size) self.generate_medium(size=size)
@ -368,7 +377,7 @@ class InitialProcessor(CommonPdfProcessor):
self.delete_queue_file() self.delete_queue_file()
class Resizer(CommonImageProcessor): class Resizer(CommonPdfProcessor):
""" """
Resizing process steps for processed pdfs Resizing process steps for processed pdfs
""" """