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 %}
{{ key }} |
@@ -21,13 +21,13 @@ MetaData
- {% if HachoirMetaData.img_src %}
-
![Embedded Image](data:image/png;base64,{{ HachoirMetaData.img_src }})
+ {% if ExifData.img_src %}
+
![Embedded Image](data:image/png;base64,{{ ExifData.img_src }})
{% 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