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

Issue:
Rename to twkit
After some internal discussions, we've decided a rename for the repo and package is needed to something simplified and without dashes/underscores. The final name will be `twkit`.
Minor fix to logo in README



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 f7161d8..5163ea6 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,125 @@
-# tw-pywrap is now twkit
+# ![twkit logo](https://raw.githubusercontent.com/seqeralabs/twkit/main/assets/twkit.svg)twkit
 
-This package has been renamed. Use `pip install twkit` instead.
+`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.
 
-New package: https://pypi.org/project/twkit/
+The key features are:
+
+- **Simple configuration**: All of the command-line options available when using the Nextflow Tower CLI can be defined in simple YAML format.
+- **Infrastructure as Code**: Enable users to manage and provision their infrastructure specifications.
+- **Automation**: End-to-end creation of entities within Nextflow Tower, all the way from adding an Organization to launching pipeline(s) within that Organization.
+
+## Prerequisites
+
+You will need to have an account on Nextflow Tower (see [Plans and pricing](https://cloud.tower.nf/pricing/)).
+
+### 1. Dependencies
+
+`twkit` requires the following dependencies:
+
+1. [Nextflow Tower CLI](https://github.com/seqeralabs/tower-cli#1-installation)
+
+2. [Python (`>=3.8`)](https://www.python.org/downloads/)
+
+3. [PyYAML](https://pypi.org/project/PyYAML/)
+
+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 twkit
+```
+
+### 2. Installation
+
+The scripts in this repository are packaged and available on [PyPI](https://pypi.org/project/twkit/). They can be installed via `pip`:
+
+```
+pip install twkit
+```
+
+You can force overwrite the installation to use the latest changes with the command below:
+
+```
+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.
+
+`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>
+```
+
+## Quick start
+
+You must provide a YAML file that defines the options for each of the entities you would like to create in Nextflow Tower.
+
+You will need to have an account on Nextflow Tower (see [Plans and pricing](https://cloud.tower.nf/pricing/)). You will also need access to a Workspace and a pre-defined Compute Environment where you can launch a pipeline.
+
+### 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:
+
+   ```
+   launch:
+     - name: 'hello-world'                               # Workflow name
+       workspace: '<YOUR_WORKSPACE>'                     # Workspace name
+       compute-env: '<YOUR_COMPUTE_ENVIRONMENT>'         # Compute environment
+       revision: 'master'                                # Pipeline revision
+       pipeline: 'https://github.com/nextflow-io/hello'  # Pipeline URL
+   ```
+
+2. Launch the pipeline with `twkit`:
+
+   ```
+   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!
+
+### Launch via a Python script
+
+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`](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 `twkit`:
+
+   ```
+   python launch_hello_world.py
+   ```
+
+3. Login to your Tower instance and check the Runs page in the appropriate Workspace for the pipeline you just launched!
+
+## Real world example
+
+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/`](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](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 `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/twkit/issues) in this repository.
+
+## Credits
+
+`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 05c6987..fa97e4a 100644
--- a/setup.py
+++ b/setup.py
@@ -2,17 +2,15 @@
 
 from setuptools import find_packages, setup
 
-VERSION = "0.1.1"
-
+VERSION = "0.2.0"
 
 with open("README.md") as f:
     readme = f.read()
 
-
 setup(
-    name="tw-pywrap",
+    name="twkit",
     version=VERSION,
-    description="tw-pywrap is now twkit",
+    description="Automate creation of Nextflow Tower resources",
     long_description=readme,
     long_description_content_type="text/markdown",
     keywords=["nextflow", "bioinformatics", "workflow", "pipeline", "nextflow-tower"],
@@ -20,7 +18,10 @@
     author_email="esha.joshi@seqera.io, adam.talbot@seqera.io, harshil.patel@seqera.io",
     url="https://github.com/seqeralabs/twkit",
     license="MIT",
-    install_requires=["twkit"],
+    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")),
-    classifiers=["Development Status :: 7 - Inactive"],
+    include_package_data=True,
+    zip_safe=False,
 )
diff --git a/tw_pywrap/__init__.py b/tw_pywrap/__init__.py
deleted file mode 100644
index ef3dbdf..0000000
--- a/tw_pywrap/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from warnings import warn
-
-warn(
-    "This package has been renamed to twkit. Please install twkit for future updates.",
-    DeprecationWarning,
-)
diff --git a/twkit/__init__.py b/twkit/__init__.py
new file mode 100644
index 0000000..e69de29
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