Task 002: add shared domain contracts
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from enum import Enum
|
||||
from typing import Any
|
||||
|
||||
from pydantic import BaseModel, TypeAdapter
|
||||
|
||||
from .enums import (
|
||||
AgentJobErrorCategory,
|
||||
AgentJobStatus,
|
||||
AgentJobType,
|
||||
ArticleWorkflowStatus,
|
||||
AssetStatus,
|
||||
AssetType,
|
||||
ClaimRiskLevel,
|
||||
ClaimSupportStatus,
|
||||
PlanReviewStatus,
|
||||
PublishingStatus,
|
||||
ReviewStatus,
|
||||
ReviewType,
|
||||
Role,
|
||||
ScriptConfigVersionStatus,
|
||||
)
|
||||
from .models import (
|
||||
AgentJobOutput,
|
||||
AgentJobSummary,
|
||||
ArticleCreateRequest,
|
||||
ArticleCreateResponse,
|
||||
ArticleDetailResponse,
|
||||
ArticleListResponse,
|
||||
ArticleSummary,
|
||||
AssetSummary,
|
||||
ClaimSummary,
|
||||
DraftSummary,
|
||||
EvidenceSummary,
|
||||
PlanSectionSummary,
|
||||
PlanSummary,
|
||||
PublishCommitSummary,
|
||||
PublishingRules,
|
||||
ResearchArtifactManifestSummary,
|
||||
ResearchArtifactSummary,
|
||||
ReviewSummary,
|
||||
RunnerFileRef,
|
||||
ScriptConfigVersionSummary,
|
||||
TargetSiteConfig,
|
||||
UserSummary,
|
||||
)
|
||||
|
||||
|
||||
CONTRACT_ENUMS: tuple[type[Enum], ...] = (
|
||||
Role,
|
||||
ArticleWorkflowStatus,
|
||||
AgentJobStatus,
|
||||
AgentJobType,
|
||||
AgentJobErrorCategory,
|
||||
ClaimSupportStatus,
|
||||
ClaimRiskLevel,
|
||||
PublishingStatus,
|
||||
AssetStatus,
|
||||
AssetType,
|
||||
PlanReviewStatus,
|
||||
ReviewStatus,
|
||||
ReviewType,
|
||||
ScriptConfigVersionStatus,
|
||||
)
|
||||
|
||||
CONTRACT_SCHEMA_MODELS: tuple[type[BaseModel], ...] = (
|
||||
UserSummary,
|
||||
PublishingRules,
|
||||
TargetSiteConfig,
|
||||
ScriptConfigVersionSummary,
|
||||
ArticleCreateRequest,
|
||||
ArticleSummary,
|
||||
ArticleCreateResponse,
|
||||
ArticleListResponse,
|
||||
PlanSectionSummary,
|
||||
PlanSummary,
|
||||
ResearchArtifactSummary,
|
||||
ResearchArtifactManifestSummary,
|
||||
EvidenceSummary,
|
||||
ClaimSummary,
|
||||
DraftSummary,
|
||||
AssetSummary,
|
||||
ReviewSummary,
|
||||
PublishCommitSummary,
|
||||
RunnerFileRef,
|
||||
AgentJobSummary,
|
||||
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
|
||||
Reference in New Issue
Block a user