pybiolib 1.1.1753__py3-none-any.whl → 1.1.1769__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.
@@ -0,0 +1 @@
1
+ from .job_data import RuntimeJobData
@@ -0,0 +1,29 @@
1
+ import json
2
+ from biolib.typing_utils import TypedDict, Optional, cast
3
+
4
+
5
+ class RuntimeJobDataDict(TypedDict):
6
+ version: str
7
+ job_requested_machine: str
8
+ job_uuid: str
9
+ job_auth_token: str
10
+
11
+
12
+ class RuntimeJobData:
13
+ _job_data: Optional[RuntimeJobDataDict] = None
14
+
15
+ @staticmethod
16
+ def get() -> Optional[RuntimeJobDataDict]:
17
+ if not RuntimeJobData._job_data:
18
+ try:
19
+ with open('/biolib/secrets/biolib_system_secret', mode='r') as file:
20
+ job_data: RuntimeJobDataDict = json.load(file)
21
+ except BaseException:
22
+ return None
23
+
24
+ if not job_data['version'].startswith('1.'):
25
+ raise Exception(f"Unexpected system secret version {job_data['version']} expected 1.x.x")
26
+
27
+ RuntimeJobData._job_data = job_data
28
+
29
+ return cast(RuntimeJobDataDict, RuntimeJobData._job_data)
@@ -6,6 +6,7 @@ import os
6
6
  from datetime import datetime, timezone
7
7
  from json.decoder import JSONDecodeError
8
8
 
9
+ from biolib._internal.runtime import RuntimeJobData
9
10
  from biolib._internal.http_client import HttpClient
10
11
  from biolib.typing_utils import Optional
11
12
  from biolib.biolib_errors import BioLibError
@@ -188,8 +189,9 @@ class BiolibApiClient:
188
189
 
189
190
  @staticmethod
190
191
  def assert_is_signed_in(authenticated_action_description: str) -> None:
192
+ runtime_job_data = RuntimeJobData.get()
191
193
  api_client = BiolibApiClient.get()
192
- if not api_client.is_signed_in:
194
+ if not api_client.is_signed_in and not runtime_job_data:
193
195
  raise BioLibError(
194
196
  f'You must be signed in to {authenticated_action_description}. '
195
197
  f'Please set the environment variable "BIOLIB_TOKEN"'
@@ -35,7 +35,7 @@ def encode_multipart(data, files):
35
35
  line_array.append('')
36
36
 
37
37
  data_encoded = b'\r\n'.join([line.encode() if isinstance(line, str) else line for line in line_array])
38
- return 'multipart/form-data; boundary={}'.format(boundary), data_encoded
38
+ return f'multipart/form-data; boundary={boundary}', data_encoded
39
39
 
40
40
 
41
41
  def _get_git_branch_name() -> str:
@@ -81,8 +81,8 @@ class CloudUtils:
81
81
  'error': error,
82
82
  },
83
83
  )
84
- except BaseException as error:
85
- logger_no_user_data.error(f'Failed to deregister got error: {error}')
84
+ except BaseException as error_object:
85
+ logger_no_user_data.error(f'Failed to deregister got error: {error_object}')
86
86
  else:
87
87
  logger_no_user_data.error("Not deregistering as environment is not cloud")
88
88
 
@@ -18,6 +18,8 @@ from docker.errors import ImageNotFound, APIError # type: ignore
18
18
  from docker.models.containers import Container # type: ignore
19
19
 
20
20
  from biolib import utils
21
+
22
+ from biolib._internal.runtime.job_data import RuntimeJobDataDict
21
23
  from biolib.biolib_binary_format import ModuleInput, ModuleOutputV2
22
24
  from biolib.biolib_docker_client import BiolibDockerClient
23
25
  from biolib.biolib_errors import DockerContainerNotFoundDuringExecutionException, BioLibError
