aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoar Wandborg <joar@wandborg.se>2013-05-23 22:21:02 +0200
committerJoar Wandborg <joar@wandborg.se>2013-05-23 22:21:02 +0200
commit14aa2eaa197f776966f0041085276f4ec08218ae (patch)
treeca2082446b9ddfed4626e4545c209263f798df16
parent24ede04415df1a79da83e2716ab3c714e2080563 (diff)
downloadmediagoblin-14aa2eaa197f776966f0041085276f4ec08218ae.tar.lz
mediagoblin-14aa2eaa197f776966f0041085276f4ec08218ae.tar.xz
mediagoblin-14aa2eaa197f776966f0041085276f4ec08218ae.zip
Cleaned up EXIF view
The last update made the assumption that EXIF metadata is in some way consistent between camera models, images, manufacturers. This update takes into account that nothing is certain whenever EXIF is involved.
-rw-r--r--mediagoblin/db/mixin.py32
-rw-r--r--mediagoblin/static/css/base.css26
-rw-r--r--mediagoblin/templates/mediagoblin/utils/exif.html52
3 files changed, 53 insertions, 57 deletions
diff --git a/mediagoblin/db/mixin.py b/mediagoblin/db/mixin.py
index 027215aa..e7f66fa1 100644
--- a/mediagoblin/db/mixin.py
+++ b/mediagoblin/db/mixin.py
@@ -246,7 +246,8 @@ class MediaEntryMixin(GenerateSlugMixin):
exif_all = self.media_data.get("exif_all")
- taken = None
+ exif_short = {}
+
if 'Image DateTimeOriginal' in exif_all:
# format date taken
takendate = datetime.datetime.strptime(
@@ -254,6 +255,8 @@ class MediaEntryMixin(GenerateSlugMixin):
'%Y:%m:%d %H:%M:%S').date()
taken = takendate.strftime('%B %d %Y')
+ exif_short.update({'Date Taken': taken})
+
aperture = None
if 'EXIF FNumber' in exif_all:
fnum = str(exif_all['EXIF FNumber']['printable']).split('/')
@@ -264,14 +267,25 @@ class MediaEntryMixin(GenerateSlugMixin):
elif fnum[0] != 'None':
aperture = "f/%s" % (fnum[0])
- return {
- "Camera" : exif_all['Image Model']['printable'],
- "Exposure" : '%s sec' % exif_all['EXIF ExposureTime']['printable'],
- "Aperture" : aperture,
- "ISO" : exif_all['EXIF ISOSpeedRatings']['printable'],
- "Focal Length" : '%s mm' % exif_all['EXIF FocalLength']['printable'],
- "Date Taken" : taken,
- }
+ if aperture:
+ exif_short.update({'Aperture': aperture})
+
+ short_keys = [
+ ('Camera', 'Image Model', None),
+ ('Exposure', 'EXIF ExposureTime', lambda x: '%s sec' % x),
+ ('ISO Speed', 'EXIF ISOSpeedRatings', None),
+ ('Focal Length', 'EXIF FocalLength', lambda x: '%s mm' % x)]
+
+ for label, key, fmt_func in short_keys:
+ try:
+ val = fmt_func(exif_all[key]['printable']) if fmt_func \
+ else exif_all[key]['printable']
+ exif_short.update({label: val})
+ except KeyError:
+ pass
+
+ return exif_short
+
class MediaCommentMixin(object):
@property
diff --git a/mediagoblin/static/css/base.css b/mediagoblin/static/css/base.css
index 096e2522..4645b2c5 100644
--- a/mediagoblin/static/css/base.css
+++ b/mediagoblin/static/css/base.css
@@ -717,3 +717,29 @@ pre {
width: 46%;
}
}
+
+/* Exif display */
+#exif_content h3 {
+ border-bottom: 1px solid #333;
+}
+#exif_camera_information {
+ margin-bottom: 20px;
+}
+
+#exif_additional_info {
+ display: none;
+}
+#exif_additional_info table {
+ font-size: 11px;
+ margin-top: 10px;
+}
+#exif_additional_info td {
+ vertical-align: top;
+ padding-bottom: 5px;
+}
+#exif_content .col1 {
+ padding-right: 20px;
+}
+#exif_additional_info table tr {
+ margin-bottom: 10px;
+}
diff --git a/mediagoblin/templates/mediagoblin/utils/exif.html b/mediagoblin/templates/mediagoblin/utils/exif.html
index 746dccf5..b62208e1 100644
--- a/mediagoblin/templates/mediagoblin/utils/exif.html
+++ b/mediagoblin/templates/mediagoblin/utils/exif.html
@@ -17,32 +17,6 @@
#}
{% block exif_content %}
-<style type="text/css">
-#exif_content h3 {
- border-bottom: 1px solid #333;
-}
-#exif_camera_information {
- margin-bottom: 20px;
-}
-
-#exif_additional_info {
- display: none;
-}
-#exif_additional_info table {
- font-size: 11px;
- margin-top: 10px;
-}
-#exif_additional_info td {
- vertical-align: top;
- padding-bottom: 5px;
-}
-#exif_content .col1 {
- padding-right: 20px;
-}
-#exif_additional_info table tr {
- margin-bottom: 10px;
-}
-</style>
<noscript>
<style type="text/css">
#exif_additional_info {
@@ -58,30 +32,12 @@
<h3>Camera Information</h3>
<table id="exif_camera_information">
<tbody>
+ {% for label, value in media.exif_display_data_short().iteritems() %}
<tr>
- <td class="col1">Taken on</td>
- <td>{{ media.exif_display_data_short()['Date Taken'] }}</td>
- </tr>
- <tr>
- <td class="col1">Camera</td>
- <td>{{ media.exif_display_data_short()['Camera'] }}</td>
- </tr>
- <tr>
- <td class="col1">Exposure</td>
- <td>{{ media.exif_display_data_short()['Exposure'] }}</td>
- </tr>
- <tr>
- <td class="col1">Aperture</td>
- <td>{{ media.exif_display_data_short()['Aperture'] }}</td>
- </tr>
- <tr>
- <td class="col1">ISO</td>
- <td>{{ media.exif_display_data_short()['ISO'] }}</td>
- </tr>
- <tr>
- <td class="col1">Focal Length</td>
- <td>{{ media.exif_display_data_short()['Focal Length'] }}</td>
+ <td class="col1">{{ label }}</td>
+ <td>{{ value }}</td>
</tr>
+ {% endfor %}
</tbody>
</table>
<h3 id="exif_additional_info_button" class="button_action">