# Workbench CLI testing
## Test 1:
1. Create conda environment with Python 3.10
2. pip install workbench-cli in this environment
```bash=
$ pip install workbench-cli
Collecting workbench-cli
Downloading workbench_cli-0.3.3-py2.py3-none-any.whl (18 kB)
Collecting funcsigs
Using cached funcsigs-1.0.2-py2.py3-none-any.whl (17 kB)
Collecting ipython
Downloading ipython-8.7.0-py3-none-any.whl (761 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 761.7/761.7 kB 5.3 MB/s eta 0:00:00
Collecting lz4
Downloading lz4-4.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 6.4 MB/s eta 0:00:00
Collecting zerorpc
Downloading zerorpc-0.6.3-py3-none-any.whl (37 kB)
Collecting pytest
Using cached pytest-7.2.0-py3-none-any.whl (316 kB)
Collecting pandas
Downloading pandas-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1/12.1 MB 5.9 MB/s eta 0:00:00
Collecting matplotlib-inline
Downloading matplotlib_inline-0.1.6-py3-none-any.whl (9.4 kB)
Collecting prompt-toolkit<3.1.0,>=3.0.11
Downloading prompt_toolkit-3.0.36-py3-none-any.whl (386 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 386.4/386.4 kB 8.3 MB/s eta 0:00:00
Collecting decorator
Using cached decorator-5.1.1-py3-none-any.whl (9.1 kB)
Collecting pexpect>4.3
Downloading pexpect-4.8.0-py2.py3-none-any.whl (59 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 59.0/59.0 kB 6.7 MB/s eta 0:00:00
Collecting backcall
Using cached backcall-0.2.0-py2.py3-none-any.whl (11 kB)
Collecting stack-data
Downloading stack_data-0.6.2-py3-none-any.whl (24 kB)
Collecting jedi>=0.16
Downloading jedi-0.18.2-py2.py3-none-any.whl (1.6 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 6.3 MB/s eta 0:00:00
Collecting traitlets>=5
Downloading traitlets-5.6.0-py3-none-any.whl (107 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 107.5/107.5 kB 5.6 MB/s eta 0:00:00
Collecting pygments>=2.4.0
Using cached Pygments-2.13.0-py3-none-any.whl (1.1 MB)
Collecting pickleshare
Using cached pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)
Collecting pytz>=2020.1
Using cached pytz-2022.6-py2.py3-none-any.whl (498 kB)
Collecting python-dateutil>=2.8.1
Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Collecting numpy>=1.21.0
Using cached numpy-1.23.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.1 MB)
Collecting attrs>=19.2.0
Using cached attrs-22.1.0-py2.py3-none-any.whl (58 kB)
Collecting tomli>=1.0.0
Using cached tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting exceptiongroup>=1.0.0rc8
Using cached exceptiongroup-1.0.4-py3-none-any.whl (14 kB)
Collecting pluggy<2.0,>=0.12
Using cached pluggy-1.0.0-py2.py3-none-any.whl (13 kB)
Collecting iniconfig
Using cached iniconfig-1.1.1-py2.py3-none-any.whl (5.0 kB)
Collecting packaging
Using cached packaging-21.3-py3-none-any.whl (40 kB)
Collecting pyzmq>=13.1.0
Using cached pyzmq-24.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)
Collecting future
Using cached future-0.18.2-py3-none-any.whl
Collecting gevent>=1.1
Downloading gevent-22.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4/6.4 MB 6.2 MB/s eta 0:00:00
Collecting msgpack>=0.5.2
Using cached msgpack-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (316 kB)
Collecting greenlet>=2.0.0
Downloading greenlet-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (539 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 539.9/539.9 kB 9.0 MB/s eta 0:00:00
Collecting zope.interface
Downloading zope.interface-5.5.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (258 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 258.9/258.9 kB 8.3 MB/s eta 0:00:00
Collecting zope.event
Downloading zope.event-4.5.0-py2.py3-none-any.whl (6.8 kB)
Requirement already satisfied: setuptools in /home/pvh/miniconda3/envs/workbench-cli/lib/python3.10/site-packages (from gevent>=1.1->zerorpc->workbench-cli) (65.5.0)
Collecting parso<0.9.0,>=0.8.0
Using cached parso-0.8.3-py2.py3-none-any.whl (100 kB)
Collecting ptyprocess>=0.5
Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)
Collecting wcwidth
Using cached wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)
Collecting six>=1.5
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting pyparsing!=3.0.5,>=2.0.2
Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)
Collecting pure-eval
Using cached pure_eval-0.2.2-py3-none-any.whl (11 kB)
Collecting asttokens>=2.1.0
Downloading asttokens-2.2.1-py2.py3-none-any.whl (26 kB)
Collecting executing>=1.2.0
Downloading executing-1.2.0-py2.py3-none-any.whl (24 kB)
Installing collected packages: wcwidth, pytz, pure-eval, ptyprocess, pickleshare, msgpack, iniconfig, funcsigs, executing, backcall, zope.interface, zope.event, traitlets, tomli, six, pyzmq, pyparsing, pygments, prompt-toolkit, pluggy, pexpect, parso, numpy, lz4, greenlet, future, exceptiongroup, decorator, attrs, python-dateutil, packaging, matplotlib-inline, jedi, gevent, asttokens, zerorpc, stack-data, pytest, pandas, ipython, workbench-cli
Successfully installed asttokens-2.2.1 attrs-22.1.0 backcall-0.2.0 decorator-5.1.1 exceptiongroup-1.0.4 executing-1.2.0 funcsigs-1.0.2 future-0.18.2 gevent-22.10.2 greenlet-2.0.1 iniconfig-1.1.1 ipython-8.7.0 jedi-0.18.2 lz4-4.0.2 matplotlib-inline-0.1.6 msgpack-1.0.4 numpy-1.23.5 packaging-21.3 pandas-1.5.2 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pluggy-1.0.0 prompt-toolkit-3.0.36 ptyprocess-0.7.0 pure-eval-0.2.2 pygments-2.13.0 pyparsing-3.0.9 pytest-7.2.0 python-dateutil-2.8.2 pytz-2022.6 pyzmq-24.0.1 six-1.16.0 stack-data-0.6.2 tomli-2.0.1 traitlets-5.6.0 wcwidth-0.2.5 workbench-cli-0.3.3 zerorpc-0.6.3 zope.event-4.5.0 zope.interface-5.5.2
```
3. Deleted existing workbench on composer3.sanbi.ac.za
4. Create `workbench.yml`:
```yaml
auth:
basic_auth: True
workbench:
description: composer3
fqdn: composer3.sanbi.ac.za
user: ubuntu
# password: "passw0rd"
ssh_key: ~/.ssh/id_rsa
root_path: /home/user/workbench/compose
irida_api_client_id: "my_client_id"
irida_api_client_secret: "LKAJHSKJAKJKHAKJSH"
galaxy_user: "admin@galaxy.org"
galaxy_api_key: "fakekey"
```
5. On composer3: `git clone https://github.com/combat-sars-cov-2/workbench.git`
6. `workbench start`
```bash=
$ workbench start
Traceback (most recent call last):
File "/home/pvh/miniconda3/envs/workbench-cli/bin/workbench", line 6, in <module>
from workbench_cli import workbench_shell
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.10/site-packages/workbench_cli/workbench_shell.py", line 18
print '\n%sNotice: pandas not found...' % color.Yellow
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
```
## Test 2 - 13/12/2022 16:40
1. Create a new environment with just python=3.10 `mamba create -n workbench-cli -y python=3.10`
2. Git clone `https://github.com/combat-sars-cov-2/workbench-cli.git`
3. `cd workbench-cli` and `pip install -e .`
```python=
$ pip install -e .
Obtaining file:///home/pvh/Documents/code/SANBI/pvh-forks/workbench-cli
Installing build dependencies ... done
Checking if build backend supports build_editable ... done
Getting requirements to build editable ... done
Installing backend dependencies ... done
Preparing editable metadata (pyproject.toml) ... done
Building wheels for collected packages: workbench-cli
Building editable for workbench-cli (pyproject.toml) ... done
Created wheel for workbench-cli: filename=workbench_cli-0.0.1-0.editable-py3-none-any.whl size=15003 sha256=3d85f9277df1b0b6cf73cd87586e859d39c57090b07debe02b6606c580a03ec2
Stored in directory: /tmp/pip-ephem-wheel-cache-m05kascq/wheels/f2/87/1f/1387040dd074cf07aff5f0370648b5bc18ffe4163eaa0bc8f3
Successfully built workbench-cli
Installing collected packages: workbench-cli
Successfully installed workbench-cli-0.0.1
```
4. Using the workbench.yml listed above, `workbench -c workbench.yml start`:
```python=
$ workbench -c workbench.yml start
Traceback (most recent call last):
File "/home/pvh/miniconda3/envs/workbench-cli/bin/workbench", line 5, in <module>
from workbench.src.cli import main
File "/home/pvh/Documents/code/SANBI/pvh-forks/workbench-cli/workbench/src/cli.py", line 1, in <module>
import click
ModuleNotFoundError: No module named 'click'
```
## Test 3 - 15/12/2022 10:40
1. Updated with `git pull` and installed in new conda environment. Install log [here](https://gist.github.com/pvanheus/1b23ed2d47114e3ab7494469d9b9dc6c)
2. Tried `workbench start` with `workbench.yml` listed above but got error:
```python=
$ workbench start
Traceback (most recent call last):
File "/home/pvh/miniconda3/envs/workbench-cli/bin/workbench", line 5, in <module>
from workbench.src.cli import main
File "/home/pvh/Documents/code/SANBI/pvh-forks/workbench-cli/workbench/src/cli.py", line 5, in <module>
from workbench.src.lib.build import commands as builders
File "/home/pvh/Documents/code/SANBI/pvh-forks/workbench-cli/workbench/src/lib/build/commands.py", line 11, in <module>
from galaxy.tool_util.deps.mulled.mulled_build import target_str_to_targets
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.10/site-packages/galaxy/tool_util/deps/__init__.py", line 15, in <module>
from galaxy.util.oset import OrderedSet
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.10/site-packages/galaxy/util/oset.py", line 7, in <module>
class OrderedSet(collections.MutableSet):
AttributeError: module 'collections' has no attribute 'MutableSet'
```
3. Since the above error is related to Python 3.10 (see [this similar error](https://bobbyhadz.com/blog/python-attributeerror-module-collections-has-no-attribute-mutablesequence)). Created a Python 3.9 env and installed. Install log [here](https://gist.github.com/pvanheus/06112f0c04a33f6d142f79e4906f767e).
4. Tried `workbench start -c workbench.yml`, got this error:
```bash=
$ workbench start -c workbench.yml
Traceback (most recent call last):
File "/home/pvh/miniconda3/envs/workbench-cli/bin/workbench", line 8, in <module>
sys.exit(main())
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
return self.main(*args, **kwargs)
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/click/core.py", line 1055, in main
rv = self.invoke(ctx)
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
File "/home/pvh/Documents/code/SANBI/pvh-forks/workbench-cli/workbench/src/lib/manage/commands.py", line 52, in start
config, ssh_session = ssh.get_ssh_session()
File "/home/pvh/Documents/code/SANBI/pvh-forks/workbench-cli/workbench/src/lib/utils/helpers/ssh.py", line 130, in get_ssh_session
ssh_session = SshBasic(cfg["workbench"]) if cfg["auth"]["basic_auth"] else SshKeyBase(cfg["workbench"])
File "/home/pvh/Documents/code/SANBI/pvh-forks/workbench-cli/workbench/src/lib/utils/helpers/ssh.py", line 76, in __init__
self.password = config["password"]
KeyError: 'password'
```
5. The error suggests that a password key is needed even if using ssh key based auth. Edited `workbench.yml` to uncomment password.
6. Tried again, error now:
```bash=
$ workbench start -c workbench.yml
Traceback (most recent call last):
File "/home/pvh/miniconda3/envs/workbench-cli/bin/workbench", line 8, in <module>
sys.exit(main())
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
return self.main(*args, **kwargs)
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/click/core.py", line 1055, in main
rv = self.invoke(ctx)
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
File "/home/pvh/Documents/code/SANBI/pvh-forks/workbench-cli/workbench/src/lib/manage/commands.py", line 52, in start
config, ssh_session = ssh.get_ssh_session()
File "/home/pvh/Documents/code/SANBI/pvh-forks/workbench-cli/workbench/src/lib/utils/helpers/ssh.py", line 131, in get_ssh_session
ssh_session.connect()
File "/home/pvh/Documents/code/SANBI/pvh-forks/workbench-cli/workbench/src/lib/utils/helpers/ssh.py", line 81, in connect
self.client.connect(
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/paramiko/client.py", line 435, in connect
self._auth(
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/paramiko/client.py", line 766, in _auth
raise saved_exception
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/paramiko/client.py", line 753, in _auth
self._transport.auth_password(username, password)
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/paramiko/transport.py", line 1564, in auth_password
return self.auth_handler.wait_for_response(my_event)
File "/home/pvh/miniconda3/envs/workbench-cli/lib/python3.9/site-packages/paramiko/auth_handler.py", line 259, in wait_for_response
raise e
paramiko.ssh_exception.BadAuthenticationType: Bad authentication type; allowed types: ['publickey']
```