BastionSSO/user_manage_api/scripts/generate_python_sdk.py

61 lines
2.2 KiB
Python

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()