from __future__ import annotations from enum import Enum from typing import Any from pydantic import BaseModel, TypeAdapter from .enums import ( AgentJobErrorCategory, AgentJobStatus, AgentJobType, ArticleWorkflowStatus, ContentReviewKind, AssetStatus, AssetType, ClaimRiskLevel, ClaimSupportStatus, PlanReviewStatus, PublishingStatus, ReviewStatus, ReviewSuggestionStatus, ReviewType, Role, ScriptConfigVersionStatus, ) from .models import ( AgentJobOutput, AgentJobListResponse, AgentJobResponse, AgentJobSummary, AgentJobTestCodexRequest, ArticleCreateRequest, ArticleCreateResponse, ArticleDetailResponse, ArticleListResponse, ArticleSummary, BoundaryQuestionListResponse, BoundaryQuestionResponse, BoundaryQuestionSummary, BoundaryQuestionUpdateRequest, ObservabilityTimelineEventSummary, AssetGenerateSpecsResponse, AssetListResponse, AssetResponse, AssetRevisionSummary, AssetSummary, AssetUpdateRequest, AssetUploadRequest, AssetUploadResponse, ClaimSummary, CurrentUser, CurrentUserResponse, DraftAssembleResponse, DraftFaqItem, DraftListResponse, DraftResponse, DraftSummary, DraftUpdateRequest, ContentReviewIssueSummary, ContentReviewReportSummary, ContentReviewSuggestionSummary, FinalApprovalChecklistItemSummary, FinalApprovalChecklistResponse, FinalApprovalPublishingSettings, FinalApprovalRequest, FinalApprovalResponse, EvidenceSummary, EvidenceCreateRequest, EvidenceMatrixResponse, EvidenceResponse, EvidenceUpdateRequest, PlanSectionSummary, PlanSectionEditRequest, PlanListResponse, PlanResponse, PlanRevisionRequest, PlanSummary, PlanUpdateRequest, PublishCommitCreateResponse, PublishCommitListResponse, PublishCommitSummary, PublishingDryRunResponse, PublishingStatusResponse, PublishingRules, ResearchArtifactManifestSummary, ResearchArtifactSummary, ResearchListResponse, ResearchStartResponse, FinalReviewIssueSummary, FinalReviewIssuesResponse, LanguageReviewReportResponse, LanguageReviewRunResponse, ReviewSuggestionActionResponse, ReviewSuggestionEditRequest, ReviewActionResponse, ReviewSummary, FinalRevisionRequest, FinalRevisionRequestResponse, SeoReviewReportResponse, SeoReviewRunResponse, RunnerFileRef, ScriptConfigVersionAuditEventListResponse, ScriptConfigVersionAuditEventSummary, ScriptConfigVersionCreateRequest, ScriptConfigVersionListResponse, ScriptConfigVersionResponse, ScriptConfigVersionSummary, TargetSiteConfig, TargetSiteConfigCreateRequest, TargetSiteConfigResponse, WorkflowEventSummary, TargetSiteConfigUpdateRequest, UserSummary, ) CONTRACT_ENUMS: tuple[type[Enum], ...] = ( Role, ArticleWorkflowStatus, AgentJobStatus, AgentJobType, AgentJobErrorCategory, ClaimSupportStatus, ClaimRiskLevel, PublishingStatus, AssetStatus, AssetType, PlanReviewStatus, ReviewStatus, ReviewSuggestionStatus, ReviewType, ContentReviewKind, ScriptConfigVersionStatus, ) CONTRACT_SCHEMA_MODELS: tuple[type[BaseModel], ...] = ( UserSummary, CurrentUser, CurrentUserResponse, PublishingRules, TargetSiteConfig, TargetSiteConfigCreateRequest, TargetSiteConfigUpdateRequest, TargetSiteConfigResponse, ScriptConfigVersionSummary, ScriptConfigVersionCreateRequest, ScriptConfigVersionResponse, ScriptConfigVersionListResponse, ScriptConfigVersionAuditEventSummary, ScriptConfigVersionAuditEventListResponse, ArticleCreateRequest, ArticleSummary, ArticleCreateResponse, ArticleListResponse, WorkflowEventSummary, ObservabilityTimelineEventSummary, BoundaryQuestionSummary, BoundaryQuestionUpdateRequest, BoundaryQuestionResponse, BoundaryQuestionListResponse, PlanSectionSummary, PlanSectionEditRequest, PlanSummary, PlanUpdateRequest, PlanRevisionRequest, PlanResponse, PlanListResponse, ResearchArtifactSummary, ResearchArtifactManifestSummary, ResearchStartResponse, ResearchListResponse, EvidenceSummary, EvidenceCreateRequest, EvidenceUpdateRequest, EvidenceResponse, ClaimSummary, EvidenceMatrixResponse, DraftSummary, DraftFaqItem, DraftAssembleResponse, DraftListResponse, DraftResponse, DraftUpdateRequest, ContentReviewIssueSummary, ContentReviewReportSummary, ContentReviewSuggestionSummary, FinalApprovalChecklistItemSummary, FinalApprovalChecklistResponse, FinalApprovalPublishingSettings, FinalApprovalRequest, FinalApprovalResponse, FinalRevisionRequest, FinalRevisionRequestResponse, FinalReviewIssueSummary, FinalReviewIssuesResponse, LanguageReviewReportResponse, LanguageReviewRunResponse, AssetGenerateSpecsResponse, AssetListResponse, AssetResponse, AssetRevisionSummary, AssetSummary, AssetUpdateRequest, AssetUploadRequest, AssetUploadResponse, ReviewSummary, ReviewActionResponse, ReviewSuggestionActionResponse, ReviewSuggestionEditRequest, SeoReviewReportResponse, SeoReviewRunResponse, PublishCommitSummary, PublishCommitCreateResponse, PublishCommitListResponse, PublishingDryRunResponse, PublishingStatusResponse, RunnerFileRef, AgentJobSummary, AgentJobTestCodexRequest, AgentJobResponse, AgentJobListResponse, AgentJobOutput, ArticleDetailResponse, ) def inject_contract_schemas(openapi_schema: dict[str, Any]) -> None: schemas = openapi_schema.setdefault("components", {}).setdefault("schemas", {}) for enum in CONTRACT_ENUMS: schemas[enum.__name__] = TypeAdapter(enum).json_schema( ref_template="#/components/schemas/{model}" ) for model in CONTRACT_SCHEMA_MODELS: schema = model.model_json_schema(ref_template="#/components/schemas/{model}") for name, definition in schema.pop("$defs", {}).items(): schemas.setdefault(name, definition) schemas[model.__name__] = schema