Spaces:
Running
Running
| """Intermediate Representation (IR) models for OpenAPI operations.""" | |
| from typing import Any, Literal | |
| from pydantic import Field | |
| from fastmcp.utilities.types import FastMCPBaseModel | |
| # Type definitions | |
| HttpMethod = Literal[ | |
| "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD", "TRACE" | |
| ] | |
| ParameterLocation = Literal["path", "query", "header", "cookie"] | |
| JsonSchema = dict[str, Any] | |
| class ParameterInfo(FastMCPBaseModel): | |
| """Represents a single parameter for an HTTP operation in our IR.""" | |
| name: str | |
| location: ParameterLocation # Mapped from 'in' field of openapi-pydantic Parameter | |
| required: bool = False | |
| schema_: JsonSchema = Field(..., alias="schema") # Target name in IR | |
| description: str | None = None | |
| explode: bool | None = None # OpenAPI explode property for array parameters | |
| style: str | None = None # OpenAPI style property for parameter serialization | |
| class RequestBodyInfo(FastMCPBaseModel): | |
| """Represents the request body for an HTTP operation in our IR.""" | |
| required: bool = False | |
| content_schema: dict[str, JsonSchema] = Field( | |
| default_factory=dict | |
| ) # Key: media type | |
| description: str | None = None | |
| class ResponseInfo(FastMCPBaseModel): | |
| """Represents response information in our IR.""" | |
| description: str | None = None | |
| # Store schema per media type, key is media type | |
| content_schema: dict[str, JsonSchema] = Field(default_factory=dict) | |
| class HTTPRoute(FastMCPBaseModel): | |
| """Intermediate Representation for a single OpenAPI operation.""" | |
| path: str | |
| method: HttpMethod | |
| operation_id: str | None = None | |
| summary: str | None = None | |
| description: str | None = None | |
| tags: list[str] = Field(default_factory=list) | |
| parameters: list[ParameterInfo] = Field(default_factory=list) | |
| request_body: RequestBodyInfo | None = None | |
| responses: dict[str, ResponseInfo] = Field( | |
| default_factory=dict | |
| ) # Key: status code str | |
| request_schemas: dict[str, JsonSchema] = Field( | |
| default_factory=dict | |
| ) # Store schemas needed for input (parameters/request body) | |
| response_schemas: dict[str, JsonSchema] = Field( | |
| default_factory=dict | |
| ) # Store schemas needed for output (responses) | |
| extensions: dict[str, Any] = Field(default_factory=dict) | |
| openapi_version: str | None = None | |
| # Pre-calculated fields for performance | |
| flat_param_schema: JsonSchema = Field( | |
| default_factory=dict | |
| ) # Combined schema for MCP tools | |
| parameter_map: dict[str, dict[str, str]] = Field( | |
| default_factory=dict | |
| ) # Maps flat args to locations | |
| # Export public symbols | |
| __all__ = [ | |
| "HTTPRoute", | |
| "ParameterInfo", | |
| "RequestBodyInfo", | |
| "ResponseInfo", | |
| "HttpMethod", | |
| "ParameterLocation", | |
| "JsonSchema", | |
| ] | |