Merge remote-tracking branch 'refs/remotes/elrond/sql/migrate_new_tables'

This commit is contained in:
Christopher Allan Webber 2012-11-26 15:15:13 -06:00
commit fbfcf1a57a
2 changed files with 130 additions and 40 deletions

View File

@ -17,11 +17,12 @@
import datetime import datetime
from sqlalchemy import (MetaData, Table, Column, Boolean, SmallInteger, from sqlalchemy import (MetaData, Table, Column, Boolean, SmallInteger,
Integer, Unicode, UnicodeText, DateTime, ForeignKey) Integer, Unicode, UnicodeText, DateTime,
ForeignKey, UniqueConstraint)
from sqlalchemy.ext.declarative import declarative_base
from mediagoblin.db.sql.util import RegisterMigration from mediagoblin.db.sql.util import RegisterMigration
from mediagoblin.db.sql.models import MediaEntry, Collection, User, \ from mediagoblin.db.sql.models import MediaEntry, Collection, User
ProcessingMetaData
MIGRATIONS = {} MIGRATIONS = {}
@ -65,29 +66,40 @@ def add_transcoding_progress(db_conn):
db_conn.commit() db_conn.commit()
class Collection_v0(declarative_base()):
__tablename__ = "core__collections"
id = Column(Integer, primary_key=True)
title = Column(Unicode, nullable=False)
slug = Column(Unicode)
created = Column(DateTime, nullable=False, default=datetime.datetime.now,
index=True)
description = Column(UnicodeText)
creator = Column(Integer, ForeignKey(User.id), nullable=False)
items = Column(Integer, default=0)
class CollectionItem_v0(declarative_base()):
__tablename__ = "core__collection_items"
id = Column(Integer, primary_key=True)
media_entry = Column(
Integer, ForeignKey(MediaEntry.id), nullable=False, index=True)
collection = Column(Integer, ForeignKey(Collection.id), nullable=False)
note = Column(UnicodeText, nullable=True)
added = Column(DateTime, nullable=False, default=datetime.datetime.now)
position = Column(Integer)
## This should be activated, normally.
## But this would change the way the next migration used to work.
## So it's commented for now.
# __table_args__ = (
# UniqueConstraint('collection', 'media_entry'),
# {})
@RegisterMigration(4, MIGRATIONS) @RegisterMigration(4, MIGRATIONS)
def add_collection_tables(db_conn): def add_collection_tables(db_conn):
metadata = MetaData(bind=db_conn.bind) Collection_v0.__table__.create(db_conn.bind)
CollectionItem_v0.__table__.create(db_conn.bind)
collection = Table('core__collections', metadata,
Column('id', Integer, primary_key=True),
Column('title', Unicode, nullable=False),
Column('slug', Unicode),
Column('created', DateTime, nullable=False, default=datetime.datetime.now, index=True),
Column('description', UnicodeText),
Column('creator', Integer, ForeignKey(User.id), nullable=False),
Column('items', Integer, default=0))
collection_item = Table('core__collection_items', metadata,
Column('id', Integer, primary_key=True),
Column('media_entry', Integer, ForeignKey(MediaEntry.id), nullable=False, index=True),
Column('collection', Integer, ForeignKey(Collection.id), nullable=False),
Column('note', UnicodeText, nullable=True),
Column('added', DateTime, nullable=False, default=datetime.datetime.now),
Column('position', Integer))
collection.create()
collection_item.create()
db_conn.commit() db_conn.commit()
@ -104,15 +116,15 @@ def add_mediaentry_collected(db_conn):
db_conn.commit() db_conn.commit()
class ProcessingMetaData_v0(declarative_base()):
__tablename__ = 'core__processing_metadata'
id = Column(Integer, primary_key=True)
media_entry_id = Column(Integer, ForeignKey(MediaEntry.id), nullable=False,
index=True)
callback_url = Column(Unicode)
@RegisterMigration(6, MIGRATIONS) @RegisterMigration(6, MIGRATIONS)
def create_processing_metadata_table(db): def create_processing_metadata_table(db):
metadata = MetaData(bind=db.bind) ProcessingMetaData_v0.__table__.create(db.bind)
metadata_table = Table('core__processing_metadata', metadata,
Column('id', Integer, primary_key=True),
Column('media_entry_id', Integer, ForeignKey(MediaEntry.id),
nullable=False, index=True),
Column('callback_url', Unicode))
metadata_table.create()
db.commit() db.commit()

