@startuml !include plantuml_options.txt package galaxy.tool_util.parameters.state { class ToolState { state_representation: str input_state: Dict[str, Any] + validate(parameters: ToolParameterBundle) + {abstract} _to_base_model(parameters: ToolParameterBundle): Optional[Type[BaseModel]] } class RelaxedRequestToolState { state_representation = "request" + _to_base_model(parameters: ToolParameterBundle): Type[BaseModel] } note bottom: Object references of the form \n{src: "hda", id: }.\n Allow mapping/reduce constructs. Relaxed syntax to allow some of the odd\nstuff allowed in legacy tool input format. class RequestToolState { state_representation = "request" + _to_base_model(parameters: ToolParameterBundle): Type[BaseModel] } note bottom: Object references of the form \n{src: "hda", id: }.\n Allow mapping/reduce constructs. class RequestInternalToolState { state_representation = "request_internal" + _to_base_model(parameters: ToolParameterBundle): Type[BaseModel] } note bottom: Object references of the form \n{src: "hda", id: }.\n Allow mapping/reduce constructs. Allows URI src dicts. class RequestInternalDereferencedToolState { state_representation = "request_internal" + _to_base_model(parameters: ToolParameterBundle): Type[BaseModel] } note bottom: Object references of the form \n{src: "hda", id: }.\n Allow mapping/reduce constructs. No URI src dicts - all converted to HDAs. class JobInternalToolState { state_representation = "job_internal" + _to_base_model(parameters: ToolParameterBundle): Type[BaseModel] } note bottom: Object references of the form \n{src: "hda", id: }.\n Mapping constructs expanded out.\n (Defaults are inserted?) class TestCaseToolState { state_representation = "test_case" + _to_base_model(input_models: ToolParameterBundle): Type[BaseModel] } note bottom: Object references of the form file name and URIs.\n Mapping constructs not allowed.\n class WorkflowStepToolState { state_representation = "workflow_step" + _to_base_model(input_models: ToolParameterBundle): Type[BaseModel] } note bottom: Nearly everything optional except conditional discriminators.\n class WorkflowStepLinkedToolState { state_representation = "workflow_step_linked" + _to_base_model(input_models: ToolParameterBundle): Type[BaseModel] } note bottom: Expect pre-process ``in`` dictionaries and bring in representation\n of links and defaults and validate them in model.\n ToolState <|-- RelaxedRequestToolState ToolState <|-- RequestToolState ToolState <|-- RequestInternalToolState ToolState <|-- RequestInternalDereferencedToolState ToolState <|-- JobInternalToolState ToolState <|-- TestCaseToolState ToolState <|-- WorkflowStepToolState ToolState <|-- WorkflowStepLinkedToolState RelaxedRequestToolState - RequestToolState : strictify > RequestToolState - RequestInternalToolState : decode > RequestInternalToolState - RequestInternalDereferencedToolState : dereference > RequestInternalDereferencedToolState o-- JobInternalToolState : expand > WorkflowStepToolState o-- WorkflowStepLinkedToolState : preprocess_links_and_defaults > } @enduml