Repository: seqeralabs/seqera-kit (language: python)

Issue:
Release v0.1.0



Discussion / hints:

Fix patch:
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 5783248..bee758b 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -26,7 +26,7 @@ Install the dependencies locally before prior to development. You can use a virt
 
 ```console
 conda env create -f environment.yml
-conda activate tw-pywrap
+conda activate twkit
 ```
 
 You can then install the local repository for development using the `pip -e` command which will install it in place without copying it to your `PYTHONPATH`. Using `--no-deps` will ignore dependencies which have already been installed via Conda. This assumes the current working directory is a clone of this repository.
@@ -55,7 +55,7 @@ You can debug in VSCode for stepping through code and monitoring errors. To do s
       "name": "Python: Current File",
       "type": "python",
       "request": "launch",
-      "program": "${workspaceFolder}/tw-pywrap/cli.py",
+      "program": "${workspaceFolder}/twkit/cli.py",
       "args": ["-l", "debug", "example.yml"], // Change to your specific commands you wish to run
       "cwd": "${workspaceFolder}"
     }
@@ -73,7 +73,7 @@ You may need additional settings based on your set-up. A more complete example m
       "name": "Python: Current File",
       "type": "python",
       "request": "launch",
-      "program": "${workspaceFolder}/tw-pywrap/cli.py",
+      "program": "${workspaceFolder}/twkit/cli.py",
       "console": "integratedTerminal",
       "purpose": ["debugging"],
       "justMyCode": true,
