fix: aerich init-db process is suspended (#435)

This commit is contained in:
Waket Zheng 2025-03-06 13:39:56 +08:00 committed by GitHub
parent 074ba9b743
commit 9c3ba7e273
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 42 additions and 4 deletions

View File

@ -2,6 +2,13 @@
## 0.8 ## 0.8
### [0.8.3]**(Unreleased)**
#### Fixed
- fix: `aerich init-db` process is suspended. ([#435])
[#435]: https://github.com/tortoise/aerich/pull/435
### [0.8.2](../../releases/tag/v0.8.2) - 2025-02-28 ### [0.8.2](../../releases/tag/v0.8.2) - 2025-02-28
#### Added #### Added

View File

@ -19,6 +19,22 @@ CONFIG_DEFAULT_VALUES = {
} }
def _patch_context_to_close_tortoise_connections_when_exit() -> None:
from tortoise import Tortoise, connections
origin_aexit = Context.__aexit__
async def aexit(*args, **kw) -> None:
await origin_aexit(*args, **kw)
if Tortoise._inited:
await connections.close_all()
Context.__aexit__ = aexit # type:ignore[method-assign]
_patch_context_to_close_tortoise_connections_when_exit()
@click.group(context_settings={"help_option_names": ["-h", "--help"]}) @click.group(context_settings={"help_option_names": ["-h", "--help"]})
@click.version_option(__version__, "-V", "--version") @click.version_option(__version__, "-V", "--version")
@click.option( @click.option(

View File

@ -2,6 +2,7 @@ from __future__ import annotations
import contextlib import contextlib
import os import os
import platform
import shlex import shlex
import shutil import shutil
import subprocess import subprocess
@ -12,11 +13,16 @@ from pathlib import Path
from tests._utils import Dialect, chdir, copy_files from tests._utils import Dialect, chdir, copy_files
def run_aerich(cmd: str) -> None: def run_aerich(cmd: str) -> subprocess.CompletedProcess | None:
with contextlib.suppress(subprocess.TimeoutExpired): if not cmd.startswith("poetry") and not cmd.startswith("python"):
if not cmd.startswith("aerich") and not cmd.startswith("poetry"): if not cmd.startswith("aerich"):
cmd = "aerich " + cmd cmd = "aerich " + cmd
subprocess.run(shlex.split(cmd), timeout=2) if platform.system() == "Windows":
cmd = "python -m " + cmd
r = None
with contextlib.suppress(subprocess.TimeoutExpired):
r = subprocess.run(shlex.split(cmd), timeout=2)
return r
def run_shell(cmd: str) -> subprocess.CompletedProcess: def run_shell(cmd: str) -> subprocess.CompletedProcess:
@ -43,6 +49,15 @@ def prepare_sqlite_project(tmp_path: Path) -> Generator[tuple[Path, str]]:
yield models_py, models_py.read_text("utf-8") yield models_py, models_py.read_text("utf-8")
def test_close_tortoise_connections_patch(tmp_path: Path) -> None:
if not Dialect.is_sqlite():
return
with prepare_sqlite_project(tmp_path) as (models_py, models_text):
run_aerich("aerich init -t settings.TORTOISE_ORM")
r = run_aerich("aerich init-db")
assert r is not None
def test_sqlite_migrate_alter_indexed_unique(tmp_path: Path) -> None: def test_sqlite_migrate_alter_indexed_unique(tmp_path: Path) -> None:
if not Dialect.is_sqlite(): if not Dialect.is_sqlite():
return return