From 74566b2dfe2dac0165525f4cd8f9801ba1aaa5b1 Mon Sep 17 00:00:00 2001 From: ops-bot Date: Mon, 13 Jul 2026 22:52:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(format):=20black=E6=A0=BC=E5=BC=8F=E5=8C=96?= =?UTF-8?q?=20check=5Fmigration=5Fsafety.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/check_migration_safety.py | 43 ++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/scripts/check_migration_safety.py b/scripts/check_migration_safety.py index 6ec4b784d..48f9905b1 100644 --- a/scripts/check_migration_safety.py +++ b/scripts/check_migration_safety.py @@ -48,10 +48,19 @@ HIGH_RISK_PATTERNS = [ # 中风险模式:可能导致数据丢失或兼容性问题 MEDIUM_RISK_PATTERNS = [ - (r"op\.alter_column\([^)]*nullable\s*=\s*False", "新增 NOT NULL 约束 - 旧数据可能为空导致迁移失败"), + ( + r"op\.alter_column\([^)]*nullable\s*=\s*False", + "新增 NOT NULL 约束 - 旧数据可能为空导致迁移失败", + ), (r"op\.alter_column\([^)]*type_\s*=", "列类型变更 - 可能导致数据截断或转换失败"), - (r"\bop\.rename_table\(", "op.rename_table() - 重命名表,可能导致依赖该表的代码报错"), - (r"\bop\.rename_column\(", "op.rename_column() - 重命名列,可能导致依赖该列的代码报错"), + ( + r"\bop\.rename_table\(", + "op.rename_table() - 重命名表,可能导致依赖该表的代码报错", + ), + ( + r"\bop\.rename_column\(", + "op.rename_column() - 重命名列,可能导致依赖该列的代码报错", + ), (r"\bop\.drop_index\(", "op.drop_index() - 删除索引,可能影响查询性能"), (r"\bop\.drop_constraint\(", "op.drop_constraint() - 删除约束,可能影响数据完整性"), ] @@ -95,13 +104,24 @@ def get_new_migrations_via_diff(diff_target: str) -> List[Path]: """ try: result = subprocess.run( - ["git", "diff", "--name-only", "--diff-filter=A", diff_target, "HEAD", "--", "alembic/versions/"], + [ + "git", + "diff", + "--name-only", + "--diff-filter=A", + diff_target, + "HEAD", + "--", + "alembic/versions/", + ], cwd=str(REPO_ROOT), capture_output=True, text=True, check=True, ) - files = [line.strip() for line in result.stdout.strip().split("\n") if line.strip()] + files = [ + line.strip() for line in result.stdout.strip().split("\n") if line.strip() + ] return [REPO_ROOT / f for f in files] except subprocess.CalledProcessError as e: print(f"⚠️ git diff 失败({diff_target}):{e.stderr.strip()}") @@ -109,7 +129,9 @@ def get_new_migrations_via_diff(diff_target: str) -> List[Path]: return sorted(ALEMBIC_VERSIONS_DIR.glob("*.py")) -def find_new_migrations(since_revision: str | None = None, diff_against: str | None = None) -> List[Path]: +def find_new_migrations( + since_revision: str | None = None, diff_against: str | None = None +) -> List[Path]: """ 找出需要检查的迁移文件。 优先级:diff_against > since_revision > 全部 @@ -161,7 +183,9 @@ def analyze_migration(file_path: Path) -> Tuple[List[str], List[str], List[str]] def main() -> int: - parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter + ) parser.add_argument( "--since", default=os.getenv("MIGRATION_SINCE_REVISION"), @@ -224,7 +248,9 @@ def main() -> int: print() print("=" * 60) - print(f"检查结果:{len(all_safe)} 项安全 / {len(all_medium)} 项中风险 / {len(all_high)} 项高风险") + print( + f"检查结果:{len(all_safe)} 项安全 / {len(all_medium)} 项中风险 / {len(all_high)} 项高风险" + ) print() if all_high: @@ -247,4 +273,3 @@ def main() -> int: if __name__ == "__main__": sys.exit(main()) -