diff --git a/lib/galaxy/tool_util/parser/interface.py b/lib/galaxy/tool_util/parser/interface.py index fec1219fab1..4ddc4158f52 100644 --- a/lib/galaxy/tool_util/parser/interface.py +++ b/lib/galaxy/tool_util/parser/interface.py @@ -19,7 +19,6 @@ from typing import ( import packaging.version from typing_extensions import ( - Literal, NotRequired, TypedDict, ) diff --git a/lib/galaxy/tool_util_models/__init__.py b/lib/galaxy/tool_util_models/__init__.py index 1e854e364b4..64f6e378a72 100644 --- a/lib/galaxy/tool_util_models/__init__.py +++ b/lib/galaxy/tool_util_models/__init__.py @@ -92,7 +92,14 @@ class UserToolSource(BaseModel): description: Optional[str] = None container: str requirements: Optional[List[Union[JavascriptRequirement, ResourceRequirement, ContainerRequirement]]] = [] - shell_command: str + shell_command: Annotated[ + str, + Field( + title="shell_command", + description="A string that contains the command to be executed. Parameters can be referenced inside $().", + examples=["head -n '$(inputs.n_lines)' '$(inputs.data_input.path)'"], + ), + ] inputs: List[GalaxyToolParameterModel] = [] outputs: List[IncomingToolOutput] = [] citations: Optional[List[Citation]] = None diff --git a/lib/galaxy/tool_util_models/tool_outputs.py b/lib/galaxy/tool_util_models/tool_outputs.py index 21789925d58..86af4fb9bb0 100644 --- a/lib/galaxy/tool_util_models/tool_outputs.py +++ b/lib/galaxy/tool_util_models/tool_outputs.py @@ -33,8 +33,10 @@ IncomingNotRequiredDatasetCollectionDescription = NotRequired[List["DatasetColle class ToolOutputBaseModelG(BaseModel, Generic[IncomingNotRequiredBoolT, IncomingNotRequiredStringT]): - name: IncomingNotRequiredStringT - label: Optional[str] = None + name: Annotated[ + IncomingNotRequiredStringT, Field(description="Parameter name. Used when referencing parameter in workflows.") + ] + label: Optional[Annotated[str, Field(description="Output label. Will be used as dataset name in history.")]] = None hidden: IncomingNotRequiredBoolT @@ -46,11 +48,19 @@ class ToolOutputDatasetG( Generic[IncomingNotRequiredBoolT, IncomingNotRequiredStringT], ): type: Literal["data"] - format: IncomingNotRequiredStringT + format: Annotated[IncomingNotRequiredStringT, Field(description="The short name for the output datatype.")] format_source: Optional[str] = None metadata_source: Optional[str] = None discover_datasets: Optional[List["DatasetCollectionDescriptionT"]] = None - from_work_dir: Optional[str] = None + from_work_dir: Optional[ + Annotated[ + str, + Field( + title="from_work_dir", + description="Relative path to a file produced by the tool in its working directory. Output’s contents are set to this file’s contents.", + ), + ] + ] = None ToolOutputDataset = ToolOutputDatasetG[bool, str] diff --git a/lib/galaxy/tool_util_models/tool_source.py b/lib/galaxy/tool_util_models/tool_source.py index 81f4dd1a983..9c73e9f4886 100644 --- a/lib/galaxy/tool_util_models/tool_source.py +++ b/lib/galaxy/tool_util_models/tool_source.py @@ -5,8 +5,12 @@ from typing import ( Union, ) -from pydantic import BaseModel +from pydantic import ( + BaseModel, + Field, +) from typing_extensions import ( + Annotated, Literal, NotRequired, TypedDict, @@ -56,7 +60,26 @@ class ResourceRequirement(BaseModel): class JavascriptRequirement(BaseModel): type: Literal["javascript"] - expression_lib: Optional[List[str]] + expression_lib: Optional[ + List[ + Annotated[ + str, + Field( + title="expression_lib", + description="Provide Javascript/ECMAScript 5.1 code here that will be available for expressions inside the `shell_command` field.", + examples=[ + r"""function pickValue() { + if (inputs.conditional_parameter.test_parameter == "a") { + return inputs.conditional_parameter.integer_parameter + } else { + return inputs.conditional_parameter.boolean_parameter + } +}""" + ], + ), + ] + ] + ] class XrefDict(TypedDict):