aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/tests/test_sql_migrations.py
diff options
context:
space:
mode:
authorChristopher Allan Webber <cwebber@dustycloud.org>2012-01-15 14:55:07 -0600
committerChristopher Allan Webber <cwebber@dustycloud.org>2012-01-29 16:33:46 -0600
commit89694d6d69c855f1dbaaa725867ab070cc7b2490 (patch)
treeaf662157be467688c8af74300c3d62f0dd61f9b1 /mediagoblin/tests/test_sql_migrations.py
parent129c36be6f29977ca18ae719c1d3a5c2aad25d89 (diff)
downloadmediagoblin-89694d6d69c855f1dbaaa725867ab070cc7b2490.tar.lz
mediagoblin-89694d6d69c855f1dbaaa725867ab070cc7b2490.tar.xz
mediagoblin-89694d6d69c855f1dbaaa725867ab070cc7b2490.zip
More test migration work. Closing to working migrations for set 2...
Also, this file is written in 2012, correct that ;)
Diffstat (limited to 'mediagoblin/tests/test_sql_migrations.py')
-rw-r--r--mediagoblin/tests/test_sql_migrations.py67
1 files changed, 62 insertions, 5 deletions
diff --git a/mediagoblin/tests/test_sql_migrations.py b/mediagoblin/tests/test_sql_migrations.py
index 8682e69d..0f1f02bd 100644
--- a/mediagoblin/tests/test_sql_migrations.py
+++ b/mediagoblin/tests/test_sql_migrations.py
@@ -1,5 +1,5 @@
# GNU MediaGoblin -- federated, autonomous media hosting
-# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
+# Copyright (C) 2012, 2012 MediaGoblin contributors. See AUTHORS.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -18,9 +18,10 @@ import copy
from sqlalchemy import (
Table, Column, MetaData,
- Integer, Unicode, UnicodeText, DateTime, Boolean, ForeignKey,
- UniqueConstraint, PickleType)
+ Integer, Float, Unicode, UnicodeText, DateTime, Boolean,
+ ForeignKey, UniqueConstraint, PickleType)
from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.sql import select, insert
from migrate import changeset
from mediagoblin.db.sql.base import GMGTableBase
@@ -77,6 +78,7 @@ class CreaturePower2(Base2):
Integer, ForeignKey('creature.id'), nullable=False)
name = Column(Unicode)
description = Column(Unicode)
+ hitpower = Column(Integer, nullable=False)
class Level2(Base2):
__tablename__ = "level"
@@ -109,11 +111,61 @@ def creature_remove_is_demon(db_conn):
@RegisterMigration(2, FULL_MIGRATIONS)
def creature_powers_new_table(db_conn):
- pass
+ metadata = MetaData()
+ creature_powers = Table(
+ 'creature_power', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('creature',
+ Integer, ForeignKey('creature.id'), nullable=False),
+ Column('name', Unicode),
+ Column('description', Unicode),
+ Column('hitpower', Integer, nullable=False))
+ metadata.create_all(db_conn.engine)
+
@RegisterMigration(3, FULL_MIGRATIONS)
def level_exits_new_table(db_conn):
- pass
+ # First, create the table
+ # -----------------------
+ metadata = MetaData()
+ level_exits = Table(
+ 'level_exit', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('name', Unicode),
+ Column('from_level',
+ Integer, ForeignKey('level.id'), nullable=False),
+ Column('to_level',
+ Integer, ForeignKey('level.id'), nullable=False))
+ metadata.create_all(db_conn.engine)
+
+ # And now, convert all the old exit pickles to new level exits
+ # ------------------------------------------------------------
+
+ # Minimal representation of level table.
+ # Not auto-introspecting here because of pickle table. I'm not
+ # sure sqlalchemy can auto-introspect pickle columns.
+ levels = Table(
+ 'level', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('exits', PickleType))
+
+ # query over and insert
+ result = db_conn.execute(
+ select([levels], levels.c.exits!=None))
+
+ for level in result:
+ this_exit = level['exits']
+
+ # Insert the level exit
+ db_conn.execute(
+ level_exits.insert().values(
+ name=this_exit['name'],
+ from_level=this_exit['from_level'],
+ to_level=this_exit['to_level']))
+
+ # Finally, drop the old level exits pickle table
+ # ----------------------------------------------
+
# A hack! At this point we freeze-fame and get just a partial list of
@@ -142,6 +194,7 @@ class CreaturePower3(Base3):
Integer, ForeignKey('creature.id'), nullable=False, index=True)
name = Column(Unicode)
description = Column(Unicode)
+ hitpower = Column(Float, nullable=False)
class Level3(Base3):
__tablename__ = "level"
@@ -175,3 +228,7 @@ def level_exit_index_from_and_to_level(db_conn):
@RegisterMigration(6, FULL_MIGRATIONS)
def creature_power_index_creature(db_conn):
pass
+
+@RegisterMigration(7, FULL_MIGRATIONS)
+def creature_power_hitpower_to_float(db_conn):
+ pass