fix: align schedule policy transport types
This commit is contained in:
@@ -9065,6 +9065,10 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"schema": {
|
"schema": {
|
||||||
"default": "skip",
|
"default": "skip",
|
||||||
|
"enum": [
|
||||||
|
"skip",
|
||||||
|
"parallel"
|
||||||
|
],
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -9073,6 +9077,10 @@
|
|||||||
"required": false,
|
"required": false,
|
||||||
"schema": {
|
"schema": {
|
||||||
"default": "skip",
|
"default": "skip",
|
||||||
|
"enum": [
|
||||||
|
"skip",
|
||||||
|
"latest"
|
||||||
|
],
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -9404,6 +9412,10 @@
|
|||||||
"schema": {
|
"schema": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
|
"enum": [
|
||||||
|
"skip",
|
||||||
|
"parallel"
|
||||||
|
],
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -9419,6 +9431,10 @@
|
|||||||
"schema": {
|
"schema": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
|
"enum": [
|
||||||
|
"skip",
|
||||||
|
"latest"
|
||||||
|
],
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -9434,6 +9450,7 @@
|
|||||||
"schema": {
|
"schema": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
|
"minimum": 1,
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -9449,6 +9466,7 @@
|
|||||||
"schema": {
|
"schema": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
|
"minimum": 0,
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -9464,6 +9482,7 @@
|
|||||||
"schema": {
|
"schema": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
|
"minimum": 1,
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from typing import Any, Literal, Protocol, overload
|
|||||||
from wf_artifacts import ArtifactKind
|
from wf_artifacts import ArtifactKind
|
||||||
from wf_artifacts.drafts.models import DraftStep
|
from wf_artifacts.drafts.models import DraftStep
|
||||||
from wf_core.models.steps import InputBinding, OutputBinding, StepInputBinding
|
from wf_core.models.steps import InputBinding, OutputBinding, StepInputBinding
|
||||||
|
from wf_scheduling.models import MisfirePolicy, OverlapPolicy
|
||||||
|
|
||||||
from .draft_authoring import RouteSource
|
from .draft_authoring import RouteSource
|
||||||
from .draft_updates import CapabilityStepUpdate
|
from .draft_updates import CapabilityStepUpdate
|
||||||
@@ -561,8 +562,8 @@ class WorkflowScheduleSurface(Protocol):
|
|||||||
deployment_id: str,
|
deployment_id: str,
|
||||||
trigger: dict[str, Any],
|
trigger: dict[str, Any],
|
||||||
input_bindings: list[dict[str, Any]] | None = None,
|
input_bindings: list[dict[str, Any]] | None = None,
|
||||||
overlap: str = "skip",
|
overlap: OverlapPolicy = "skip",
|
||||||
misfire: str = "skip",
|
misfire: MisfirePolicy = "skip",
|
||||||
max_active_runs: int = 1,
|
max_active_runs: int = 1,
|
||||||
lateness_allowance_s: float = 60.0,
|
lateness_allowance_s: float = 60.0,
|
||||||
max_steps: int | None = None,
|
max_steps: int | None = None,
|
||||||
@@ -589,8 +590,8 @@ class WorkflowScheduleSurface(Protocol):
|
|||||||
deployment_id: str | None = None,
|
deployment_id: str | None = None,
|
||||||
trigger: dict[str, Any] | None = None,
|
trigger: dict[str, Any] | None = None,
|
||||||
input_bindings: list[dict[str, Any]] | None = None,
|
input_bindings: list[dict[str, Any]] | None = None,
|
||||||
overlap: str | None = None,
|
overlap: OverlapPolicy | None = None,
|
||||||
misfire: str | None = None,
|
misfire: MisfirePolicy | None = None,
|
||||||
max_active_runs: int | None = None,
|
max_active_runs: int | None = None,
|
||||||
lateness_allowance_s: float | None = None,
|
lateness_allowance_s: float | None = None,
|
||||||
max_steps: int | None = None,
|
max_steps: int | None = None,
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from wf_api import CapabilityStepUpdate
|
|||||||
from wf_api.models import TraceRange
|
from wf_api.models import TraceRange
|
||||||
from wf_artifacts.drafts.models import DraftStep
|
from wf_artifacts.drafts.models import DraftStep
|
||||||
from wf_core.models.steps import InputBinding, OutputBinding, StepInputBinding
|
from wf_core.models.steps import InputBinding, OutputBinding, StepInputBinding
|
||||||
|
from wf_scheduling.models import MisfirePolicy, OverlapPolicy
|
||||||
|
|
||||||
|
|
||||||
class RpcParamsModel(BaseModel):
|
class RpcParamsModel(BaseModel):
|
||||||
@@ -467,8 +468,8 @@ class CreateScheduleParams(RpcParamsModel):
|
|||||||
deployment_id: str = Field(min_length=1)
|
deployment_id: str = Field(min_length=1)
|
||||||
trigger: dict[str, Any]
|
trigger: dict[str, Any]
|
||||||
input_bindings: list[dict[str, Any]] = Field(default_factory=list)
|
input_bindings: list[dict[str, Any]] = Field(default_factory=list)
|
||||||
overlap: str = "skip"
|
overlap: OverlapPolicy = "skip"
|
||||||
misfire: str = "skip"
|
misfire: MisfirePolicy = "skip"
|
||||||
max_active_runs: int = Field(default=1, ge=1)
|
max_active_runs: int = Field(default=1, ge=1)
|
||||||
lateness_allowance_s: float = Field(default=60.0, ge=0)
|
lateness_allowance_s: float = Field(default=60.0, ge=0)
|
||||||
max_steps: int | None = Field(
|
max_steps: int | None = Field(
|
||||||
@@ -496,8 +497,8 @@ class UpdateScheduleParams(RpcParamsModel):
|
|||||||
deployment_id: str | None = None
|
deployment_id: str | None = None
|
||||||
trigger: dict[str, Any] | None = None
|
trigger: dict[str, Any] | None = None
|
||||||
input_bindings: list[dict[str, Any]] | None = None
|
input_bindings: list[dict[str, Any]] | None = None
|
||||||
overlap: str | None = None
|
overlap: OverlapPolicy | None = None
|
||||||
misfire: str | None = None
|
misfire: MisfirePolicy | None = None
|
||||||
max_active_runs: int | None = Field(default=None, ge=1)
|
max_active_runs: int | None = Field(default=None, ge=1)
|
||||||
lateness_allowance_s: float | None = Field(default=None, ge=0)
|
lateness_allowance_s: float | None = Field(default=None, ge=0)
|
||||||
max_steps: int | None = Field(default=None, ge=1, strict=True)
|
max_steps: int | None = Field(default=None, ge=1, strict=True)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from pydantic import ValidationError
|
|||||||
|
|
||||||
from wf_core.models.steps import InputExpressionBinding
|
from wf_core.models.steps import InputExpressionBinding
|
||||||
from wf_transport_rpc_http.models import (
|
from wf_transport_rpc_http.models import (
|
||||||
|
CreateScheduleParams,
|
||||||
InspectCapabilityParams,
|
InspectCapabilityParams,
|
||||||
ListCapabilitiesParams,
|
ListCapabilitiesParams,
|
||||||
ReadRunTraceParams,
|
ReadRunTraceParams,
|
||||||
@@ -94,6 +95,20 @@ def test_update_schedule_params_match_create_numeric_constraints() -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_schedule_policy_params_reject_unknown_values() -> None:
|
||||||
|
with pytest.raises(ValidationError):
|
||||||
|
CreateScheduleParams(
|
||||||
|
schedule_id="schedule",
|
||||||
|
deployment_id="deployment",
|
||||||
|
trigger={"kind": "oneshot", "at": "2026-09-08T12:00:00+00:00"},
|
||||||
|
overlap="queue",
|
||||||
|
)
|
||||||
|
with pytest.raises(ValidationError):
|
||||||
|
UpdateScheduleParams(
|
||||||
|
schedule_id="schedule", expected_revision=1, misfire="replay"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_step_input_params_accept_composite_bindings_but_workflow_output_does_not() -> (
|
def test_step_input_params_accept_composite_bindings_but_workflow_output_does_not() -> (
|
||||||
None
|
None
|
||||||
):
|
):
|
||||||
|
|||||||
Reference in New Issue
Block a user