aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/db
diff options
context:
space:
mode:
authorChristopher Allan Webber <cwebber@dustycloud.org>2013-09-18 14:45:23 -0500
committerChristopher Allan Webber <cwebber@dustycloud.org>2013-09-18 14:45:23 -0500
commit529eb17b38ac08c956164e8b829ea556db1f32f4 (patch)
treeb7de91fdf85c8f2196f13a5ea199e908a41d7234 /mediagoblin/db
parent28eab59acef05b5f38052941483f900d2e78c50b (diff)
parentfd9e4af2721dd242382df8ddc0b5189fb521181c (diff)
downloadmediagoblin-529eb17b38ac08c956164e8b829ea556db1f32f4.tar.lz
mediagoblin-529eb17b38ac08c956164e8b829ea556db1f32f4.tar.xz
mediagoblin-529eb17b38ac08c956164e8b829ea556db1f32f4.zip
Merge remote-tracking branch 'refs/remotes/rodney757/reprocessing'
Conflicts: mediagoblin/db/migrations.py
Diffstat (limited to 'mediagoblin/db')
-rw-r--r--mediagoblin/db/migrations.py12
-rw-r--r--mediagoblin/db/models.py29
2 files changed, 41 insertions, 0 deletions
diff --git a/mediagoblin/db/migrations.py b/mediagoblin/db/migrations.py
index e2a0bf26..a88518f4 100644
--- a/mediagoblin/db/migrations.py
+++ b/mediagoblin/db/migrations.py
@@ -494,3 +494,15 @@ def upload_limits(db):
col.create(media_entry_table)
db.commit()
+
+
+@RegisterMigration(17, MIGRATIONS)
+def add_file_metadata(db):
+ """Add file_metadata to MediaFile"""
+ metadata = MetaData(bind=db.bind)
+ media_file_table = inspect_table(metadata, "core__mediafiles")
+
+ col = Column('file_metadata', JSONEncoded)
+ col.create(media_file_table)
+
+ db.commit()
diff --git a/mediagoblin/db/models.py b/mediagoblin/db/models.py
index a2675678..809e4722 100644
--- a/mediagoblin/db/models.py
+++ b/mediagoblin/db/models.py
@@ -267,6 +267,34 @@ class MediaEntry(Base, MediaEntryMixin):
if media is not None:
return media.url_for_self(urlgen)
+ def get_file_metadata(self, file_key, metadata_key=None):
+ """
+ Return the file_metadata dict of a MediaFile. If metadata_key is given,
+ return the value of the key.
+ """
+ media_file = MediaFile.query.filter_by(media_entry=self.id,
+ name=unicode(file_key)).first()
+
+ if media_file:
+ if metadata_key:
+ return media_file.file_metadata.get(metadata_key, None)
+
+ return media_file.file_metadata
+
+ def set_file_metadata(self, file_key, **kwargs):
+ """
+ Update the file_metadata of a MediaFile.
+ """
+ media_file = MediaFile.query.filter_by(media_entry=self.id,
+ name=unicode(file_key)).first()
+
+ file_metadata = media_file.file_metadata or {}
+
+ for key, value in kwargs.iteritems():
+ file_metadata[key] = value
+
+ media_file.file_metadata = file_metadata
+
@property
def media_data(self):
return getattr(self, self.media_data_ref)
@@ -363,6 +391,7 @@ class MediaFile(Base):
nullable=False)
name_id = Column(SmallInteger, ForeignKey(FileKeynames.id), nullable=False)
file_path = Column(PathTupleWithSlashes)
+ file_metadata = Column(JSONEncoded)
__table_args__ = (
PrimaryKeyConstraint('media_entry', 'name_id'),