get and set metadata for a MediaFile

This commit is contained in:
Rodney Ewing 2013-08-21 14:34:11 -07:00
parent 0cdebda7fc
commit e002452f91
2 changed files with 42 additions and 2 deletions

View File

@ -425,7 +425,7 @@ class RequestToken_v0(declarative_base()):
callback = Column(Unicode, nullable=False, default=u"oob")
created = Column(DateTime, nullable=False, default=datetime.datetime.now)
updated = Column(DateTime, nullable=False, default=datetime.datetime.now)
class AccessToken_v0(declarative_base()):
"""
Model for representing the access tokens
@ -438,7 +438,7 @@ class AccessToken_v0(declarative_base()):
request_token = Column(Unicode, ForeignKey(RequestToken_v0.token))
created = Column(DateTime, nullable=False, default=datetime.datetime.now)
updated = Column(DateTime, nullable=False, default=datetime.datetime.now)
class NonceTimestamp_v0(declarative_base()):
"""
@ -460,3 +460,14 @@ def create_oauth1_tables(db):
NonceTimestamp_v0.__table__.create(db.bind)
db.commit()
@RegisterMigration(15, 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()

View File

@ -263,6 +263,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=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=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)
@ -359,6 +387,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'),