# General
`capanno-utils` is a companion tool to manage metadata and workflow language files for bioinformatics tools in the [capanno](https://github.com/truwl/capanno) and similar repositories. Usage examples and additional documentation can be found in that repository. It is recommended to start with the [Getting Started](https://github.com/truwl/capanno/blob/master/docs/Getting_Started.md) documentation.
## Create the parser using the latest and greatest CWL and schema-salad versions
```
schema-salad-tool --codegen python https://github.com/common-workflow-language/common-workflow-language/raw/master/v1.0/CommonWorkflowLanguage.yml > capanno_utils/classes/cwl/common_workflow_language.py
```
or
```
curl https://raw.githubusercontent.com/common-workflow-language/cwl-utils/main/cwl_utils/parser/cwl_v1_2.py > capanno_utils/classes/cwl/common_workflow_language.py
```
## Add the 10 mixins by hand
```
perl -p -i -e 'print "from capanno_utils.classes.cwl.common_workflow_language_mixins import CommandLineToolMixin, \\
CommandInputParameterMixin, SchemaDefRequirementMixin, CommandLineBindingMixin, \\
CommandOutputParameterMixin, WorkflowMixin, InputParameterMixin, WorkflowOutputParameterMixin, \\
WorkflowStepMixin, WorkflowStepInputMixin\n" if $. == 1' capanno_utils/classes/cwl/common_workflow_language.py
perl -p -i -e 's/SchemaDefRequirement\(/SchemaDefRequirement(SchemaDefRequirementMixin,/; \
s/CommandLineBinding\(/CommandLineBinding(CommandLineBindingMixin,/; \
s/CommandInputParameter\(/CommandInputParameter(CommandInputParameterMixin,/; \
s/CommandOutputParameter\(/CommandOutputParameter(CommandOutputParameterMixin,/; \
s/CommandLineTool\(/CommandLineTool(CommandLineToolMixin,/; \
s/Workflow\(/Workflow(WorkflowMixin,/; \
s/class InputParameter\(/class InputParameter(InputParameterMixin,/; \
s/WorkflowOutputParameter\(/WorkflowOutputParameter(WorkflowOutputParameterMixin,/; \
s/class WorkflowStep\(/class WorkflowStep(WorkflowStepMixin,/; \
s/class WorkflowStepInput\(/class WorkflowStepInput(WorkflowStepInputMixin,/;' capanno_utils/classes/cwl/common_workflow_language.py
```
## Adding a tool
Usage:
```
capanno-add tool kallisto 0.45.x --biotoolsID kallisto #This will initialize a directory for kallisto
tools/
└── kallisto
└── 0.45.x
├── common
│ └── common-metadata.yaml
└── kallisto
├── instances
└── kallisto-metadata.yaml
```
If you don't provide a `biotoolsID`, capanno-utils will just make a blank template.
```
capanno-add tool kallisto 0.45.x
tools/
└── kallisto
└── 0.45.x
└── common
└── common-metadata.yaml
```
## Adding a subtool
```
#remote
capanno-add subtool kallisto 0.45.x index -u --init-cwl https://github.com/common-workflow-library/bio-cwl-tools/raw/release/Kallisto/Kallisto-Index.cwl
#local
capanno-add subtool kallisto 0.45.x index -u --init-cwl bio-cwl-tools-submodule/Kallisto/Kallisto-Index.cwl
tools/
└── kallisto
└── 0.45.x
├── common
│ └── common-metadata.yaml
├── kallisto
│ ├── instances
│ └── kallisto-metadata.yaml
└── kallisto_index
├── instances
├── kallisto-index-metadata.yaml
└── kallisto-index.cwl
```
If ``--init_cwl`` is not provided, no cwl file is initialized and capanno-utils will make a blank template.
Can also initialize all subtool directories when first initialize the tool directory but haven't made a way to specify cwl urls to initialize each one doing it that way yet.
```
capanno-add subtool kallisto 0.45.x index -u
cwl-tools/
└── kallisto
└── 0.45.x
├── common
│ └── common-metadata.yaml
└── kallisto_index
├── instances
└── kallisto-index-metadata.yaml
```