app.schemas.approval

Request/response models for decisions and CI candidate intake.

The candidate request body itself is app.services.intake.CandidateSubmission (the intake service validates it after authenticating the push token); only its response lives here.

app.schemas.approval.MAX_COMMENT_LENGTH = 2000

Longest accepted reviewer comment.

class app.schemas.approval.DecisionIn(*, action, comment=None, expected_digest=None)

Bases: BaseModel

Body of POST /api/v1/records/{id}/decisions.

model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

action: DecisionAction
comment: str | None
expected_digest: str | None
class app.schemas.approval.CandidateResultOut(*, record_id, digest, created, updated, deduplicated, issues, catalog_path)

Bases: BaseModel

Outcome of PUT/POST /api/v1/candidates.

model_config: ClassVar[ConfigDict] = {'from_attributes': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

record_id: UUID
digest: str
created: bool
updated: bool
deduplicated: bool
issues: list[IssueOut]
catalog_path: str