from __future__ import annotations from typing import Any import typer from .core import DEFAULT_TIMEOUT, build_runtime_context, emit_success, request_json def runtime_context(ctx: typer.Context): obj = ctx.obj if not isinstance(obj, dict): obj = {} ctx.obj = obj cached_runtime = obj.get("_runtime_context") if cached_runtime is not None: return cached_runtime runtime = build_runtime_context( server=obj.get("server"), auth_stdin=obj.get("auth_stdin", False), scheme=obj.get("scheme"), timeout=obj.get("timeout", DEFAULT_TIMEOUT), request_id=obj.get("request_id"), ) obj["_runtime_context"] = runtime return runtime def emit_api( ctx: typer.Context, *, summary: str, method: str, path: str, params: dict[str, Any] | None = None, json_body: Any = None, require_auth: bool = True, require_project: bool = False, require_network_ctx: bool = False, require_username_ctx: bool = False, next_commands: list[str] | None = None, ) -> None: runtime = runtime_context(ctx) data, duration_ms = request_json( runtime, method=method, path=path, params=params, json_body=json_body, require_auth=require_auth, require_project=require_project, require_network_ctx=require_network_ctx, require_username_ctx=require_username_ctx, ) emit_success( summary=summary, data=data, ctx=runtime, duration_ms=duration_ms, next_commands=next_commands, )