pybiolib 1.1.2025__py3-none-any.whl → 1.1.2036__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/api/__init__.py CHANGED
@@ -1,4 +1,5 @@
1
1
  from biolib._internal.http_client import HttpClient
2
+
2
3
  from .client import ApiClient as _ApiClient
3
4
 
4
5
  _client = _ApiClient()
biolib/api/client.py CHANGED
@@ -1,8 +1,10 @@
1
- from urllib.parse import urljoin, urlencode
1
+ from urllib.parse import urlencode, urljoin
2
2
 
3
- from biolib.typing_utils import Dict, Optional, Union
3
+ import importlib_metadata
4
+
5
+ from biolib._internal.http_client import HttpClient, HttpResponse
4
6
  from biolib.biolib_api_client import BiolibApiClient as DeprecatedApiClient
5
- from biolib._internal.http_client import HttpResponse, HttpClient
7
+ from biolib.typing_utils import Dict, Optional, Union, cast
6
8
 
7
9
  OptionalHeaders = Union[
8
10
  Optional[Dict[str, str]],
@@ -10,14 +12,24 @@ OptionalHeaders = Union[
10
12
  ]
11
13
 
12
14
 
15
+ def _get_biolib_package_version() -> str:
16
+ # try fetching version, if it fails (usually when in dev), add default
17
+ try:
18
+ return cast(str, importlib_metadata.version('pybiolib'))
19
+ except importlib_metadata.PackageNotFoundError:
20
+ return '0.0.0'
21
+
22
+
13
23
  class ApiClient(HttpClient):
24
+ _biolib_package_version: str = _get_biolib_package_version()
25
+
14
26
  def get(
15
- self,
16
- path: str,
17
- params: Optional[Dict[str, Union[str, int]]] = None,
18
- headers: OptionalHeaders = None,
19
- authenticate: bool = True,
20
- retries: int = 10,
27
+ self,
28
+ path: str,
29
+ params: Optional[Dict[str, Union[str, int]]] = None,
30
+ headers: OptionalHeaders = None,
31
+ authenticate: bool = True,
32
+ retries: int = 10,
21
33
  ) -> HttpResponse:
22
34
  return self.request(
23
35
  headers=self._get_headers(opt_headers=headers, authenticate=authenticate),
@@ -27,12 +39,12 @@ class ApiClient(HttpClient):
27
39
  )
28
40
 
29
41
  def post(
30
- self,
31
- path: str,
32
- data: Optional[Union[Dict, bytes]] = None,
33
- headers: OptionalHeaders = None,
34
- authenticate: bool = True,
35
- retries: int = 5,
42
+ self,
43
+ path: str,
44
+ data: Optional[Union[Dict, bytes]] = None,
45
+ headers: OptionalHeaders = None,
46
+ authenticate: bool = True,
47
+ retries: int = 5,
36
48
  ) -> HttpResponse:
37
49
  return self.request(
38
50
  data=data,
@@ -74,6 +86,9 @@ class ApiClient(HttpClient):
74
86
  if access_token and authenticate:
75
87
  headers['Authorization'] = f'Bearer {access_token}'
76
88
 
89
+ headers['client-type'] = 'biolib-python'
90
+ headers['client-version'] = ApiClient._biolib_package_version
91
+
77
92
  return headers
78
93
 
79
94
  @staticmethod
@@ -1,7 +1,7 @@
1
1
  from enum import Enum
2
2
 
3
- from biolib.typing_utils import TypedDict, List, Optional, Dict, Literal
4
3
  from biolib.biolib_api_client.common_types import SemanticVersion
4
+ from biolib.typing_utils import Dict, List, Literal, Optional, TypedDict
5
5
 
6
6
 
7
7
  class AppVersionSlim(SemanticVersion):
@@ -99,8 +99,6 @@ class _AppVersionOnJob(TypedDict):
99
99
 
100
100
  class AppOnJob(TypedDict):
101
101
  allow_client_side_execution: bool
102
- can_access_all_data_records_of_user: bool
103
- can_push_data_record_for_user: bool
104
102
  state: Literal['public', 'draft']
105
103
 
106
104
 
@@ -1,9 +1,8 @@
1
1
  from enum import Enum
2
2
 
3
- from biolib.compute_node.webserver.webserver_types import ComputeNodeInfo
4
- from biolib.typing_utils import TypedDict, Optional, List
5
-
6
3
  from biolib.biolib_api_client.app_types import AppVersionOnJob, RemoteHost
4
+ from biolib.compute_node.webserver.webserver_types import ComputeNodeInfo
5
+ from biolib.typing_utils import List, Optional, TypedDict
7
6
 
8
7
 
9
8
  class JobState(Enum):
@@ -7,11 +7,11 @@ import time
7
7
  from datetime import datetime
8
8
  from socket import gethostbyname, gethostname
9
9
 
10
- from biolib import utils, api
11
- from biolib.biolib_logging import logger_no_user_data
12
- from biolib.typing_utils import Optional, List, Dict, cast
10
+ from biolib import api, utils
13
11
  from biolib.biolib_api_client import BiolibApiClient
14
- from biolib.compute_node.webserver.webserver_types import WebserverConfig, ComputeNodeInfo, ShutdownTimes
12
+ from biolib.biolib_logging import logger_no_user_data
13
+ from biolib.compute_node.webserver.webserver_types import ComputeNodeInfo, ShutdownTimes, WebserverConfig
14
+ from biolib.typing_utils import Dict, List, Optional, cast
15
15
 
16
16
 
17
17
  def trust_ceritificates(certs_data: List[str]) -> None:
@@ -54,15 +54,12 @@ class CloudUtils:
54
54
  pybiolib_version=utils.BIOLIB_PACKAGE_VERSION,
55
55
  ),
56
56
  base_url=CloudUtils._get_environment_variable_or_fail('BIOLIB_BASE_URL'),
57
- s3_general_storage_bucket_name=CloudUtils._get_environment_variable_or_fail(
58
- 'BIOLIB_S3_GENERAL_STORAGE_BUCKET_NAME',
59
- ),
60
57
  is_dev=os.environ.get('BIOLIB_DEV') == 'TRUE',
61
58
  shutdown_times=ShutdownTimes(
62
59
  auto_shutdown_time_in_seconds=CloudUtils._get_environment_variable_as_int(
63
60
  'BIOLIB_CLOUD_AUTO_SHUTDOWN_TIME_IN_SECONDS'
64
61
  ),
65
- )
62
+ ),
66
63
  )
