aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Allan Webber <cwebber@dustycloud.org>2013-03-11 16:54:41 -0500
committerChristopher Allan Webber <cwebber@dustycloud.org>2013-03-11 16:54:41 -0500
commitd0ceb506bd04e977c7901e576ac773db5992d9ee (patch)
tree0a218d1a64c24616765b8dba9670b8c5caeaa8d3
parent70177c1febb9485a02ca46a36d95eff45c14e599 (diff)
downloadmediagoblin-d0ceb506bd04e977c7901e576ac773db5992d9ee.tar.lz
mediagoblin-d0ceb506bd04e977c7901e576ac773db5992d9ee.tar.xz
mediagoblin-d0ceb506bd04e977c7901e576ac773db5992d9ee.zip
Fixing dates when uploaded in a video to a mediagoblin instance.
There were some "serializing to json strings" issues. They should be fixed now... much more careful whitelist and cleaning of the video "tags" metadata out of gstreamer. This commit sponsored by Aimee Sullivan. Thanks!
-rw-r--r--mediagoblin/media_types/video/processing.py33
1 files changed, 32 insertions, 1 deletions
diff --git a/mediagoblin/media_types/video/processing.py b/mediagoblin/media_types/video/processing.py
index d6439b78..ff2c94a0 100644
--- a/mediagoblin/media_types/video/processing.py
+++ b/mediagoblin/media_types/video/processing.py
@@ -16,6 +16,7 @@
from tempfile import NamedTemporaryFile
import logging
+import datetime
from mediagoblin import mg_globals as mgg
from mediagoblin.processing import \
@@ -165,7 +166,7 @@ def store_metadata(media_entry, metadata):
for key in [
"videoheight", "videolength", "videowidth",
"audiorate", "audiolength", "audiochannels", "audiowidth",
- "mimetype", "tags"]
+ "mimetype"]
if key in metadata])
# We have to convert videorate into a sequence because it's a
@@ -175,6 +176,36 @@ def store_metadata(media_entry, metadata):
videorate = metadata["videorate"]
stored_metadata["videorate"] = [videorate.num, videorate.denom]
+ # Also make a whitelist conversion of the tags.
+ if "tags" in metadata:
+ tags_metadata = metadata['tags']
+
+ # we don't use *all* of these, but we know these ones are
+ # safe...
+ tags = dict(
+ [(key, tags_metadata[key])
+ for key in [
+ "application-name", "artist", "audio-codec", "bitrate",
+ "container-format", "copyright", "encoder",
+ "encoder-version", "license", "nominal-bitrate", "title",
+ "video-codec"]
+ if key in tags_metadata])
+ if 'date' in tags_metadata:
+ date = tags_metadata['date']
+ tags['date'] = "%s-%s-%s" % (
+ date.year, date.month, date.day)
+
+ # TODO: handle timezone info; gst.get_time_zone_offset +
+ # python's tzinfo should help
+ if 'datetime' in tags_metadata:
+ dt = tags_metadata['datetime']
+ tags['datetime'] = datetime.datetime(
+ dt.get_year(), dt.get_month(), dt.get_day(), dt.get_hour(),
+ dt.get_minute(), dt.get_second(),
+ dt.get_microsecond()).isoformat()
+
+ metadata['tags'] = tags
+
# Only save this field if there's something to save
if len(stored_metadata):
media_entry.media_data_init(