diff --git a/extensions/hachoirmetadata/__init__.py b/extensions/exifdata/__init__.py similarity index 100% rename from extensions/hachoirmetadata/__init__.py rename to extensions/exifdata/__init__.py diff --git a/extensions/exifdata/exifdata.py b/extensions/exifdata/exifdata.py new file mode 100644 index 0000000..5a2f918 --- /dev/null +++ b/extensions/exifdata/exifdata.py @@ -0,0 +1,61 @@ +from web.common import Extension, string_clean_hex +from web.database import Database +import exiftool +import tempfile +from base64 import b64encode + + +class ExifData(Extension): + + extension_name = 'ExifData' + extension_type = 'filedetails' + + def run(self): + db = Database() + metadata = {} + img_src = None + if 'file_id' in self.request.POST: + file_id = self.request.POST['file_id'] + file_object = db.get_filebyid(file_id) + file_data = file_object.read() + + with tempfile.NamedTemporaryFile() as tmp: + tmp.write(file_data) + + try: + with exiftool.ExifTool() as et: + metadata = et.get_metadata(tmp.name) + if 'File:MIMEType' in metadata: + if 'image' in metadata['File:MIMEType']: + img_src = b64encode(file_data) + + # Clean up the metadata to remove things we don't need. + remove = ['File:Directory', + 'File:FileInodeChangeDate', + 'File:FileModifyDate', + 'File:FileAccessDate', + 'SourceFile', + 'File:FilePermissions'] + + print metadata + for item in remove: + if item in metadata: + print metadata[item] + print "Dropping" + del metadata[item] + + + except OSError: + metadata['error'] = "Exiftool is not installed. 'sudo apt-get install libimage-exiftool-perl'" + except Exception as e: + metadata['error'] = "Error colleting EXIF data: {0}".format(e) + + + + self.render_type = 'file' + self.render_data = {'ExifData': {'results': metadata, 'file_id': file_id, 'img_src': img_src}} + + def display(self): + file_id = self.request.POST['file_id'] + self.render_data = {'ExifData': {'results': None, 'file_id': file_id}} + diff --git a/extensions/hachoirmetadata/template.html b/extensions/exifdata/template.html similarity index 54% rename from extensions/hachoirmetadata/template.html rename to extensions/exifdata/template.html index 01959a7..0952aaa 100644 --- a/extensions/hachoirmetadata/template.html +++ b/extensions/exifdata/template.html @@ -1,12 +1,12 @@ -
+

MetaData

- {% if HachoirMetaData.results %} + {% if ExifData.results %}
- {% for key, value in HachoirMetaData.results.items %} + {% for key, value in ExifData.results.items %} @@ -21,13 +21,13 @@

MetaData

- {% if HachoirMetaData.img_src %} - Embedded Image + {% if ExifData.img_src %} + Embedded Image {% endif %}
{% else %} - Parse Meta + Parse Meta {% endif %} diff --git a/extensions/hachoirmetadata/hachoirmetadata.py b/extensions/hachoirmetadata/hachoirmetadata.py deleted file mode 100644 index d6b5213..0000000 --- a/extensions/hachoirmetadata/hachoirmetadata.py +++ /dev/null @@ -1,53 +0,0 @@ -from web.common import Extension, string_clean_hex -from web.database import Database -from hachoir_core.error import HachoirError -from hachoir_core.stream import InputIOStream -from hachoir_parser import guessParser -from hachoir_metadata import extractMetadata - - -class HachoirMetaData(Extension): - - extension_name = 'HachoirMetaData' - extension_type = 'filedetails' - - def run(self): - db = Database() - metadict = {} - img_src = None - if 'file_id' in self.request.POST: - file_id = self.request.POST['file_id'] - file_object = db.get_filebyid(file_id) - file_data = file_object.read() - - stream = InputIOStream(file_object, None, tags=[]) - parser = guessParser(stream) - - if not parser: - metadict['error'] = 'Unable to Parse' - - try: - metadata = extractMetadata(parser) - if not metadata: - metadict['error'] = 'Unable to Parse any data' - else: - for row in str(metadata).split('\n'): - key, value = row.split(':', 1) - metadict[key.lstrip('- ')] = value.lstrip() - - if 'MIME type' in metadict: - - if 'image' in metadict['MIME type']: - from base64 import b64encode - img_src = b64encode(file_data) - - except HachoirError as e: - metadict['error'] = e - - self.render_type = 'file' - self.render_data = {'HachoirMetaData': {'results': metadict, 'file_id': file_id, 'img_src': img_src}} - - def display(self): - file_id = self.request.POST['file_id'] - self.render_data = {'HachoirMetaData': {'results': None, 'file_id': file_id}} - diff --git a/manage.py b/manage.py index ffd2233..5d7c19c 100755 --- a/manage.py +++ b/manage.py @@ -2,6 +2,8 @@ import os import sys +sys.dont_write_bytecode = True + if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "volgui.settings") diff --git a/requirements.txt b/requirements.txt index ce09c09..d676571 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,3 +9,4 @@ hachoir_core hachoir_parser hachoir_metadata pycrypto +git+https://github.com/smarnach/pyexiftool.git#egg=pyexiftool \ No newline at end of file
{{ key }}