From 3e8b5f43120a29669cf8f4338ea68c1fe7b37b85 Mon Sep 17 00:00:00 2001 From: Serg Melikyan Date: Mon, 5 Aug 2013 19:20:36 +0400 Subject: [PATCH] Resolved bug MRN-719 Rewritten all migrations to named FK Fixed column types for few migrations from text to string Change-Id: Ifcf98caaa1b80f73ebf9739ebe7daf4f3206a534 --- .../versions/001_add_initial_tables.py | 46 ++++++++++--------- .../versions/002_add_session_table.py | 28 ++++++----- .../versions/003_add_status_table.py | 34 +++++++++----- .../005_remove_obsolete_service_table.py | 31 +++++++------ .../versions/009_add_deployment_table.py | 27 +++++++---- ...umn_and_remove_session_column_to_status.py | 37 ++++++++++++--- ...add_details_and_level_columns_to_status.py | 9 +++- muranoapi/db/models.py | 4 +- 8 files changed, 138 insertions(+), 78 deletions(-) diff --git a/muranoapi/db/migrate_repo/versions/001_add_initial_tables.py b/muranoapi/db/migrate_repo/versions/001_add_initial_tables.py index d2c68cb04..fe8258f66 100644 --- a/muranoapi/db/migrate_repo/versions/001_add_initial_tables.py +++ b/muranoapi/db/migrate_repo/versions/001_add_initial_tables.py @@ -11,36 +11,40 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +from migrate.changeset.constraint import ForeignKeyConstraint -from sqlalchemy.schema import MetaData, Table, Column, ForeignKey +from sqlalchemy.schema import MetaData, Table, Column from sqlalchemy.types import String, Text, DateTime meta = MetaData() -Table('environment', meta, - Column('id', String(32), primary_key=True), - Column('name', String(255), nullable=False), - Column('created', DateTime(), nullable=False), - Column('updated', DateTime(), nullable=False), - Column('tenant_id', String(32), nullable=False), - Column('description', Text(), nullable=False), - ) - -Table('service', meta, - Column('id', String(32), primary_key=True), - Column('name', String(255), nullable=False), - Column('type', String(40), nullable=False), - Column('environment_id', String(32), ForeignKey('environment.id')), - Column('created', DateTime, nullable=False), - Column('updated', DateTime, nullable=False), - Column('description', Text(), nullable=False), - ) - def upgrade(migrate_engine): meta.bind = migrate_engine - meta.create_all() + meta.reflect() + + environment = Table('environment', meta, + Column('id', String(32), primary_key=True), + Column('name', String(255), nullable=False), + Column('created', DateTime(), nullable=False), + Column('updated', DateTime(), nullable=False), + Column('tenant_id', String(32), nullable=False), + Column('description', Text(), nullable=False)) + environment.create() + + service = Table('service', meta, + Column('id', String(32), primary_key=True), + Column('name', String(255), nullable=False), + Column('type', String(40), nullable=False), + Column('environment_id', String(32), nullable=False), + Column('created', DateTime, nullable=False), + Column('updated', DateTime, nullable=False), + Column('description', Text(), nullable=False)) + service.create() + + ForeignKeyConstraint(columns=[service.c.environment_id], + refcolumns=[environment.c.id]).create() def downgrade(migrate_engine): diff --git a/muranoapi/db/migrate_repo/versions/002_add_session_table.py b/muranoapi/db/migrate_repo/versions/002_add_session_table.py index b674e6406..334c8a09e 100644 --- a/muranoapi/db/migrate_repo/versions/002_add_session_table.py +++ b/muranoapi/db/migrate_repo/versions/002_add_session_table.py @@ -11,29 +11,35 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +from migrate.changeset.constraint import ForeignKeyConstraint -from sqlalchemy.schema import MetaData, Table, Column, ForeignKey +from sqlalchemy.schema import MetaData, Table, Column from sqlalchemy.types import String, Text, DateTime meta = MetaData() -session = Table('session', meta, - Column('id', String(32), primary_key=True), - Column('environment_id', String(32), - ForeignKey('environment.id')), - Column('created', DateTime, nullable=False), - Column('updated', DateTime, nullable=False), - Column('user_id', String(32), nullable=False), - Column('state', Text(), nullable=False), - ) - def upgrade(migrate_engine): meta.bind = migrate_engine meta.reflect() + + session = Table('session', meta, + Column('id', String(32), primary_key=True), + Column('environment_id', String(32), nullable=False), + Column('created', DateTime, nullable=False), + Column('updated', DateTime, nullable=False), + Column('user_id', String(32), nullable=False), + Column('state', Text(), nullable=False)) session.create() + environment = Table('environment', meta, autoload=True) + ForeignKeyConstraint(columns=[session.c.environment_id], + refcolumns=[environment.c.id]).create() + def downgrade(migrate_engine): meta.bind = migrate_engine + meta.reflect() + + session = Table('session', meta, autoload=True) session.drop() diff --git a/muranoapi/db/migrate_repo/versions/003_add_status_table.py b/muranoapi/db/migrate_repo/versions/003_add_status_table.py index dd96b9c3b..b3628969a 100644 --- a/muranoapi/db/migrate_repo/versions/003_add_status_table.py +++ b/muranoapi/db/migrate_repo/versions/003_add_status_table.py @@ -11,30 +11,40 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +from migrate.changeset.constraint import ForeignKeyConstraint -from sqlalchemy.schema import MetaData, Table, Column, ForeignKey +from sqlalchemy.schema import MetaData, Table, Column from sqlalchemy.types import String, Text, DateTime meta = MetaData() -status = Table('status', meta, - Column('id', String(32), primary_key=True), - Column('created', DateTime, nullable=False), - Column('updated', DateTime, nullable=False), - Column('entity', String(10), nullable=False), - Column('environment_id', String(32), - ForeignKey('environment.id')), - Column('session_id', String(32), ForeignKey('session.id')), - Column('text', Text(), nullable=False), - ) - def upgrade(migrate_engine): meta.bind = migrate_engine meta.reflect() + + status = Table('status', meta, + Column('id', String(32), primary_key=True), + Column('created', DateTime, nullable=False), + Column('updated', DateTime, nullable=False), + Column('entity', String(10), nullable=False), + Column('environment_id', String(32), nullable=False), + Column('session_id', String(32), nullable=False), + Column('text', Text(), nullable=False), + ) status.create() + environment = Table('environment', meta, autoload=True) + ForeignKeyConstraint(columns=[status.c.environment_id], + refcolumns=[environment.c.id]).create() + session = Table('session', meta, autoload=True) + ForeignKeyConstraint(columns=[status.c.session_id], + refcolumns=[session.c.id]).create() + def downgrade(migrate_engine): meta.bind = migrate_engine + meta.reflect() + + status = Table('status', meta, autoload=True) status.drop() diff --git a/muranoapi/db/migrate_repo/versions/005_remove_obsolete_service_table.py b/muranoapi/db/migrate_repo/versions/005_remove_obsolete_service_table.py index e37d8b6c7..a58ce5031 100644 --- a/muranoapi/db/migrate_repo/versions/005_remove_obsolete_service_table.py +++ b/muranoapi/db/migrate_repo/versions/005_remove_obsolete_service_table.py @@ -11,32 +11,35 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +from migrate.changeset.constraint import ForeignKeyConstraint -from sqlalchemy.schema import MetaData, Table, Column, ForeignKey -from sqlalchemy.types import String, Text, DateTime - +from sqlalchemy.schema import MetaData, Table, Column +from sqlalchemy.types import String, DateTime, Text meta = MetaData() -service = Table('service', meta, - Column('id', String(32), primary_key=True), - Column('name', String(255), nullable=False), - Column('type', String(40), nullable=False), - Column('environment_id', String(32), - ForeignKey('environment.id')), - Column('created', DateTime, nullable=False), - Column('updated', DateTime, nullable=False), - Column('description', Text(), nullable=False), - ) - def upgrade(migrate_engine): meta.bind = migrate_engine meta.reflect() + + service = Table('service', meta, autoload=True) service.drop() def downgrade(migrate_engine): meta.bind = migrate_engine meta.reflect() + service = Table('service', meta, + Column('id', String(32), primary_key=True), + Column('name', String(255), nullable=False), + Column('type', String(40), nullable=False), + Column('environment_id', String(32), nullable=False), + Column('created', DateTime, nullable=False), + Column('updated', DateTime, nullable=False), + Column('description', Text(), nullable=False)) service.create() + + environment = Table('environment', meta, autoload=True) + ForeignKeyConstraint(columns=[service.c.environment_id], + refcolumns=[environment.c.id]).create() diff --git a/muranoapi/db/migrate_repo/versions/009_add_deployment_table.py b/muranoapi/db/migrate_repo/versions/009_add_deployment_table.py index 89d83cc91..d4aa37d6d 100644 --- a/muranoapi/db/migrate_repo/versions/009_add_deployment_table.py +++ b/muranoapi/db/migrate_repo/versions/009_add_deployment_table.py @@ -11,28 +11,35 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +from migrate.changeset.constraint import ForeignKeyConstraint -from sqlalchemy.schema import MetaData, Table, Column, ForeignKey +from sqlalchemy.schema import MetaData, Table, Column from sqlalchemy.types import String, DateTime meta = MetaData() -deployment = Table('deployment', meta, - Column('id', String(32), primary_key=True), - Column('environment_id', String(32), - ForeignKey('environment.id')), - Column('created', DateTime, nullable=False), - Column('updated', DateTime, nullable=False), - Column('started', DateTime, nullable=False), - Column('finished', DateTime, nullable=True)) - def upgrade(migrate_engine): meta.bind = migrate_engine meta.reflect() + + deployment = Table('deployment', meta, + Column('id', String(32), primary_key=True), + Column('environment_id', String(32), nullable=False), + Column('created', DateTime, nullable=False), + Column('updated', DateTime, nullable=False), + Column('started', DateTime, nullable=False), + Column('finished', DateTime, nullable=True)) deployment.create() + environment = Table('environment', meta, autoload=True) + ForeignKeyConstraint(columns=[deployment.c.environment_id], + refcolumns=[environment.c.id]).create() + def downgrade(migrate_engine): meta.bind = migrate_engine + meta.reflect() + + deployment = Table('deployment', meta, autoload=True) deployment.drop() diff --git a/muranoapi/db/migrate_repo/versions/010_add_deployment_column_and_remove_session_column_to_status.py b/muranoapi/db/migrate_repo/versions/010_add_deployment_column_and_remove_session_column_to_status.py index 8a19e549d..cf93c28cb 100644 --- a/muranoapi/db/migrate_repo/versions/010_add_deployment_column_and_remove_session_column_to_status.py +++ b/muranoapi/db/migrate_repo/versions/010_add_deployment_column_and_remove_session_column_to_status.py @@ -11,8 +11,9 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +from migrate.changeset.constraint import ForeignKeyConstraint -from sqlalchemy.schema import MetaData, Table, Column, ForeignKey +from sqlalchemy.schema import MetaData, Table, Column from sqlalchemy.types import String meta = MetaData() @@ -21,11 +22,22 @@ meta = MetaData() def upgrade(migrate_engine): meta.bind = migrate_engine meta.reflect() + status = Table('status', meta, autoload=True) - deployment_id = Column('deployment_id', String(32), - ForeignKey('deployment.id')) + environment = Table('environment', meta, autoload=True) + session = Table('session', meta, autoload=True) + deployment = Table('deployment', meta, autoload=True) + + deployment_id = Column('deployment_id', String(32), nullable=False) deployment_id.create(status) + ForeignKeyConstraint(columns=[status.c.deployment_id], + refcolumns=[deployment.c.id]).create() + + ForeignKeyConstraint(columns=[status.c.environment_id], + refcolumns=[environment.c.id]).drop() status.c.environment_id.drop() + ForeignKeyConstraint(columns=[status.c.session_id], + refcolumns=[session.c.id]).drop() status.c.session_id.drop() status.c.entity.alter(nullable=True) @@ -33,11 +45,24 @@ def upgrade(migrate_engine): def downgrade(migrate_engine): meta.bind = migrate_engine meta.reflect() + status = Table('status', meta, autoload=True) + environment = Table('environment', meta, autoload=True) + session = Table('session', meta, autoload=True) + deployment = Table('deployment', meta, autoload=True) + + ForeignKeyConstraint(columns=[status.c.deployment_id], + refcolumns=[deployment.c.id]).drop() status.c.deployment_id.drop() - environment_id = Column('environment_id', String(32), - ForeignKey('environment.id')) + + environment_id = Column('environment_id', String(32), nullable=False) environment_id.create(status) - session_id = Column('session_id', String(32), ForeignKey('session.id')) + ForeignKeyConstraint(columns=[status.c.environment_id], + refcolumns=[environment.c.id]).create() + + session_id = Column('session_id', String(32), nullable=False) session_id.create(status) + ForeignKeyConstraint(columns=[status.c.session_id], + refcolumns=[session.c.id]).create() + status.c.entity.alter(nullable=False) diff --git a/muranoapi/db/migrate_repo/versions/012_add_details_and_level_columns_to_status.py b/muranoapi/db/migrate_repo/versions/012_add_details_and_level_columns_to_status.py index 51bf89cfc..9301a65cb 100644 --- a/muranoapi/db/migrate_repo/versions/012_add_details_and_level_columns_to_status.py +++ b/muranoapi/db/migrate_repo/versions/012_add_details_and_level_columns_to_status.py @@ -13,22 +13,27 @@ # under the License. from sqlalchemy.schema import MetaData, Table, Column -from sqlalchemy.types import Text +from sqlalchemy.types import Text, String meta = MetaData() def upgrade(migrate_engine): meta.bind = migrate_engine + meta.reflect() + status = Table('status', meta, autoload=True) details = Column('details', Text(), nullable=True) - level = Column('level', Text(), nullable=False, server_default='info') + level = Column('level', String(32), nullable=False, server_default='info') + details.create(status) level.create(status) def downgrade(migrate_engine): meta.bind = migrate_engine + meta.reflect() + status = Table('status', meta, autoload=True) status.c.details.drop() status.c.level.drop() diff --git a/muranoapi/db/models.py b/muranoapi/db/models.py index b40a44e71..017d206b6 100644 --- a/muranoapi/db/models.py +++ b/muranoapi/db/models.py @@ -165,8 +165,8 @@ class Status(BASE, ModelBase): entity_id = Column(String(32), nullable=True) entity = Column(String(10), nullable=True) deployment_id = Column(String(32), ForeignKey('deployment.id')) - text = Column(Text(), nullable=False) - level = Column(Text(), nullable=False) + text = Column(String(), nullable=False) + level = Column(String(32), nullable=False) details = Column(Text(), nullable=True) def to_dict(self):