added option to generate empty migration file

This commit is contained in:
ar0ne 2023-12-26 22:55:51 +05:30
parent 01264f3f27
commit b1ff2418f5
3 changed files with 24 additions and 5 deletions

View File

@ -123,8 +123,8 @@ class Command:
inspect = cls(connection, tables) inspect = cls(connection, tables)
return await inspect.inspect() return await inspect.inspect()
async def migrate(self, name: str = "update"): async def migrate(self, name: str = "update", empty: bool = False) -> str:
return await Migrate.migrate(name) return await Migrate.migrate(name, empty)
async def init_db(self, safe: bool): async def init_db(self, safe: bool):
location = self.location location = self.location

View File

@ -130,12 +130,16 @@ class Migrate:
return version return version
@classmethod @classmethod
async def migrate(cls, name) -> str: async def migrate(cls, name: str, empty: bool) -> str:
""" """
diff old models and new models to generate diff content diff old models and new models to generate diff content
:param name: :param name: str name for migration
:param empty: bool if True generates empty migration
:return: :return:
""" """
if empty:
return await cls._generate_diff_py(name)
new_version_content = get_models_describe(cls.app) new_version_content = get_models_describe(cls.app)
cls.diff_models(cls._last_version_content, new_version_content) cls.diff_models(cls._last_version_content, new_version_content)
cls.diff_models(new_version_content, cls._last_version_content, False) cls.diff_models(new_version_content, cls._last_version_content, False)

View File

@ -1,3 +1,6 @@
import tempfile
from pathlib import Path
import pytest import pytest
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
@ -5,7 +8,7 @@ from aerich.ddl.mysql import MysqlDDL
from aerich.ddl.postgres import PostgresDDL from aerich.ddl.postgres import PostgresDDL
from aerich.ddl.sqlite import SqliteDDL from aerich.ddl.sqlite import SqliteDDL
from aerich.exceptions import NotSupportError from aerich.exceptions import NotSupportError
from aerich.migrate import Migrate from aerich.migrate import MIGRATE_TEMPLATE, Migrate
from aerich.utils import get_models_describe from aerich.utils import get_models_describe
old_models_describe = { old_models_describe = {
@ -966,3 +969,15 @@ def test_sort_all_version_files(mocker):
"10_datetime_update.py", "10_datetime_update.py",
"11_datetime_update.py", "11_datetime_update.py",
] ]
async def test_empty_migration(mocker) -> None:
mocker.patch("os.listdir", return_value=[])
Migrate.app = "foo"
expected_content = MIGRATE_TEMPLATE.format(upgrade_sql=";", downgrade_sql=";")
with tempfile.TemporaryDirectory() as temp_dir:
Migrate.migrate_location = temp_dir
migration_file = await Migrate.migrate("update", True)
with open(Path(temp_dir, migration_file), "r") as f:
assert f.read() == expected_content