feat: support --fake for aerich upgrade (#398)
* feat: support `--fake` for aerich upgrade * Add `--fake` to downgrade * tests: check --fake result for aerich upgrade and downgrade * Update readme * Fix unittest failed because of `db_field_types` changed * refactor: improve type hints and document
This commit is contained in:
28
conftest.py
28
conftest.py
@@ -1,27 +1,26 @@
|
||||
import asyncio
|
||||
import contextlib
|
||||
import os
|
||||
from typing import Generator
|
||||
|
||||
import pytest
|
||||
from tortoise import Tortoise, expand_db_url, generate_schema_for_client
|
||||
from tortoise import Tortoise, expand_db_url
|
||||
from tortoise.backends.asyncpg.schema_generator import AsyncpgSchemaGenerator
|
||||
from tortoise.backends.mysql.schema_generator import MySQLSchemaGenerator
|
||||
from tortoise.backends.sqlite.schema_generator import SqliteSchemaGenerator
|
||||
from tortoise.contrib.test import MEMORY_SQLITE
|
||||
from tortoise.exceptions import DBConnectionError, OperationalError
|
||||
|
||||
from aerich.ddl.mysql import MysqlDDL
|
||||
from aerich.ddl.postgres import PostgresDDL
|
||||
from aerich.ddl.sqlite import SqliteDDL
|
||||
from aerich.migrate import Migrate
|
||||
from tests._utils import init_db
|
||||
|
||||
db_url = os.getenv("TEST_DB", MEMORY_SQLITE)
|
||||
db_url_second = os.getenv("TEST_DB_SECOND", MEMORY_SQLITE)
|
||||
tortoise_orm = {
|
||||
"connections": {
|
||||
"default": expand_db_url(db_url, True),
|
||||
"second": expand_db_url(db_url_second, True),
|
||||
"default": expand_db_url(db_url, testing=True),
|
||||
"second": expand_db_url(db_url_second, testing=True),
|
||||
},
|
||||
"apps": {
|
||||
"models": {"models": ["tests.models", "aerich.models"], "default_connection": "default"},
|
||||
@@ -55,24 +54,7 @@ def event_loop() -> Generator:
|
||||
|
||||
@pytest.fixture(scope="session", autouse=True)
|
||||
async def initialize_tests(event_loop, request) -> None:
|
||||
# Placing init outside the try block since it doesn't
|
||||
# establish connections to the DB eagerly.
|
||||
await Tortoise.init(config=tortoise_orm)
|
||||
with contextlib.suppress(DBConnectionError, OperationalError):
|
||||
await Tortoise._drop_databases()
|
||||
await Tortoise.init(config=tortoise_orm, _create_db=True)
|
||||
try:
|
||||
await generate_schema_for_client(Tortoise.get_connection("default"), safe=True)
|
||||
except OperationalError as e:
|
||||
if (s := "IF NOT EXISTS") not in str(e):
|
||||
raise e
|
||||
# MySQL does not support `CREATE INDEX IF NOT EXISTS` syntax
|
||||
client = Tortoise.get_connection("default")
|
||||
generator = client.schema_generator(client)
|
||||
schema = generator.get_create_schema_sql(safe=True)
|
||||
schema = schema.replace(f" INDEX {s}", " INDEX")
|
||||
await generator.generate_from_string(schema)
|
||||
|
||||
await init_db(tortoise_orm)
|
||||
client = Tortoise.get_connection("default")
|
||||
if client.schema_generator is MySQLSchemaGenerator:
|
||||
Migrate.ddl = MysqlDDL(client)
|
||||
|
||||
Reference in New Issue
Block a user