Selectors and StringFormatting¶
Methods to reference or transform inputs
Overview¶
A janis.Selector is an abstract class that allows a workflow author to
reference or transform a value. There are 3 main forms of selectors:
janis.InputSelector- Used for selecting inputsjanis.WildcardSelector- Used for collecting outputsjanis.StringFormatter- Constructing or transforming strings
InputSelector¶
Declaration¶
Overview¶
An InputSelector is used to get the value of an input at runtime.
This has a number of use cases:
- Collecting outputs through the
glob=field. - Constructing a
janis.StringFormatterfrom existing inputs
These inputs are checked for validity at runtime. In CWL, defaults are propagated by definition in the language spec, in WDL this propagation is handled by janis.
Example¶
The following code will use the value of the outputFilename to find the corresponding
output to bamOutput. Additionally as the data_type BamBai has a secondary file,
in WDL janis will automatically construct a second output corresponding to the .bai
secondary (called bamOutput_bai and modify the contents of the InputSelector
to correctly glob this index file.
def outputs(self):
return [
ToolOutput("bamOutput", BamBai, glob=InputSelector("outputFilename"))
]
WildcardSelector¶
Overview¶
A wildcard selector is used to glob a collection of files for an output where
an InputSelector is not appropriate. Note that if an * (asterisk | star)
bind is used to collect files, the output type should be an array.
Example¶
The following example will demonstrate how to get all the
files ending on .csv within the execution directory.
def outputs(self):
return [
ToolOutput("metrics", Array(Csv), glob=WildcardSelector("*.csv"))
]
StringFormatting¶
Overview¶
A StringFormatter is used to allow inputs or other values to be inserted at runtime
into a string template. A StringFormatter can be concatenated with Python strings,
another StringFormatter or an InputSelector.
The string "{placeholdername}" can be used within a string format, where placeholdername
is a kwarg passed to the StringFormatter with the intended selector or value.
The placeholder names must be valid Python variable names (as they’re passed as kwargs). See the String formatter tests for more examples.
Example¶
Initialisation
StringFormatter("Hello, {name}", name=InputSelector("username"))Concatenation
"Hello, " + InputSelector("username")InputSelector("greeting") + StringFormatter(", {name}", name=InputSelector("username"))