cloudos-cli 2.89.2__tar.gz → 2.90.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/PKG-INFO +44 -12
  2. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/README.md +43 -11
  3. cloudos_cli-2.90.1/cloudos_cli/_version.py +1 -0
  4. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/bash/cli.py +1 -0
  5. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/clos.py +67 -0
  6. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/interactive_session/cli.py +217 -27
  7. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/interactive_session/interactive_session.py +25 -10
  8. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/jobs/job.py +8 -7
  9. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/link/cli.py +35 -10
  10. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/link/link.py +329 -166
  11. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli.egg-info/PKG-INFO +44 -12
  12. cloudos_cli-2.89.2/cloudos_cli/_version.py +0 -1
  13. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/LICENSE +0 -0
  14. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/__init__.py +0 -0
  15. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/__main__.py +0 -0
  16. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/bash/__init__.py +0 -0
  17. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/configure/__init__.py +0 -0
  18. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/configure/cli.py +0 -0
  19. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/configure/configure.py +0 -0
  20. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/constants.py +0 -0
  21. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/cost/__init__.py +0 -0
  22. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/cost/cost.py +0 -0
  23. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/cromwell/__init__.py +0 -0
  24. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/cromwell/cli.py +0 -0
  25. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/datasets/__init__.py +0 -0
  26. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/datasets/cli.py +0 -0
  27. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/datasets/datasets.py +0 -0
  28. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/import_wf/__init__.py +0 -0
  29. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/import_wf/import_wf.py +0 -0
  30. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/interactive_session/__init__.py +0 -0
  31. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/jobs/__init__.py +0 -0
  32. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/jobs/cli.py +0 -0
  33. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/link/__init__.py +0 -0
  34. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/logging/__init__.py +0 -0
  35. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/logging/logger.py +0 -0
  36. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/procurement/__init__.py +0 -0
  37. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/procurement/cli.py +0 -0
  38. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/procurement/images.py +0 -0
  39. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/projects/__init__.py +0 -0
  40. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/projects/cli.py +0 -0
  41. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/queue/__init__.py +0 -0
  42. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/queue/cli.py +0 -0
  43. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/queue/queue.py +0 -0
  44. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/related_analyses/__init__.py +0 -0
  45. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/related_analyses/related_analyses.py +0 -0
  46. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/utils/__init__.py +0 -0
  47. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/utils/array_job.py +0 -0
  48. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/utils/cli_helpers.py +0 -0
  49. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/utils/cloud.py +0 -0
  50. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/utils/details.py +0 -0
  51. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/utils/errors.py +0 -0
  52. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/utils/last_wf.py +0 -0
  53. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/utils/nextflow_version.py +0 -0
  54. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/utils/requests.py +0 -0
  55. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/utils/resources.py +0 -0
  56. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/workflows/__init__.py +0 -0
  57. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli/workflows/cli.py +0 -0
  58. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli.egg-info/SOURCES.txt +0 -0
  59. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli.egg-info/dependency_links.txt +0 -0
  60. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli.egg-info/entry_points.txt +0 -0
  61. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli.egg-info/requires.txt +0 -0
  62. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/cloudos_cli.egg-info/top_level.txt +0 -0
  63. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/setup.cfg +0 -0
  64. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/setup.py +0 -0
  65. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/__init__.py +0 -0
  66. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/functions_for_pytest.py +0 -0
  67. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_cli_project_create.py +0 -0
  68. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_cost/__init__.py +0 -0
  69. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_cost/test_job_cost.py +0 -0
  70. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_details.py +0 -0
  71. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_error_messages.py +0 -0
  72. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_interactive_session/__init__.py +0 -0
  73. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_interactive_session/test_create_session.py +0 -0
  74. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_interactive_session/test_list_sessions.py +0 -0
  75. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_logging/__init__.py +0 -0
  76. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_logging/test_logger.py +0 -0
  77. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_nextflow_version.py +0 -0
  78. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_related_analyses/__init__.py +0 -0
  79. {cloudos_cli-2.89.2 → cloudos_cli-2.90.1}/tests/test_related_analyses/test_related_analyses.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudos_cli
