__all__ = ["init_handler"] from pathlib import Path from typing import Literal GITIGNORE_CONTENT = """ __pycache__/ *.py[cod] .env .venv/ env/ """ FLAT_MAIN_TEMPLATE = """ from argenta import Orchestrator, App from handlers import router def main(): app = App() app.include_router(router) orchestrator = Orchestrator() orchestrator.start_polling(app) if __name__ == "__main__": main() """ FLAT_HANDLERS_TEMPLATE = """ from argenta import Router, Response router = Router("Hello command") @router.command("hello") def start_handler(response: Response): print("Hello world!") """ SRC_MAIN_TEMPLATE = """ from argenta import Orchestrator, App from .routers import router def main(): app = App() app.include_router(router) orchestrator = Orchestrator() orchestrator.start_polling(app) if __name__ == "__main__": main() """ SRC_ROUTERS_TEMPLATE = """ from argenta import Router from .handlers.hello_world_handler import hello_handler router = Router() router.command('hello')(hello_handler) """ SRC_HANDLER_TEMPLATE = """ from argenta import Response def hello_handler(response: Response) -> None: print("Hello world!") """ def create_file(path: Path, content: str) -> None: if not path.exists(): path.parent.mkdir(parents=True, exist_ok=True) path.write_text(content.strip(), encoding="utf-8") else: print(f"Skipped: {path} (already exists)") def init_handler(with_arch: Literal["flat", "src"] = "flat") -> None: cwd = Path.cwd() project_name = cwd.name.lower().replace(" ", "_") create_file(cwd / ".gitignore", GITIGNORE_CONTENT) if with_arch == "flat": create_file(cwd / "main.py", FLAT_MAIN_TEMPLATE) create_file(cwd / "handlers.py", FLAT_HANDLERS_TEMPLATE) elif with_arch == "src": base_pkg = cwd / "src" / project_name / "application" create_file(base_pkg / "__main__.py", SRC_MAIN_TEMPLATE) create_file(base_pkg / "routers.py", SRC_ROUTERS_TEMPLATE) create_file(base_pkg / "handlers" / "hello_world_handler.py", SRC_HANDLER_TEMPLATE) create_file(cwd / "src" / "__init__.py", "") create_file(cwd / "src" / project_name / "__init__.py", "") create_file(base_pkg / "__init__.py", "") create_file(base_pkg / "handlers" / "__init__.py", "") print("\nInitialization complete.")