aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/db/sql/migrations.py
diff options
context:
space:
mode:
authorElrond <elrond+mediagoblin.org@samba-tng.org>2012-11-24 19:19:18 +0100
committerElrond <elrond+mediagoblin.org@samba-tng.org>2012-11-24 19:23:08 +0100
commit316e1dfddeb7955c3bb8a5183c53024c68184a22 (patch)
treeabf456c660549fdf1731fb069a4fb7da77ddc401 /mediagoblin/db/sql/migrations.py
parent4211d0301486d3d2439049be0a15abfbe26280dd (diff)
downloadmediagoblin-316e1dfddeb7955c3bb8a5183c53024c68184a22.tar.lz
mediagoblin-316e1dfddeb7955c3bb8a5183c53024c68184a22.tar.xz
mediagoblin-316e1dfddeb7955c3bb8a5183c53024c68184a22.zip
SQL Migrations: Rewrite table creation completely.
We have migrations creating new tables. Those currently use "raw" table definitions. This easily gives errors (we already had this problem). So instead rewrite those to use declarative tables and use those to create new tables. Just copy the new table over to the migration, strip it down to the bare minimum, rename to _v0, base it on declarative_base() and be done! Do this for the current migrations.
Diffstat (limited to 'mediagoblin/db/sql/migrations.py')
-rw-r--r--mediagoblin/db/sql/migrations.py78
1 files changed, 45 insertions, 33 deletions
diff --git a/mediagoblin/db/sql/migrations.py b/mediagoblin/db/sql/migrations.py
index 1d822cd9..bc68caa3 100644
--- a/mediagoblin/db/sql/migrations.py
+++ b/mediagoblin/db/sql/migrations.py
@@ -17,11 +17,12 @@
import datetime
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.models import MediaEntry, Collection, User, \
- ProcessingMetaData
+from mediagoblin.db.sql.models import MediaEntry, Collection, User
MIGRATIONS = {}
@@ -65,29 +66,40 @@ def add_transcoding_progress(db_conn):
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)
def add_collection_tables(db_conn):
- metadata = MetaData(bind=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()
+ Collection_v0.__table__.create(db_conn.bind)
+ CollectionItem_v0.__table__.create(db_conn.bind)
db_conn.commit()
@@ -104,15 +116,15 @@ def add_mediaentry_collected(db_conn):
db_conn.commit()
-@RegisterMigration(6, MIGRATIONS)
-def create_processing_metadata_table(db):
- metadata = MetaData(bind=db.bind)
+class ProcessingMetaData_v0(declarative_base()):
+ __tablename__ = 'core__processing_metadata'
- 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))
+ id = Column(Integer, primary_key=True)
+ media_entry_id = Column(Integer, ForeignKey(MediaEntry.id), nullable=False,
+ index=True)
+ callback_url = Column(Unicode)
- metadata_table.create()
+@RegisterMigration(6, MIGRATIONS)
+def create_processing_metadata_table(db):
+ ProcessingMetaData_v0.__table__.create(db.bind)
db.commit()