67
64
 
68
65
  return CloudUtils._webserver_config
@@ -84,7 +81,7 @@ class CloudUtils:
84
81
  except BaseException as error_object:
85
82
  logger_no_user_data.error(f'Failed to deregister got error: {error_object}')
86
83
  else:
87
- logger_no_user_data.error("Not deregistering as environment is not cloud")
84
+ logger_no_user_data.error('Not deregistering as environment is not cloud')
88
85
 
89
86
  @staticmethod
90
87
  def shutdown() -> None:
@@ -98,7 +95,7 @@ class CloudUtils:
98
95
  except Exception as error: # pylint: disable=broad-except
99
96
  logger_no_user_data.error(f'Failed to shutdown got error: {error}')
100
97
  else:
101
- logger_no_user_data.error("Not running shutdown as environment is not cloud")
98
+ logger_no_user_data.error('Not running shutdown as environment is not cloud')
102
99
 
103
100
  @staticmethod
104
101
  def deregister_and_shutdown() -> None:
@@ -131,7 +128,7 @@ class CloudUtils:
131
128
  'auth_token': config['compute_node_info']['auth_token'],
132
129
  'cloud_job_id': cloud_job_id,
133
130
  'system_exception_code': system_exception_code,
134
- 'exit_code': exit_code
131
+ 'exit_code': exit_code,
135
132
  },
136
133
  )
137
134
  except BaseException as error:
@@ -152,14 +149,14 @@ class CloudUtils:
152
149
  data=cast(Dict[str, str], compute_node_info),
153
150
  )
154
151
  if response.status_code != 201:
