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
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import argparse
import os
import logging
import dateutil.parser
from subprocess import PIPE, Popen
from mediagoblin import mg_globals as mgg
from mediagoblin.processing import (create_pub_filepath,
FilenameBuilder, BadMediaFail,
MediaProcessor, ProcessingManager,
request_from_args, get_orig_filename,
store_public, copy_original)
from mediagoblin.processing import (
FilenameBuilder, BadMediaFail,
MediaProcessor, ProcessingManager,
request_from_args, get_orig_filename,
store_public, copy_original)
from mediagoblin.tools.translate import fake_ugettext_passthrough as _
_log = logging.getLogger(__name__)
@ -252,8 +253,11 @@ class CommonPdfProcessor(MediaProcessor):
def _set_pdf_filename(self):
if self.name_builder.ext == 'pdf':
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:
self.pdf_filename = self.name_builder.fill('{basename}.pdf')
self.pdf_filename = self._generate_pdf()
def copy_original(self):
copy_original(
@ -266,7 +270,9 @@ class CommonPdfProcessor(MediaProcessor):
mgg.global_config['media:thumb']['max_height'])
# 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')
args = [executable, '-scale-to', str(thumb_size),
@ -278,25 +284,27 @@ class CommonPdfProcessor(MediaProcessor):
store_public(self.entry, 'thumb', thumb_filename,
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
"""
if self.name_builder.ext != 'pdf':
unoconv = where('unoconv')
Popen(executable=unoconv,
args=[unoconv, '-v', '-f', 'pdf', self.orig_filename]).wait()
unoconv = where('unoconv')
Popen(executable=unoconv,
args=[unoconv, '-v', '-f', 'pdf', self.orig_filename]).wait()
if not os.path.exists(self.pdf_filename):
_log.debug('unoconv failed to convert file to pdf')
raise BadMediaFail()
if not os.path.exists(self.pdf_filename):
_log.debug('unoconv failed to convert file to pdf')
raise BadMediaFail()
store_public(self.entry, 'pdf', self.pdf_filename,
self.name_builder.fill('{basename}.pdf'))
return self.workbench.local_file(
mgg.public_store, self.entry.media_files['pdf'])
def extract_pdf_info(self):
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):
if not size:
@ -304,7 +312,8 @@ class CommonPdfProcessor(MediaProcessor):
mgg.global_config['media:medium']['max_height'])
# 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')
args = [executable, '-scale-to', str(size),
@ -316,6 +325,7 @@ class CommonPdfProcessor(MediaProcessor):
store_public(self.entry, 'thumb', filename,
self.name_builder.fill('{basename}.medium.png'))
class InitialProcessor(CommonPdfProcessor):
"""
Initial processing step for new pdfs
@ -360,7 +370,6 @@ class InitialProcessor(CommonPdfProcessor):
def process(self, size=None, thumb_size=None):
self.common_setup()
self.generate_pdf()
self.extract_pdf_info()
self.copy_original()
self.generate_medium(size=size)
@ -368,7 +377,7 @@ class InitialProcessor(CommonPdfProcessor):
self.delete_queue_file()
class Resizer(CommonImageProcessor):
class Resizer(CommonPdfProcessor):
"""
Resizing process steps for processed pdfs
"""