diff --git a/.gitignore b/.gitignore
index 2f2cbd6..fda8553 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,5 +13,5 @@ build/lib/*
 node_modules/
 package-lock.json
 package.json
-tw-pywrap.egg-info/*
+twkit.egg-info/*
 build/*
diff --git a/README.md b/README.md
index efdad8c..39d2ec0 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-# ![tw-pywrap logo](assets/tw-py.svg) tw-pywrap
+# ![twkit logo](https://raw.githubusercontent.com/seqeralabs/twkit/rename_package/assets/twkit.svg)twkit
 
-`tw-pywrap` is a Python wrapper for the [Nextflow Tower CLI](https://github.com/seqeralabs/tower-cli). It can be leveraged to automate the creation of all of the entities in Nextflow Tower via a simple configuration file in YAML format.
+`twkit` is a Python wrapper for the [Nextflow Tower CLI](https://github.com/seqeralabs/tower-cli). It can be leveraged to automate the creation of all of the entities in Nextflow Tower via a simple configuration file in YAML format.
 
 The key features are:
 
@@ -14,7 +14,7 @@ You will need to have an account on Nextflow Tower (see [Plans and pricing](http
 
 ### 1. Dependencies
 
-`tw-pywrap` requires the following dependencies:
+`twkit` requires the following dependencies:
 
 1. [Nextflow Tower CLI](https://github.com/seqeralabs/tower-cli#1-installation)
 
@@ -22,32 +22,32 @@ You will need to have an account on Nextflow Tower (see [Plans and pricing](http
 
 3. [PyYAML](https://pypi.org/project/PyYAML/)
 
-Alternatively, you can install the dependencies via Conda by downloading and using the [Conda environment file](environment.yml) that has been supplied in this repository:
+Alternatively, you can install the dependencies via Conda by downloading and using the [Conda environment file](https://github.com/seqeralabs/twkit/blob/main/environment.yml) that has been supplied in this repository:
 
 ```console
 conda env create -f environment.yml
-conda activate tw-pywrap
+conda activate twkit
 ```
 
 ### 2. Installation
 
-The scripts in this repository are packaged and available on [PyPI](https://pypi.org/project/tw-pywrap/). They can be installed via `pip`:
+The scripts in this repository are packaged and available on [PyPI](https://pypi.org/project/twkit/). They can be installed via `pip`:
 
 ```
-pip install tw-pywrap
+pip install twkit
 ```
 
 You can force overwrite the installation to use the latest changes with the command below:
 
 ```
-pip install --upgrade --force-reinstall tw-pywrap
+pip install --upgrade --force-reinstall twkit
 ```
 
 ### 3. Configuration
 
 Create a Tower access token using the [Nextflow Tower](https://tower.nf/) web interface via the **Your Tokens** page in your profile.
 
-`tw-pywrap` reads this token from the environment variable `TOWER_ACCESS_TOKEN`. Please export it into your terminal as shown below:
+`twkit` reads this token from the environment variable `TOWER_ACCESS_TOKEN`. Please export it into your terminal as shown below:
 
 ```bash
 export TOWER_ACCESS_TOKEN=<your access token>
@@ -61,7 +61,7 @@ You will need to have an account on Nextflow Tower (see [Plans and pricing](http
 
 ### Launch via YAML
 
-1. Create a YAML file called `hello-world-config.yml` with the contents below, and customise the `<YOUR_WORKSPACE>` and `<YOUR_COMPUTE_ENVIRONMENT>'` entries as required:
+1. Create a YAML file called `hello-world-config.yml` with the contents below, and customise the `<YOUR_WORKSPACE>` and `<YOUR_COMPUTE_ENVIRONMENT>` entries as required:
 
    ```
    launch:
@@ -72,10 +72,10 @@ You will need to have an account on Nextflow Tower (see [Plans and pricing](http
        pipeline: 'https://github.com/nextflow-io/hello'  # Pipeline URL
    ```
 
-2. Launch the pipeline with `tw-pywrap`:
+2. Launch the pipeline with `twkit`:
 
    ```
-   tw-pywrap hello-world-config.yml
+   twkit hello-world-config.yml
    ```
 
 3. Login to your Tower instance and check the Runs page in the appropriate Workspace for the pipeline you just launched!
@@ -84,9 +84,9 @@ You will need to have an account on Nextflow Tower (see [Plans and pricing](http
 
 You can also launch the same pipeline via a Python script. This will essentially allow you to extend the functionality on offer within the Tower CLI by leveraging the flexibility and customisation options available in Python.
 
-1. Download the [`launch_hello_world.py`](examples/python/launch_hello_world.py) Python script and customise the `<YOUR_WORKSPACE>` and `<YOUR_COMPUTE_ENVIRONMENT>'` entries as required.
+1. Download the [`launch_hello_world.py`](https://github.com/seqeralabs/twkit/blob/main/examples/python/launch_hello_world.py) Python script and customise the `<YOUR_WORKSPACE>` and `<YOUR_COMPUTE_ENVIRONMENT>` entries as required.
 
-2. Launch the pipeline with `tw-pywrap`:
+2. Launch the pipeline with `twkit`:
 
    ```
    python launch_hello_world.py
@@ -96,30 +96,30 @@ You can also launch the same pipeline via a Python script. This will essentially
 
 ## Real world example
 
-Please see [`tw-pywrap-e2e.yml`](examples/yaml/tw-pywrap-e2e.yml) for an end-to-end example that highlights how you can use `tw-pywrap` to create everything sequentially in Nextflow Tower all the way from creating a new Organization to launching a pipeline.
+Please see [`twkit-e2e.yml`](https://github.com/seqeralabs/twkit/blob/main/examples/yaml/twkit-e2e.yml) for an end-to-end example that highlights how you can use `twkit` to create everything sequentially in Nextflow Tower all the way from creating a new Organization to launching a pipeline.
 
 ## Templates
 
-We have provided template YAML files for each of the entities that can be created on Tower. These can be found in the [`templates/`](templates) directory and should form a good starting point for you to add your own customization:
+We have provided template YAML files for each of the entities that can be created on Tower. These can be found in the [`templates/`](https://github.com/seqeralabs/blob/main/twkit/templates) directory and should form a good starting point for you to add your own customization:
 
-- [organizations.yml](templates/organizations.yml)
-- [teams.yml](templates/teams.yml)
-- [workspaces.yml](templates/workspaces.yml)
-- [participants.yml](templates/participants.yml)
-- [credentials.yml](templates/credentials.yml)
-- [secrets.yml](templates/secrets.yml)
-- [compute-envs.yml](templates/compute-envs.yml)
-- [actions.yml](templates/actions.yml)
-- [datasets.yml](templates/datasets.yml)
-- [pipelines.yml](templates/pipelines.yml)
-- [launch.yml](templates/launch.yml)
+- [organizations.yml](https://github.com/seqeralabs/twkit/blob/main/templates/organizations.yml)
+- [teams.yml](https://github.com/seqeralabs/twkit/blob/main/templates/teams.yml)
+- [workspaces.yml](https://github.com/seqeralabs/twkit/blob/main/templates/workspaces.yml)
+- [participants.yml](https://github.com/seqeralabs/twkit/blob/main/templates/participants.yml)
+- [credentials.yml](https://github.com/seqeralabs/twkit/blob/main/templates/credentials.yml)
+- [secrets.yml](https://github.com/seqeralabs/twkit/blob/main/templates/secrets.yml)
+- [compute-envs.yml](https://github.com/seqeralabs/twkit/blob/main/templates/compute-envs.yml)
+- [actions.yml](https://github.com/seqeralabs/twkit/blob/main/templates/actions.yml)
+- [datasets.yml](https://github.com/seqeralabs/twkit/blob/main/templates/datasets.yml)
+- [pipelines.yml](https://github.com/seqeralabs/twkit/blob/main/templates/pipelines.yml)
+- [launch.yml](https://github.com/seqeralabs/twkit/blob/main/templates/launch.yml)
 
 ## Contributions and Support
 
-If you would like to contribute to `tw-pywrap`, please see the [contributing guidelines](.github/CONTRIBUTING.md).
+If you would like to contribute to `twkit`, please see the [contributing guidelines](https://github.com/seqeralabs/twkit/blob/main/.github/CONTRIBUTING.md).
 
-For further information or help, please don't hesitate to create an [issue](https://github.com/seqeralabs/tw-pywrap/issues) in this repository.
+For further information or help, please don't hesitate to create an [issue](https://github.com/seqeralabs/twkit/issues) in this repository.
 
 ## Credits
 
-`tw-pywrap` was written by [Esha Joshi](https://github.com/ejseqera), [Adam Talbot](https://github.com/adamrtalbot) and [Harshil Patel](https://github.com/drpatelh) from the Scientific Development Team at [Seqera Labs](https://seqera.io/).
+`twkit` was written by [Esha Joshi](https://github.com/ejseqera), [Adam Talbot](https://github.com/adamrtalbot) and [Harshil Patel](https://github.com/drpatelh) from the Scientific Development Team at [Seqera Labs](https://seqera.io/).
diff --git a/assets/tw-py.svg b/assets/twkit.svg
similarity index 100%
rename from assets/tw-py.svg
rename to assets/twkit.svg
diff --git a/environment.yml b/environment.yml
index f927c18..a301094 100644
--- a/environment.yml
+++ b/environment.yml
@@ -1,4 +1,4 @@
-name: tw-pywrap
+name: twkit
 channels:
   - bioconda
   - conda-forge
diff --git a/examples/python/launch_hello_world.py b/examples/python/launch_hello_world.py
index 3f3ba42..d508c50 100755
--- a/examples/python/launch_hello_world.py
+++ b/examples/python/launch_hello_world.py
@@ -1,11 +1,11 @@
 import logging
 
-# Import the tw-pywrap package
-from tw_pywrap import tower
+# Import the twkit package
+from twkit import tower
 
 logging.basicConfig(level=logging.DEBUG)
 
-# Construct a new tw-pywrap Tower instance
+# Construct a new twkit Tower instance
 tw = tower.Tower()
 
 # Customise the entries below as required
@@ -13,7 +13,7 @@
 compute_env = "<YOUR_COMPUTE_ENVIRONMENT>"  # Name of your Compute Environment
 
 # Specify a human-readable run name
-run_name = "hello-world-tw-pywrap"
+run_name = "hello-world-twkit"
 
 # Launch the 'hello-world' pipeline using the 'launch' method
 pipeline_run = tw.launch(
diff --git a/setup.py b/setup.py
index eb7b690..fa97e4a 100644
--- a/setup.py
+++ b/setup.py
@@ -2,23 +2,23 @@
 
 from setuptools import find_packages, setup
 
-version = "0.1.0"
+VERSION = "0.2.0"
 
 with open("README.md") as f:
     readme = f.read()
 
 setup(
-    name="tw-pywrap",
-    version=version,
-    description="""Automate creation of Nextflow Tower resources""",
+    name="twkit",
+    version=VERSION,
+    description="Automate creation of Nextflow Tower resources",
     long_description=readme,
     long_description_content_type="text/markdown",
     keywords=["nextflow", "bioinformatics", "workflow", "pipeline", "nextflow-tower"],
     author="Esha Joshi, Adam Talbot, Harshil Patel",
     author_email="esha.joshi@seqera.io, adam.talbot@seqera.io, harshil.patel@seqera.io",
-    url="https://github.com/seqeralabs/tw-pywrap",
+    url="https://github.com/seqeralabs/twkit",
     license="MIT",
-    entry_points={"console_scripts": ["tw-pywrap=tw_pywrap.cli:main"]},
+    entry_points={"console_scripts": ["twkit=twkit.cli:main"]},
     python_requires=">=3.8, <4",  # untested
     install_requires=["pyyaml>=6.0.0"],
     packages=find_packages(exclude=("docs")),
diff --git a/tw_pywrap/__init__.py b/twkit/__init__.py
similarity index 100%
rename from tw_pywrap/__init__.py
rename to twkit/__init__.py
diff --git a/tw_pywrap/cli.py b/twkit/cli.py
similarity index 97%
rename from tw_pywrap/cli.py
rename to twkit/cli.py
index ec26ac1..76c85da 100644
--- a/tw_pywrap/cli.py
+++ b/twkit/cli.py
@@ -9,8 +9,8 @@
 import yaml
 
 from pathlib import Path
-from tw_pywrap import tower, helper, overwrite
-from tw_pywrap.tower import ResourceCreationError, ResourceExistsError
+from twkit import tower, helper, overwrite
+from twkit.tower import ResourceCreationError, ResourceExistsError
 
 
 logger = logging.getLogger(__name__)
diff --git a/tw_pywrap/computeenvs.py b/twkit/computeenvs.py
similarity index 97%
rename from tw_pywrap/computeenvs.py
rename to twkit/computeenvs.py
index 85d54fb..af29e59 100644
--- a/tw_pywrap/computeenvs.py
+++ b/twkit/computeenvs.py
@@ -2,7 +2,7 @@
 Subclass of Tower class for overriding compute environments subcommand methods.
 """
 from pathlib import Path
-from .tower import Tower
+from twkit.tower import Tower
 
 
 class ComputeEnvs(Tower):
diff --git a/tw_pywrap/helper.py b/twkit/helper.py
similarity index 99%
rename from tw_pywrap/helper.py
rename to twkit/helper.py
index 06869ab..908cdba 100644
--- a/tw_pywrap/helper.py
+++ b/twkit/helper.py
@@ -4,7 +4,7 @@
 methods for each block in the YAML file.
 """
 import yaml
-from tw_pywrap import utils
+from twkit import utils
 
 
 def parse_yaml_block(file_path, block_name):
diff --git a/tw_pywrap/overwrite.py b/twkit/overwrite.py
similarity index 99%
rename from tw_pywrap/overwrite.py
rename to twkit/overwrite.py
index 7d02ab0..c2cab78 100644
--- a/tw_pywrap/overwrite.py
+++ b/twkit/overwrite.py
@@ -1,6 +1,6 @@
 import json
-from tw_pywrap import utils
-from tw_pywrap.tower import ResourceExistsError
+from twkit import utils
+from twkit.tower import ResourceExistsError
 import logging
 
 
diff --git a/tw_pywrap/pipelines.py b/twkit/pipelines.py
similarity index 96%
rename from tw_pywrap/pipelines.py
rename to twkit/pipelines.py
index 501f594..26b8400 100644
--- a/tw_pywrap/pipelines.py
+++ b/twkit/pipelines.py
@@ -2,7 +2,7 @@
 Subclass of Tower class for overriding pipelines subcommand methods.
 """
 from pathlib import Path
-from tw_py.tower import Tower
+from twkit.tower import Tower
 
 
 class Pipelines(Tower):
diff --git a/tw_pywrap/tower.py b/twkit/tower.py
similarity index 100%
rename from tw_pywrap/tower.py
rename to twkit/tower.py
diff --git a/tw_pywrap/utils.py b/twkit/utils.py
similarity index 100%
rename from tw_pywrap/utils.py
rename to twkit/utils.py


Test patch:
diff --git a/.github/workflows/e2e-testing.yml b/.github/workflows/e2e-testing.yml
index a0d4c57..6b9ea33 100644
--- a/.github/workflows/e2e-testing.yml
+++ b/.github/workflows/e2e-testing.yml
@@ -1,5 +1,5 @@
 name: e2e-testing
-run-name: Create all entities in Tower from end-to-end with tw-pywrap
+run-name: Create all entities in Tower from end-to-end with twkit
 # This workflow can be triggered manually with GitHub actions workflow dispatch button.
 # It will automate the end-to-end creation all of the following entities in Nextflow Tower.
 
@@ -9,7 +9,7 @@ on:
 jobs:
   e2e-testing:
     name:
-    if: github.repository == 'seqeralabs/tw-pywrap'
+    if: github.repository == 'seqeralabs/twkit'
     runs-on: ubuntu-latest
     defaults:
       run:
@@ -36,11 +36,11 @@ jobs:
           environment-file: environment.yml
           miniforge-variant: Mambaforge
           miniforge-version: latest
-          python-version: "3.10"
-          activate-environment: tw-pywrap
+          python-version: '3.10'
+          activate-environment: twkit
           use-mamba: true
 
-      - name: Install pip & tw-pywrap
+      - name: Install pip & twkit
         run: |
           mamba install -y -c conda-forge pip
           pip install -e .
@@ -52,4 +52,4 @@ jobs:
           echo $GOOGLE_KEY | base64 -d > $temp_file
           export GOOGLE_KEY=$temp_file
 
-          tw-pywrap examples/yaml/tw-pywrap-e2e.yml
+          twkit examples/yaml/twkit-e2e.yml
diff --git a/examples/yaml/tw-pywrap-e2e.yml b/examples/yaml/twkit-e2e.yml
similarity index 83%
rename from examples/yaml/tw-pywrap-e2e.yml
rename to examples/yaml/twkit-e2e.yml
index 7e6434a..0b916c5 100644
--- a/examples/yaml/tw-pywrap-e2e.yml
+++ b/examples/yaml/twkit-e2e.yml
@@ -1,13 +1,13 @@
 organizations:
-  - name: 'tw-pywrap-e2e'
-    full-name: 'tw-pywrap-e2e'
+  - name: 'twkit-e2e'
+    full-name: 'twkit-e2e'
     description: 'Organization created E2E with tw CLI scripting'
     location: 'Global'
     website: 'https://seqera.io/'
     overwrite: True
 teams:
   - name: 'scidev_team'
-    organization: 'tw-pywrap-e2e'
+    organization: 'twkit-e2e'
     description: 'Scientific Development team @ Seqera Labs'
     members:
       - 'esha.joshi@seqera.io'
@@ -17,45 +17,45 @@ teams:
 workspaces:
   - name: 'showcase'
     full-name: 'showcase'
-    organization: 'tw-pywrap-e2e'
+    organization: 'twkit-e2e'
     description: 'Workspace created E2E with tw CLI scripting'
     visibility: 'PRIVATE'
     overwrite: True
 participants:
   - name: 'scidev_team'
     type: 'TEAM'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     role: 'ADMIN'
     overwrite: True
   - name: 'adam.talbot@seqera.io'
     type: 'MEMBER'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     role: 'LAUNCH'
     overwrite: True
 credentials:
   - type: 'github'
     name: 'github_credentials'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     username: 'ejseqera'
     password: '$TOWER_GITHUB_PASSWORD'
     overwrite: True
   - type: 'container-reg'
     name: 'dockerhub_credentials'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     username: 'eshajoshi'
     password: '$DOCKERHUB_PASSWORD'
     registry: 'docker.io'
     overwrite: True
   - type: 'aws'
     name: 'aws_credentials'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     access-key: '$AWS_ACCESS_KEY_ID'
     secret-key: '$AWS_SECRET_ACCESS_KEY'
     assume-role-arn: '$AWS_ASSUME_ROLE_ARN'
     overwrite: True
   - type: 'azure'
     name: 'azure_credentials'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     batch-key: '$AZURE_BATCH_KEY'
     batch-name: 'seqeralabs'
     storage-key: '$AZURE_STORAGE_KEY'
@@ -63,29 +63,29 @@ credentials:
     overwrite: True
   - type: 'google'
     name: 'google_credentials'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     key: '$GOOGLE_KEY'
     overwrite: True
 secrets:
   - name: 'SENTIEON_LICENSE_BASE64'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     value: '$SENTIEON_LICENSE_BASE64'
     overwrite: True
 compute-envs:
   - name: 'seqera_aws_ireland_fusionv2_nvme'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     credentials: 'aws_credentials'
     wait: 'AVAILABLE'
     file-path: './examples/yaml/compute-envs/seqera_aws_ireland_fusionv2_nvme.json'
     overwrite: True
   - name: 'seqera_azure_virginia'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     credentials: 'azure_credentials'
     wait: 'AVAILABLE'
     file-path: './examples/yaml/compute-envs/seqera_azure_virginia.json'
     overwrite: True
   - name: 'seqera_gcp_finland'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     credentials: 'google_credentials'
     wait: 'AVAILABLE'
     file-path: './examples/yaml/compute-envs/seqera_gcp_finland.json'
@@ -94,7 +94,7 @@ actions:
   - type: 'github'
     name: 'nf_core_rnaseq_launch_hook'
     pipeline: 'https://github.com/nf-core/rnaseq'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     compute-env: 'seqera_aws_ireland_fusionv2_nvme'
     work-dir: 's3://seqeralabs-showcase'
     profile: 'test'
@@ -105,7 +105,7 @@ actions:
   - type: 'tower'
     name: 'nf_core_rnaseq_web_hook'
     pipeline: 'https://github.com/nf-core/rnaseq'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     compute-env: 'seqera_aws_ireland_fusionv2_nvme'
     work-dir: 's3://seqeralabs-showcase'
     profile: 'test'
@@ -117,37 +117,37 @@ datasets:
   - name: 'rnaseq_samples'
     description: 'Samplesheet to run the nf-core/rnaseq pipeline from end-to-end'
     header: true
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     file-path: './examples/yaml/datasets/rnaseq_samples.csv'
     overwrite: True
   - name: 'sarek_samples'
     description: 'Samplesheet to run the nf-core/sarek pipeline from end-to-end'
     header: true
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     file-path: './examples/yaml/datasets/sarek_samples.csv'
     overwrite: True
   - name: 'viralrecon_illumina_samples'
     description: 'Samplesheet to run the nf-core/viralrecon pipeline from end-to-end with Illumina data'
     header: true
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     file-path: './examples/yaml/datasets/viralrecon_illumina_samples.csv'
     overwrite: True
   - name: 'viralrecon_nanopore_samples'
     description: 'Samplesheet to run the nf-core/viralrecon pipeline from end-to-end with Nanopore data'
     header: true
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     file-path: './examples/yaml/datasets/viralrecon_nanopore_samples.csv'
     overwrite: True
   - name: 'sentieon_samples'
     description: 'Samplesheet to run the seqeralabs/nf-sentieon pipeline from end-to-end'
     header: true
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     file-path: './examples/yaml/datasets/sentieon_samples.csv'
     overwrite: True
 pipelines:
   - name: 'nf-core-rnaseq'
     url: 'https://github.com/nf-core/rnaseq'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     description: 'RNA sequencing analysis pipeline using STAR, RSEM, HISAT2 or Salmon with gene/isoform counts and extensive quality control.'
     compute-env: 'seqera_aws_ireland_fusionv2_nvme'
     work-dir: 's3://seqeralabs-showcase'
@@ -159,18 +159,18 @@ pipelines:
     pre-run: './examples/yaml/pipelines/pre_run.txt'
     overwrite: True
   - name: 'nf-core-sarek'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     compute-env: 'seqera_azure_virginia'
     file-path: './examples/yaml/pipelines/nf-core-sarek_pipeline.json'
     overwrite: True
   - name: 'nf-core-viralrecon-nanopore'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     compute-env: 'seqera_aws_ireland_fusionv2_nvme'
     file-path: './examples/yaml/pipelines/nf_core_viralrecon_nanopore_pipeline.json'
     overwrite: True
   - name: 'nf-core-viralrecon-illumina'
     url: 'https://github.com/nf-core/viralrecon'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     description: 'Pipeline for assembly and intrahost/low-frequency variant calling for viral samples.'
     compute-env: 'seqera_gcp_finland'
     work-dir: 'gs://seqeralabs-showcase-eu-north-1'
@@ -181,16 +181,16 @@ pipelines:
     pre-run: './examples/yaml/pipelines/pre_run.txt'
     overwrite: True
   - name: 'nf-sentieon'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     compute-env: 'seqera_aws_ireland_fusionv2_nvme'
     file-path: './examples/yaml/pipelines/nf_sentieon_pipeline.json'
     overwrite: True
 launch:
   - name: 'nf-core-rnaseq-launchpad'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     pipeline: 'nf-core-rnaseq'
   - name: 'nf-core-rnaseq-remote'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     pipeline: 'https://github.com/nf-core/rnaseq'
     compute-env: 'seqera_azure_virginia'
     work-dir: 'az://seqeralabs-showcase'
@@ -200,16 +200,16 @@ launch:
     config: './examples/yaml/pipelines/nextflow.config'
     pre-run: './examples/yamlpipelines/pre_run.txt'
   - name: 'nf-core-sarek'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     pipeline: 'nf-core-sarek'
     config: './examples/yaml/pipelines/nextflow.config'
     pre-run: './examples/yaml/pipelines/pre_run.txt'
   - name: 'nf-core-viralrecon-nanopore'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     pipeline: 'nf-core-viralrecon-nanopore'
   - name: 'nf-core-viralrecon-illumina'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     pipeline: 'nf-core-viralrecon-illumina'
   - name: 'nf-sentieon'
-    workspace: 'tw-pywrap-e2e/showcase'
+    workspace: 'twkit-e2e/showcase'
     pipeline: 'nf-sentieon'
diff --git a/tests/unit/test_subcommands.py b/tests/unit/test_subcommands.py
index 69b264a..c5c0910 100644
--- a/tests/unit/test_subcommands.py
+++ b/tests/unit/test_subcommands.py
@@ -1,6 +1,6 @@
 import unittest
 from unittest.mock import patch
-from tw_pywrap import tower
+from twkit import tower
 
 
 class TestTowerSubcommands(unittest.TestCase):
diff --git a/tests/unit/test_tower.py b/tests/unit/test_tower.py
index 0b6d7b4..c26eb0b 100644
--- a/tests/unit/test_tower.py
+++ b/tests/unit/test_tower.py
@@ -1,6 +1,6 @@
 import unittest
 from unittest.mock import patch
-from tw_pywrap import tower
+from twkit import tower
 import json
 import subprocess