155
- raise Exception("Non 201 error code")
152
+ raise Exception('Non 201 error code')
156
153
  else:
157
- logger_no_user_data.info("Compute node registered!")
154
+ logger_no_user_data.info('Compute node registered!')
158
155
  response_data = response.json()
159
- logger_no_user_data.info(f"Got data on register: {json.dumps(response_data)}")
156
+ logger_no_user_data.info(f'Got data on register: {json.dumps(response_data)}')
160
157
  certs = []
161
- for federation in response_data["federation"]:
162
- for cert_b64 in federation["certs_b64"]:
158
+ for federation in response_data['federation']:
159
+ for cert_b64 in federation['certs_b64']:
163
160
  certs.append(base64.b64decode(cert_b64).decode())
164
161
  trust_ceritificates(certs)
165
162
 
@@ -253,7 +253,6 @@ class JobWorker:
253
253
 
254
254
  def _start_network_and_remote_host_proxies(self, job: CreatedJobDict) -> None:
255
255
  app_version = job['app_version']
256
- app = app_version.get('app', {})
257
256
  job_id = job['public_id']
258
257
  remote_hosts = app_version['remote_hosts']
259
258
  if utils.IS_RUNNING_IN_CLOUD:
@@ -316,8 +315,6 @@ class JobWorker:
316
315
  self._internal_network,
317
316
  job_id,
318
317
  ports,
319
- can_push_data_record_for_user=app.get('can_push_data_record_for_user', False),
320
- can_access_all_data_records_of_user=app.get('can_access_all_data_records_of_user', False),
321
318
  )
322
319
  remote_host_proxy.start()
323
320
  self._remote_host_proxies.append(remote_host_proxy)
@@ -30,11 +30,7 @@ class RemoteHostProxy:
30
30
  internal_network: Optional[Network],
31
31
  job_id: str,
32
32
  ports: List[int],
33
- can_push_data_record_for_user: bool,
34
- can_access_all_data_records_of_user: bool,
35
33
  ):
36
- self._can_push_data_record_for_user: bool = can_push_data_record_for_user
37
- self._can_access_all_data_records_of_user: bool = can_access_all_data_records_of_user
38
34
  self.is_app_caller_proxy = remote_host['hostname'] == 'AppCallerProxy'
39
35
  self._remote_host: RemoteHostExtended = RemoteHostExtended(hostname=remote_host['hostname'], ports=ports)
40
36
  self._public_network: Network = public_network
@@ -151,34 +147,21 @@ class RemoteHostProxy:
151
147
  docker = BiolibDockerClient.get_docker_client()
152
148
  base_url = BiolibApiClient.get().base_url
153
149
  if self.is_app_caller_proxy:
150
+ if not utils.IS_RUNNING_IN_CLOUD or not utils.BIOLIB_CLOUD_BASE_URL:
151
+ raise BioLibError('Calling apps inside apps is not supported in local compute environment')
152
+
154
153
  logger_no_user_data.debug(f'Job "{self._job_uuid}" writing config for and starting App Caller Proxy...')
155
- if utils.BIOLIB_CLOUD_BASE_URL:
156
- cloud_base_url = utils.BIOLIB_CLOUD_BASE_URL
157
- else:
158
- if base_url in ('https://biolib.com', 'https://staging-elb.biolib.com'):
159
- cloud_base_url = 'https://biolibcloud.com'
160
- else:
161
- raise BioLibError('Calling apps inside apps is not supported in local compute environment')
162
-
163
- compute_node_uuid: Optional[str] = None
164
- compute_node_auth_token: Optional[str] = None
165
- if utils.IS_RUNNING_IN_CLOUD:
166
- config = CloudUtils.get_webserver_config()
167
- compute_node_uuid = config['compute_node_info']['public_id']
168
- compute_node_auth_token = config['compute_node_info']['auth_token']
169
- s3_results_bucket_name = config['s3_general_storage_bucket_name']
170
- s3_results_base_url = f'https://{s3_results_bucket_name}.s3.amazonaws.com'
171
- else:
172
- if base_url in ('https://biolib.com', 'https://staging-elb.biolib.com'):
173
- s3_results_base_url = 'https://biolib-cloud-api.s3.amazonaws.com'
174
- else:
175
- raise BioLibError('Calling apps inside apps locally is only supported on biolib.com')
154
+ cloud_base_url = utils.BIOLIB_CLOUD_BASE_URL
155
+
156
+ config = CloudUtils.get_webserver_config()
157
+ compute_node_uuid = config['compute_node_info']['public_id']
158
+ compute_node_auth_token = config['compute_node_info']['auth_token']
176
159
 
