Files
content-factory/apps/backend/src/domain/contracts/openapi.py
T

268 lines
7.1 KiB
Python

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,
WorkflowTemplateStatus,
)
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,
WorkflowStageCreateRequest,
WorkflowStagePart,
WorkflowStageReorderRequest,
WorkflowStageResponse,
WorkflowStageSummary,
WorkflowStageUpdateRequest,
WorkflowTemplateAuditEventListResponse,
WorkflowTemplateAuditEventSummary,
WorkflowTemplateCreateRequest,
WorkflowTemplateListResponse,
WorkflowTemplateResponse,
WorkflowTemplateSummary,
WorkflowTemplateUpdateRequest,
TargetSiteConfigUpdateRequest,
UserSummary,
)
CONTRACT_ENUMS: tuple[type[Enum], ...] = (
Role,
ArticleWorkflowStatus,
AgentJobStatus,
AgentJobType,
AgentJobErrorCategory,
ClaimSupportStatus,
ClaimRiskLevel,
PublishingStatus,
AssetStatus,
AssetType,
PlanReviewStatus,
ReviewStatus,
ReviewSuggestionStatus,
ReviewType,
ContentReviewKind,
ScriptConfigVersionStatus,
WorkflowTemplateStatus,
)
CONTRACT_SCHEMA_MODELS: tuple[type[BaseModel], ...] = (
UserSummary,
CurrentUser,
CurrentUserResponse,
PublishingRules,
TargetSiteConfig,
TargetSiteConfigCreateRequest,
TargetSiteConfigUpdateRequest,
TargetSiteConfigResponse,
ScriptConfigVersionSummary,
ScriptConfigVersionCreateRequest,
ScriptConfigVersionResponse,
ScriptConfigVersionListResponse,
ScriptConfigVersionAuditEventSummary,
ScriptConfigVersionAuditEventListResponse,
WorkflowStagePart,
WorkflowStageSummary,
WorkflowTemplateSummary,
WorkflowTemplateCreateRequest,
WorkflowTemplateUpdateRequest,
WorkflowStageCreateRequest,
WorkflowStageUpdateRequest,
WorkflowStageReorderRequest,
WorkflowTemplateResponse,
WorkflowTemplateListResponse,
WorkflowStageResponse,
WorkflowTemplateAuditEventSummary,
WorkflowTemplateAuditEventListResponse,
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