from pathlib import Path import json from typing import List, Optional from fastapi.openapi.utils import get_openapi import app.container as container from app.core.audit import AuditLogger from app.core.config import Settings from app.factory import create_app from app.providers.base import SystemProvider from app.services.user_group_service import UserGroupService from app.state import AppState class DummyProvider(SystemProvider): def create_user(self, username: str, password_hash: str, home_dir: Optional[str], linked_home_dir: Optional[str], shell: str, primary_group: Optional[str], groups: List[str]) -> None: return None def delete_user(self, username: str) -> None: return None def change_user_password(self, username: str, password_hash: str) -> None: return None def list_users(self): return [] def get_user(self, username: str): raise NotImplementedError def create_group(self, groupname: str) -> None: return None def delete_group(self, groupname: str) -> None: return None def list_groups(self): return [] def get_group(self, groupname: str): raise NotImplementedError def add_user_groups(self, username: str, groups: List[str], replace: bool) -> None: return None def remove_user_groups(self, username: str, groups: List[str]) -> None: return None def get_user_groups(self, username: str): return [] def main() -> None: settings = Settings(TOKEN="sdk-token") container.app_state = AppState( settings=settings, service=UserGroupService(provider=DummyProvider(), home_base_dir="/home"), audit=AuditLogger("./logs/sdk_audit.log"), ) app = create_app() schema = get_openapi(title=app.title, version=app.version, routes=app.routes) output = Path("sdk/openapi.json") output.parent.mkdir(parents=True, exist_ok=True) output.write_text(json.dumps(schema, ensure_ascii=False, indent=2), encoding="utf-8") print("OpenAPI exported to sdk/openapi.json") print("Run: openapi-python-client generate --path sdk/openapi.json --output-path sdk/python_client") if __name__ == "__main__": main()