40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
"""Contracts for BR-61..65; no client supplied identity, domain or release state."""
|
|
from typing import Literal
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
class Input(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
class QueryInput(Input):
|
|
mode: Literal['filters', 'natural', 'sql'] = 'filters'
|
|
text: str = Field(default='', max_length=4000)
|
|
filters: dict = Field(default_factory=dict)
|
|
|
|
class SelectionInput(Input):
|
|
preview_id: str = Field(min_length=1, max_length=180)
|
|
selected_ids: list[str] | None = Field(default=None, max_length=240)
|
|
|
|
class ExtractionInput(Input):
|
|
project_id: str = Field(min_length=1, max_length=180)
|
|
selection_id: str = Field(min_length=1, max_length=180)
|
|
kind: Literal['skill', 'rule_set']
|
|
requirement: str = Field(default='', max_length=2000)
|
|
|
|
class PackageFile(Input):
|
|
path: str = Field(min_length=1, max_length=512)
|
|
content_base64: str = Field(max_length=2800000)
|
|
|
|
class PackageInput(Input):
|
|
project_id: str = Field(min_length=1, max_length=180)
|
|
required_field: str | None = Field(default=None, max_length=180)
|
|
files: list[PackageFile] = Field(min_length=1, max_length=100)
|
|
|
|
class Proposal(Input):
|
|
title: str = Field(min_length=1, max_length=200)
|
|
description: str = Field(min_length=1, max_length=2000)
|
|
action: str = Field(min_length=1, max_length=2000)
|
|
exceptions: str = Field(min_length=1, max_length=2000)
|
|
field: str = Field(min_length=1, max_length=180)
|
|
operator: Literal['lt', 'lte', 'gt', 'gte', 'eq'] = 'lt'
|
|
threshold: str | None = Field(default=None, max_length=40)
|