fix: inspectdb not match data type 'DOUBLE' and 'CHAR' for MySQL
* increase: 1. Inspectdb adds DECIMAL, DOUBLE, CHAR, TIME data type matching; 2. Add exception handling, avoid the need to manually create the entire table because a certain data type is not supported. * fix: aerich inspectdb raise KeyError for double in MySQL * feat: support command `python -m aerich` * docs: update changelog * tests: verify mysql inspectdb for float field * fix mysql uuid field inspect to be charfield * refactor: use `db_index=True` instead of `index=True` for inspectdb * docs: update changelog --------- Co-authored-by: xiechen <xiechen@jinse.com> Co-authored-by: Waket Zheng <waketzheng@gmail.com>
This commit is contained in:
31
conftest.py
31
conftest.py
@@ -2,7 +2,9 @@ from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
import sys
|
||||
from collections.abc import Generator
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from tortoise import Tortoise, expand_db_url
|
||||
@@ -15,7 +17,7 @@ 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
|
||||
from tests._utils import chdir, copy_files, init_db, run_shell
|
||||
|
||||
db_url = os.getenv("TEST_DB", MEMORY_SQLITE)
|
||||
db_url_second = os.getenv("TEST_DB_SECOND", MEMORY_SQLITE)
|
||||
@@ -66,3 +68,30 @@ async def initialize_tests(event_loop, request) -> None:
|
||||
Migrate.ddl = PostgresDDL(client)
|
||||
Migrate.dialect = Migrate.ddl.DIALECT
|
||||
request.addfinalizer(lambda: event_loop.run_until_complete(Tortoise._drop_databases()))
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def new_aerich_project(tmp_path: Path):
|
||||
test_dir = Path(__file__).parent / "tests"
|
||||
asset_dir = test_dir / "assets" / "fake"
|
||||
settings_py = asset_dir / "settings.py"
|
||||
_tests_py = asset_dir / "_tests.py"
|
||||
db_py = asset_dir / "db.py"
|
||||
models_py = test_dir / "models.py"
|
||||
models_second_py = test_dir / "models_second.py"
|
||||
copy_files(settings_py, _tests_py, models_py, models_second_py, db_py, target_dir=tmp_path)
|
||||
dst_dir = tmp_path / "tests"
|
||||
dst_dir.mkdir()
|
||||
dst_dir.joinpath("__init__.py").touch()
|
||||
copy_files(test_dir / "_utils.py", test_dir / "indexes.py", target_dir=dst_dir)
|
||||
if should_remove := str(tmp_path) not in sys.path:
|
||||
sys.path.append(str(tmp_path))
|
||||
with chdir(tmp_path):
|
||||
run_shell("python db.py create", capture_output=False)
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
if not os.getenv("AERICH_DONT_DROP_FAKE_DB"):
|
||||
run_shell("python db.py drop", capture_output=False)
|
||||
if should_remove:
|
||||
sys.path.remove(str(tmp_path))
|
||||
|
||||
Reference in New Issue
Block a user