177
160
  # TODO: Get access_token from new API class instead
178
161
  access_token = BiolibApiClient.get().access_token
179
162
  bearer_token = f'Bearer {access_token}' if access_token else ''
180
163
 
181
- nginx_config = f'''
164
+ nginx_config = f"""
182
165
  events {{
183
166
  worker_connections 1024;
184
167
  }}
@@ -195,23 +178,12 @@ http {{
195
178
  default "";
196
179
  }}
197
180
 
198
- map $request_method $bearer_token_on_patch {{
199
- PATCH "{bearer_token}";
200
- default "";
201
- }}
202
-
203
181
  map $request_method $bearer_token_on_patch_and_get {{
204
182
  PATCH "{bearer_token}";
205
183
  GET "{bearer_token}";
206
184
  default "";
207
185
  }}
208
186
 
209
- map $request_method $bearer_token_on_post_and_get {{
210
- POST "{bearer_token}";
211
- GET "{bearer_token}";
212
- default "";
213
- }}
214
-
215
187
  server {{
216
188
  listen 80;
217
189
  resolver 127.0.0.11 valid=30s;
@@ -299,14 +271,18 @@ http {{
299
271
 
300
272
  location /api/lfs/ {{
301
273
  proxy_pass {base_url}/api/lfs/;
302
- proxy_set_header authorization {'$bearer_token_on_post_and_get' if self._can_push_data_record_for_user else '$bearer_token_on_get' if self._can_access_all_data_records_of_user else '""'};
274
+ proxy_set_header authorization "";
275
+ proxy_set_header compute-node-auth-token "{compute_node_auth_token}";
276
+ proxy_set_header job-uuid "{self._job_uuid}";
303
277
  proxy_set_header cookie "";
304
278
  proxy_ssl_server_name on;
305
279
  }}
306
280
 
307
281
  location /api/app/ {{
308
282
  proxy_pass {base_url}/api/app/;
309
- proxy_set_header authorization {'$bearer_token_on_get' if self._can_access_all_data_records_of_user else '""'};
283
+ proxy_set_header authorization "";
284
+ proxy_set_header compute-node-auth-token "{compute_node_auth_token}";
285
+ proxy_set_header job-uuid "{self._job_uuid}";
310
286
  proxy_set_header cookie "";
311
287
  proxy_ssl_server_name on;
312
288
  }}
@@ -318,20 +294,6 @@ http {{
318
294
  proxy_ssl_server_name on;
319
295
  }}
320
296
 
321
- location /cloud-proxy/ {{
322
- proxy_pass {cloud_base_url}/cloud-proxy/;
323
- proxy_set_header authorization "";
324
- proxy_set_header cookie "";
325
- proxy_ssl_server_name on;
326
- }}
327
-
328
- location /job-storage/ {{
329
- proxy_pass {s3_results_base_url}/job-storage/;
330
- proxy_set_header authorization "";
331
- proxy_set_header cookie "";
332
- proxy_ssl_server_name on;
333
- }}
334
-
335
297
  location /proxy/storage/job-storage/ {{
336
298
  proxy_pass {cloud_base_url}/proxy/storage/job-storage/;
337
299
  proxy_set_header authorization "";
@@ -339,14 +301,12 @@ http {{
339
301
  proxy_ssl_server_name on;
340
302
  }}
341
303
 
342
- {f"""
343
304
  location /proxy/storage/lfs/versions/ {{
344
305
  proxy_pass {cloud_base_url}/proxy/storage/lfs/versions/;
345
306
  proxy_set_header authorization "";
346
307
  proxy_set_header cookie "";
347
308
  proxy_ssl_server_name on;
348
309
  }}
349
- """ if self._can_push_data_record_for_user or self._can_access_all_data_records_of_user else ''}
350
310
 
351
311
  location /proxy/cloud/ {{
352
312
  proxy_pass {cloud_base_url}/proxy/cloud/;
@@ -360,7 +320,7 @@ http {{
360
320
  }}
361
321
  }}
362
322
  }}
363
- '''
323
+ """
364
324
  else:
365
325
  nginx_config = """