3
- Version: 2.89.2
3
+ Version: 2.90.1
4
4
  Summary: Python package for interacting with the Lifebit Platform
5
5
  Home-page: https://github.com/lifebit-ai/cloudos-cli
6
6
  Author: David Piñeyro
@@ -2183,7 +2183,8 @@ cloudos interactive-session create \
2183
2183
 
2184
2184
  **Data & Storage Management:**
2185
2185
  - `--mount`: Mount a data file into the session. Supports both Lifebit Platform datasets and S3 files (AWS only). Format: `project_name/dataset_path` (e.g., `leila-test/Data/file.csv`) or `s3://bucket/path/to/file` (e.g., `s3://my-bucket/data/file.csv`). Can be used multiple times.
2186
- - `--link`: Link a folder into the session for read/write access (AWS only). Supports S3 folders and Lifebit Platform folders. Format: `s3://bucket/prefix` (e.g., `s3://my-bucket/data/`) or `project_name/folder_path` (e.g., `leila-test/AnalysesResults/analysis_id/results`). Can be used multiple times. **Note:** Linking is not supported on Azure. Use Lifebit Platform file explorer for data access.
2186
+ - `--link`: Link a folder into the session for read/write access (AWS only). Supports S3 folders (e.g., `s3://my-bucket/data/`) and File Explorer folders (e.g., `my-project/Data/results`). Multiple folders can be specified using multiple `--link` flags or as comma-separated paths in a single `--link` argument.
2187
+ **Note:** Linking is not supported on Azure. Use Lifebit Platform File Explorer for data access.
2187
2188
 
2188
2189
  **Backend-Specific:**
2189
2190
  - `--r-version`: R version for RStudio (options: `4.4.2`, `4.5.2`) - **optional for rstudio** (default: `4.4.2`)
@@ -2196,8 +2197,8 @@ cloudos interactive-session create \
2196
2197
  **Data Management**
2197
2198
 
2198
2199
  CloudOS CLI supports multiple ways to access data in interactive sessions, depending on your execution platform:
