Files
mayan-edms/mayan/apps/file_metadata/drivers/exiftool.py
Roberto Rosario 9564db398f Backport configuration file improvements
Remove support for quoted entried. Support unquoted entries. Support
custom location for the config files.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
2019-07-09 15:40:20 -04:00

87 lines
2.4 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)
result = self.command_exiftool(temporary_fileobject.name)
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=(
'application/msword',
'application/pdf',
'application/vnd.oasis.opendocument.text',
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'application/x-bittorrent',
'application/x-gzip',
'application/x-rar-compressed',
'application/x-shockwave-flash',
'application/zip',
'application/zip',
'audio/x-pn-realaudio-plugin',
'audio/x-wav',
'image/jpeg',
'image/png',
'image/svg+xml',
'image/tiff',
'image/x-portable-pixmap',
'text/html',
'text/rtf',
'text/x-sh',
'video/mp4',
'video/webm',
'video/x-flv',
'video/x-matroska'
)
)