366
326
  events {}
@@ -16,5 +16,4 @@ class WebserverConfig(TypedDict):
16
16
  base_url: str
17
17
  compute_node_info: ComputeNodeInfo
18
18
  is_dev: bool
19
- s3_general_storage_bucket_name: str
20
19
  shutdown_times: ShutdownTimes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybiolib
3
- Version: 1.1.2025
3
+ Version: 1.1.2036
4
4
  Summary: BioLib Python Client
5
5
  Home-page: https://github.com/biolib
6
6
  License: MIT
@@ -13,19 +13,19 @@ biolib/_internal/libs/fusepy/__init__.py,sha256=AWDzNFS-XV_5yKb0Qx7kggIhPzq1nj_B
13
13
  biolib/_internal/push_application.py,sha256=H1PGNtVJ0vRC0li39gFMpPpjm6QeZ8Ob-7cLkLmxS_Y,10009
14
14
  biolib/_internal/runtime.py,sha256=BnFvRWYnxPXCgOtfxupN255Zxx9Gw6oPZyzUIGODw3k,3060
15
15
  biolib/_internal/utils/__init__.py,sha256=p5vsIFyu-zYqBgdSMfwW9NC_jk7rXvvCbV4Bzd3As7c,630
16
- biolib/api/__init__.py,sha256=iIO8ZRdn7YDhY5cR47-Wo1YsNOK8H6RN6jn8yor5WJI,137
17
- biolib/api/client.py,sha256=-8Rwe-3WLyRbod4i70nM9_t7PqC1NucrHwgbTxfCA18,3051
16
+ biolib/api/__init__.py,sha256=mQ4u8FijqyLzjYMezMUUbbBGNB3iFmkNdjXnWPZ7Jlw,138
17
+ biolib/api/client.py,sha256=9MD1qI52BnRC_QSydFGjyFquwFw0R9dkDfUrjUouuHQ,3490
18
18
  biolib/app/__init__.py,sha256=cdPtcfb_U-bxb9iSL4fCEq2rpD9OjkyY4W-Zw60B0LI,37
19
19
  biolib/app/app.py,sha256=8AvPYL1W2wxQ7t7BB2KeVU2WPrm3UL6vVuHPGs8g9L0,8388
20
20
  biolib/app/search_apps.py,sha256=K4a41f5XIWth2BWI7OffASgIsD0ko8elCax8YL2igaY,1470
21
21
  biolib/biolib_api_client/__init__.py,sha256=E5EMa19wJoblwSdQPYrxc_BtIeRsAuO0L_jQweWw-Yk,182
22
22
  biolib/biolib_api_client/api_client.py,sha256=J03jRVvod1bgwwAZ3BZVKlUSJi43-ev2DUB0j63GZpc,7189
23
- biolib/biolib_api_client/app_types.py,sha256=NpOFN9oVF08qpo2nXhKwC_AQYAIuSoqn9FeqGXTWhx8,2511
23
+ biolib/biolib_api_client/app_types.py,sha256=lm_mZ5knl-70eVB5Zj03jSMrPN1ERqu_5ofzcuSUwN4,2425
24
24
  biolib/biolib_api_client/auth.py,sha256=kjm0ZHnH3I8so3su2sZbBxNHYp-ZUdrZ5lwQ0K36RSw,949
25
25
  biolib/biolib_api_client/biolib_app_api.py,sha256=DndlVxrNTes6DOaWyMINLGZQCRMWVvR7gwt5HVlyf5Y,4240
