#!/usr/bin/env python3
import re
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
SKIP_PREFIXES = (
ROOT / "devplacepy" / "database",
ROOT / "devplacepy_services" / "database",
ROOT / "devplacepy" / "db_client.py",
ROOT / "scripts",
ROOT / "splitup.md",
)
REPLACEMENTS = [
(re.compile(r"\bfrom devplacepy\.database import\b"), "from devplacepy.db_client import"),
(re.compile(r"\bfrom devplacepy\.database\.([a-z_]+) import\b"), r"from devplacepy.db_client import"),
(re.compile(r"\bimport devplacepy\.database\b"), "import devplacepy.db_client"),
]
def should_skip(path: Path) -> bool:
for prefix in SKIP_PREFIXES:
if path == prefix or str(path).startswith(str(prefix) + "/"):
return True
return False
def migrate_file(path: Path) -> bool:
text = path.read_text(encoding="utf-8")
original = text
for pattern, repl in REPLACEMENTS:
text = pattern.sub(repl, text)
if text != original:
path.write_text(text, encoding="utf-8")
return True
return False
def main() -> int:
changed = []
for pattern in ("devplacepy/**/*.py", "tests/**/*.py", "devplacepy_services/**/*.py"):
for path in ROOT.glob(pattern):
if not path.is_file() or should_skip(path):
continue
if migrate_file(path):
changed.append(path.relative_to(ROOT))
if changed:
print(f"migrated {len(changed)} files")
for item in sorted(changed)[:40]:
print(f" {item}")
if len(changed) > 40:
print(f" ... and {len(changed) - 40} more")
else:
print("no files changed")
return 0
if __name__ == "__main__":
raise SystemExit(main())