View File

@ -14,16 +14,94 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from sqlalchemy import MetaData, Table from datetime import datetime, timedelta
from sqlalchemy import (MetaData, Table, Column,
Integer, Unicode, Enum, DateTime, ForeignKey)
from sqlalchemy.ext.declarative import declarative_base
from mediagoblin.db.sql.util import RegisterMigration from mediagoblin.db.sql.util import RegisterMigration
from mediagoblin.db.sql.models import User
from mediagoblin.plugins.oauth.models import OAuthClient, OAuthToken, \
OAuthUserClient, OAuthCode
MIGRATIONS = {} MIGRATIONS = {}
class OAuthClient_v0(declarative_base()):
__tablename__ = 'oauth__client'
id = Column(Integer, primary_key=True)
created = Column(DateTime, nullable=False,
default=datetime.now)
name = Column(Unicode)
description = Column(Unicode)
identifier = Column(Unicode, unique=True, index=True)
secret = Column(Unicode, index=True)
owner_id = Column(Integer, ForeignKey(User.id))
redirect_uri = Column(Unicode)
type = Column(Enum(
u'confidential',
u'public',
name=u'oauth__client_type'))
class OAuthUserClient_v0(declarative_base()):
__tablename__ = 'oauth__user_client'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey(User.id))
client_id = Column(Integer, ForeignKey(OAuthClient_v0.id))
state = Column(Enum(
u'approved',
u'rejected',
name=u'oauth__relation_state'))
class OAuthToken_v0(declarative_base()):
__tablename__ = 'oauth__tokens'
id = Column(Integer, primary_key=True)
created = Column(DateTime, nullable=False,
default=datetime.now)
expires = Column(DateTime, nullable=False,
default=lambda: datetime.now() + timedelta(days=30))
token = Column(Unicode, index=True)
refresh_token = Column(Unicode, index=True)
user_id = Column(Integer, ForeignKey(User.id), nullable=False,
index=True)
client_id = Column(Integer, ForeignKey(OAuthClient_v0.id), nullable=False)
def __repr__(self):
return '<{0} #{1} expires {2} [{3}, {4}]>'.format(
self.__class__.__name__,
self.id,
self.expires.isoformat(),
self.user,
self.client)
class OAuthCode_v0(declarative_base()):
__tablename__ = 'oauth__codes'
id = Column(Integer, primary_key=True)
created = Column(DateTime, nullable=False,
default=datetime.now)
expires = Column(DateTime, nullable=False,
default=lambda: datetime.now() + timedelta(minutes=5))
code = Column(Unicode, index=True)
user_id = Column(Integer, ForeignKey(User.id), nullable=False,
index=True)
client_id = Column(Integer, ForeignKey(OAuthClient_v0.id), nullable=False)
@RegisterMigration(1, MIGRATIONS) @RegisterMigration(1, MIGRATIONS)
def remove_and_replace_token_and_code(db): def remove_and_replace_token_and_code(db):
metadata = MetaData(bind=db.bind) metadata = MetaData(bind=db.bind)
@ -38,9 +116,9 @@ def remove_and_replace_token_and_code(db):
code_table.drop() code_table.drop()
OAuthClient.__table__.create(db.bind) OAuthClient_v0.__table__.create(db.bind)
OAuthUserClient.__table__.create(db.bind) OAuthUserClient_v0.__table__.create(db.bind)
OAuthToken.__table__.create(db.bind) OAuthToken_v0.__table__.create(db.bind)
OAuthCode.__table__.create(db.bind) OAuthCode_v0.__table__.create(db.bind)
db.commit() db.commit()