26
26
  biolib/biolib_api_client/biolib_job_api.py,sha256=IpFahcRzm7GNy8DJ-XHYe-x7r4Voba8o22IXw5puHn8,6782
27
27
  biolib/biolib_api_client/common_types.py,sha256=RH-1KNHqUF-EkTpfPOSTt5Mq1GPdfju_cqXDesscO1I,123
28
- biolib/biolib_api_client/job_types.py,sha256=MUzXv7nCsoLiPxdC3D4mZe9a4xTeq7FgxTElLVwVhnw,1301
28
+ biolib/biolib_api_client/job_types.py,sha256=Dl4NhU2xpgpXV-7YIoDf6WL63SLR5bni55OX8x5539M,1300
29
29
  biolib/biolib_api_client/lfs_types.py,sha256=xaGjE-yUyNVM3LyKdslJn5ZXWp6_kVCd4o-ch8Czfm4,227
30
30
  biolib/biolib_api_client/user_state.py,sha256=XcgWV-MgVk88mIlMmnu8yHxMu8OCaw8o0tk7TVo5Hcg,637
31
31
  biolib/biolib_binary_format/__init__.py,sha256=HMl5SdX_VUWE4OQzi4Jf_yFvC7b0bSPOGPHYi9dWM2Q,185
@@ -57,7 +57,7 @@ biolib/cli/start.py,sha256=rg8VVY8rboFhf1iQo3zE3WA5oh_R1VWWfYJEO1gMReY,1737
57
57
  biolib/compute_node/.gitignore,sha256=GZdZ4g7HftqfOfasFpBC5zV1YQAbht1a7EzcXD6f3zg,45
58
58
  biolib/compute_node/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
59
  biolib/compute_node/cloud_utils/__init__.py,sha256=VZSScLqaz5tg_gpMvWgwkAu9Qf-vgW_QHRoDOaAmU44,67
60
- biolib/compute_node/cloud_utils/cloud_utils.py,sha256=KIZjBnZPBtHParrR_KnRl7N343sHXMQugH9lkwAwTFk,7621
60
+ biolib/compute_node/cloud_utils/cloud_utils.py,sha256=_iaKelsmQLLwbDKVXZMXPFZayZPH9iHXc4NISFP9uzk,7462
61
61
  biolib/compute_node/job_worker/__init__.py,sha256=ipdPWaABKYrltxny15e2kK8PWdEE7VzXbkKK6wM_zDk,71
62
62
  biolib/compute_node/job_worker/cache_state.py,sha256=MwjSRzcJJ_4jybqvBL4xdgnDYSIiw4s90pNn83Netoo,4830
63
63
  biolib/compute_node/job_worker/cache_types.py,sha256=ajpLy8i09QeQS9dEqTn3T6NVNMY_YsHQkSD5nvIHccQ,818
@@ -70,19 +70,19 @@ biolib/compute_node/job_worker/executors/types.py,sha256=yP5gG39hr-DLnw9bOE--VHi
70
70
  biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py,sha256=_cvEiZbOwfkv6fYmfrvdi_FVviIEYr_dSClQcOQaUWM,1198
71
71
  biolib/compute_node/job_worker/job_max_runtime_timer_thread.py,sha256=K_xgz7IhiIjpLlXRk8sqaMyLoApcidJkgu29sJX0gb8,1174
72
72
  biolib/compute_node/job_worker/job_storage.py,sha256=LNkklckDLbYgCHsK5FGrEK75Kw-H4f4JcTCAtuE9His,4035
73
- biolib/compute_node/job_worker/job_worker.py,sha256=KDtj3rKokZVKx323-Z0brd5paSYIN6AOhPLHyYQjT5E,29101
73
+ biolib/compute_node/job_worker/job_worker.py,sha256=fuWoYJo9HOqLmWl8yeCXh0mhT4ebbkrWac-BVb58khs,28842
74
74
  biolib/compute_node/job_worker/large_file_system.py,sha256=XXqRlVtYhs-Ji9zQGIk5KQPXFO_Q5jJH0nnlw4GkeMY,10461
