| import os
|
| import shutil
|
| import glob
|
| from pathlib import Path
|
|
|
| def print_action(action, detail):
|
| print(f"[{action}] {detail}")
|
|
|
| def cleanup_repo(root_dir: str):
|
| root = Path(root_dir)
|
|
|
|
|
| target_services = root / "services"
|
| target_config = root / "config"
|
| target_docs = root / "docs"
|
| target_scripts = root / "scripts"
|
| target_tests_integration = root / "tests" / "integration"
|
|
|
| for d in [target_services, target_config, target_docs, target_scripts, target_tests_integration]:
|
| os.makedirs(d, exist_ok=True)
|
|
|
|
|
| old_microservices = root / "microservices"
|
| if old_microservices.exists():
|
| service_names = ["input_receiver", "preprocessing", "ocr", "representation", "verification", "classifier", "reporting"]
|
| for svc in service_names:
|
| old_path = old_microservices / svc
|
| new_path = target_services / (svc if svc in ['input_receiver'] else f"{svc}_service")
|
|
|
| if old_path.exists():
|
| os.makedirs(new_path, exist_ok=True)
|
|
|
| main_file = old_path / "main.py"
|
| if main_file.exists():
|
| shutil.move(str(main_file), str(new_path / "app.py"))
|
| print_action("RENAME", f"{svc}/main.py -> {new_path.name}/app.py")
|
|
|
|
|
| test_file = old_path / "test_main.py"
|
| if test_file.exists():
|
| tests_dir = new_path / "tests"
|
| os.makedirs(tests_dir, exist_ok=True)
|
| shutil.move(str(test_file), str(tests_dir / f"test_{svc}.py"))
|
| print_action("MOVE", f"{svc}/test_main.py -> {new_path.name}/tests/test_{svc}.py")
|
|
|
|
|
| for f in ["Dockerfile", "requirements.txt"]:
|
| if (old_path / f).exists():
|
| shutil.move(str(old_path / f), str(new_path / f))
|
| print_action("MOVE", f"{svc}/{f} -> {new_path.name}/{f}")
|
|
|
| print_action("DELETE", f"{old_microservices.name}/ (Empty after move)")
|
| shutil.rmtree(str(old_microservices), ignore_errors=True)
|
|
|
|
|
| old_tests = root / "tests" / "microservices"
|
| if old_tests.exists():
|
| for f in glob.glob(str(old_tests / "*.py")):
|
| shutil.move(f, str(target_tests_integration / Path(f).name))
|
| print_action("MOVE", f"{Path(f).name} -> tests/integration/")
|
| shutil.rmtree(str(old_tests), ignore_errors=True)
|
|
|
|
|
| global_req = root / "requirements.txt"
|
| if global_req.exists():
|
| shutil.move(str(global_req), str(target_config / "requirements.txt"))
|
| print_action("MOVE", "requirements.txt -> config/")
|
|
|
| dc_new = root / "docker-compose_microservices.yml"
|
| if dc_new.exists():
|
| shutil.move(str(dc_new), str(target_config / "docker-compose.yml"))
|
| print_action("MOVE", "docker-compose_microservices.yml -> config/docker-compose.yml")
|
| else:
|
| dc_old = root / "docker-compose.yml"
|
| if dc_old.exists():
|
| shutil.move(str(dc_old), str(target_config / "docker-compose.yml"))
|
| print_action("MOVE", "docker-compose.yml -> config/docker-compose.yml")
|
|
|
| env_old = root / ".env.template"
|
| if env_old.exists():
|
| shutil.move(str(env_old), str(target_config / ".env"))
|
| print_action("MOVE", ".env.template -> config/.env")
|
|
|
|
|
|
|
| root_readme = root / "README.md"
|
| if root_readme.exists():
|
| shutil.move(str(root_readme), str(target_docs / "README.md"))
|
| print_action("MOVE", "README.md -> docs/")
|
|
|
|
|
|
|
| folders_to_delete = [
|
| "backend", "frontend", "handwritten-math-transcription",
|
| "external_resources", "datasets", "test_images"
|
| ]
|
| for d in folders_to_delete:
|
| p = root / d
|
| if p.exists() and p.is_dir():
|
| shutil.rmtree(str(p), ignore_errors=True)
|
| print_action("DELETE", f"Removed old monolithic/unused directory: {d}/")
|
|
|
|
|
| files_to_delete = glob.glob(str(root / "*.csv")) + \
|
| glob.glob(str(root / "*.json")) + \
|
| glob.glob(str(root / "*.png")) + \
|
| glob.glob(str(root / "*.bat")) + \
|
| glob.glob(str(root / "*.ps1")) + \
|
| [str(root / "Dockerfile")]
|
|
|
| for f in files_to_delete:
|
| p = Path(f)
|
| if p.exists() and p.is_file():
|
| p.unlink()
|
| print_action("DELETE", f"Removed unused file: {p.name}")
|
|
|
|
|
| for pyc in glob.glob(str(root / "**" / "*.pyc"), recursive=True):
|
| os.remove(pyc)
|
| for pycache in glob.glob(str(root / "**" / "__pycache__"), recursive=True):
|
| shutil.rmtree(pycache, ignore_errors=True)
|
| print_action("CLEAN", "Removed all .pyc and __pycache__ files.")
|
|
|
|
|
| for s in glob.glob(str(target_scripts / "*.py")):
|
| if Path(s).name != "cleanup.py":
|
| os.remove(s)
|
| print_action("DELETE", f"Removed old script: {Path(s).name}")
|
|
|
| if __name__ == "__main__":
|
| import sys
|
|
|
| script_dir = os.path.dirname(os.path.abspath(__file__))
|
| project_root = os.path.dirname(script_dir)
|
| print(f"Starting cleanup at: {project_root}\n")
|
| cleanup_repo(project_root)
|
| print("\n[SUCCESS] Cleanup and restructuring complete.")
|
|
|