diff options
author | Christopher Allan Webber <cwebber@dustycloud.org> | 2013-09-18 14:45:23 -0500 |
---|---|---|
committer | Christopher Allan Webber <cwebber@dustycloud.org> | 2013-09-18 14:45:23 -0500 |
commit | 529eb17b38ac08c956164e8b829ea556db1f32f4 (patch) | |
tree | b7de91fdf85c8f2196f13a5ea199e908a41d7234 /mediagoblin/db | |
parent | 28eab59acef05b5f38052941483f900d2e78c50b (diff) | |
parent | fd9e4af2721dd242382df8ddc0b5189fb521181c (diff) | |
download | mediagoblin-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.py | 12 | ||||
-rw-r--r-- | mediagoblin/db/models.py | 29 |
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'), |