pybiolib 1.2.772__py3-none-any.whl → 1.2.796__py3-none-any.whl

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.
@@ -11,6 +11,7 @@ from biolib._internal.data_record.push_data import (
11
11
  validate_data_path_and_get_files_and_size_of_directory,
12
12
  )
13
13
  from biolib._internal.file_utils import get_files_and_size_of_directory, get_iterable_zip_stream
14
+ from biolib._internal.types.push import PushResponseDict
14
15
  from biolib.biolib_api_client import BiolibApiClient
15
16
  from biolib.biolib_api_client.biolib_app_api import BiolibAppApi
16
17
  from biolib.biolib_docker_client import BiolibDockerClient
@@ -79,7 +80,8 @@ def push_application(
79
80
  app_version_to_copy_images_from: Optional[str],
80
81
  set_as_active: bool,
81
82
  set_as_published: bool,
82
- ):
83
+ dry_run: bool = False,
84
+ ) -> Optional[PushResponseDict]:
83
85
  parsed_uri = parse_app_uri(app_uri)
84
86
  app_name = parsed_uri['app_name']
85
87
 
@@ -199,7 +201,10 @@ def push_application(
199
201
  raise BioLibError(
200
202
  'To push a version with app_data the app must be set to "Allow Client-Side Source Code Access"'
201
203
  )
202
- # push new app version
204
+ if dry_run:
205
+ logger.info('Successfully completed dry-run. No new version was pushed.')
206
+ return None
207
+
203
208
  new_app_version_json = BiolibAppApi.push_app_version(
204
209
  semantic_version=semantic_version,
205
210
  app_id=app['public_id'],
@@ -0,0 +1,6 @@
1
+ from typing import TypedDict
2
+
3
+
4
+ class PushResponseDict(TypedDict):
5
+ app_uri: str
6
+ sematic_version: str
biolib/cli/push.py CHANGED
@@ -13,7 +13,14 @@ from biolib.biolib_logging import logger, logger_no_user_data
13
13
  @click.option('--copy-images-from-version', required=False)
14
14
  @click.option('--dev', is_flag=True, default=False, required=False)
15
15
  @click.option('--pre-release', is_flag=True, default=False, required=False)
16
- def push(uri, path: str, copy_images_from_version: Optional[str], dev: bool, pre_release: bool) -> None:
16
+ @click.option(
17
+ '--dry-run',
18
+ is_flag=True,
19
+ default=False,
20
+ required=False,
21
+ help='Perform validation without pushing',
22
+ )
23
+ def push(uri, path: str, copy_images_from_version: Optional[str], dev: bool, pre_release: bool, dry_run: bool) -> None:
17
24
  logger.configure(default_log_level=logging.INFO)
18
25
  logger_no_user_data.configure(default_log_level=logging.INFO)
19
26
  set_as_active = True
@@ -33,4 +40,5 @@ def push(uri, path: str, copy_images_from_version: Optional[str], dev: bool, pre
33
40
  app_version_to_copy_images_from=copy_images_from_version,
34
41
  set_as_active=set_as_active,
35
42
  set_as_published=set_as_published,
43
+ dry_run=dry_run,
36
44
  )
@@ -4,11 +4,14 @@ from collections import OrderedDict
4
4
  from biolib import api
5
5
  from biolib._internal.types.experiment import DeprecatedExperimentDict, ExperimentDict
6
6
  from biolib._internal.types.resource import ResourceDetailedDict
7
+ from biolib._internal.utils import open_browser_window_from_notebook
8
+ from biolib.biolib_api_client import BiolibApiClient
7
9
  from biolib.biolib_errors import BioLibError
8
10
  from biolib.jobs.job import Job
9
11
  from biolib.jobs.types import JobsPaginatedResponse
10
12
  from biolib.tables import BioLibTable
11
13
  from biolib.typing_utils import Dict, List, Optional, Union
14
+ from biolib.utils import IS_RUNNING_IN_NOTEBOOK
12
15
 
13
16
 
14
17
  class Experiment:
@@ -42,6 +45,10 @@ class Experiment:
42
45
  def uuid(self) -> str:
43
46
  return self._resource_dict['uuid']
44
47
 
48
+ @property
49
+ def id(self) -> str:
50
+ return self.uuid
51
+
45
52
  @property
46
53
  def name(self) -> str:
47
54
  return self._resource_dict['name']
@@ -235,3 +242,20 @@ class Experiment:
235
242
 
236
243
  def _refetch(self) -> None:
237
244
  self._resource_dict = self._get_resource_dict_by_uuid(uuid=self._resource_dict['uuid'])
245
+
246
+ def open_browser(self) -> None:
247
+ """Open a browser window to view this experiment.
248
+
249
+ If running in a notebook, this will attempt to open a new browser window.
250
+ Otherwise, it will print a URL that you can copy and paste.
251
+ """
252
+ api_client = BiolibApiClient.get()
253
+ url_to_open = f'{api_client.base_url}/experiments/{self.id}/'
254
+
255
+ if IS_RUNNING_IN_NOTEBOOK:
256
+ print(f'Opening experiment page at: {url_to_open}')
257
+ print('If your browser does not open automatically, click on the link above.')
258
+ open_browser_window_from_notebook(url_to_open)
259
+ else:
260
+ print('Please copy and paste the following link into your browser:')
261
+ print(url_to_open)
biolib/sdk/__init__.py CHANGED
@@ -24,6 +24,9 @@ def push_app_version(uri: str, path: str) -> _BioLibApp:
24
24
  set_as_active=False,
25
25
  set_as_published=False,
26
26
  )
27
+ if not push_data:
28
+ raise Exception('Failed to push application; please check the logs for more details')
29
+
27
30
  uri = f'{push_data["app_uri"]}:{push_data["sematic_version"]}'
28
31
  return _BioLibApp(uri)
29
32
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pybiolib
3
- Version: 1.2.772
3
+ Version: 1.2.796
4
4
  Summary: BioLib Python Client
5
5
  License: MIT
6
6
  Keywords: biolib
@@ -19,7 +19,7 @@ biolib/_internal/llm_instructions/.github/copilot-instructions.md,sha256=GCGYxfj
19
19
  biolib/_internal/llm_instructions/.github/prompts/biolib_app_inputs.prompt.md,sha256=DcBUNaViuNfXoomj-IVUcIcBtJlXuIYOroUfDM_R6wU,3212
20
20
  biolib/_internal/llm_instructions/.github/prompts/biolib_run_apps.prompt.md,sha256=HYv-MgpQKIU7Hv90SvZ3tqXY6KWxYVnqamXDRyInOHM,7926
21
21
  biolib/_internal/llm_instructions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- biolib/_internal/push_application.py,sha256=Ffj3iZ0nma4KHTB-PKCeFvhCHHhAEhgKClxnfBUpL8U,12296
22
+ biolib/_internal/push_application.py,sha256=I7yHGcwK6udc2hVmOQIc1BcQBipAMibEjURMI6HgdXk,12502
23
23
  biolib/_internal/runtime.py,sha256=BiHl4klUHr36MCpqKaUso4idHeBZfPAahLYRQrabFqA,486
24
24
  biolib/_internal/tree_utils.py,sha256=_Q_6_NDtIiROcefymqxEVddjqti6Mt3OZ4U0GcDW61s,3904
25
25
  biolib/_internal/types/__init__.py,sha256=WvtlSHh77QhYVTLeRpoPAzqvByLzbEPf_ZqYGHFlQug,247
@@ -27,6 +27,7 @@ biolib/_internal/types/app.py,sha256=Mz2QGD_jESX-K9JYnLWPo4YA__Q_1FQQTk9pvidCohU
27
27
  biolib/_internal/types/data_record.py,sha256=9r_vdhVs60YTnzU4XQFXfDrfS2P2MqD3BH2xa7lk6ck,852
28
28
  biolib/_internal/types/experiment.py,sha256=2SbCLSwgLglmQgyUHYb5SvO0Cfsgs-f3jqao9--Z_sY,682
29
29
  biolib/_internal/types/file_node.py,sha256=T6BIqo662f3nwMBRqtBHYsg6YuuUaKpiokHcVjv9_ME,283
30
+ biolib/_internal/types/push.py,sha256=qSXCjdzOmHG7_QiwXaNSrVkESTMxnIKPvEut-9Mqt-g,108
30
31
  biolib/_internal/types/resource.py,sha256=LQnIYBR8Fi7zvnA5vBpzcL2c6ZjpaKNTe38hXck82k0,449
31
32
  biolib/_internal/types/resource_permission.py,sha256=ZE7eokpzswAiqe4GdpdxdZ6_jl0LdiRD9gP81I8C3fY,292
32
33
  biolib/_internal/types/resource_version.py,sha256=cU0YFHqxO-wX_Y6CoeK0Iei61gFwVoyR_kPOSTQ4mCs,304
@@ -73,7 +74,7 @@ biolib/cli/data_record.py,sha256=t8DfJK2EZ_SNZ9drDA_N5Jqy8DNwf9f5SlFrIaOvtv0,350
73
74
  biolib/cli/download_container.py,sha256=HIZVHOPmslGE5M2Dsp9r2cCkAEJx__vcsDz5Wt5LRos,483
74
75
  biolib/cli/init.py,sha256=PZLzQYbT7u78J1qSCcs-frVfWHohkrZHxLGRSmMdRg4,1061
75
76
  biolib/cli/lfs.py,sha256=z2qHUwink85mv9yDgifbVKkVwuyknGhMDTfly_gLKJM,4151
76
- biolib/cli/push.py,sha256=RxB4RHpjtL27Fpq7WRGojJ53R9jUuE1Cq9_NmHFzNsM,1306
77
+ biolib/cli/push.py,sha256=pSFEUQkQ69M__eR1nIT9ejW4V4_MtX3lb8ydEc1uKiM,1484
77
78
  biolib/cli/run.py,sha256=MCo0ZqW2pHBxOoCI3i5gAx5D0auW9fmxHqkAF4TRhms,2134
78
79
  biolib/cli/runtime.py,sha256=Xv-nrma5xX8NidWcvbUKcUvuN5TCarZa4A8mPVmF-z0,361
79
80
  biolib/cli/sdk.py,sha256=XisJwTft4QDB_99eGDlz-WBqqRwIqkVg7HyvxWtOG8w,471
@@ -110,14 +111,14 @@ biolib/compute_node/webserver/webserver_types.py,sha256=2t8EaFKESnves3BA_NBdnS2y
110
111
  biolib/compute_node/webserver/webserver_utils.py,sha256=XWvwYPbWNR3qS0FYbLLp-MDDfVk0QdaAmg3xPrT0H2s,4234
111
112
  biolib/compute_node/webserver/worker_thread.py,sha256=7uD9yQPhePYvP2HCJ27EeZ_h6psfIWFgqm1RHZxzobs,12483
112
113
  biolib/experiments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
- biolib/experiments/experiment.py,sha256=OTUPOY_F5qo22oFi3acnRMmG0pcmP6ZfoQncFkcTYDQ,9478
114
+ biolib/experiments/experiment.py,sha256=gY1-d7FgVrcQO3YzOJ0mHS6j7z7rl5XzXEuk7dFi1gU,10460
114
115
  biolib/jobs/__init__.py,sha256=aIb2H2DHjQbM2Bs-dysFijhwFcL58Blp0Co0gimED3w,32
115
116
  biolib/jobs/job.py,sha256=X33-s9u8x3uZI0x_fSDgEFAW0ke-8Qi96M-VB-W29MA,26703
116
117
  biolib/jobs/job_result.py,sha256=rALHiKYNaC9lHi_JJqBob1RubzNLwG9Z386kwRJjd2M,5885
117
118
  biolib/jobs/types.py,sha256=ezvaoTANsWazK6PmfpYcqezdfjP7MNBEBfqIZGoZhz8,997
118
119
  biolib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
120
  biolib/runtime/__init__.py,sha256=MlRepA11n2H-3plB5rzWyyHK2JmP6PiaP3i6x3vt0mg,506
120
- biolib/sdk/__init__.py,sha256=YMBY_AR-BOfOKtYJB1d78j9OCZGVevgan0wLnMD1Xvs,2239
121
+ biolib/sdk/__init__.py,sha256=Z1S5BgpvM87S2o1libtqkYN1CfYUhn_d4ChEJjwdFKM,2356
121
122
  biolib/tables.py,sha256=MmruV-nJLc3HbLVJBAiDuDCgS2-4oaUkpoCLLUNYbxQ,1173
122
123
  biolib/templates/__init__.py,sha256=Yx62sSyDCDesRQDQgmbDsLpfgEh93fWE8r9u4g2azXk,36
123
124
  biolib/templates/example_app.py,sha256=EB3E3RT4SeO_ii5nVQqJpi5KDGNE_huF1ub-e5ZFveE,715
@@ -130,8 +131,8 @@ biolib/utils/cache_state.py,sha256=u256F37QSRIVwqKlbnCyzAX4EMI-kl6Dwu6qwj-Qmag,3
130
131
  biolib/utils/multipart_uploader.py,sha256=XvGP1I8tQuKhAH-QugPRoEsCi9qvbRk-DVBs5PNwwJo,8452
131
132
  biolib/utils/seq_util.py,sha256=Ozk0blGtPur_D9MwShD02r_mphyQmgZkx-lOHOwnlIM,6730
132
133
  biolib/utils/zip/remote_zip.py,sha256=0wErYlxir5921agfFeV1xVjf29l9VNgGQvNlWOlj2Yc,23232
133
- pybiolib-1.2.772.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
134
- pybiolib-1.2.772.dist-info/METADATA,sha256=7epZrh0vQ2vplRyo2cI_-U8MjtUIY_EHqDgMXR11WbM,1570
135
- pybiolib-1.2.772.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
136
- pybiolib-1.2.772.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
137
- pybiolib-1.2.772.dist-info/RECORD,,
134
+ pybiolib-1.2.796.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
135
+ pybiolib-1.2.796.dist-info/METADATA,sha256=SoMz2oMjXUwS383J9ynDCIVIRFV_Bi0wXXMluw78JWg,1570
136
+ pybiolib-1.2.796.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
137
+ pybiolib-1.2.796.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
138
+ pybiolib-1.2.796.dist-info/RECORD,,