@@ -267,12 +269,12 @@ class DockerExecutor:
267
269
  internal_network = self._options['internal_network']
268
270
  extra_hosts: Dict[str, str] = {}
269
271
 
270
- biolib_system_secret = {
271
- 'version': '1.0.0',
272
- 'job_requested_machine': self._options['job']['requested_machine'],
273
- 'job_uuid': self._options['job']['public_id'],
274
- 'job_auth_token': self._options['job']['auth_token'],
275
- }
272
+ biolib_system_secret = RuntimeJobDataDict(
273
+ version='1.0.0',
274
+ job_requested_machine=self._options['job']['requested_machine'],
275
+ job_uuid=self._options['job']['public_id'],
276
+ job_auth_token=self._options['job']['auth_token'],
277
+ )
276
278
  secrets: Dict[str, str] = dict(
277
279
  **module.get('secrets', {}),
278
280
  biolib_system_secret=json.dumps(biolib_system_secret, indent=4),
@@ -97,7 +97,11 @@ class JobWorker:
97
97
  if socket_port:
98
98
  self._connect_to_parent()
99
99
 
100
- def _handle_exit_gracefully(self, signum: int, frame: FrameType) -> None: # pylint: disable=unused-argument
100
+ def _handle_exit_gracefully(
101
+ self,
102
+ signum: int,
103
+ frame: Optional[FrameType], # pylint: disable=unused-argument
104
+ ) -> None:
101
105
  job_id = self._root_job_wrapper["job"]["public_id"] if self._root_job_wrapper else None
102
106
  logger_no_user_data.debug(
103
107
  f'_JobWorker ({job_id}) got exit signal {signal.Signals(signum).name}' # pylint: disable=no-member
@@ -281,9 +281,8 @@ http {{
281
281
  proxy_ssl_server_name on;
282
282
  }}
283
283
 
284
- location ~* "^/api/lfs/.*$" {{
285
- # Note: Using $1 here as URI part from regex must be used for proxy_pass
286
- proxy_pass {base_url}/api/lfs/$1;
284
+ location /api/lfs/ {{
285
+ proxy_pass {base_url}/api/lfs/;
287
286
  proxy_set_header authorization {'$bearer_token_on_post' if self._can_push_data_record_for_user else '""'};
288
287
  proxy_set_header cookie "";
289
288
  proxy_ssl_server_name on;
biolib/jobs/job.py CHANGED
@@ -310,7 +310,7 @@ class Job:
310
310
  ).json()
311
311
  except Exception as error:
312
312
  logger.error(f'Could not get full streamed logs due to: {error}')
313
- raise BioLibError from error
313
+ raise BioLibError('Could not get full streamed logs') from error
314
314
 
315
315
  for status_update in response_json.get('previous_status_updates', []):
316
316
  logger.info(f'Cloud: {status_update["log_message"]}')
biolib/lfs/utils.py CHANGED
@@ -6,15 +6,18 @@ from collections import namedtuple
6
6
  from pathlib import Path
7
7
  from struct import Struct
8
8
 
9
- from biolib import utils
9
+ from biolib import utils, api
10
+ from biolib._internal.runtime import RuntimeJobData as _RuntimeJobData
10
11
  from biolib._internal.http_client import HttpClient
11
12
  from biolib.app import BioLibApp
12
13
  from biolib.biolib_api_client.biolib_account_api import BiolibAccountApi
13
14
  from biolib.biolib_api_client.biolib_large_file_system_api import BiolibLargeFileSystemApi
14
15
  from biolib.biolib_api_client import BiolibApiClient
16
+ from biolib.biolib_api_client.lfs_types import LargeFileSystem
15
17
  from biolib.biolib_logging import logger
16
18
  from biolib.biolib_errors import BioLibError
17
19
  from biolib.typing_utils import List, Tuple, Iterator, Optional
20
+ from biolib.utils.app_uri import parse_app_uri
18
21
  from biolib.utils.zip.remote_zip import RemoteZip # type:ignore
19
22
 
20
23
 
@@ -98,11 +101,26 @@ def get_iterable_zip_stream(files: List[str], chunk_size: int) -> Iterator[bytes
98
101
  yield chunk
99
102
 
100
103
 
101
- def create_large_file_system(lfs_uri: str):
104
+ def create_large_file_system(lfs_uri: str) -> None:
102
105
  BiolibApiClient.assert_is_signed_in(authenticated_action_description='create a Large File System')
103
- lfs_account, lfs_name = _get_lfs_info_from_uri(lfs_uri)
104
- lfs_resource = BiolibLargeFileSystemApi.create(account_uuid=lfs_account['public_id'], name=lfs_name)
105
- logger.info(f"Successfully created new Large File System '{lfs_resource['uri']}'")
106
+
107
+ runtime_job_data = _RuntimeJobData.get()
108
+ if runtime_job_data:
109
+ uri_parsed = parse_app_uri(lfs_uri)
110
+ response = api.client.post(
111
+ path='/lfs/',
112
+ data={
113
+ 'account_handle': uri_parsed['account_handle_normalized'],
114
+ 'name': uri_parsed['app_name_normalized'],
115
+ },
116
+ )
117
+ lfs: LargeFileSystem = response.json()
118
+ else:
119
+ # TODO: Also use account_handle directly in POST request when backends are updated
120
+ lfs_account, lfs_name = _get_lfs_info_from_uri(lfs_uri)
121
+ lfs = BiolibLargeFileSystemApi.create(account_uuid=lfs_account['public_id'], name=lfs_name)
122
+
123
+ logger.info(f"Successfully created new Large File System '{lfs['uri']}'")
106
124
 
107
125
 
108
126
  def push_large_file_system(lfs_uri: str, input_dir: str, chunk_size_in_mb: Optional[int] = None) -> None:
biolib/runtime/results.py CHANGED
@@ -1,20 +1,14 @@
1
- import json
2
-
3
1
  from biolib import api
2
+ from biolib._internal.runtime import RuntimeJobData as _RuntimeJobData
4
3
 
5
4
 
6
5
  def set_main_result_prefix(result_prefix: str) -> None:
7
- try:
8
- with open('/biolib/secrets/biolib_system_secret', mode='r') as system_secrets_file:
9
- system_secrets = json.loads(system_secrets_file.read())
10
- except Exception: # pylint: disable=broad-except
11
- raise Exception('Unable to load the BioLib runtime system secret') from None
12
-
13
- if not system_secrets['version'].startswith('1.'):
14
- raise Exception(f"Unexpected system secret version {system_secrets['version']} expected 1.x.x")
6
+ runtime_job_data = _RuntimeJobData.get()
7
+ if not runtime_job_data:
8
+ raise Exception('Unable to load BioLib runtime job data') from None
15
9
 
16
10
  api.client.patch(
17
11
  data={'result_name_prefix': result_prefix},
18
- headers={'Job-Auth-Token': system_secrets['job_auth_token']},
19
- path=f"/jobs/{system_secrets['job_uuid']}/main_result/",
12
+ headers={'Job-Auth-Token': runtime_job_data['job_auth_token']},
13
+ path=f"/jobs/{runtime_job_data['job_uuid']}/main_result/",
20
14
  )
biolib/utils/__init__.py CHANGED
@@ -4,9 +4,9 @@ import os
4
4
  import socket
5
5
  import sys
6
6
 
7
- from typing import Optional
8
7
  from importlib_metadata import version, PackageNotFoundError
9
8
 
9
+ from biolib.typing_utils import Optional
10
10
  from biolib.utils.seq_util import SeqUtil, SeqUtilRecord
11
11
  from biolib._internal.http_client import HttpClient
12
12
  from biolib.biolib_logging import logger_no_user_data, logger
@@ -10,7 +10,7 @@ from biolib.biolib_errors import BioLibError
10
10
  from biolib.biolib_logging import logger_no_user_data
11
11
  from biolib.typing_utils import Optional, Generic, TypeVar
12
12
 
13
- StateType = TypeVar('StateType')
13
+ StateType = TypeVar('StateType') # pylint: disable=invalid-name
14
14
 
15
15
 
16
16
  class CacheStateError(BioLibError):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybiolib
3
- Version: 1.1.1753
3
+ Version: 1.1.1769
4
4
  Summary: BioLib Python Client
5
5
  Home-page: https://github.com/biolib
6
6
  License: MIT
@@ -4,17 +4,19 @@ biolib/__init__.py,sha256=ImZ0G02v6kpvzfyz8lPrLp2TdTKobhbaHZXvf8LV8Bg,3819
4
4
  biolib/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  biolib/_internal/http_client.py,sha256=HgKv559gVjeR-pgxhP0mqhd9a7Seuy9AJl57TxNwjJ8,4098
6
6
  biolib/_internal/push_application.py,sha256=NXQNLPucqkq7eKbNCJQA8OYx4CXYHRJ1CG1ViPAJJH4,10680
7
+ biolib/_internal/runtime/__init__.py,sha256=T8o9Ha320O5k024Z93kWxUnGMi80NVZRyw4wdOSNA0s,37
8
+ biolib/_internal/runtime/job_data.py,sha256=t-fN9i0tK3B6ly9PL7WQm6JxK8yC_hJ6xx65qcTyfLg,892
7
9
  biolib/api/__init__.py,sha256=iIO8ZRdn7YDhY5cR47-Wo1YsNOK8H6RN6jn8yor5WJI,137
8
10
  biolib/api/client.py,sha256=MtDkH2Amr2Fko-bCR5DdookJu0yZ1q-6K_PPg4KK_Ek,2941
9
11
  biolib/app/__init__.py,sha256=cdPtcfb_U-bxb9iSL4fCEq2rpD9OjkyY4W-Zw60B0LI,37
10
12
  biolib/app/app.py,sha256=r63gDoH1s8uQOGITmiKOVIrYDYdMrB5nwXHNRt2Da2M,10197
11
13
  biolib/app/search_apps.py,sha256=CIanvDebNpMtWck0w4IoR_tRZ6LpSWC8DPxXW2e6Ww4,1495
12
14
  biolib/biolib_api_client/__init__.py,sha256=E5EMa19wJoblwSdQPYrxc_BtIeRsAuO0L_jQweWw-Yk,182
13
- biolib/biolib_api_client/api_client.py,sha256=oaLqTb208TLRVW4-h_va734TrVDRD3kLpFJ93cwQTxk,7130
15
+ biolib/biolib_api_client/api_client.py,sha256=AtD4ZA1onPFt00PpmDsC1yLjShuNhmCciXFwPrYsvI8,7255
14
16
  biolib/biolib_api_client/app_types.py,sha256=rEw4HICV7ujdmlzM3BjRcMNMbiYItliivpH0rkeJx4s,2465
15
17
  biolib/biolib_api_client/auth.py,sha256=kjm0ZHnH3I8so3su2sZbBxNHYp-ZUdrZ5lwQ0K36RSw,949
16
18
  biolib/biolib_api_client/biolib_account_api.py,sha256=sHng5jDvSktv6tOLKU8wJRieidY2kLxRU8hI_6ZauXE,210
17
- biolib/biolib_api_client/biolib_app_api.py,sha256=vPFoONWh-i-Bg7pm_x50EQqbN9qQFLgNDTkkWKqDUTY,4248
19
+ biolib/biolib_api_client/biolib_app_api.py,sha256=DndlVxrNTes6DOaWyMINLGZQCRMWVvR7gwt5HVlyf5Y,4240
18
20
  biolib/biolib_api_client/biolib_job_api.py,sha256=IpFahcRzm7GNy8DJ-XHYe-x7r4Voba8o22IXw5puHn8,6782
19
21
  biolib/biolib_api_client/biolib_large_file_system_api.py,sha256=p8QhvQ0aI0NJgyRm7duqDVtPx0zrVaSLKS22ocOafFQ,1038
20
22
  biolib/biolib_api_client/common_types.py,sha256=RH-1KNHqUF-EkTpfPOSTt5Mq1GPdfju_cqXDesscO1I,123
@@ -48,25 +50,25 @@ biolib/cli/start.py,sha256=TpZq1VHVkLTW1_PyjIGkJg44E3PzxSaGrN2D_rNJL0c,1736
48
50
  biolib/compute_node/.gitignore,sha256=GZdZ4g7HftqfOfasFpBC5zV1YQAbht1a7EzcXD6f3zg,45
49
51
  biolib/compute_node/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
52
  biolib/compute_node/cloud_utils/__init__.py,sha256=VZSScLqaz5tg_gpMvWgwkAu9Qf-vgW_QHRoDOaAmU44,67
51
- biolib/compute_node/cloud_utils/cloud_utils.py,sha256=OSnFEFzpNEnEBCGkFtUvw_V6Qhqo2TQMohKjYRQdzDM,7607
53
+ biolib/compute_node/cloud_utils/cloud_utils.py,sha256=KIZjBnZPBtHParrR_KnRl7N343sHXMQugH9lkwAwTFk,7621
52
54
  biolib/compute_node/job_worker/__init__.py,sha256=ipdPWaABKYrltxny15e2kK8PWdEE7VzXbkKK6wM_zDk,71
53
55
  biolib/compute_node/job_worker/cache_state.py,sha256=N2AxvvgfizKx9P_ysM0GDCmueMUlgcveA4xSdz_Z2IQ,4822
54
56
  biolib/compute_node/job_worker/cache_types.py,sha256=ajpLy8i09QeQS9dEqTn3T6NVNMY_YsHQkSD5nvIHccQ,818
55
57
  biolib/compute_node/job_worker/docker_image_cache.py,sha256=ansHIkJIq_EMW1nZNlW-RRLVVeKWTbzNICYaOHpKiRE,7460
56
58
  biolib/compute_node/job_worker/executors/__init__.py,sha256=bW6t1qi3PZTlHM4quaTLa8EI4ALTCk83cqcVJfJfJfE,145
57
- biolib/compute_node/job_worker/executors/docker_executor.py,sha256=vXL2Y7bemwjcICbq78m3K8DsNHkImYl1fgQhnWMYQOs,26348
59
+ biolib/compute_node/job_worker/executors/docker_executor.py,sha256=yeNTw28XGuz1RRDqHWY1tXlbWKJ8G6oP_d34j6OsZkk,26420
58
60
  biolib/compute_node/job_worker/executors/docker_types.py,sha256=VhsU1DKtJjx_BbCkVmiPZPH4ROiL1ygW1Y_s1Kbpa2o,216
59
61
  biolib/compute_node/job_worker/executors/tars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
62
  biolib/compute_node/job_worker/executors/types.py,sha256=yP5gG39hr-DLnw9bOE--VHi-1arDbIYiGuV1rlTbbHI,1466
61
63
  biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py,sha256=_cvEiZbOwfkv6fYmfrvdi_FVviIEYr_dSClQcOQaUWM,1198
62
64
  biolib/compute_node/job_worker/job_max_runtime_timer_thread.py,sha256=K_xgz7IhiIjpLlXRk8sqaMyLoApcidJkgu29sJX0gb8,1174
63
65
  biolib/compute_node/job_worker/job_storage.py,sha256=Ol43f43W6aD2EUkA6G2i9-WxdREr5JPSjo1xFylddOQ,4030
64
- biolib/compute_node/job_worker/job_worker.py,sha256=QwerjRPETxPa4DrI9_u2ZI89rBGtf6_w-KtIDvBI1Bw,28094
66
+ biolib/compute_node/job_worker/job_worker.py,sha256=QifGpDBn1ojJ5b43--XyXmz8YqsgNlGskh-z8mkYQqg,28147
65
67
  biolib/compute_node/job_worker/large_file_system.py,sha256=XXqRlVtYhs-Ji9zQGIk5KQPXFO_Q5jJH0nnlw4GkeMY,10461
66
68
  biolib/compute_node/job_worker/mappings.py,sha256=Z48Kg4nbcOvsT2-9o3RRikBkqflgO4XeaWxTGz-CNvI,2499
67
69
  biolib/compute_node/job_worker/utilization_reporter_thread.py,sha256=7tm5Yk9coqJ9VbEdnO86tSXI0iM0omwIyKENxdxiVXk,8575
68
70
  biolib/compute_node/job_worker/utils.py,sha256=wgxcIA8yAhUPdCwyvuuJ0JmreyWmmUoBO33vWtG60xg,1282
69
- biolib/compute_node/remote_host_proxy.py,sha256=GbqAnVju0fsEYQr3I4Voq_vdDM5p88vLFVV7Cl79n5g,14616
71
+ biolib/compute_node/remote_host_proxy.py,sha256=SAp8H-mlNLF5njISF6LTXhSnO9-l5KATiABk-06lS8k,14520
70
72
  biolib/compute_node/socker_listener_thread.py,sha256=T5_UikA3MB9bD5W_dckYLPTgixh72vKUlgbBvj9dbM0,1601
71
73
  biolib/compute_node/socket_sender_thread.py,sha256=YgamPHeUm2GjMFGx8qk-99WlZhEs-kAb3q_2O6qByig,971
72
74
  biolib/compute_node/utils.py,sha256=M7i_WTyxbFM3Lri9RWZ_8FeQNYrQIWpKGLfp2I55oeY,4677
@@ -80,14 +82,14 @@ biolib/experiments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
80
82
  biolib/experiments/experiment.py,sha256=xUd3LkV5ztFIjTx_ehBu8e-flvfuQnYimFtPj1upzb0,5942
81
83
  biolib/experiments/types.py,sha256=n9GxdFA7cLMfHvLLqLmZzX31ELeSSkMXFoEEdFsdWGY,171
82
84
  biolib/jobs/__init__.py,sha256=aIb2H2DHjQbM2Bs-dysFijhwFcL58Blp0Co0gimED3w,32
83
- biolib/jobs/job.py,sha256=mrRQd0aI8VElYgwd7BtXE-mjB0c4xbyRh8Ngpd2gZ7Q,15181
85
+ biolib/jobs/job.py,sha256=8ro2DRBB0gGe6D-tDFQRDSACDbhUOyttUqS5fgJNPt8,15217
84
86
  biolib/jobs/job_result.py,sha256=8GasUmUXD8SjUYrE2N-HrDx7-AI6TEkFONH8H91t01Q,4913
85
87
  biolib/jobs/types.py,sha256=4OAvlhOKANzFMrZDd-mhXpEd8RaKcx8sPneZUoWhJ2U,970
86
88
  biolib/lfs/__init__.py,sha256=wspftSqe_x7xPMZbeW8mcIBuxbHFCiFI3V4TuZU4nZ4,193
87
89
  biolib/lfs/cache.py,sha256=pQS2np21rdJ6I3DpoOutnzPHpLOZgUIS8TMltUJk_k4,2226
88
- biolib/lfs/utils.py,sha256=dVDNoXXfXFt9Sbf68tJ6BPv_cNAHMcqbrY2wLj-lLUA,9773
90
+ biolib/lfs/utils.py,sha256=YUFZlGABMfuOA0BwZ8JGOd-OKNGQVUElLP_4CHe4zyw,10461
89
91
  biolib/runtime/__init__.py,sha256=WyuNnkzj1r-Sx4J-xWzp3US2oo9m5aIuCOYRmjlZ3ug,44
90
- biolib/runtime/results.py,sha256=7Fzrddb319dLMgTS1AVvz-RaTxAWOr7Qt75ftfSci9E,778
92
+ biolib/runtime/results.py,sha256=OEtDFb5Auiubh6EClT9L_wMzfRpehIfRwj-8MSVDoz4,522
91
93
  biolib/sdk/__init__.py,sha256=vqqE2Sf3gLySkaJv8VgWtPRkYMi9hOf66y9Ay2waYVE,1339
92
94
  biolib/tables.py,sha256=acH7VjwAbadLo8P84FSnKEZxCTVsF5rEg9VPuxElNs8,872
93
95
  biolib/templates/__init__.py,sha256=Yx62sSyDCDesRQDQgmbDsLpfgEh93fWE8r9u4g2azXk,36
@@ -95,14 +97,14 @@ biolib/templates/example_app.py,sha256=EB3E3RT4SeO_ii5nVQqJpi5KDGNE_huF1ub-e5ZFv
95
97
  biolib/typing_utils.py,sha256=krMhxB3SedVQA3HXIrC7DBXWpHKWN5JNmXGcSrrysOc,263
96
98
  biolib/user/__init__.py,sha256=Db5wtxLfFz3ID9TULSSTo77csw9tO6RtxMRvV5cqKEE,39
97
99
  biolib/user/sign_in.py,sha256=CvHBgoYjg5d5CL9etVopns_g1pImgW8mQH3zAjpe1Ik,2061
98
- biolib/utils/__init__.py,sha256=AuBhxgZV8-3LWPnewhhYw4isQhPmVs-k55umk8t-r7U,5535
100
+ biolib/utils/__init__.py,sha256=fwjciJyJicvYyZcVTzfDBgD0SKY13DeXqvTeG4qZIy8,5548
99
101
  biolib/utils/app_uri.py,sha256=hOFsTQfA7QbyQyg9ItGdD8VDWBJw0vYMqzLdSiJXmqQ,1857
100
- biolib/utils/cache_state.py,sha256=BFrZlV4XZIueIFzAFiPidX4hmwADKY5Y5ZuqlerF5l0,3060
102
+ biolib/utils/cache_state.py,sha256=GaGPxQ1GfrBL6Mzo_HJPpmZCd_CbUDN_l_C5frQ5Sfs,3092
101
103
  biolib/utils/multipart_uploader.py,sha256=XvGP1I8tQuKhAH-QugPRoEsCi9qvbRk-DVBs5PNwwJo,8452
102
104
  biolib/utils/seq_util.py,sha256=3BGUppEaR8asFBxktHCrIW0cMmF23b06PsbDQOoeCDQ,4879
103
105
  biolib/utils/zip/remote_zip.py,sha256=0wErYlxir5921agfFeV1xVjf29l9VNgGQvNlWOlj2Yc,23232
104
- pybiolib-1.1.1753.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
105
- pybiolib-1.1.1753.dist-info/METADATA,sha256=c4l0Wpq57BahnCmhjjuXdiVprP7cjFdu71_CxR2mUWY,1508
106
- pybiolib-1.1.1753.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
107
- pybiolib-1.1.1753.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
108
- pybiolib-1.1.1753.dist-info/RECORD,,
106
+ pybiolib-1.1.1769.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
107
+ pybiolib-1.1.1769.dist-info/METADATA,sha256=KXli3IcKBh46aLip_NXxYFBYM6frmXZaid1fZATYEnw,1508
108
+ pybiolib-1.1.1769.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
109
+ pybiolib-1.1.1769.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
110
+ pybiolib-1.1.1769.dist-info/RECORD,,