pybiolib 1.2.230__py3-none-any.whl → 1.2.249__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.
biolib/app/app.py CHANGED
@@ -16,7 +16,7 @@ from biolib.biolib_logging import logger
16
16
  from biolib.compute_node.job_worker.job_worker import JobWorker
17
17
  from biolib.experiments.experiment import Experiment
18
18
  from biolib.jobs import Job
19
- from biolib.typing_utils import Optional
19
+ from biolib.typing_utils import Optional, Dict
20
20
  from biolib.utils.app_uri import parse_app_uri
21
21
 
22
22
 
@@ -58,6 +58,7 @@ class BioLibApp:
58
58
  notify: bool = False,
59
59
  machine_count: Optional[int] = None,
60
60
  experiment: Optional[str] = None,
61
+ temporary_client_secrets: Optional[Dict[str, str]] = None,
61
62
  ) -> Job:
62
63
  if experiment_id and experiment:
63
64
  raise ValueError('Only one of experiment_id and experiment can be specified')
@@ -91,6 +92,7 @@ class BioLibApp:
91
92
  result_prefix=result_prefix,
92
93
  timeout=timeout,
93
94
  requested_machine_count=machine_count,
95
+ temporary_client_secrets=temporary_client_secrets,
94
96
  )
95
97
  if blocking:
96
98
  # TODO: Deprecate utils.STREAM_STDOUT and always stream logs by simply calling job.stream_logs()
@@ -115,7 +117,7 @@ class BioLibApp:
115
117
  else:
116
118
  raise BioLibError("""
117
119
  Calling an app directly with app() is currently being reworked.
118
- To use the previous functionality, please call app.cli() instead.
120
+ To use the previous functionality, please call app.cli() instead.
119
121
  Example: "app.cli('--help')"
120
122
  """)
121
123
 
@@ -3,6 +3,7 @@ import os
3
3
  import random
4
4
  import re
5
5
  import subprocess
6
+ import urllib.parse
6
7
 
7
8
  import biolib.api
8
9
  from biolib import biolib_errors
@@ -10,6 +11,7 @@ from biolib._internal.http_client import HttpError
10
11
  from biolib.biolib_api_client import AppGetResponse
11
12
  from biolib.biolib_logging import logger
12
13
  from biolib.typing_utils import Optional
14
+ from biolib.utils import load_base_url_from_env
13
15
 
14
16
 
15
17
  def encode_multipart(data, files):
@@ -61,15 +63,29 @@ def _get_git_repository_url() -> str:
61
63
  except BaseException:
62
64
  return ''
63
65
 
66
+ def _get_app_uri_from_str(input_str: str) -> str:
67
+ parsed_base_url = urllib.parse.urlparse(load_base_url_from_env())
68
+ parsed_uri = urllib.parse.urlparse(input_str)
69
+ if parsed_uri.netloc != '' and parsed_base_url.netloc != parsed_uri.netloc:
70
+ raise biolib_errors.ValidationError(
71
+ f'Invalid URI. The hostname "{parsed_base_url.netloc}" is not recognized.'
72
+ )
73
+ elif parsed_uri.netloc != '' and parsed_uri.path[1] != '@':
74
+ uri = f'@{parsed_uri.netloc}{parsed_uri.path}'
75
+ elif parsed_uri.netloc == '' and parsed_uri.path.startswith (parsed_base_url.netloc):
76
+ uri = f'@{parsed_uri.path}'
77
+ else:
78
+ uri = parsed_uri.path
79
+ uri = uri.strip('/')
80
+ # Replace frontend version path with app_uri compatible version (if supplied)
81
+ uri = re.sub(r'/version/(?P<version>(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*))(/)?$', r':\g<version>', uri)
82
+ return uri
83
+
64
84
 
65
85
  class BiolibAppApi:
66
86
  @staticmethod
67
87
  def get_by_uri(uri: str) -> AppGetResponse:
68
- # Replace protocol with @ (if supplied)
69
- uri = re.sub(r'^http(s)?://', '@', uri)
70
- # Replace frontend version path with app_uri compatible version (if supplied)
71
- uri = re.sub(r'/version/(?P<version>(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*))(/)?$', r':\g<version>', uri)
72
-
88
+ uri = _get_app_uri_from_str(uri)
73
89
  try:
74
90
  response = biolib.api.client.get(path='/app/', params={'uri': uri})
75
91
  app_response: AppGetResponse = response.json()
@@ -47,6 +47,7 @@ class BiolibJobApi:
47
47
  timeout: Optional[int] = None,
48
48
  notify: bool = False,
49
49
  requested_machine_count: Optional[int] = None,
50
+ temporary_client_secrets: Optional[Dict[str, str]] = None,
50
51
  ):
