Implemented the MediaEntry .media_data type fields for SQL

This commit is contained in:
Christopher Allan Webber 2012-03-14 18:28:06 -05:00
parent 956335c839
commit 007ac2e720

View File

@ -20,6 +20,7 @@ TODO: indexes on foreignkeys, where useful.
import datetime import datetime
import sys
from sqlalchemy import ( from sqlalchemy import (
Column, Integer, Unicode, UnicodeText, DateTime, Boolean, ForeignKey, Column, Integer, Unicode, UnicodeText, DateTime, Boolean, ForeignKey,
@ -28,10 +29,12 @@ from sqlalchemy.orm import relationship
from sqlalchemy.orm.collections import attribute_mapped_collection from sqlalchemy.orm.collections import attribute_mapped_collection
from sqlalchemy.sql.expression import desc from sqlalchemy.sql.expression import desc
from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.util import memoized_property
from mediagoblin.db.sql.extratypes import PathTupleWithSlashes, JSONEncoded from mediagoblin.db.sql.extratypes import PathTupleWithSlashes, JSONEncoded
from mediagoblin.db.sql.base import Base, DictReadAttrProxy from mediagoblin.db.sql.base import Base, DictReadAttrProxy
from mediagoblin.db.mixin import UserMixin, MediaEntryMixin, MediaCommentMixin from mediagoblin.db.mixin import UserMixin, MediaEntryMixin, MediaCommentMixin
from mediagoblin.db.sql.base import Session
# It's actually kind of annoying how sqlalchemy-migrate does this, if # It's actually kind of annoying how sqlalchemy-migrate does this, if
# I understand it right, but whatever. Anyway, don't remove this :P # I understand it right, but whatever. Anyway, don't remove this :P
@ -167,14 +170,39 @@ class MediaEntry(Base, MediaEntryMixin):
if media is not None: if media is not None:
return media.url_for_self(urlgen) return media.url_for_self(urlgen)
#@memoized_property
@property @property
def media_data(self): def media_data(self):
# TODO: Replace with proper code to read the correct table session = Session()
return {}
return session.query(self.media_data_table).filter_by(
media_entry=self.id).one()
def media_data_init(self, **kwargs): def media_data_init(self, **kwargs):
# TODO: Implement this """
pass Initialize or update the contents of a media entry's media_data row
"""
session = Session()
media_data = session.query(self.media_data_table).filter_by(
media_entry=self.id).first()
# No media data, so actually add a new one
if not media_data:
media_data = self.media_data_table(
**kwargs)
session.add(media_data)
# Update old media data
else:
for field, value in kwargs.iteritems():
setattr(media_data, field, value)
@memoized_property
def media_data_table(self):
# TODO: memoize this
models_module = self.media_type + '.models'
__import__(models_module)
return sys.modules[models_module].DATA_MODEL
class FileKeynames(Base): class FileKeynames(Base):