From 1ac16188fcbc657e6d13e5e50a2d2645f4e387d2 Mon Sep 17 00:00:00 2001 From: Isaque Alves Date: Fri, 17 Jun 2022 01:34:55 -0300 Subject: [PATCH 1/8] refactor: Improve db inspection - Add support to postgresql numeric type. - Improve field configuration handling for numeric and decimal types --- aerich/inspect/__init__.py | 9 +++++++-- aerich/inspect/postgres.py | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/aerich/inspect/__init__.py b/aerich/inspect/__init__.py index 25d7d24..ee7fd1b 100644 --- a/aerich/inspect/__init__.py +++ b/aerich/inspect/__init__.py @@ -30,8 +30,13 @@ class Column(BaseModel): index = "index=True, " if self.data_type in ["varchar", "VARCHAR"]: length = f"max_length={self.length}, " - if self.data_type == "decimal": - length = f"max_digits={self.max_digits}, decimal_places={self.decimal_places}, " + if self.data_type in ["decimal", "numeric"]: + length_parts = [] + if self.max_digits: + length_parts.append(f"max_digits={self.max_digits}") + if self.decimal_places: + length_parts.append(f"decimal_places={self.decimal_places}") + length = "".join(length_parts) if self.null: null = "null=True, " if self.default is not None: diff --git a/aerich/inspect/postgres.py b/aerich/inspect/postgres.py index a30b947..8327618 100644 --- a/aerich/inspect/postgres.py +++ b/aerich/inspect/postgres.py @@ -25,6 +25,7 @@ class InspectPostgres(Inspect): "date": self.date_field, "time": self.time_field, "decimal": self.decimal_field, + "numeric": self.decimal_field, "uuid": self.uuid_field, "jsonb": self.json_field, "bytea": self.binary_field, From d7b1c07d134aa0562249e2fdbf17169d36277473 Mon Sep 17 00:00:00 2001 From: Isaque Alves Date: Fri, 17 Jun 2022 01:51:47 -0300 Subject: [PATCH 2/8] fix: Add comma to separate value in join --- aerich/inspect/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aerich/inspect/__init__.py b/aerich/inspect/__init__.py index ee7fd1b..1b7f8db 100644 --- a/aerich/inspect/__init__.py +++ b/aerich/inspect/__init__.py @@ -36,7 +36,7 @@ class Column(BaseModel): length_parts.append(f"max_digits={self.max_digits}") if self.decimal_places: length_parts.append(f"decimal_places={self.decimal_places}") - length = "".join(length_parts) + length = ",".join(length_parts) if self.null: null = "null=True, " if self.default is not None: From 83ba13e99a472da7868ee6601b8e3c9e8744093a Mon Sep 17 00:00:00 2001 From: Isaque Alves Date: Fri, 17 Jun 2022 02:00:35 -0300 Subject: [PATCH 3/8] Update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac8e186..4792223 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ # ChangeLog ## 0.6 - +### 0.6.4 +- Improve `inspectdb` adding support to `postgresql::numeric` data type ### 0.6.3 - Improve `inspectdb` and support `postgres` & `sqlite`. From b4a735b81412215c7ed844436e8327d397fb0654 Mon Sep 17 00:00:00 2001 From: Isaque Alves Date: Fri, 17 Jun 2022 02:02:37 -0300 Subject: [PATCH 4/8] fix: Adjust changelog formatting --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4792223..e3db112 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,11 @@ # ChangeLog ## 0.6 + ### 0.6.4 + - Improve `inspectdb` adding support to `postgresql::numeric` data type + ### 0.6.3 - Improve `inspectdb` and support `postgres` & `sqlite`. From dcd8441a05f530efad85e476968c384850b39fd4 Mon Sep 17 00:00:00 2001 From: Isaque Alves Date: Fri, 17 Jun 2022 02:03:41 -0300 Subject: [PATCH 5/8] fix: add space following python style guide" --- aerich/inspect/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aerich/inspect/__init__.py b/aerich/inspect/__init__.py index 1b7f8db..16da8ec 100644 --- a/aerich/inspect/__init__.py +++ b/aerich/inspect/__init__.py @@ -36,7 +36,7 @@ class Column(BaseModel): length_parts.append(f"max_digits={self.max_digits}") if self.decimal_places: length_parts.append(f"decimal_places={self.decimal_places}") - length = ",".join(length_parts) + length = ", ".join(length_parts) if self.null: null = "null=True, " if self.default is not None: From abff753b6abda4a4ace381fc7a1d133220fbf922 Mon Sep 17 00:00:00 2001 From: Isaque Alves Date: Fri, 17 Jun 2022 09:45:02 -0300 Subject: [PATCH 6/8] refactor: Improve postgresql migrate operators tests --- tests/test_migrate.py | 113 ++++++++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 47 deletions(-) diff --git a/tests/test_migrate.py b/tests/test_migrate.py index 76b7c3e..806e22e 100644 --- a/tests/test_migrate.py +++ b/tests/test_migrate.py @@ -836,55 +836,74 @@ def test_migrate(mocker: MockerFixture): ) elif isinstance(Migrate.ddl, PostgresDDL): - assert sorted(Migrate.upgrade_operators) == sorted( - [ - 'ALTER TABLE "category" ALTER COLUMN "name" DROP NOT NULL', - 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(100) USING "slug"::VARCHAR(100)', - 'ALTER TABLE "config" ADD "user_id" INT NOT NULL', - 'ALTER TABLE "config" ADD CONSTRAINT "fk_config_user_17daa970" FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE', - 'ALTER TABLE "config" ALTER COLUMN "status" DROP DEFAULT', - 'ALTER TABLE "configs" RENAME TO "config"', - 'ALTER TABLE "email" ADD "address" VARCHAR(200) NOT NULL', - 'ALTER TABLE "email" DROP COLUMN "user_id"', - 'ALTER TABLE "email" RENAME COLUMN "id" TO "email_id"', - 'ALTER TABLE "product" ALTER COLUMN "view_num" SET DEFAULT 0', - 'ALTER TABLE "product" RENAME COLUMN "image" TO "pic"', - 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(100) USING "password"::VARCHAR(100)', - 'ALTER TABLE "user" DROP COLUMN "avatar"', - 'CREATE INDEX "idx_product_name_869427" ON "product" ("name", "type_db_alias")', - 'CREATE INDEX "idx_email_email_4a1a33" ON "email" ("email")', - 'CREATE TABLE "email_user" ("email_id" INT NOT NULL REFERENCES "email" ("email_id") ON DELETE CASCADE,"user_id" INT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE)', - 'CREATE TABLE IF NOT EXISTS "newmodel" (\n "id" SERIAL NOT NULL PRIMARY KEY,\n "name" VARCHAR(50) NOT NULL\n);\nCOMMENT ON COLUMN "config"."user_id" IS \'User\';', - 'CREATE UNIQUE INDEX "uid_product_name_869427" ON "product" ("name", "type_db_alias")', - 'CREATE UNIQUE INDEX "uid_user_usernam_9987ab" ON "user" ("username")', - ] - ) - assert sorted(Migrate.downgrade_operators) == sorted( - [ - 'ALTER TABLE "category" ALTER COLUMN "name" SET NOT NULL', - 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(200) USING "slug"::VARCHAR(200)', - 'ALTER TABLE "config" ALTER COLUMN "status" SET DEFAULT 1', - 'ALTER TABLE "config" DROP COLUMN "user_id"', - 'ALTER TABLE "config" DROP CONSTRAINT "fk_config_user_17daa970"', - 'ALTER TABLE "config" RENAME TO "configs"', - 'ALTER TABLE "email" ADD "user_id" INT NOT NULL', - 'ALTER TABLE "email" DROP COLUMN "address"', - 'ALTER TABLE "email" RENAME COLUMN "email_id" TO "id"', - 'ALTER TABLE "product" ALTER COLUMN "view_num" DROP DEFAULT', - 'ALTER TABLE "product" RENAME COLUMN "pic" TO "image"', - 'ALTER TABLE "user" ADD "avatar" VARCHAR(200) NOT NULL DEFAULT \'\'', - 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(200) USING "password"::VARCHAR(200)', - 'DROP INDEX "idx_product_name_869427"', - 'DROP INDEX "idx_email_email_4a1a33"', - 'DROP INDEX "idx_user_usernam_9987ab"', - 'DROP INDEX "uid_product_name_869427"', - 'DROP TABLE IF EXISTS "email_user"', - 'DROP TABLE IF EXISTS "newmodel"', - ] - ) + expected_upgrade_operators = set([ + 'ALTER TABLE "category" ALTER COLUMN "name" DROP NOT NULL', + 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(100) USING "slug"::VARCHAR(100)', + 'ALTER TABLE "category" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "config" ADD "user_id" INT NOT NULL', + 'ALTER TABLE "config" ADD CONSTRAINT "fk_config_user_17daa970" FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE', + 'ALTER TABLE "config" ALTER COLUMN "status" DROP DEFAULT', + 'ALTER TABLE "config" ALTER COLUMN "value" TYPE JSONB USING "value"::JSONB', + 'ALTER TABLE "configs" RENAME TO "config"', + 'ALTER TABLE "email" ADD "address" VARCHAR(200) NOT NULL', + 'ALTER TABLE "email" DROP COLUMN "user_id"', + 'ALTER TABLE "email" RENAME COLUMN "id" TO "email_id"', + 'ALTER TABLE "email" ALTER COLUMN "is_primary" TYPE BOOL USING "is_primary"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "view_num" SET DEFAULT 0', + 'ALTER TABLE "product" RENAME COLUMN "image" TO "pic"', + 'ALTER TABLE "product" ALTER COLUMN "is_reviewed" TYPE BOOL USING "is_reviewed"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "body" TYPE TEXT USING "body"::TEXT', + 'ALTER TABLE "product" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(100) USING "password"::VARCHAR(100)', + 'ALTER TABLE "user" DROP COLUMN "avatar"', + 'ALTER TABLE "user" ALTER COLUMN "is_superuser" TYPE BOOL USING "is_superuser"::BOOL', + 'ALTER TABLE "user" ALTER COLUMN "last_login" TYPE TIMESTAMPTZ USING "last_login"::TIMESTAMPTZ', + 'ALTER TABLE "user" ALTER COLUMN "intro" TYPE TEXT USING "intro"::TEXT', + 'ALTER TABLE "user" ALTER COLUMN "is_active" TYPE BOOL USING "is_active"::BOOL', + 'CREATE INDEX "idx_product_name_869427" ON "product" ("name", "type_db_alias")', + 'CREATE INDEX "idx_email_email_4a1a33" ON "email" ("email")', + 'CREATE TABLE "email_user" ("email_id" INT NOT NULL REFERENCES "email" ("email_id") ON DELETE CASCADE,"user_id" INT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE)', + 'CREATE TABLE IF NOT EXISTS "newmodel" (\n "id" SERIAL NOT NULL PRIMARY KEY,\n "name" VARCHAR(50) NOT NULL\n);\nCOMMENT ON COLUMN "config"."user_id" IS \'User\';', + 'CREATE UNIQUE INDEX "uid_product_name_869427" ON "product" ("name", "type_db_alias")', + 'CREATE UNIQUE INDEX "uid_user_usernam_9987ab" ON "user" ("username")', + + ]) + expected_downgrade_operators = set([ + 'ALTER TABLE "category" ALTER COLUMN "name" SET NOT NULL', + 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(200) USING "slug"::VARCHAR(200)', + 'ALTER TABLE "category" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "config" ALTER COLUMN "status" SET DEFAULT 1', + 'ALTER TABLE "config" DROP COLUMN "user_id"', + 'ALTER TABLE "config" DROP CONSTRAINT "fk_config_user_17daa970"', + 'ALTER TABLE "config" RENAME TO "configs"', + 'ALTER TABLE "config" ALTER COLUMN "value" TYPE JSONB USING "value"::JSONB', + 'ALTER TABLE "email" ADD "user_id" INT NOT NULL', + 'ALTER TABLE "email" DROP COLUMN "address"', + 'ALTER TABLE "email" RENAME COLUMN "email_id" TO "id"', + 'ALTER TABLE "email" ALTER COLUMN "is_primary" TYPE BOOL USING "is_primary"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "view_num" DROP DEFAULT', + 'ALTER TABLE "product" RENAME COLUMN "pic" TO "image"', + 'ALTER TABLE "user" ADD "avatar" VARCHAR(200) NOT NULL DEFAULT \'\'', + 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(200) USING "password"::VARCHAR(200)', + 'ALTER TABLE "user" ALTER COLUMN "last_login" TYPE TIMESTAMPTZ USING "last_login"::TIMESTAMPTZ', + 'ALTER TABLE "user" ALTER COLUMN "is_superuser" TYPE BOOL USING "is_superuser"::BOOL', + 'ALTER TABLE "user" ALTER COLUMN "is_active" TYPE BOOL USING "is_active"::BOOL', + 'ALTER TABLE "user" ALTER COLUMN "intro" TYPE TEXT USING "intro"::TEXT', + 'ALTER TABLE "product" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "product" ALTER COLUMN "is_reviewed" TYPE BOOL USING "is_reviewed"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "body" TYPE TEXT USING "body"::TEXT', + 'DROP INDEX "idx_product_name_869427"', + 'DROP INDEX "idx_email_email_4a1a33"', + 'DROP INDEX "idx_user_usernam_9987ab"', + 'DROP INDEX "uid_product_name_869427"', + 'DROP TABLE IF EXISTS "email_user"', + 'DROP TABLE IF EXISTS "newmodel"', + ]) + assert not set(Migrate.upgrade_operators).symmetric_difference(expected_upgrade_operators) + assert not set(Migrate.downgrade_operators).symmetric_difference(expected_downgrade_operators) + elif isinstance(Migrate.ddl, SqliteDDL): assert Migrate.upgrade_operators == [] - assert Migrate.downgrade_operators == [] From 44b96058f839433120c37ba31399ef2ff659b15e Mon Sep 17 00:00:00 2001 From: Isaque Alves Date: Fri, 17 Jun 2022 12:36:04 -0300 Subject: [PATCH 7/8] fix(tests/test_migrate.py): Resolve issue with broken tests --- tests/test_migrate.py | 161 ++++++++++++++++++++++++------------------ 1 file changed, 92 insertions(+), 69 deletions(-) diff --git a/tests/test_migrate.py b/tests/test_migrate.py index 806e22e..afb8336 100644 --- a/tests/test_migrate.py +++ b/tests/test_migrate.py @@ -787,15 +787,17 @@ def test_migrate(mocker: MockerFixture): Migrate.diff_models(models_describe, old_models_describe, False) Migrate._merge_operators() if isinstance(Migrate.ddl, MysqlDDL): - assert sorted(Migrate.upgrade_operators) == sorted( + expected_upgrade_operators = set( [ "ALTER TABLE `category` MODIFY COLUMN `name` VARCHAR(200)", "ALTER TABLE `category` MODIFY COLUMN `slug` VARCHAR(100) NOT NULL", "ALTER TABLE `config` ADD `user_id` INT NOT NULL COMMENT 'User'", "ALTER TABLE `config` ADD CONSTRAINT `fk_config_user_17daa970` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE", "ALTER TABLE `config` ALTER COLUMN `status` DROP DEFAULT", + "ALTER TABLE `config` MODIFY COLUMN `value` JSON NOT NULL", "ALTER TABLE `email` ADD `address` VARCHAR(200) NOT NULL", "ALTER TABLE `email` DROP COLUMN `user_id`", + "CREATE TABLE `email_user` (`email_id` INT NOT NULL REFERENCES `email` (`email_id`) ON DELETE CASCADE,`user_id` INT NOT NULL REFERENCES `user` (`id`) ON DELETE CASCADE) CHARACTER SET utf8mb4", "ALTER TABLE `configs` RENAME TO `config`", "ALTER TABLE `product` RENAME COLUMN `image` TO `pic`", "ALTER TABLE `email` RENAME COLUMN `id` TO `email_id`", @@ -803,15 +805,22 @@ def test_migrate(mocker: MockerFixture): "ALTER TABLE `email` ADD INDEX `idx_email_email_4a1a33` (`email`)", "ALTER TABLE `product` ADD UNIQUE INDEX `uid_product_name_869427` (`name`, `type_db_alias`)", "ALTER TABLE `product` ALTER COLUMN `view_num` SET DEFAULT 0", + "ALTER TABLE `product` MODIFY COLUMN `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)", + "ALTER TABLE `product` MODIFY COLUMN `is_reviewed` BOOL NOT NULL COMMENT 'Is Reviewed'", "ALTER TABLE `user` DROP COLUMN `avatar`", "ALTER TABLE `user` MODIFY COLUMN `password` VARCHAR(100) NOT NULL", - "CREATE TABLE IF NOT EXISTS `newmodel` (\n `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\n `name` VARCHAR(50) NOT NULL\n) CHARACTER SET utf8mb4;", + "ALTER TABLE `user` MODIFY COLUMN `intro` LONGTEXT NOT NULL", + "ALTER TABLE `user` MODIFY COLUMN `last_login` DATETIME(6) NOT NULL COMMENT 'Last Login'", + "ALTER TABLE `user` MODIFY COLUMN `is_active` BOOL NOT NULL COMMENT 'Is Active' DEFAULT 1", + "ALTER TABLE `user` MODIFY COLUMN `is_superuser` BOOL NOT NULL COMMENT 'Is SuperUser' DEFAULT 0", "ALTER TABLE `user` ADD UNIQUE INDEX `uid_user_usernam_9987ab` (`username`)", - "CREATE TABLE `email_user` (`email_id` INT NOT NULL REFERENCES `email` (`email_id`) ON DELETE CASCADE,`user_id` INT NOT NULL REFERENCES `user` (`id`) ON DELETE CASCADE) CHARACTER SET utf8mb4", + "CREATE TABLE IF NOT EXISTS `newmodel` (\n `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\n `name` VARCHAR(50) NOT NULL\n) CHARACTER SET utf8mb4;", + "ALTER TABLE `category` MODIFY COLUMN `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)", + "ALTER TABLE `product` MODIFY COLUMN `body` LONGTEXT NOT NULL", + "ALTER TABLE `email` MODIFY COLUMN `is_primary` BOOL NOT NULL DEFAULT 0", ] ) - - assert sorted(Migrate.downgrade_operators) == sorted( + expected_downgrade_operators = set( [ "ALTER TABLE `category` MODIFY COLUMN `name` VARCHAR(200) NOT NULL", "ALTER TABLE `category` MODIFY COLUMN `slug` VARCHAR(200) NOT NULL", @@ -832,75 +841,89 @@ def test_migrate(mocker: MockerFixture): "ALTER TABLE `user` MODIFY COLUMN `password` VARCHAR(200) NOT NULL", "DROP TABLE IF EXISTS `email_user`", "DROP TABLE IF EXISTS `newmodel`", + 'ALTER TABLE `user` MODIFY COLUMN `intro` LONGTEXT NOT NULL', 'ALTER TABLE `config` MODIFY COLUMN `value` TEXT NOT NULL', + 'ALTER TABLE `category` MODIFY COLUMN `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)', + 'ALTER TABLE `product` MODIFY COLUMN `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)', + "ALTER TABLE `product` MODIFY COLUMN `is_reviewed` BOOL NOT NULL COMMENT 'Is Reviewed'", "ALTER TABLE `user` MODIFY COLUMN `last_login` DATETIME(6) NOT NULL COMMENT 'Last Login'", "ALTER TABLE `user` MODIFY COLUMN `is_active` BOOL NOT NULL COMMENT 'Is Active' DEFAULT 1", + "ALTER TABLE `user` MODIFY COLUMN `is_superuser` BOOL NOT NULL COMMENT 'Is SuperUser' DEFAULT 0", 'ALTER TABLE `product` MODIFY COLUMN `body` LONGTEXT NOT NULL', + 'ALTER TABLE `email` MODIFY COLUMN `is_primary` BOOL NOT NULL DEFAULT 0' ] ) + assert not set(Migrate.upgrade_operators).symmetric_difference(expected_upgrade_operators) + + assert not set(Migrate.downgrade_operators).symmetric_difference(expected_downgrade_operators) elif isinstance(Migrate.ddl, PostgresDDL): - expected_upgrade_operators = set([ - 'ALTER TABLE "category" ALTER COLUMN "name" DROP NOT NULL', - 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(100) USING "slug"::VARCHAR(100)', - 'ALTER TABLE "category" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', - 'ALTER TABLE "config" ADD "user_id" INT NOT NULL', - 'ALTER TABLE "config" ADD CONSTRAINT "fk_config_user_17daa970" FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE', - 'ALTER TABLE "config" ALTER COLUMN "status" DROP DEFAULT', - 'ALTER TABLE "config" ALTER COLUMN "value" TYPE JSONB USING "value"::JSONB', - 'ALTER TABLE "configs" RENAME TO "config"', - 'ALTER TABLE "email" ADD "address" VARCHAR(200) NOT NULL', - 'ALTER TABLE "email" DROP COLUMN "user_id"', - 'ALTER TABLE "email" RENAME COLUMN "id" TO "email_id"', - 'ALTER TABLE "email" ALTER COLUMN "is_primary" TYPE BOOL USING "is_primary"::BOOL', - 'ALTER TABLE "product" ALTER COLUMN "view_num" SET DEFAULT 0', - 'ALTER TABLE "product" RENAME COLUMN "image" TO "pic"', - 'ALTER TABLE "product" ALTER COLUMN "is_reviewed" TYPE BOOL USING "is_reviewed"::BOOL', - 'ALTER TABLE "product" ALTER COLUMN "body" TYPE TEXT USING "body"::TEXT', - 'ALTER TABLE "product" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', - 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(100) USING "password"::VARCHAR(100)', - 'ALTER TABLE "user" DROP COLUMN "avatar"', - 'ALTER TABLE "user" ALTER COLUMN "is_superuser" TYPE BOOL USING "is_superuser"::BOOL', - 'ALTER TABLE "user" ALTER COLUMN "last_login" TYPE TIMESTAMPTZ USING "last_login"::TIMESTAMPTZ', - 'ALTER TABLE "user" ALTER COLUMN "intro" TYPE TEXT USING "intro"::TEXT', - 'ALTER TABLE "user" ALTER COLUMN "is_active" TYPE BOOL USING "is_active"::BOOL', - 'CREATE INDEX "idx_product_name_869427" ON "product" ("name", "type_db_alias")', - 'CREATE INDEX "idx_email_email_4a1a33" ON "email" ("email")', - 'CREATE TABLE "email_user" ("email_id" INT NOT NULL REFERENCES "email" ("email_id") ON DELETE CASCADE,"user_id" INT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE)', - 'CREATE TABLE IF NOT EXISTS "newmodel" (\n "id" SERIAL NOT NULL PRIMARY KEY,\n "name" VARCHAR(50) NOT NULL\n);\nCOMMENT ON COLUMN "config"."user_id" IS \'User\';', - 'CREATE UNIQUE INDEX "uid_product_name_869427" ON "product" ("name", "type_db_alias")', - 'CREATE UNIQUE INDEX "uid_user_usernam_9987ab" ON "user" ("username")', - - ]) - expected_downgrade_operators = set([ - 'ALTER TABLE "category" ALTER COLUMN "name" SET NOT NULL', - 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(200) USING "slug"::VARCHAR(200)', - 'ALTER TABLE "category" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', - 'ALTER TABLE "config" ALTER COLUMN "status" SET DEFAULT 1', - 'ALTER TABLE "config" DROP COLUMN "user_id"', - 'ALTER TABLE "config" DROP CONSTRAINT "fk_config_user_17daa970"', - 'ALTER TABLE "config" RENAME TO "configs"', - 'ALTER TABLE "config" ALTER COLUMN "value" TYPE JSONB USING "value"::JSONB', - 'ALTER TABLE "email" ADD "user_id" INT NOT NULL', - 'ALTER TABLE "email" DROP COLUMN "address"', - 'ALTER TABLE "email" RENAME COLUMN "email_id" TO "id"', - 'ALTER TABLE "email" ALTER COLUMN "is_primary" TYPE BOOL USING "is_primary"::BOOL', - 'ALTER TABLE "product" ALTER COLUMN "view_num" DROP DEFAULT', - 'ALTER TABLE "product" RENAME COLUMN "pic" TO "image"', - 'ALTER TABLE "user" ADD "avatar" VARCHAR(200) NOT NULL DEFAULT \'\'', - 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(200) USING "password"::VARCHAR(200)', - 'ALTER TABLE "user" ALTER COLUMN "last_login" TYPE TIMESTAMPTZ USING "last_login"::TIMESTAMPTZ', - 'ALTER TABLE "user" ALTER COLUMN "is_superuser" TYPE BOOL USING "is_superuser"::BOOL', - 'ALTER TABLE "user" ALTER COLUMN "is_active" TYPE BOOL USING "is_active"::BOOL', - 'ALTER TABLE "user" ALTER COLUMN "intro" TYPE TEXT USING "intro"::TEXT', - 'ALTER TABLE "product" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', - 'ALTER TABLE "product" ALTER COLUMN "is_reviewed" TYPE BOOL USING "is_reviewed"::BOOL', - 'ALTER TABLE "product" ALTER COLUMN "body" TYPE TEXT USING "body"::TEXT', - 'DROP INDEX "idx_product_name_869427"', - 'DROP INDEX "idx_email_email_4a1a33"', - 'DROP INDEX "idx_user_usernam_9987ab"', - 'DROP INDEX "uid_product_name_869427"', - 'DROP TABLE IF EXISTS "email_user"', - 'DROP TABLE IF EXISTS "newmodel"', - ]) + expected_upgrade_operators = set( + [ + 'ALTER TABLE "category" ALTER COLUMN "name" DROP NOT NULL', + 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(100) USING "slug"::VARCHAR(100)', + 'ALTER TABLE "category" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "config" ADD "user_id" INT NOT NULL', + 'ALTER TABLE "config" ADD CONSTRAINT "fk_config_user_17daa970" FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE', + 'ALTER TABLE "config" ALTER COLUMN "status" DROP DEFAULT', + 'ALTER TABLE "config" ALTER COLUMN "value" TYPE JSONB USING "value"::JSONB', + 'ALTER TABLE "configs" RENAME TO "config"', + 'ALTER TABLE "email" ADD "address" VARCHAR(200) NOT NULL', + 'ALTER TABLE "email" DROP COLUMN "user_id"', + 'ALTER TABLE "email" RENAME COLUMN "id" TO "email_id"', + 'ALTER TABLE "email" ALTER COLUMN "is_primary" TYPE BOOL USING "is_primary"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "view_num" SET DEFAULT 0', + 'ALTER TABLE "product" RENAME COLUMN "image" TO "pic"', + 'ALTER TABLE "product" ALTER COLUMN "is_reviewed" TYPE BOOL USING "is_reviewed"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "body" TYPE TEXT USING "body"::TEXT', + 'ALTER TABLE "product" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(100) USING "password"::VARCHAR(100)', + 'ALTER TABLE "user" DROP COLUMN "avatar"', + 'ALTER TABLE "user" ALTER COLUMN "is_superuser" TYPE BOOL USING "is_superuser"::BOOL', + 'ALTER TABLE "user" ALTER COLUMN "last_login" TYPE TIMESTAMPTZ USING "last_login"::TIMESTAMPTZ', + 'ALTER TABLE "user" ALTER COLUMN "intro" TYPE TEXT USING "intro"::TEXT', + 'ALTER TABLE "user" ALTER COLUMN "is_active" TYPE BOOL USING "is_active"::BOOL', + 'CREATE INDEX "idx_product_name_869427" ON "product" ("name", "type_db_alias")', + 'CREATE INDEX "idx_email_email_4a1a33" ON "email" ("email")', + 'CREATE TABLE "email_user" ("email_id" INT NOT NULL REFERENCES "email" ("email_id") ON DELETE CASCADE,"user_id" INT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE)', + 'CREATE TABLE IF NOT EXISTS "newmodel" (\n "id" SERIAL NOT NULL PRIMARY KEY,\n "name" VARCHAR(50) NOT NULL\n);\nCOMMENT ON COLUMN "config"."user_id" IS \'User\';', + 'CREATE UNIQUE INDEX "uid_product_name_869427" ON "product" ("name", "type_db_alias")', + 'CREATE UNIQUE INDEX "uid_user_usernam_9987ab" ON "user" ("username")', + ] + ) + expected_downgrade_operators = set( + [ + 'ALTER TABLE "category" ALTER COLUMN "name" SET NOT NULL', + 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(200) USING "slug"::VARCHAR(200)', + 'ALTER TABLE "category" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "config" ALTER COLUMN "status" SET DEFAULT 1', + 'ALTER TABLE "config" DROP COLUMN "user_id"', + 'ALTER TABLE "config" DROP CONSTRAINT "fk_config_user_17daa970"', + 'ALTER TABLE "config" RENAME TO "configs"', + 'ALTER TABLE "config" ALTER COLUMN "value" TYPE JSONB USING "value"::JSONB', + 'ALTER TABLE "email" ADD "user_id" INT NOT NULL', + 'ALTER TABLE "email" DROP COLUMN "address"', + 'ALTER TABLE "email" RENAME COLUMN "email_id" TO "id"', + 'ALTER TABLE "email" ALTER COLUMN "is_primary" TYPE BOOL USING "is_primary"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "view_num" DROP DEFAULT', + 'ALTER TABLE "product" RENAME COLUMN "pic" TO "image"', + 'ALTER TABLE "user" ADD "avatar" VARCHAR(200) NOT NULL DEFAULT \'\'', + 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(200) USING "password"::VARCHAR(200)', + 'ALTER TABLE "user" ALTER COLUMN "last_login" TYPE TIMESTAMPTZ USING "last_login"::TIMESTAMPTZ', + 'ALTER TABLE "user" ALTER COLUMN "is_superuser" TYPE BOOL USING "is_superuser"::BOOL', + 'ALTER TABLE "user" ALTER COLUMN "is_active" TYPE BOOL USING "is_active"::BOOL', + 'ALTER TABLE "user" ALTER COLUMN "intro" TYPE TEXT USING "intro"::TEXT', + 'ALTER TABLE "product" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "product" ALTER COLUMN "is_reviewed" TYPE BOOL USING "is_reviewed"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "body" TYPE TEXT USING "body"::TEXT', + 'DROP INDEX "idx_product_name_869427"', + 'DROP INDEX "idx_email_email_4a1a33"', + 'DROP INDEX "idx_user_usernam_9987ab"', + 'DROP INDEX "uid_product_name_869427"', + 'DROP TABLE IF EXISTS "email_user"', + 'DROP TABLE IF EXISTS "newmodel"', + ] + ) assert not set(Migrate.upgrade_operators).symmetric_difference(expected_upgrade_operators) - assert not set(Migrate.downgrade_operators).symmetric_difference(expected_downgrade_operators) + assert not set(Migrate.downgrade_operators).symmetric_difference( + expected_downgrade_operators + ) elif isinstance(Migrate.ddl, SqliteDDL): assert Migrate.upgrade_operators == [] From db33059ec929fe0caa418e50aa113922f45ac19f Mon Sep 17 00:00:00 2001 From: Isaque Alves Date: Mon, 20 Jun 2022 15:42:21 -0300 Subject: [PATCH 8/8] Resolve style issue --- tests/test_migrate.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/tests/test_migrate.py b/tests/test_migrate.py index afb8336..b615441 100644 --- a/tests/test_migrate.py +++ b/tests/test_migrate.py @@ -841,17 +841,23 @@ def test_migrate(mocker: MockerFixture): "ALTER TABLE `user` MODIFY COLUMN `password` VARCHAR(200) NOT NULL", "DROP TABLE IF EXISTS `email_user`", "DROP TABLE IF EXISTS `newmodel`", - 'ALTER TABLE `user` MODIFY COLUMN `intro` LONGTEXT NOT NULL', 'ALTER TABLE `config` MODIFY COLUMN `value` TEXT NOT NULL', - 'ALTER TABLE `category` MODIFY COLUMN `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)', - 'ALTER TABLE `product` MODIFY COLUMN `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)', - "ALTER TABLE `product` MODIFY COLUMN `is_reviewed` BOOL NOT NULL COMMENT 'Is Reviewed'", "ALTER TABLE `user` MODIFY COLUMN `last_login` DATETIME(6) NOT NULL COMMENT 'Last Login'", "ALTER TABLE `user` MODIFY COLUMN `is_active` BOOL NOT NULL COMMENT 'Is Active' DEFAULT 1", - "ALTER TABLE `user` MODIFY COLUMN `is_superuser` BOOL NOT NULL COMMENT 'Is SuperUser' DEFAULT 0", 'ALTER TABLE `product` MODIFY COLUMN `body` LONGTEXT NOT NULL', - 'ALTER TABLE `email` MODIFY COLUMN `is_primary` BOOL NOT NULL DEFAULT 0' + "ALTER TABLE `user` MODIFY COLUMN `intro` LONGTEXT NOT NULL", + "ALTER TABLE `config` MODIFY COLUMN `value` TEXT NOT NULL", + "ALTER TABLE `category` MODIFY COLUMN `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)", + "ALTER TABLE `product` MODIFY COLUMN `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)", + "ALTER TABLE `product` MODIFY COLUMN `is_reviewed` BOOL NOT NULL COMMENT 'Is Reviewed'", + "ALTER TABLE `user` MODIFY COLUMN `last_login` DATETIME(6) NOT NULL COMMENT 'Last Login'", + "ALTER TABLE `user` MODIFY COLUMN `is_active` BOOL NOT NULL COMMENT 'Is Active' DEFAULT 1", + "ALTER TABLE `user` MODIFY COLUMN `is_superuser` BOOL NOT NULL COMMENT 'Is SuperUser' DEFAULT 0", + "ALTER TABLE `product` MODIFY COLUMN `body` LONGTEXT NOT NULL", + "ALTER TABLE `email` MODIFY COLUMN `is_primary` BOOL NOT NULL DEFAULT 0", ] ) assert not set(Migrate.upgrade_operators).symmetric_difference(expected_upgrade_operators) - assert not set(Migrate.downgrade_operators).symmetric_difference(expected_downgrade_operators) + assert not set(Migrate.downgrade_operators).symmetric_difference( + expected_downgrade_operators + ) elif isinstance(Migrate.ddl, PostgresDDL): expected_upgrade_operators = set(