51
52
  data = {
52
53
  'app_version_id': app_version_id,
@@ -83,6 +84,9 @@ class BiolibJobApi:
83
84
  if timeout:
84
85
  data['requested_timeout_seconds'] = timeout
85
86
 
87
+ if temporary_client_secrets:
88
+ data['temporary_client_secrets'] = temporary_client_secrets
89
+
86
90
  response = biolib.api.client.post(path='/jobs/', data=data)
87
91
 
88
92
  return response.json()
biolib/biolib_errors.py CHANGED
@@ -7,6 +7,9 @@ class BioLibError(Exception):
7
7
  super().__init__(message)
8
8
  self.message = message
9
9
 
10
+ class ValidationError(BioLibError):
11
+ def __init__(self, message: Optional[str] = None):
12
+ super().__init__(message=message or 'Invalid input.')
10
13
 
11
14
  class NotFound(BioLibError):
12
15
 
biolib/jobs/job.py CHANGED
@@ -437,8 +437,9 @@ class Job:
437
437
  timeout: Optional[int] = None,
438
438
  notify: bool = False,
439
439
  requested_machine_count: Optional[int] = None,
440
+ temporary_client_secrets: Optional[Dict[str, str]] = None,
440
441
  ) -> 'Job':
441
- if len(module_input_serialized) < 500_000:
442
+ if len(module_input_serialized) < 500_000 and temporary_client_secrets is None:
442
443
  _job_dict = BiolibJobApi.create_job_with_data(
443
444
  app_resource_name_prefix=parse_app_uri(app_uri)['resource_name_prefix'],
444
445
  app_version_uuid=app_version_uuid,
@@ -462,6 +463,7 @@ class Job:
462
463
  override_command=override_command,
463
464
  timeout=timeout,
464
465
  requested_machine_count=requested_machine_count,
466
+ temporary_client_secrets=temporary_client_secrets,
465
467
  )
466
468
  JobStorage.upload_module_input(job=job_dict, module_input_serialized=module_input_serialized)
467
469
  cloud_job = BiolibJobApi.create_cloud_job(job_id=job_dict['public_id'], result_name_prefix=result_prefix)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybiolib
3
- Version: 1.2.230
3
+ Version: 1.2.249
4
4
  Summary: BioLib Python Client
5
5
  Home-page: https://github.com/biolib
6
6
  License: MIT
@@ -31,14 +31,14 @@ biolib/_runtime/runtime.py,sha256=bZQ0m39R9jOBVAtlyvzDnOobKueOAQUCwMUZjDQnO7E,44
31
31
  biolib/api/__init__.py,sha256=mQ4u8FijqyLzjYMezMUUbbBGNB3iFmkNdjXnWPZ7Jlw,138
32
32
  biolib/api/client.py,sha256=FRpdH5aI187b_I_4HUNi680v4iOP65z5f2RcUo8D8MA,3559
33
33
  biolib/app/__init__.py,sha256=cdPtcfb_U-bxb9iSL4fCEq2rpD9OjkyY4W-Zw60B0LI,37
34
- biolib/app/app.py,sha256=2bbwSZOYfWk-_Cw2n0yvMo0maYp1lZ0Z0YlhS1iK-jY,8727
34
+ biolib/app/app.py,sha256=mJafDLtnoX66egHF94NrUhmhzjpFzvRj2STh0RVGJCY,8862
35
35
  biolib/app/search_apps.py,sha256=K4a41f5XIWth2BWI7OffASgIsD0ko8elCax8YL2igaY,1470
36
36
  biolib/biolib_api_client/__init__.py,sha256=E5EMa19wJoblwSdQPYrxc_BtIeRsAuO0L_jQweWw-Yk,182
37
37
  biolib/biolib_api_client/api_client.py,sha256=ciNx4ybpyKG5LEf4KQdGEz13r0jTxImyQat4_HDecD0,7373
38
38
  biolib/biolib_api_client/app_types.py,sha256=1sXz9XnLRKNALMglNdTbew7AL6OkcUan0MPdj4xQLis,2456
39
39
  biolib/biolib_api_client/auth.py,sha256=kjm0ZHnH3I8so3su2sZbBxNHYp-ZUdrZ5lwQ0K36RSw,949
40
- biolib/biolib_api_client/biolib_app_api.py,sha256=i5KPZNpopU7cqcjVfICml-31ca-1-CU_rdZgKiZt0Vs,4343
41
- biolib/biolib_api_client/biolib_job_api.py,sha256=7bKfav3-12ewXkEUoLdCmbWdebW8148kxfGJW9SsXZI,7125
40
+ biolib/biolib_api_client/biolib_app_api.py,sha256=RUXrTxk7XKzm4wxv7NBXttuFjT60DI9vNOvkS-cjKNc,5065
41
+ biolib/biolib_api_client/biolib_job_api.py,sha256=49SBozudLYlOByuQMABiHZkwK5Jt5_orjv8Vw0rJpks,7306
42
42
  biolib/biolib_api_client/common_types.py,sha256=RH-1KNHqUF-EkTpfPOSTt5Mq1GPdfju_cqXDesscO1I,123
