# 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'] ```