44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
import subprocess
|
|
|
|
from converter.conf.settings import IM_IDENTIFY_PATH
|
|
from converter.conf.settings import IM_CONVERT_PATH
|
|
from converter.api import QUALITY_DEFAULT, QUALITY_SETTINGS
|
|
from converter.exceptions import ConvertError, UnknownFormat, \
|
|
IdentifyError
|
|
|
|
CONVERTER_ERROR_STRING_NO_DECODER = u'no decode delegate for this image format'
|
|
|
|
|
|
def execute_identify(input_filepath, arguments=None):
|
|
command = []
|
|
command.append(unicode(IM_IDENTIFY_PATH))
|
|
if arguments:
|
|
command.extend(arguments)
|
|
command.append(unicode(input_filepath))
|
|
|
|
proc = subprocess.Popen(command, close_fds=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
|
return_code = proc.wait()
|
|
if return_code != 0:
|
|
raise IdentifyError(proc.stderr.readline())
|
|
return proc.stdout.read()
|
|
|
|
|
|
def execute_convert(input_filepath, output_filepath, quality=QUALITY_DEFAULT, arguments=None):
|
|
command = []
|
|
command.append(unicode(IM_CONVERT_PATH))
|
|
command.extend(unicode(QUALITY_SETTINGS[quality]).split())
|
|
command.append(unicode(input_filepath))
|
|
if arguments:
|
|
command.extend(unicode(arguments).split())
|
|
command.append(unicode(output_filepath))
|
|
proc = subprocess.Popen(command, close_fds=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
|
return_code = proc.wait()
|
|
if return_code != 0:
|
|
#Got an error from convert program
|
|
error_line = proc.stderr.readline()
|
|
if CONVERTER_ERROR_STRING_NO_DECODER in error_line:
|
|
#Try to determine from error message which class of error is it
|
|
raise UnknownFormat
|
|
else:
|
|
raise ConvertError(error_line)
|