pdf/processing.py: don't use check_output, only in python>=2.7
authorAlon Levy <alon@pobox.com>
Wed, 17 Apr 2013 07:47:02 +0000 (10:47 +0300)
committerAlon Levy <alon@pobox.com>
Wed, 17 Apr 2013 09:47:28 +0000 (12:47 +0300)
Signed-off-by: Alon Levy <alon@pobox.com>
mediagoblin/media_types/pdf/processing.py

index d5db2223169ef5371996f3b803888b9a5ab8d7ab..49742fd72256d7f4baf01717252d6434602e4ac8 100644 (file)
@@ -16,7 +16,7 @@
 import os
 import logging
 import dateutil.parser
-from subprocess import STDOUT, check_output, call, CalledProcessError
+from subprocess import PIPE, Popen
 
 from mediagoblin import mg_globals as mgg
 from mediagoblin.processing import (create_pub_filepath,
@@ -125,9 +125,14 @@ unoconv_supported = [
 ]
 
 def is_unoconv_working():
+    # TODO: must have libreoffice-headless installed too, need to check for it
+    unoconv = where('unoconv')
+    if not unoconv:
+        return False
     try:
-        output = check_output([where('unoconv'), '--show'], stderr=STDOUT)
-    except CalledProcessError, e:
+        proc = Popen([unoconv, '--show'], stderr=PIPE)
+        output = proc.stderr.read()
+    except OSError, e:
         _log.warn(_('unoconv failing to run, check log file'))
         return False
     if 'ERROR' in output:
@@ -137,8 +142,7 @@ def is_unoconv_working():
 def supported_extensions(cache=[None]):
     if cache[0] == None:
         cache[0] = 'pdf'
-        # TODO: must have libreoffice-headless installed too, need to check for it
-        if where('unoconv') and is_unoconv_working():
+        if is_unoconv_working():
             cache.extend(unoconv_supported)
     return cache
 
@@ -177,7 +181,7 @@ def create_pdf_thumb(original, thumb_filename, width, height):
     args = [executable, '-scale-to', str(min(width, height)),
             '-singlefile', '-png', original, thumb_filename]
     _log.debug('calling {0}'.format(repr(' '.join(args))))
-    call(executable=executable, args=args)
+    Popen(executable=executable, args=args).wait()
 
 def pdf_info(original):
     """
@@ -191,9 +195,10 @@ def pdf_info(original):
     ret_dict = {}
     pdfinfo = where('pdfinfo')
     try:
-        lines = check_output(executable=pdfinfo,
-                                args=[pdfinfo, original]).split(os.linesep)
-    except CalledProcessError:
+        proc = Popen(executable=pdfinfo,
+                     args=[pdfinfo, original], stdout=PIPE)
+        lines = proc.stdout.readlines()
+    except OSError:
         _log.debug('pdfinfo could not read the pdf file.')
         raise BadMediaFail()