75
75
  biolib/compute_node/job_worker/mappings.py,sha256=Z48Kg4nbcOvsT2-9o3RRikBkqflgO4XeaWxTGz-CNvI,2499
76
76
  biolib/compute_node/job_worker/utilization_reporter_thread.py,sha256=7tm5Yk9coqJ9VbEdnO86tSXI0iM0omwIyKENxdxiVXk,8575
77
77
  biolib/compute_node/job_worker/utils.py,sha256=wgxcIA8yAhUPdCwyvuuJ0JmreyWmmUoBO33vWtG60xg,1282
78
- biolib/compute_node/remote_host_proxy.py,sha256=BYmdw6LmyS0YouKsgAsoROX3__rVPantcJu1luIsm2Q,16352
78
+ biolib/compute_node/remote_host_proxy.py,sha256=GsCZhts8rYvq7DJuX1y2pfFF5Jhj5-nsnNWJuipbn3w,14422
79
79
  biolib/compute_node/socker_listener_thread.py,sha256=T5_UikA3MB9bD5W_dckYLPTgixh72vKUlgbBvj9dbM0,1601
80
80
  biolib/compute_node/socket_sender_thread.py,sha256=YgamPHeUm2GjMFGx8qk-99WlZhEs-kAb3q_2O6qByig,971
81
81
  biolib/compute_node/utils.py,sha256=M7i_WTyxbFM3Lri9RWZ_8FeQNYrQIWpKGLfp2I55oeY,4677
82
82
  biolib/compute_node/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
83
  biolib/compute_node/webserver/gunicorn_flask_application.py,sha256=jPfR_YvNBekLUXWo_vHFV-FIwlb8s8tacKmGHvh93qc,914
84
84
  biolib/compute_node/webserver/webserver.py,sha256=15PkRyhtdtSgFDxa0z78aPO4ciZURsFqJYi-HtUmZF8,6494
85
- biolib/compute_node/webserver/webserver_types.py,sha256=Vmt1ZDecYhGBVEYWcW1DVxee1DEPqkqyxQzbsObXWbI,420
85
+ biolib/compute_node/webserver/webserver_types.py,sha256=2t8EaFKESnves3BA_NBdnS2yAdo1qwamCFHiSt888nE,380
86
86
  biolib/compute_node/webserver/webserver_utils.py,sha256=XWvwYPbWNR3qS0FYbLLp-MDDfVk0QdaAmg3xPrT0H2s,4234
87
87
  biolib/compute_node/webserver/worker_thread.py,sha256=26tG73TADnOcXsAr7Iyf6smrLlCqB4x-vvmpUb8WqnA,11569
88
88
  biolib/experiments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -109,8 +109,8 @@ biolib/utils/cache_state.py,sha256=u256F37QSRIVwqKlbnCyzAX4EMI-kl6Dwu6qwj-Qmag,3
109
109
  biolib/utils/multipart_uploader.py,sha256=XvGP1I8tQuKhAH-QugPRoEsCi9qvbRk-DVBs5PNwwJo,8452
110
110
  biolib/utils/seq_util.py,sha256=jC5WhH63FTD7SLFJbxQGA2hOt9NTwq9zHl_BEec1Z0c,4907
111
111
  biolib/utils/zip/remote_zip.py,sha256=0wErYlxir5921agfFeV1xVjf29l9VNgGQvNlWOlj2Yc,23232
112
- pybiolib-1.1.2025.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
113
- pybiolib-1.1.2025.dist-info/METADATA,sha256=6lmW6PO_BxMu1HXkuURGnOWspzomoeU21nIvSVBemDg,1508
114
- pybiolib-1.1.2025.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
115
- pybiolib-1.1.2025.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
116
- pybiolib-1.1.2025.dist-info/RECORD,,
112
+ pybiolib-1.1.2036.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
113
+ pybiolib-1.1.2036.dist-info/METADATA,sha256=jnDPVQpyei11ZP9m3YnzsgTMA2cvFq97xlWwDi8q_8g,1508
114
+ pybiolib-1.1.2036.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
115
+ pybiolib-1.1.2036.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
116
+ pybiolib-1.1.2036.dist-info/RECORD,,