Files
mayan-edms/mayan/apps/file_metadata/drivers/exiftool.py
Roberto Rosario 53928b2ab6 Run EXIFTOOL always regardless of MIME type
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
2019-07-24 01:57:20 -04:00

67 lines
2.0 KiB
Python

from __future__ import unicode_literals
import json
import logging
import sh
from django.utils.translation import ugettext_lazy as _
from mayan.apps.storage.utils import NamedTemporaryFile
from ..literals import DEFAULT_EXIF_PATH
from ..classes import FileMetadataDriver
from ..settings import setting_drivers_arguments
logger = logging.getLogger(__name__)
class EXIFToolDriver(FileMetadataDriver):
label = _('EXIF Tool')
internal_name = 'exiftool'
def __init__(self, *args, **kwargs):
auto_initialize = kwargs.pop('auto_initialize', True)
self.read_settings()
if auto_initialize:
try:
self.command_exiftool = sh.Command(path=self.exiftool_path)
except sh.CommandNotFound:
self.command_exiftool = None
else:
self.command_exiftool = self.command_exiftool.bake('-j')
def _process(self, document_version):
if self.command_exiftool:
temporary_fileobject = NamedTemporaryFile()
try:
document_version.save_to_file(file_object=temporary_fileobject)
temporary_fileobject.seek(0)
try:
result = self.command_exiftool(temporary_fileobject.name)
except sh.ErrorReturnCode_1 as exception:
result = json.loads(s=exception.stdout)[0]
if result.get('Error', '') == 'Unknown file type':
# Not a fatal error
return result
else:
return json.loads(s=result.stdout)[0]
finally:
temporary_fileobject.close()
else:
logger.warning(
'EXIFTool binary not found, not processing document '
'version: %s', document_version
)
def read_settings(self):
self.exiftool_path = setting_drivers_arguments.value.get(
'exif_driver', {}
).get('exiftool_path', DEFAULT_EXIF_PATH)
EXIFToolDriver.register(mimetypes=('*',))