From 89694d6d69c855f1dbaaa725867ab070cc7b2490 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Sun, 15 Jan 2012 14:55:07 -0600 Subject: [PATCH] More test migration work. Closing to working migrations for set 2... Also, this file is written in 2012, correct that ;) --- mediagoblin/tests/test_sql_migrations.py | 67 ++++++++++++++++++++++-- 1 file 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 -- 2.25.1