2199
- - you can load data directly into the session (i.e. files are copied into the session's mounted-data volume)
2200
- - you can link folders to your session (i.e the folders are sym-linked to the session). This works only for folders (S3-based) and only in AWS enviornments.
2200
+ - **Mount files** (`--mount`): Files are copied into the session's mounted-data volume. Supports CloudOS File Explorer files and S3 files (AWS only).
2201
+ - **Link folders** (`--link`): Folders are mounted as read/write accessible directories in the session (AWS only). Supports both S3 folders and Lifebit Platform File Explorer folders. Linked folders appear with unique mount names based on the folder path.
2201
2202
 
2202
2203
 
2203
2204
  **Data Mounting Examples**
@@ -2212,7 +2213,7 @@ cloudos interactive-session create \
2212
2213
  --mount "my_project/training_data.csv"
2213
2214
  ```
2214
2215
 
2215
- Link an S3 bucket:
2216
+ Link an S3 folder:
2216
2217
 
2217
2218
  ```bash
2218
2219
  cloudos interactive-session create \
@@ -2222,15 +2223,36 @@ cloudos interactive-session create \
2222
2223
  --link "s3://my-results-bucket/output/"
2223
2224
  ```
2224
2225
 
2225
- Link multiple S3 buckets:
2226
+ Link a File Explorer folder:
2226
2227
 
2227
2228
  ```bash
2228
2229
  cloudos interactive-session create \
2229
2230
  --profile my_profile \
2230
- --name "Multi-S3 Session" \
2231
+ --name "File Explorer Access" \
2232
+ --session-type jupyter \
2233
+ --link "my-project/Data/results"
2234
+ ```
2235
+
2236
+ Link multiple folders (using multiple --link flags):
2237
+
2238
+ ```bash
2239
+ cloudos interactive-session create \
2240
+ --profile my_profile \
2241
+ --name "Multi-Folder Session" \
2231
2242
  --session-type jupyter \
2232
2243
  --link "s3://input-bucket/data/" \
2233
- --link "s3://output-bucket/results/"
2244
+ --link "s3://output-bucket/results/" \
2245
+ --link "my-project/AnalysesResults/analysis_123/output"
2246
+ ```
2247
+
2248
+ Link multiple folders (using comma-separated paths):
2249
+
2250
+ ```bash
2251
+ cloudos interactive-session create \
2252
+ --profile my_profile \
2253
+ --name "Multi-Folder Session" \
2254
+ --session-type jupyter \
2255
+ --link "s3://bucket-1/data/,s3://bucket-2/results/,my-project/Data/analysis"
2234
2256
  ```
2235
2257
 
2236
2258
 
@@ -2797,7 +2819,8 @@ Link job-related folders or custom S3 paths to your interactive analysis session
2797
2819
  - By default, links results, workdir, and logs folders
2798
2820
  - Use `--results`, `--workdir`, or `--logs` flags to link only specific folders
2799
2821
 
2800
- 2. **Direct path linking** (PATH argument): Links a specific S3 path
2822
+ 2. **Direct path linking** (PATH argument): Links specific S3 or File Explorer paths. It supports a single path or comma-separated multiple paths.
2823
+
2801
2824
 
2802
2825
  **Basic usage:**
2803
2826
 
@@ -2809,16 +2832,20 @@ cloudos link --job-id <JOB_ID> --session-id <SESSION_ID> --profile my_profile
2809
2832
  cloudos link --job-id <JOB_ID> --session-id <SESSION_ID> --results --profile my_profile
2810
2833
  cloudos link --job-id <JOB_ID> --session-id <SESSION_ID> --workdir --logs --profile my_profile
2811
2834
 
2812
- # Link a specific S3 path
2835
+ # Link a single S3 path
2813
2836
  cloudos link s3://bucket/folder --session-id <SESSION_ID> --profile my_profile
2814
2837
 
2838
+ # Link multiple S3 paths (comma-separated)
2839
+ cloudos link s3://bucket1/data,s3://bucket2/results,s3://bucket3/output --session-id <SESSION_ID> --profile my_profile
2840
+
2815
2841
  # Link a File Explorer path (requires project name)
2816
2842
  cloudos link "Data/MyFolder" --project-name my-project --session-id <SESSION_ID> --profile my_profile
2817
2843
  ```
2818
2844
 
2819
2845
  **Command options:**
2820
2846
 
2821
- - `PATH`: S3 path to link (positional argument, required if `--job-id` is not provided)
2847
+
2848
+ - `PATH`: S3 or File Explorer path(s) to link (positional argument, required if `--job-id` is not provided). Supports comma-separated multiple paths for batch linking (e.g., `s3://bucket1/path1,s3://bucket2/path2`)
2822
2849
  - `--apikey` / `-k`: Your Lifebit Platform API key (required)
2823
2850
  - `--cloudos-url` / `-c`: The Lifebit Platform URL (default: https://cloudos.lifebit.ai)
2824
2851
  - `--workspace-id`: The specific Lifebit Platform workspace ID (required)
@@ -2845,9 +2872,14 @@ cloudos link --job-id 62c83a1191fe06013b7ef355 --session-id abc123 --results --p
2845
2872
  # Link workdir and logs (but not results)
2846
2873
  cloudos link --job-id 62c83a1191fe06013b7ef355 --session-id abc123 --workdir --logs --profile my_profile
2847
2874
 
2848
- # Link an S3 bucket folder
2875
+ # Link a single S3 bucket folder
2849
2876
  cloudos link s3://my-bucket/analysis-results/2024 --session-id abc123 --profile my_profile
2850
2877
 
2878
+ # Link multiple S3 folders in one command
2879
+ cloudos link s3://bucket1/data,s3://bucket2/results,s3://bucket3/final-output --session-id abc123 --profile my_profile
2880
+
2881
+ # Mix different S3 prefixes from the same or different buckets
2882
+ cloudos link s3://lifebit-datasets/pipelines/vep/,s3://lifebit-datasets/pipelines/phewas/,s3://my-results/output/ --session-id abc123 --profile my_profile
2851
2883
  ```
2852
2884
 
2853
2885
  **Error handling:**
@@ -2148,7 +2148,8 @@ cloudos interactive-session create \
2148
2148
 
2149
2149
  **Data & Storage Management:**
2150
2150
  - `--mount`: Mount a data file into the session. Supports both Lifebit Platform datasets and S3 files (AWS only). Format: `project_name/dataset_path` (e.g., `leila-test/Data/file.csv`) or `s3://bucket/path/to/file` (e.g., `s3://my-bucket/data/file.csv`). Can be used multiple times.
2151
- - `--link`: Link a folder into the session for read/write access (AWS only). Supports S3 folders and Lifebit Platform folders. Format: `s3://bucket/prefix` (e.g., `s3://my-bucket/data/`) or `project_name/folder_path` (e.g., `leila-test/AnalysesResults/analysis_id/results`). Can be used multiple times. **Note:** Linking is not supported on Azure. Use Lifebit Platform file explorer for data access.
2151
+ - `--link`: Link a folder into the session for read/write access (AWS only). Supports S3 folders (e.g., `s3://my-bucket/data/`) and File Explorer folders (e.g., `my-project/Data/results`). Multiple folders can be specified using multiple `--link` flags or as comma-separated paths in a single `--link` argument.
2152
+ **Note:** Linking is not supported on Azure. Use Lifebit Platform File Explorer for data access.
2152
2153
 
2153
2154
  **Backend-Specific:**
2154
2155
  - `--r-version`: R version for RStudio (options: `4.4.2`, `4.5.2`) - **optional for rstudio** (default: `4.4.2`)
@@ -2161,8 +2162,8 @@ cloudos interactive-session create \
2161
2162
  **Data Management**
2162
2163
 
2163
2164
  CloudOS CLI supports multiple ways to access data in interactive sessions, depending on your execution platform:
2164
- - you can load data directly into the session (i.e. files are copied into the session's mounted-data volume)
2165
- - you can link folders to your session (i.e the folders are sym-linked to the session). This works only for folders (S3-based) and only in AWS enviornments.
2165
+ - **Mount files** (`--mount`): Files are copied into the session's mounted-data volume. Supports CloudOS File Explorer files and S3 files (AWS only).
2166
+ - **Link folders** (`--link`): Folders are mounted as read/write accessible directories in the session (AWS only). Supports both S3 folders and Lifebit Platform File Explorer folders. Linked folders appear with unique mount names based on the folder path.
2166
2167
 
2167
2168
 
2168
2169
  **Data Mounting Examples**
@@ -2177,7 +2178,7 @@ cloudos interactive-session create \
2177
2178
  --mount "my_project/training_data.csv"
2178
2179
  ```
2179
2180
 
2180
- Link an S3 bucket:
2181
+ Link an S3 folder:
2181
2182
 
2182
2183
  ```bash
2183
2184
  cloudos interactive-session create \
@@ -2187,15 +2188,36 @@ cloudos interactive-session create \
2187
2188
  --link "s3://my-results-bucket/output/"
2188
2189
  ```
2189
2190
 
2190
- Link multiple S3 buckets:
2191
+ Link a File Explorer folder:
2191
2192
 
2192
2193
  ```bash
2193
2194
  cloudos interactive-session create \
2194
2195
  --profile my_profile \
2195
- --name "Multi-S3 Session" \
2196
+ --name "File Explorer Access" \
2197
+ --session-type jupyter \
2198
+ --link "my-project/Data/results"
2199
+ ```
2200
+
2201
+ Link multiple folders (using multiple --link flags):
2202
+
2203
+ ```bash
2204
+ cloudos interactive-session create \
2205
+ --profile my_profile \
2206
+ --name "Multi-Folder Session" \
2196
2207
  --session-type jupyter \
2197
2208
  --link "s3://input-bucket/data/" \
2198
- --link "s3://output-bucket/results/"
2209
+ --link "s3://output-bucket/results/" \
2210
+ --link "my-project/AnalysesResults/analysis_123/output"
2211
+ ```
2212
+
2213
+ Link multiple folders (using comma-separated paths):
2214
+
2215
+ ```bash
2216
+ cloudos interactive-session create \
2217
+ --profile my_profile \
2218
+ --name "Multi-Folder Session" \
2219
+ --session-type jupyter \
2220
+ --link "s3://bucket-1/data/,s3://bucket-2/results/,my-project/Data/analysis"
2199
2221
  ```
2200
2222
 
2201
2223
 
@@ -2762,7 +2784,8 @@ Link job-related folders or custom S3 paths to your interactive analysis session
2762
2784
  - By default, links results, workdir, and logs folders
2763
2785
  - Use `--results`, `--workdir`, or `--logs` flags to link only specific folders
2764
2786
 
2765
- 2. **Direct path linking** (PATH argument): Links a specific S3 path
2787
+ 2. **Direct path linking** (PATH argument): Links specific S3 or File Explorer paths. It supports a single path or comma-separated multiple paths.
2788
+
2766
2789
 
2767
2790
  **Basic usage:**
2768
2791
 
@@ -2774,16 +2797,20 @@ cloudos link --job-id <JOB_ID> --session-id <SESSION_ID> --profile my_profile
2774
2797
  cloudos link --job-id <JOB_ID> --session-id <SESSION_ID> --results --profile my_profile
2775
2798
  cloudos link --job-id <JOB_ID> --session-id <SESSION_ID> --workdir --logs --profile my_profile
2776
2799
 
2777
- # Link a specific S3 path
2800
+ # Link a single S3 path
2778
2801
  cloudos link s3://bucket/folder --session-id <SESSION_ID> --profile my_profile
2779
2802
 
2803
+ # Link multiple S3 paths (comma-separated)
2804
+ cloudos link s3://bucket1/data,s3://bucket2/results,s3://bucket3/output --session-id <SESSION_ID> --profile my_profile
2805
+
2780
2806
  # Link a File Explorer path (requires project name)
2781
2807
  cloudos link "Data/MyFolder" --project-name my-project --session-id <SESSION_ID> --profile my_profile
2782
2808
  ```
2783
2809
 
2784
2810
  **Command options:**
2785
2811
 
2786
- - `PATH`: S3 path to link (positional argument, required if `--job-id` is not provided)
2812
+
2813
+ - `PATH`: S3 or File Explorer path(s) to link (positional argument, required if `--job-id` is not provided). Supports comma-separated multiple paths for batch linking (e.g., `s3://bucket1/path1,s3://bucket2/path2`)
2787
2814
  - `--apikey` / `-k`: Your Lifebit Platform API key (required)
2788
2815
  - `--cloudos-url` / `-c`: The Lifebit Platform URL (default: https://cloudos.lifebit.ai)
2789
2816
  - `--workspace-id`: The specific Lifebit Platform workspace ID (required)
@@ -2810,9 +2837,14 @@ cloudos link --job-id 62c83a1191fe06013b7ef355 --session-id abc123 --results --p
2810
2837
  # Link workdir and logs (but not results)
2811
2838
  cloudos link --job-id 62c83a1191fe06013b7ef355 --session-id abc123 --workdir --logs --profile my_profile
2812
2839
 
2813
- # Link an S3 bucket folder
2840
+ # Link a single S3 bucket folder
2814
2841
  cloudos link s3://my-bucket/analysis-results/2024 --session-id abc123 --profile my_profile
2815
2842
 
2843
+ # Link multiple S3 folders in one command
2844
+ cloudos link s3://bucket1/data,s3://bucket2/results,s3://bucket3/final-output --session-id abc123 --profile my_profile
2845
+
2846
+ # Mix different S3 prefixes from the same or different buckets
2847
+ cloudos link s3://lifebit-datasets/pipelines/vep/,s3://lifebit-datasets/pipelines/phewas/,s3://my-results/output/ --session-id abc123 --profile my_profile
2816
2848
  ```
2817
2849
 
2818
2850
  **Error handling:**
@@ -0,0 +1 @@
1
+ __version__ = '2.90.1'
@@ -341,6 +341,7 @@ def run_bash_job(ctx,
341
341
  is_flag=True)
342
342
  @click.option('-a', '--array-parameter',
343
343
  multiple=True,
344
+ required=True,
344
345
  help=('A single parameter to pass to the job call only for specifying array columns. ' +
345
346
  'It should be in the following form: parameter_name=array_file_column_name. E.g.: ' +
346
347
  '-a --test=value or -a -test=value or -a test=value or -a =value (for no prefix). ' +
@@ -2548,4 +2548,71 @@ class Cloudos:
2548
2548
  # Return the status code (204 No Content is success)
2549
2549
  return r.status_code
2550
2550
 
2551
+ def mount_fuse_filesystem_v2(self, session_id, team_id, payload, verify=True):
2552
+ """Mount a FUSE filesystem into an interactive session (API v2).
2553
+
2554
+ Parameters
2555
+ ----------
2556
+ session_id : string
2557
+ The session ID (MongoDB ObjectId) to mount filesystem to.
2558
+ team_id : string
2559
+ The CloudOS team id (workspace id).
2560
+ payload : dict
2561
+ FuseFileSystemMount payload with dataItems array configuration.
2562
+ For S3: {"dataItems": [{"type": "S3Folder", "data": {"name": str, "s3BucketName": str, "s3Prefix": str}}, ...]}
2563
+ For File Explorer: {"dataItems": [{"kind": "Folder", "item": str, "name": str}, ...]}
2564
+ verify: [bool|string], default=True
2565
+ Whether to use SSL verification or not. Alternatively, if
2566
+ a string is passed, it will be interpreted as the path to
2567
+ the SSL certificate file.
2568
+
2569
+ Returns
2570
+ -------
2571
+ int
2572
+ HTTP status code (204 for successful mount, no content returned).
2573
+ """
2574
+ # Validate inputs
2575
+ if not session_id or not isinstance(session_id, str):
2576
+ raise ValueError("Invalid session_id: must be a non-empty string")
2577
+ if not team_id or not isinstance(team_id, str):
2578
+ raise ValueError("Invalid team_id: must be a non-empty string")
2579
+
2580
+ headers = {
2581
+ "Content-type": "application/json",
2582
+ "apikey": self.apikey
2583
+ }
2584
+
2585
+ # Build URL with v2 endpoint and teamId query parameter
2586
+ url = f"{self.cloudos_url}/api/v2/interactive-sessions/{session_id}/fuse-filesystem/mount?teamId={team_id}"
2587
+
2588
+ # Make the API request with POST method
2589
+ try:
2590
+ r = retry_requests_post(
2591
+ url,
2592
+ headers=headers,
2593
+ json=payload,
2594
+ verify=verify,
2595
+ timeout=30
2596
+ )
2597
+ except Exception as e:
2598
+ raise Exception(f"Failed to mount FUSE filesystem: {str(e)}")
2599
+
2600
+ if r.status_code >= 400:
2601
+ if r.status_code == 404:
2602
+ # Try to determine if it's a missing session or missing endpoint
2603
+ try:
2604
+ error_body = r.json() if r.content else {}
2605
+ error_message = error_body.get("message", "").lower()
2606
+ # If error mentions session, it's a session-not-found error
2607
+ if "session" in error_message:
2608
+ raise ValueError(f"Session not found: {session_id}")
2609
+ except (json.JSONDecodeError, AttributeError):
2610
+ pass
2611
+ # Otherwise, likely endpoint not available - raise generic 404
2612
+ raise BadRequestException(r)
2613
+ raise BadRequestException(r)
2614
+
2615
+ # Return the status code (204 No Content is success)
2616
+ return r.status_code
2617
+
2551
2618