Source code for ewokscore.graph.schema.parameter_schema
import sys
from typing import Dict
from typing import List
from typing import Literal
from typing import Optional
from typing import Union
from jsonschema import Draft202012Validator
from pydantic import BaseModel
from pydantic import Field
from pydantic import model_validator
if sys.version_info < (3, 11):
from typing_extensions import Self
else:
from typing import Self
class _Target(BaseModel):
name: str
id: Union[str, int, None] = None
label: Optional[str] = None
task_identifier: Optional[str] = None
all: bool = False
class _Property(BaseModel, extra="allow"):
x_ewoks_targets: List[_Target] = Field(default_factory=list)
[docs]
class EwoksParameterSchema(BaseModel, extra="forbid"):
schema_url: Literal["https://json-schema.org/draft/2020-12/schema"] = Field(
default="https://json-schema.org/draft/2020-12/schema",
alias="$schema",
)
type: Literal["object"] = "object"
properties: Dict[str, _Property]
required: List[str] = Field(default_factory=list)
additionalProperties: Literal[False] = False
[docs]
@model_validator(mode="after")
def validate_json_schema(self) -> Self:
schema_dict = self.model_dump(by_alias=True)
# validates that the structure is a valid JSON Schema
Draft202012Validator.check_schema(schema_dict)
return self
[docs]
@model_validator(mode="after")
def validate_required(self) -> Self:
missing = set(self.required) - self.properties.keys()
if missing:
raise ValueError(
f"'required' contains unknown properties: {sorted(missing)}"
)
return self