43
43
  biolib/biolib_api_client/job_types.py,sha256=yBdBwjharbQJuXCi2xKMi0t_r6XxnbWnkchHekTpCJY,1351
44
44
  biolib/biolib_api_client/lfs_types.py,sha256=joZWP6-sa5_Ug_6xIp5fHAgEo_bqLE3rbleQocZtDcg,339
@@ -57,7 +57,7 @@ biolib/biolib_binary_format/system_status_update.py,sha256=aOELuQ0k-GtpaZTUxYd0G
57
57
  biolib/biolib_binary_format/utils.py,sha256=jq31QEShs7TSrSKZBr8jif-bJAwVzQrqVxmymL6crpU,5453
58
58
  biolib/biolib_docker_client/__init__.py,sha256=aBfA6mtWSI5dBEfNNMD6bIZzCPloW4ghKm0wqQiljdo,1481
59
59
  biolib/biolib_download_container.py,sha256=8TmBV8iv3bCvkNlHa1SSsc4zl0wX_eaxhfnW5rvFIh8,1779
60
- biolib/biolib_errors.py,sha256=5m4lK2l39DafpoXBImEBD4EPH3ayXBX0JgtPzmGClow,689
60
+ biolib/biolib_errors.py,sha256=xtdo3ybqnc0jhd959kVmBczFdBczrFMr8cZyd4hjKLk,842
61
61
  biolib/biolib_logging.py,sha256=J3E5H_LL5k6ZUim2C8gqN7E6lCBZMTpO4tnMpOPwG9U,2854
62
62
  biolib/cli/__init__.py,sha256=0v3c_J-U0k46c5ZWeQjLG_kTaKDJm81LBxQpDO2B_aI,1286
63
63
  biolib/cli/auth.py,sha256=rpWGmXs6Fz6CGrO9K8ibPRszOdXG78Vig_boKaVCD9A,2082
@@ -103,7 +103,7 @@ biolib/compute_node/webserver/worker_thread.py,sha256=GRRBUqXdMKvbjyLQhYlqGIbFKe
103
103
  biolib/experiments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
104
  biolib/experiments/experiment.py,sha256=m7FB7hot8CMOVrNyWGPB6FTkWQJwI0ytpIvtPxfoPME,7684
105
105
  biolib/jobs/__init__.py,sha256=aIb2H2DHjQbM2Bs-dysFijhwFcL58Blp0Co0gimED3w,32
106
- biolib/jobs/job.py,sha256=et1slGdzczp112iJlHVp_7eTyhGoGSKxP31jgAwQuiM,20163
106
+ biolib/jobs/job.py,sha256=W0r9_AbHha1lC99U_kUuzDmavFQe7WLxs83Wp3g_3ZU,20330
107
107
  biolib/jobs/job_result.py,sha256=rALHiKYNaC9lHi_JJqBob1RubzNLwG9Z386kwRJjd2M,5885
108
108
  biolib/jobs/types.py,sha256=ezvaoTANsWazK6PmfpYcqezdfjP7MNBEBfqIZGoZhz8,997
109
109
  biolib/runtime/__init__.py,sha256=MlRepA11n2H-3plB5rzWyyHK2JmP6PiaP3i6x3vt0mg,506
@@ -120,8 +120,8 @@ biolib/utils/cache_state.py,sha256=u256F37QSRIVwqKlbnCyzAX4EMI-kl6Dwu6qwj-Qmag,3
120
120
  biolib/utils/multipart_uploader.py,sha256=XvGP1I8tQuKhAH-QugPRoEsCi9qvbRk-DVBs5PNwwJo,8452
121
121
  biolib/utils/seq_util.py,sha256=Ozk0blGtPur_D9MwShD02r_mphyQmgZkx-lOHOwnlIM,6730
122
122
  biolib/utils/zip/remote_zip.py,sha256=0wErYlxir5921agfFeV1xVjf29l9VNgGQvNlWOlj2Yc,23232
123
- pybiolib-1.2.230.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
124
- pybiolib-1.2.230.dist-info/METADATA,sha256=pHStJR-mwTW8Plixvbbd1rtb8Msj8BmiCBOi6-ORvnY,1558
125
- pybiolib-1.2.230.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
126
- pybiolib-1.2.230.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
127
- pybiolib-1.2.230.dist-info/RECORD,,
123
+ pybiolib-1.2.249.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
124
+ pybiolib-1.2.249.dist-info/METADATA,sha256=x0mgDfo1eBuhQpvLCecpSy035un2h-vPtrwrgVQzyEM,1558
125
+ pybiolib-1.2.249.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
126
+ pybiolib-1.2.249.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
127
+ pybiolib-1.2.249.dist-info/RECORD,,