pybiolib 1.2.1642__py3-none-any.whl → 1.2.1727__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.

Potentially problematic release.


This version of pybiolib might be problematic. Click here for more details.

biolib/cli/init.py CHANGED
@@ -10,18 +10,56 @@ from biolib import (
10
10
  )
11
11
  from biolib._internal.add_copilot_prompts import add_copilot_prompts
12
12
  from biolib._internal.add_gui_files import add_gui_files
13
- from biolib._internal.http_client import HttpError
13
+ from biolib._internal.http_client import HttpClient, HttpError
14
14
  from biolib._internal.string_utils import normalize_for_docker_tag
15
15
  from biolib._internal.templates import templates
16
16
  from biolib.api import client as api_client
17
17
  from biolib.biolib_api_client.api_client import BiolibApiClient
18
18
  from biolib.biolib_api_client.biolib_app_api import BiolibAppApi
19
+ from biolib.biolib_logging import logger_no_user_data
20
+ from biolib.typing_utils import Optional
19
21
  from biolib.user.sign_in import sign_in
20
22
  from biolib.utils import BIOLIB_PACKAGE_VERSION
21
23
 
22
24
 
25
+ def _get_latest_pypi_version() -> Optional[str]:
26
+ try:
27
+ response = HttpClient.request(
28
+ url='https://pypi.org/pypi/pybiolib/json',
29
+ timeout_in_seconds=5,
30
+ retries=1,
31
+ )
32
+ data = response.json()
33
+ version = data.get('info', {}).get('version')
34
+ if isinstance(version, str):
35
+ return version
36
+ return None
37
+ except Exception as error:
38
+ logger_no_user_data.debug(f'Failed to fetch latest version from PyPI: {error}')
39
+ return None
40
+
41
+
42
+ def _is_current_version_outdated(current: str, latest: str) -> bool:
43
+ try:
44
+ current_parts = [int(x) for x in current.split('.')]
45
+ latest_parts = [int(x) for x in latest.split('.')]
46
+ return current_parts < latest_parts
47
+ except (ValueError, AttributeError):
48
+ return False
49
+
50
+
23
51
  @click.command(help='Initialize a BioLib project', hidden=True)
24
52
  def init() -> None:
53
+ latest_version = _get_latest_pypi_version()
54
+ if latest_version and _is_current_version_outdated(BIOLIB_PACKAGE_VERSION, latest_version):
55
+ print(f'A newer version of pybiolib is available: {latest_version} (current: {BIOLIB_PACKAGE_VERSION})')
56
+ print('To upgrade, run: pip install --upgrade pybiolib')
57
+ print()
58
+ continue_input = input('Do you want to continue with the current version? [y/N]: ')
59
+ if continue_input.lower() not in ['y', 'yes']:
60
+ print('Please upgrade pybiolib and run `biolib init` again.')
61
+ return
62
+
25
63
  cwd = os.getcwd()
26
64
 
27
65
  app_uri = input('What URI do you want to create the application under? (leave blank to skip): ')
biolib/cli/run.py CHANGED
@@ -13,19 +13,23 @@ from biolib.typing_utils import Optional, Tuple
13
13
  help='Run an application on BioLib.',
14
14
  )
15
15
  @click.option('--experiment', type=str, required=False, help='Experiment name or URI to add the run to.')
16
- @click.option('--local', is_flag=True, required=False, help='Run the application locally.')
16
+ @click.option('--local', is_flag=True, required=False, hidden=True)
17
17
  @click.option('--non-blocking', is_flag=True, required=False, help='Run the application non blocking.')
18
18
  @click.argument('uri', required=True)
19
19
  @click.argument('args', nargs=-1, type=click.UNPROCESSED)
20
20
  def run(experiment: Optional[str], local: bool, non_blocking: bool, uri: str, args: Tuple[str]) -> None:
21
+ if local:
22
+ print('Error: Running applications locally with --local is no longer supported.', file=sys.stderr)
23
+ sys.exit(1)
24
+
21
25
  if experiment:
22
26
  with Experiment(uri=experiment):
23
- _run(local=local, non_blocking=non_blocking, uri=uri, args=args)
27
+ _run(non_blocking=non_blocking, uri=uri, args=args)
24
28
  else:
25
- _run(local=local, non_blocking=non_blocking, uri=uri, args=args)
29
+ _run(non_blocking=non_blocking, uri=uri, args=args)
26
30
 
27
31
 
28
- def _run(local: bool, non_blocking: bool, uri: str, args: Tuple[str]) -> None:
32
+ def _run(non_blocking: bool, uri: str, args: Tuple[str]) -> None:
29
33
  try:
30
34
  app = BioLibApp(uri=uri)
31
35
  except biolib_errors.BioLibError as error:
@@ -43,7 +47,6 @@ def _run(local: bool, non_blocking: bool, uri: str, args: Tuple[str]) -> None:
43
47
  args=list(args),
44
48
  stdin=_get_stdin(),
45
49
  files=None,
46
- machine=('local' if local else ''),
47
50
  blocking=blocking,
48
51
  )
49
52
 
@@ -361,7 +361,7 @@ class JobWorker:
361
361
  if remote_host_mappings:
362
362
  remote_host_proxy = RemoteHostProxy(
363
363
  remote_host_mappings=remote_host_mappings,
364
- job_id=job_id,
364
+ job=job,
365
365
  app_caller_network=None,
366
366
  )
367
367
  remote_host_proxy.start()
@@ -384,7 +384,7 @@ class JobWorker:
384
384
  try:
385
385
  app_caller_proxy = RemoteHostProxy(
386
386
  remote_host_mappings=[],
387
- job_id=job_id,
387
+ job=job,
388
388
  app_caller_network=self._internal_network,
389
389
  )
390
390
  app_caller_proxy.start()
@@ -1,4 +1,3 @@
1
- import base64
2
1
  import io
3
2
  import ipaddress
4
3
  import tarfile
@@ -10,7 +9,9 @@ from docker.models.networks import Network
10
9
  from docker.types import EndpointConfig
11
10
 
12
11
  from biolib import utils
12
+ from biolib._internal.utils import base64_encode_string
13
13
  from biolib.biolib_api_client import BiolibApiClient, RemoteHost
14
+ from biolib.biolib_api_client.job_types import CreatedJobDict
14
15
  from biolib.biolib_docker_client import BiolibDockerClient
15
16
  from biolib.biolib_errors import BioLibError
16
17
  from biolib.biolib_logging import logger_no_user_data
@@ -50,22 +51,26 @@ class RemoteHostProxy:
50
51
  def __init__(
51
52
  self,
52
53
  remote_host_mappings: List[RemoteHostMapping],
53
- job_id: str,
54
+ job: CreatedJobDict,
54
55
  app_caller_network: Optional[Network] = None,
55
56
  ):
56
57
  self._remote_host_mappings = remote_host_mappings
57
58
  self._app_caller_network = app_caller_network
58
59
  self.is_app_caller_proxy = app_caller_network is not None
59
60
 
60
- if not job_id:
61
- raise Exception('RemoteHostProxy missing argument "job_id"')
61
+ if not job:
62
+ raise Exception('RemoteHostProxy missing argument "job"')
62
63
 
64
+ self._job = job
63
65
  suffix = '-AppCallerProxy' if app_caller_network else ''
64
- self._name = f'biolib-remote-host-proxy-{job_id}{suffix}'
65
- self._job_uuid = job_id
66
+ self._name = f'biolib-remote-host-proxy-{self._job_uuid}{suffix}'
66
67
  self._container: Optional[Container] = None
67
68
  self._docker = BiolibDockerClient().get_docker_client()
68
69
 
70
+ @property
71
+ def _job_uuid(self) -> str:
72
+ return self._job['uuid']
73
+
69
74
  def get_hostname_to_ip_mapping(self) -> Dict[str, str]:
70
75
  return {mapping.hostname: mapping.static_ip for mapping in self._remote_host_mappings}
71
76
 
@@ -174,8 +179,12 @@ class RemoteHostProxy:
174
179
  access_token = BiolibApiClient.get().access_token
175
180
  bearer_token = f'Bearer {access_token}' if access_token else ''
176
181
 
177
- biolib_index_basic_auth = f'compute_node|admin:{compute_node_auth_token},{self._job_uuid}'
178
- biolib_index_basic_auth_base64 = base64.b64encode(biolib_index_basic_auth.encode('utf-8')).decode('utf-8')
182
+ user_uuid = self._job['user_id']
183
+ if user_uuid:
184
+ biolib_index_basic_auth = f'biolib_user|{user_uuid.replace("-", "_")}:cloud-{compute_node_auth_token}'
185
+ biolib_index_auth_header_value = f'Basic {base64_encode_string(biolib_index_basic_auth)}'
186
+ else:
187
+ biolib_index_auth_header_value = ''
179
188
 
180
189
  nginx_config = f"""
181
190
  events {{
@@ -343,7 +352,7 @@ http {{
343
352
 
344
353
  location /api/proxy/index/ {{
345
354
  proxy_pass https://$upstream_hostname$request_uri;
346
- proxy_set_header authorization "Basic {biolib_index_basic_auth_base64}";
355
+ proxy_set_header authorization "{biolib_index_auth_header_value}";
347
356
  proxy_set_header cookie "";
348
357
  proxy_ssl_server_name on;
349
358
  }}
@@ -385,13 +394,6 @@ http {{
385
394
  proxy_ssl_server_name on;
386
395
  }}
387
396
 
388
- location /proxy/index/ {{
389
- proxy_pass https://$upstream_hostname$request_uri;
390
- proxy_set_header authorization "Basic {biolib_index_basic_auth_base64}";
391
- proxy_set_header cookie "";
392
- proxy_ssl_server_name on;
393
- }}
394
-
395
397
  location / {{
396
398
  return 404 "Not found";
397
399
  }}
@@ -308,6 +308,19 @@ class Experiment:
308
308
  )
309
309
 
310
310
  def rename(self, destination: str) -> None:
311
+ r"""Rename this experiment to a new URI.
312
+
313
+ Args:
314
+ destination (str): The new URI for the experiment
315
+ (e.g., 'username/new-experiment-name').
316
+
317
+ Example::
318
+
319
+ >>> experiment = biolib.get_experiment(uri='username/my-experiment')
320
+ >>> experiment.rename('username/my-renamed-experiment')
321
+ >>> print(experiment.uri)
322
+ 'username/my-renamed-experiment'
323
+ """
311
324
  self._api_client.patch(f'/resources/{self.uuid}/', data={'uri': destination})
312
325
  self._refetch()
313
326
 
@@ -10,7 +10,7 @@ from biolib._internal.http_client import HttpClient
10
10
  from biolib.biolib_api_client import BiolibApiClient
11
11
  from biolib.biolib_errors import BioLibError
12
12
  from biolib.biolib_logging import logger, logger_no_user_data
13
- from biolib.typing_utils import TypedDict, List, Iterator, Tuple, Optional, Dict
13
+ from biolib.typing_utils import Callable, Dict, Iterator, List, Optional, Tuple, TypedDict
14
14
 
15
15
 
16
16
  def get_chunk_iterator_from_bytes(byte_buffer: bytes, chunk_size_in_bytes: int = 50_000_000) -> Iterator[bytes]:
@@ -45,19 +45,20 @@ _UploadChunkReturnType = Tuple[_PartMetadata, int]
45
45
 
46
46
 
47
47
  class MultiPartUploader:
48
-
49
48
  def __init__(
50
- self,
51
- complete_upload_request: RequestOptions,
52
- get_presigned_upload_url_request: RequestOptions,
53
- start_multipart_upload_request: Optional[RequestOptions] = None,
54
- use_process_pool: Optional[bool] = None,
49
+ self,
50
+ complete_upload_request: RequestOptions,
51
+ get_presigned_upload_url_request: RequestOptions,
52
+ start_multipart_upload_request: Optional[RequestOptions] = None,
53
+ use_process_pool: Optional[bool] = None,
54
+ on_progress: Optional[Callable[[int, int], None]] = None,
55
55
  ):
56
56
  self._complete_upload_request = complete_upload_request
57
57
  self._get_presigned_upload_url_request = get_presigned_upload_url_request
58
58
  self._start_multipart_upload_request = start_multipart_upload_request
59
59
  self._bytes_uploaded: int = 0
60
60
  self._use_process_pool = use_process_pool
61
+ self._on_progress = on_progress
61
62
 
62
63
  def upload(self, payload_iterator: Iterator[bytes], payload_size_in_bytes: int) -> None:
63
64
  parts: List[_PartMetadata] = []
@@ -85,21 +86,22 @@ class MultiPartUploader:
85
86
  self._update_progress_bar_and_parts(
86
87
  upload_chunk_response=upload_chunk_response,
87
88
  parts=parts,
88
- payload_size_in_bytes=payload_size_in_bytes
89
+ payload_size_in_bytes=payload_size_in_bytes,
89
90
  )
90
91
  else:
91
92
  # use 16 cores, unless less is available
92
93
  pool_size = min(16, multiprocessing.cpu_count() - 1)
93
- process_pool = multiprocessing.Pool(pool_size) if self._use_process_pool else \
94
- multiprocessing.pool.ThreadPool(pool_size)
94
+ process_pool = (
95
+ multiprocessing.Pool(pool_size)
96
+ if self._use_process_pool
97
+ else multiprocessing.pool.ThreadPool(pool_size)
98
+ )
95
99
 
96
100
  try:
97
101
  response: _UploadChunkReturnType
98
102
  for response in process_pool.imap(self._upload_chunk, iterator_with_index):
99
103
  self._update_progress_bar_and_parts(
100
- upload_chunk_response=response,
101
- parts=parts,
102
- payload_size_in_bytes=payload_size_in_bytes
104
+ upload_chunk_response=response, parts=parts, payload_size_in_bytes=payload_size_in_bytes
103
105
  )
104
106
  finally:
105
107
  logger_no_user_data.debug('Multipart upload closing process pool...')
@@ -148,8 +150,9 @@ class MultiPartUploader:
148
150
  if app_caller_proxy_job_storage_base_url:
149
151
  # Done to hit App Caller Proxy when uploading result from inside an app
150
152
  parsed_url = urlparse(presigned_upload_url)
151
- presigned_upload_url = \
153
+ presigned_upload_url = (
152
154
  f'{app_caller_proxy_job_storage_base_url}{parsed_url.path}?{parsed_url.query}'
155
+ )
153
156
 
154
157
  put_chunk_response = HttpClient.request(
155
158
  url=presigned_upload_url,
@@ -169,10 +172,10 @@ class MultiPartUploader:
169
172
  raise BioLibError(f'Max retries hit, when uploading part {part_number}. Exiting...')
170
173
 
171
174
  def _update_progress_bar_and_parts(
172
- self,
173
- upload_chunk_response: _UploadChunkReturnType,
174
- parts: List[_PartMetadata],
175
- payload_size_in_bytes: int,
175
+ self,
176
+ upload_chunk_response: _UploadChunkReturnType,
177
+ parts: List[_PartMetadata],
178
+ payload_size_in_bytes: int,
176
179
  ) -> None:
177
180
  part_metadata, chunk_byte_length = upload_chunk_response
178
181
  part_number = part_metadata['PartNumber']
@@ -180,6 +183,9 @@ class MultiPartUploader:
180
183
  parts.append(part_metadata)
181
184
  self._bytes_uploaded += chunk_byte_length
182
185
 
186
+ if self._on_progress is not None:
187
+ self._on_progress(self._bytes_uploaded, payload_size_in_bytes)
188
+
183
189
  approx_progress_percent = min(self._bytes_uploaded / (payload_size_in_bytes + 1) * 100, 100)
184
190
  approx_rounded_progress = round(approx_progress_percent, 2)
185
191
  logger_no_user_data.debug(
@@ -0,0 +1,41 @@
1
+ Metadata-Version: 2.4
2
+ Name: pybiolib
3
+ Version: 1.2.1727
4
+ Summary: BioLib Python Client
5
+ Project-URL: Homepage, https://github.com/biolib
6
+ Author-email: biolib <hello@biolib.com>
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ Keywords: biolib
10
+ Classifier: Operating System :: OS Independent
11
+ Classifier: Programming Language :: Python :: 3
12
+ Requires-Python: >=3.6.3
13
+ Requires-Dist: appdirs>=1.4.3
14
+ Requires-Dist: click>=8.0.0
15
+ Requires-Dist: docker>=5.0.3
16
+ Requires-Dist: importlib-metadata>=1.6.1
17
+ Requires-Dist: pyyaml>=5.3.1
18
+ Requires-Dist: rich>=12.4.4
19
+ Requires-Dist: typing-extensions>=4.1.0; python_version < '3.11'
20
+ Provides-Extra: compute-node
21
+ Requires-Dist: flask>=2.0.1; extra == 'compute-node'
22
+ Requires-Dist: gunicorn>=20.1.0; extra == 'compute-node'
23
+ Description-Content-Type: text/markdown
24
+
25
+ # PyBioLib
26
+
27
+ PyBioLib is a Python package for running BioLib applications from Python scripts and the command line.
28
+
29
+ ### Python Example
30
+ ```python
31
+ # pip3 install -U pybiolib
32
+ import biolib
33
+ samtools = biolib.load('samtools/samtools')
34
+ print(samtools.cli(args='--help'))
35
+ ```
36
+
37
+ ### Command Line Example
38
+ ```bash
39
+ pip3 install -U pybiolib
40
+ biolib run samtools/samtools --help
41
+ ```
@@ -1,30 +1,38 @@
1
1
  biolib/__init__.py,sha256=-pz1Ipyj1KmB709yYpl2Y-iKOWXpLxcFzL48G8rr9cU,12146
2
- biolib/_data_record/data_record.py,sha256=DI3_0KOELoZruOd176SJLZU32RhCqoSrjHtm852-K34,12520
2
+ biolib/biolib_download_container.py,sha256=8TmBV8iv3bCvkNlHa1SSsc4zl0wX_eaxhfnW5rvFIh8,1779
3
+ biolib/biolib_errors.py,sha256=eyQolC4oGi350BDEMOd-gAHYVqo2L2lYgv6c4ZdXPjQ,1184
4
+ biolib/biolib_logging.py,sha256=Y3qALGNYaTHdXP2aPFNWfxN71pk2Z3syMG6XrYcRZT8,2863
5
+ biolib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ biolib/tables.py,sha256=MmruV-nJLc3HbLVJBAiDuDCgS2-4oaUkpoCLLUNYbxQ,1173
7
+ biolib/typing_utils.py,sha256=TMw723SPq8zy1VYsdgbq_LPsGtCm3VgFhzz6srt71u0,146
8
+ biolib/_data_record/data_record.py,sha256=2MDs2KR_zA7hUjTDxzmih_ph0Iv6WAlEh4WBMoAGSvI,15441
3
9
  biolib/_index/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- biolib/_index/index.py,sha256=CXRWk_piVbZ1HDWm_QimBBXBai1ADVT282fbgQHlZ7c,1560
10
+ biolib/_index/index.py,sha256=u89cQ-FpLAEPSPE-QN1X1Cevo_HemTcLX49hS87r5Zk,1560
5
11
  biolib/_index/types.py,sha256=iVn4R175FZgqHS6QJXssYUBpBHlkggepRA5-_qvrfuE,124
6
12
  biolib/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
13
  biolib/_internal/add_copilot_prompts.py,sha256=wcIdrceFcfKSoEjvM4uNzhKZ0I1-MCFkfNO4duqtGHA,1861
8
14
  biolib/_internal/add_gui_files.py,sha256=MrtvkIpe70tVVJYBBsMbRhjsxf55hFzlzn-ea2oinTc,2218
15
+ biolib/_internal/errors.py,sha256=AokI6Dvaa22B__LTfSZUVdDsm0ye7lgBFv_aD9O_kbs,163
16
+ biolib/_internal/file_utils.py,sha256=62yDRC_3hLKh0_Pbny7-syVduVSnc3H1Rv_D6zbGnS4,4518
17
+ biolib/_internal/http_client.py,sha256=9-3HG6LnLwJfrwjCeFj5XigHVH8Dzz6Dpr58IjQJHDo,6221
18
+ biolib/_internal/push_application.py,sha256=_CMCJZNLcRQ_hWje5_HvD8Re4l55NyTjniMglv3kjaw,21128
19
+ biolib/_internal/runtime.py,sha256=SnunTYa1-056cvb_Z-JwYyUaz5Zoem8jm4RjY3V8zGw,554
20
+ biolib/_internal/string_utils.py,sha256=N7J7oGu6_yA_z0pOiKqxEh__lRdiDLh6kigeDkQEZ5g,265
21
+ biolib/_internal/tree_utils.py,sha256=_Q_6_NDtIiROcefymqxEVddjqti6Mt3OZ4U0GcDW61s,3904
9
22
  biolib/_internal/data_record/__init__.py,sha256=fGdME6JGRU_2VxpJbYpGXYndjN-feUkmKY4fuMyq3cg,76
10
23
  biolib/_internal/data_record/data_record.py,sha256=vJbjkYj6kyncaNApN94uTJvve1C1XkYWHbWuiMFfzoU,4604
11
- biolib/_internal/data_record/push_data.py,sha256=kjl1J00lt-EoRFVMDV8jztMcq5uCH_Hh0XSkwxYc0q0,2683
24
+ biolib/_internal/data_record/push_data.py,sha256=WAvZYLQHTA36kX4uvVu1p0UgiDpf0zNFK3blmfxdZ4Y,4369
12
25
  biolib/_internal/data_record/remote_storage_endpoint.py,sha256=qooTo6fdC3-x-ko9ipF7_fkg7hE3Fq06MWx4lwnAgAU,1760
13
- biolib/_internal/errors.py,sha256=AokI6Dvaa22B__LTfSZUVdDsm0ye7lgBFv_aD9O_kbs,163
14
- biolib/_internal/file_utils.py,sha256=62yDRC_3hLKh0_Pbny7-syVduVSnc3H1Rv_D6zbGnS4,4518
15
26
  biolib/_internal/fuse_mount/__init__.py,sha256=B_tM6RM2dBw-vbpoHJC4X3tOAaN1H2RDvqYJOw3xFwg,55
16
27
  biolib/_internal/fuse_mount/experiment_fuse_mount.py,sha256=08aUdEq_bvqLBft_gSLjOClKDy5sBnMts1RfJf7AP_U,7012
17
- biolib/_internal/http_client.py,sha256=9-3HG6LnLwJfrwjCeFj5XigHVH8Dzz6Dpr58IjQJHDo,6221
18
28
  biolib/_internal/index/__init__.py,sha256=O1m6QYmqc3DLy7hqAeYDJeGNEegdK9L10omDuNlUGhQ,38
19
29
  biolib/_internal/index/index.py,sha256=zuA-Vplkqmv89PiLrPki43CxdCrjEUiCiFEGsAEtlbs,764
20
30
  biolib/_internal/lfs/__init__.py,sha256=gSWo_xg61UniYgD7yNYxeT4I9uaXBCBSi3_nmZjnPpE,35
21
31
  biolib/_internal/lfs/cache.py,sha256=XMnUuB6vwyv8H_Ha6r6n-QruHUY_YrBj-l2xcXj57QI,2362
22
32
  biolib/_internal/libs/__init__.py,sha256=Jdf4tNPqe_oIIf6zYml6TiqhL_02Vyqwge6IELrAFhw,98
23
33
  biolib/_internal/libs/fusepy/__init__.py,sha256=AWDzNFS-XV_5yKb0Qx7kggIhPzq1nj_BZS5y2Nso08k,41944
24
- biolib/_internal/push_application.py,sha256=_CMCJZNLcRQ_hWje5_HvD8Re4l55NyTjniMglv3kjaw,21128
25
- biolib/_internal/runtime.py,sha256=SnunTYa1-056cvb_Z-JwYyUaz5Zoem8jm4RjY3V8zGw,554
26
- biolib/_internal/string_utils.py,sha256=N7J7oGu6_yA_z0pOiKqxEh__lRdiDLh6kigeDkQEZ5g,265
27
34
  biolib/_internal/templates/__init__.py,sha256=NVbhLUMC8HITzkLvP88Qu7FHaL-SvQord-DX3gh1Ykk,24
35
+ biolib/_internal/templates/templates.py,sha256=ni0euP0KD5NHkxJPIt__i2WvXxYIcC8qugQEoT9oIJQ,308
28
36
  biolib/_internal/templates/copilot_template/.github/instructions/general-app-knowledge.instructions.md,sha256=-j8v0GRtDhHoqP2wcGUykiwU7HQ0DmkCNxw_01oKMdY,546
29
37
  biolib/_internal/templates/copilot_template/.github/instructions/style-general.instructions.md,sha256=tl2Ve1ZPlPBrH6CSrjIkiMA8xnM2tQIJs1cerKCyAkU,761
30
38
  biolib/_internal/templates/copilot_template/.github/instructions/style-python.instructions.md,sha256=xfypuPqMsz5ejobDoVI0HjmNqksl16aFuIol1nAhpHg,1034
@@ -36,7 +44,6 @@ biolib/_internal/templates/gui_template/.yarnrc.yml,sha256=Rz5t74b8A2OBIODAHQyLu
36
44
  biolib/_internal/templates/gui_template/App.tsx,sha256=VfaJO_mxbheRrfO1dU28G9Q4pGsGzeJpPREqtAT4fGE,1692
37
45
  biolib/_internal/templates/gui_template/Dockerfile,sha256=nGZQiL7coQBUnH1E2abK2PJ4XRjVS1QXn6HDX9UGpcE,479
38
46
  biolib/_internal/templates/gui_template/biolib-sdk.ts,sha256=zRN2h4ws7ZuidxYKaRPaurfTxNJN-hX0MdG6POvdxU0,1195
39
- biolib/_internal/templates/gui_template/dev-data/output.json,sha256=wKcJQtN7NGaCJkmEWyRjEbBtTLMHB6pOkqTgWsKmOh8,162
40
47
  biolib/_internal/templates/gui_template/index.css,sha256=WYds1xQY2of84ebHhRW9ummbw0Bg9N-EyfmBzJKigck,70
41
48
  biolib/_internal/templates/gui_template/index.html,sha256=EM5xzJ9CsJalgzL-jLNkAoP4tgosw0WYExcH5W6DOs8,403
42
49
  biolib/_internal/templates/gui_template/index.tsx,sha256=YrdrpcckwLo0kYIA-2egtzlo0OMWigGxnt7mNN4qmlU,234
@@ -44,22 +51,22 @@ biolib/_internal/templates/gui_template/package.json,sha256=4E8pDdnrYYjmKAL8NYFE
44
51
  biolib/_internal/templates/gui_template/tsconfig.json,sha256=T3DJIzeLQ2BL8HLfPHI-IvHtJhnMXdHOoRjkmQlJQAw,541
45
52
  biolib/_internal/templates/gui_template/vite-plugin-dev-data.ts,sha256=jLFSl7_DU9W3ScM6fm0aFSCzDhAtzhI9G6zr1exze84,1397
46
53
  biolib/_internal/templates/gui_template/vite.config.mts,sha256=5RjRfJHgqLOr-LRydBUnDPr5GrHQuRsviTMC60hvKxU,348
47
- biolib/_internal/templates/init_template/.biolib/config.yml,sha256=gxMVd1wjbsDvMv4byc8fKEdJFby4qgi6v38mO5qmhoY,453
48
- biolib/_internal/templates/init_template/.github/workflows/biolib.yml,sha256=3Os7FCptYHKK4ERI5_olM7s7V8KNIsVTBywfXI069sw,645
54
+ biolib/_internal/templates/gui_template/dev-data/output.json,sha256=wKcJQtN7NGaCJkmEWyRjEbBtTLMHB6pOkqTgWsKmOh8,162
49
55
  biolib/_internal/templates/init_template/.gitignore,sha256=dR_jhtT0boUspgk3S5PPUwuO0o8gKGIbdwu8IH638CY,20
50
56
  biolib/_internal/templates/init_template/Dockerfile,sha256=Cx3ktDxcpgAWAacIewm7mcI7lNEsmgAETvFtN7NA3Ms,199
51
57
  biolib/_internal/templates/init_template/requirements.txt,sha256=2GnBHsKg4tX5F06Z4YeLuId6jQO3-HGTITsaVBTDG0Y,42
52
58
  biolib/_internal/templates/init_template/run.py,sha256=oat-Vzcz4XZilrTtgy8CzfltBAa5v6iduGof4Tuulhg,402
53
59
  biolib/_internal/templates/init_template/run.sh,sha256=ncvInHCn_PgjXmvaa5oBU0vC3dgFJQ6k7fUJKJzpOh4,69
54
- biolib/_internal/templates/templates.py,sha256=ni0euP0KD5NHkxJPIt__i2WvXxYIcC8qugQEoT9oIJQ,308
55
- biolib/_internal/tree_utils.py,sha256=_Q_6_NDtIiROcefymqxEVddjqti6Mt3OZ4U0GcDW61s,3904
56
- biolib/_internal/utils/__init__.py,sha256=xp1I-lVnu5owV1CW53jiPEZLKmqqHiPUDfauYDfJ7iQ,1540
60
+ biolib/_internal/templates/init_template/.biolib/config.yml,sha256=gxMVd1wjbsDvMv4byc8fKEdJFby4qgi6v38mO5qmhoY,453
61
+ biolib/_internal/templates/init_template/.github/workflows/biolib.yml,sha256=3Os7FCptYHKK4ERI5_olM7s7V8KNIsVTBywfXI069sw,645
62
+ biolib/_internal/utils/__init__.py,sha256=3yh81jzeNUtn72vedM5EPwyMtyQb98J_Vu1R6bbgouE,1978
63
+ biolib/_internal/utils/auth.py,sha256=aPJOF8j38TOS_h_UFdw_AcXlI18YFU-LrmsILX0FPdU,1432
57
64
  biolib/_internal/utils/job_url.py,sha256=YpwqCP56BD15M8p2tuSY_Z3O9vWAkG2rJbQu2Z5zqq0,1265
58
65
  biolib/_internal/utils/multinode.py,sha256=N7kR49xD1PdkMVlxxzRiSYHfgi9MG-kLCwemcY1rojg,8323
59
- biolib/_runtime/runtime.py,sha256=hFGdfpyk98LIZEzwGGmhzIc6Xhj8fkTlN9qceME3Tjw,6151
66
+ biolib/_runtime/runtime.py,sha256=pzHpbLlMt4PM0GxT-2pLTtNAtdHgg7N3vhpmkzt42EA,6146
60
67
  biolib/_session/session.py,sha256=nP6ETTMUQygElrRIFq8zr9QqjHwmKMsvf6BpiRLUUW4,1821
61
68
  biolib/_shared/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- biolib/_shared/types/__init__.py,sha256=kkh6Ly6Apevk1cBfqBvoS5uFzzDmnxxMgruEv1P6ViA,2104
69
+ biolib/_shared/types/__init__.py,sha256=UtMVBWMUKvgsLYKh4i4lfgxkUvqlh0HAbfvTAYaBta0,2202
63
70
  biolib/_shared/types/account.py,sha256=_MY59S_8r3OqT630HzEoRnS6VnbbLm296wP2WrdpdjM,190
64
71
  biolib/_shared/types/account_member.py,sha256=aCcel1McoAsH83Mv1mqawK2Q-yt4OI0xrgPiKjg4Tqg,178
65
72
  biolib/_shared/types/app.py,sha256=Mz2QGD_jESX-K9JYnLWPo4YA__Q_1FQQTk9pvidCohU,118
@@ -67,23 +74,22 @@ biolib/_shared/types/data_record.py,sha256=9r_vdhVs60YTnzU4XQFXfDrfS2P2MqD3BH2xa
67
74
  biolib/_shared/types/experiment.py,sha256=7WERhHnkbO3qrPWZyJmu-KrKOGRXaX5xdLBUNHh17KE,714
68
75
  biolib/_shared/types/file_node.py,sha256=T6BIqo662f3nwMBRqtBHYsg6YuuUaKpiokHcVjv9_ME,283
69
76
  biolib/_shared/types/push.py,sha256=qSXCjdzOmHG7_QiwXaNSrVkESTMxnIKPvEut-9Mqt-g,108
70
- biolib/_shared/types/resource.py,sha256=WGkjq9PZm5vr5_6kzgupHY0vycGDitEWFAO2VgfRxVU,398
77
+ biolib/_shared/types/resource.py,sha256=yMepJ4MA_vQrs1Pqu6LufXSoq7chGyHpEFCW-Smc8hU,920
71
78
  biolib/_shared/types/resource_deploy_key.py,sha256=vwPKRHxjkrkEptBiJUovE4P0N4EuZr43_U0u_JP8Pag,204
72
- biolib/_shared/types/resource_permission.py,sha256=KRM27ZqRzcPYX8KzkEoxH4O4vBlLiCQ8nMTQnqRh4-k,298
73
- biolib/_shared/types/resource_types.py,sha256=LQnIYBR8Fi7zvnA5vBpzcL2c6ZjpaKNTe38hXck82k0,449
74
- biolib/_shared/types/resource_version.py,sha256=cU0YFHqxO-wX_Y6CoeK0Iei61gFwVoyR_kPOSTQ4mCs,304
79
+ biolib/_shared/types/resource_permission.py,sha256=ZE7eokpzswAiqe4GdpdxdZ6_jl0LdiRD9gP81I8C3fY,292
80
+ biolib/_shared/types/resource_version.py,sha256=BwKIsJQjOwJP7-s-gXcy-EBHMDEmkxOHaMKsDQtZzV4,479
75
81
  biolib/_shared/types/result.py,sha256=MesSTBXCkaw8HydXgHf1OKGVLzsxhZ1KV5z4w-VI-0M,231
76
82
  biolib/_shared/types/typing.py,sha256=qrsk8hHcGEbDpU1QQFzHAKnhQxkMe7uJ6pxHeAnfv1Y,414
77
83
  biolib/_shared/types/user.py,sha256=5_hYG0jrdGxynCCWXGaHZCAlVcRKBqMIEA2EBGrnpiE,439
78
84
  biolib/_shared/utils/__init__.py,sha256=3PaCkPREN3zgWszO65lHDdqwo958rD9OzCKGmUEP-Fc,216
79
85
  biolib/_shared/utils/resource_uri.py,sha256=-jZ9g8aenms0SInVrhvBHAgwy8MsaTNBLYFh4Dr1JOU,2909
80
86
  biolib/api/__init__.py,sha256=mQ4u8FijqyLzjYMezMUUbbBGNB3iFmkNdjXnWPZ7Jlw,138
81
- biolib/api/client.py,sha256=D42EV6E78BYzU6rBurGV2egLH3uO0C4R4dibsl6w6JM,7879
87
+ biolib/api/client.py,sha256=51D6PO_wazLRdCMYVJKpecrzc0zQDOdCPmwcY8M-bNs,6414
82
88
  biolib/app/__init__.py,sha256=cdPtcfb_U-bxb9iSL4fCEq2rpD9OjkyY4W-Zw60B0LI,37
83
- biolib/app/app.py,sha256=I_gIaDBzNnoxgJi1JnIeYRKdMDOdepnYBylw4sBFv40,13369
89
+ biolib/app/app.py,sha256=CY4M2Ty7L7sGVUNa-2JD3Udn1Qmg5EJKB7KYAFt4hv8,13034
84
90
  biolib/app/search_apps.py,sha256=K4a41f5XIWth2BWI7OffASgIsD0ko8elCax8YL2igaY,1470
85
91
  biolib/biolib_api_client/__init__.py,sha256=E5EMa19wJoblwSdQPYrxc_BtIeRsAuO0L_jQweWw-Yk,182
86
- biolib/biolib_api_client/api_client.py,sha256=IONzXeFCHl4wuct6fqOC_7NiTv_zFy6ys0hsAtvLzTA,7578
92
+ biolib/biolib_api_client/api_client.py,sha256=JwH1_3rD0E_gs5x39TN_AajsC7o1wvQx3pAlGMzwANQ,6109
87
93
  biolib/biolib_api_client/app_types.py,sha256=P2MbwYZ0VsPUcbcX27lSvVlAYSbkz_IqWTcbxFyuu7I,2477
88
94
  biolib/biolib_api_client/auth.py,sha256=kjm0ZHnH3I8so3su2sZbBxNHYp-ZUdrZ5lwQ0K36RSw,949
89
95
  biolib/biolib_api_client/biolib_app_api.py,sha256=slnJVuWtN_Et1PSnjN7mPmYWJvk0Rp-h0rvdrW1R9u8,6041
@@ -105,48 +111,45 @@ biolib/biolib_binary_format/system_exception.py,sha256=T3iL4_cSHAHim3RSDPS8Xyb1m
105
111
  biolib/biolib_binary_format/system_status_update.py,sha256=aOELuQ0k-GtpaZTUxYd0GFomP_OInmrK585y6fuQuKE,1191
106
112
  biolib/biolib_binary_format/utils.py,sha256=jq31QEShs7TSrSKZBr8jif-bJAwVzQrqVxmymL6crpU,5453
107
113
  biolib/biolib_docker_client/__init__.py,sha256=aBfA6mtWSI5dBEfNNMD6bIZzCPloW4ghKm0wqQiljdo,1481
108
- biolib/biolib_download_container.py,sha256=8TmBV8iv3bCvkNlHa1SSsc4zl0wX_eaxhfnW5rvFIh8,1779
109
- biolib/biolib_errors.py,sha256=eyQolC4oGi350BDEMOd-gAHYVqo2L2lYgv6c4ZdXPjQ,1184
110
- biolib/biolib_logging.py,sha256=Y3qALGNYaTHdXP2aPFNWfxN71pk2Z3syMG6XrYcRZT8,2863
111
114
  biolib/cli/__init__.py,sha256=A_AATNYLH7exu332OYds1PrqOAuK1sU5wDmYYY4tMvM,1352
112
115
  biolib/cli/auth.py,sha256=p9ZGY6ld2rnMbpsuRskvIQJNUHlSgYgcLTDsYGyUwyw,1407
113
- biolib/cli/data_record.py,sha256=ypNr-MK_3bvJv0wkZ4V1p_4cU9gfGvFoeXTtghnhrQE,4078
116
+ biolib/cli/data_record.py,sha256=exBfyw-eqF4kpqMT_5NO5NFb8Z5IDpTLu8xNBY0GlAg,6648
114
117
  biolib/cli/download_container.py,sha256=HIZVHOPmslGE5M2Dsp9r2cCkAEJx__vcsDz5Wt5LRos,483
115
118
  biolib/cli/index.py,sha256=UeE4lo4NYL7-3DGrJyv1OvbdKmTlKMwdArliHTmIzPY,1081
116
- biolib/cli/init.py,sha256=oGo178h_GlDieWjBqHDLAejeUhVKm5ZJnI_o2YqbEZ0,8366
119
+ biolib/cli/init.py,sha256=AzcA0WmPXqW1mWfW6Ld-Kt2yusfMvuumjtyu46OHBLM,9887
117
120
  biolib/cli/lfs.py,sha256=mCwziiuzhsZW5UdpsVETDlVUvmO71gHKsV2D4wJ2qUY,4164
118
121
  biolib/cli/push.py,sha256=J8BswMYVeTacZBHbm4K4a2XbS_I8kvfgRZLoby2wi3I,1695
119
- biolib/cli/run.py,sha256=RAAXbIx8Bi-4fNkEoz2ODJ0fEtyS7VxD3dkc2fVZwjY,2150
122
+ biolib/cli/run.py,sha256=cWvIaychccFbVtGuQmiJ7syKtImPu7rU7l-9uHKfd4c,2185
120
123
  biolib/cli/runtime.py,sha256=Xv-nrma5xX8NidWcvbUKcUvuN5TCarZa4A8mPVmF-z0,361
121
124
  biolib/cli/sdk.py,sha256=XisJwTft4QDB_99eGDlz-WBqqRwIqkVg7HyvxWtOG8w,471
122
125
  biolib/cli/start.py,sha256=BcjE4MRRLhBJULuSYQY0e7gMHudw7W-yFcz9klJ3xjo,2287
123
126
  biolib/compute_node/.gitignore,sha256=GZdZ4g7HftqfOfasFpBC5zV1YQAbht1a7EzcXD6f3zg,45
124
127
  biolib/compute_node/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
+ biolib/compute_node/remote_host_proxy.py,sha256=BQQ7Qn93k2dVgBP_dA_thp6smhy200Uw7XwtZj_CnSk,19238
129
+ biolib/compute_node/socker_listener_thread.py,sha256=T5_UikA3MB9bD5W_dckYLPTgixh72vKUlgbBvj9dbM0,1601
130
+ biolib/compute_node/socket_sender_thread.py,sha256=YgamPHeUm2GjMFGx8qk-99WlZhEs-kAb3q_2O6qByig,971
131
+ biolib/compute_node/utils.py,sha256=fvdbetPKMdfHkPqNZRw6eln_i13myu-n8tuceTUcfPU,4913
125
132
  biolib/compute_node/cloud_utils/__init__.py,sha256=VZSScLqaz5tg_gpMvWgwkAu9Qf-vgW_QHRoDOaAmU44,67
126
133
  biolib/compute_node/cloud_utils/cloud_utils.py,sha256=_iaKelsmQLLwbDKVXZMXPFZayZPH9iHXc4NISFP9uzk,7462
127
134
  biolib/compute_node/job_worker/__init__.py,sha256=ipdPWaABKYrltxny15e2kK8PWdEE7VzXbkKK6wM_zDk,71
128
135
  biolib/compute_node/job_worker/cache_state.py,sha256=MwjSRzcJJ_4jybqvBL4xdgnDYSIiw4s90pNn83Netoo,4830
129
136
  biolib/compute_node/job_worker/cache_types.py,sha256=ajpLy8i09QeQS9dEqTn3T6NVNMY_YsHQkSD5nvIHccQ,818
130
137
  biolib/compute_node/job_worker/docker_image_cache.py,sha256=ansHIkJIq_EMW1nZNlW-RRLVVeKWTbzNICYaOHpKiRE,7460
131
- biolib/compute_node/job_worker/executors/__init__.py,sha256=bW6t1qi3PZTlHM4quaTLa8EI4ALTCk83cqcVJfJfJfE,145
132
- biolib/compute_node/job_worker/executors/docker_executor.py,sha256=PS7c1DMEcwv5Gsrh0mjwlAuEf7BTSNooW9XODqXofRE,32896
133
- biolib/compute_node/job_worker/executors/docker_types.py,sha256=Hh8SwQYBLdIMGWgITwD2fzoo_sbW2ESx1G8j9Zq2n30,216
134
- biolib/compute_node/job_worker/executors/tars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
- biolib/compute_node/job_worker/executors/types.py,sha256=dlp7p8KKkd19nC68o-RuAzRBhpdYFMWKg-__LFjvscs,1611
136
138
  biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py,sha256=_cvEiZbOwfkv6fYmfrvdi_FVviIEYr_dSClQcOQaUWM,1198
137
139
  biolib/compute_node/job_worker/job_max_runtime_timer_thread.py,sha256=K_xgz7IhiIjpLlXRk8sqaMyLoApcidJkgu29sJX0gb8,1174
138
140
  biolib/compute_node/job_worker/job_storage.py,sha256=J6B5wkBo3cqmT1AV-qJnm2Lt9Qmcp3qn-1AabjO9m60,4686
139
- biolib/compute_node/job_worker/job_worker.py,sha256=e2BnG8gQCDtllUcSu6JOiGotkQUGXZNdTeyWytJ-14w,32106
141
+ biolib/compute_node/job_worker/job_worker.py,sha256=BY9_fo9OUVzUGcdAjnsP6WaPpJniWqgIhYuxELCA7d4,32094
140
142
  biolib/compute_node/job_worker/large_file_system.py,sha256=Xe_LILVfTD9LXb-0HwLqGsp1fWiI-pU55BqgJ-6t8-0,10357
141
143
  biolib/compute_node/job_worker/mappings.py,sha256=Z48Kg4nbcOvsT2-9o3RRikBkqflgO4XeaWxTGz-CNvI,2499
142
144
  biolib/compute_node/job_worker/network_alloc.py,sha256=b2xNrqHaVRKCMcFyZepQAuNsBWCzHMDTPeacBdo029s,3586
143
145
  biolib/compute_node/job_worker/network_buffer.py,sha256=YIiYz_QZNK7O8SSFzLZf2i7drTk1ewd_gvjg9NgG5LQ,9051
144
146
  biolib/compute_node/job_worker/utilization_reporter_thread.py,sha256=Tho8GdYVS93Jb5cJjuN3O0qGQ0JIlxabiaGfTp1ksV0,8594
145
147
  biolib/compute_node/job_worker/utils.py,sha256=wgxcIA8yAhUPdCwyvuuJ0JmreyWmmUoBO33vWtG60xg,1282
146
- biolib/compute_node/remote_host_proxy.py,sha256=4pYib8lWOBHLVxTQEnbXOjLlWtHoL82gerSQaBV_wUo,19219
147
- biolib/compute_node/socker_listener_thread.py,sha256=T5_UikA3MB9bD5W_dckYLPTgixh72vKUlgbBvj9dbM0,1601
148
- biolib/compute_node/socket_sender_thread.py,sha256=YgamPHeUm2GjMFGx8qk-99WlZhEs-kAb3q_2O6qByig,971
149
- biolib/compute_node/utils.py,sha256=fvdbetPKMdfHkPqNZRw6eln_i13myu-n8tuceTUcfPU,4913
148
+ biolib/compute_node/job_worker/executors/__init__.py,sha256=bW6t1qi3PZTlHM4quaTLa8EI4ALTCk83cqcVJfJfJfE,145
149
+ biolib/compute_node/job_worker/executors/docker_executor.py,sha256=PS7c1DMEcwv5Gsrh0mjwlAuEf7BTSNooW9XODqXofRE,32896
150
+ biolib/compute_node/job_worker/executors/docker_types.py,sha256=Hh8SwQYBLdIMGWgITwD2fzoo_sbW2ESx1G8j9Zq2n30,216
151
+ biolib/compute_node/job_worker/executors/types.py,sha256=dlp7p8KKkd19nC68o-RuAzRBhpdYFMWKg-__LFjvscs,1611
152
+ biolib/compute_node/job_worker/executors/tars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
153
  biolib/compute_node/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
154
  biolib/compute_node/webserver/compute_node_results_proxy.py,sha256=6gZ-jYZAuK0m4uiUkaSmP7n61ywPoQyCv3DzNOy-gQ0,7980
152
155
  biolib/compute_node/webserver/gunicorn_flask_application.py,sha256=jPfR_YvNBekLUXWo_vHFV-FIwlb8s8tacKmGHvh93qc,914
@@ -156,25 +159,22 @@ biolib/compute_node/webserver/webserver_types.py,sha256=2t8EaFKESnves3BA_NBdnS2y
156
159
  biolib/compute_node/webserver/webserver_utils.py,sha256=XWvwYPbWNR3qS0FYbLLp-MDDfVk0QdaAmg3xPrT0H2s,4234
157
160
  biolib/compute_node/webserver/worker_thread.py,sha256=7uD9yQPhePYvP2HCJ27EeZ_h6psfIWFgqm1RHZxzobs,12483
158
161
  biolib/experiments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
- biolib/experiments/experiment.py,sha256=DZTlHXV4yfkE8wy2ScsE-xEcTf8vSeZFDq8oIVI1jYA,13853
162
+ biolib/experiments/experiment.py,sha256=Dw1bEZUaGs9-cqheGX_IsJ1McOelcdSsvjKuyrv2BQU,14299
160
163
  biolib/jobs/__init__.py,sha256=aIb2H2DHjQbM2Bs-dysFijhwFcL58Blp0Co0gimED3w,32
161
164
  biolib/jobs/job.py,sha256=3rP__a_UJWdUzOngtmYekzTV1ttKugB1EyXP7SIN37A,31845
162
165
  biolib/jobs/job_result.py,sha256=pbCk2raBK9rbi2RlgQM7MmBqi9K52X4D9n8_1qXjLGU,7636
163
166
  biolib/jobs/types.py,sha256=rFs6bQWsNI-nb1Hu9QzOW2zFZ8bOVt7ax4UpGVASxVA,1034
164
- biolib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
167
  biolib/runtime/__init__.py,sha256=MlRepA11n2H-3plB5rzWyyHK2JmP6PiaP3i6x3vt0mg,506
166
168
  biolib/sdk/__init__.py,sha256=Px4wx4Ynq_rQ7A3OzlZnOC9NiGs5jN9IzpKTg3N_GBY,2590
167
- biolib/tables.py,sha256=MmruV-nJLc3HbLVJBAiDuDCgS2-4oaUkpoCLLUNYbxQ,1173
168
- biolib/typing_utils.py,sha256=TMw723SPq8zy1VYsdgbq_LPsGtCm3VgFhzz6srt71u0,146
169
169
  biolib/user/__init__.py,sha256=Db5wtxLfFz3ID9TULSSTo77csw9tO6RtxMRvV5cqKEE,39
170
170
  biolib/user/sign_in.py,sha256=e_JnykVxemq8eUBD5GmthjDV504CT1Dmn0EshrDCGB8,2085
171
171
  biolib/utils/__init__.py,sha256=VtuTFu8zWZwJzfYhVEpPdlhvTA2JkHCboqqQA-VNkpA,5790
172
172
  biolib/utils/cache_state.py,sha256=GNFLTo2KcoP4ypDoVVCItmkIAuHtsa_41sSDaK5JFCo,3119
173
- biolib/utils/multipart_uploader.py,sha256=XvGP1I8tQuKhAH-QugPRoEsCi9qvbRk-DVBs5PNwwJo,8452
173
+ biolib/utils/multipart_uploader.py,sha256=4-jxFPXtm4j-a3AUsW15GA0xMp_P667ODFHBgaCcytk,8674
174
174
  biolib/utils/seq_util.py,sha256=rImaghQGuIqTVWks6b9P2yKuN34uePUYPUFW_Wyoa4A,6737
175
175
  biolib/utils/zip/remote_zip.py,sha256=0wErYlxir5921agfFeV1xVjf29l9VNgGQvNlWOlj2Yc,23232
176
- pybiolib-1.2.1642.dist-info/METADATA,sha256=wcifrjdK4MJ5EIZQYcDvUZogwhWZY0P0D8r0vG-0Acs,1644
177
- pybiolib-1.2.1642.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
178
- pybiolib-1.2.1642.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
179
- pybiolib-1.2.1642.dist-info/licenses/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
180
- pybiolib-1.2.1642.dist-info/RECORD,,
176
+ pybiolib-1.2.1727.dist-info/METADATA,sha256=0nt4eELWDyf5xP9bYrkyUqFqBlug0Tg3FvrDZxLzjyI,1155
177
+ pybiolib-1.2.1727.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
178
+ pybiolib-1.2.1727.dist-info/entry_points.txt,sha256=YtPvuWP8ukZ3WwWH5_hQ6UGW6nDi54rcW2_bGQnbG7M,43
179
+ pybiolib-1.2.1727.dist-info/licenses/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
180
+ pybiolib-1.2.1727.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.2.1
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ biolib = biolib:call_cli
@@ -1,18 +0,0 @@
1
- from .app import AppSlimDict
2
- from .data_record import DataRecordSlimDict
3
- from .experiment import DeprecatedExperimentDict
4
- from .typing import Optional, TypedDict
5
-
6
-
7
- class ResourceDict(TypedDict):
8
- uuid: str
9
- uri: str
10
- name: str
11
- created_at: str
12
- description: str
13
-
14
-
15
- class ResourceDetailedDict(ResourceDict):
16
- app: Optional[AppSlimDict]
17
- data_record: Optional[DataRecordSlimDict]
18
- experiment: Optional[DeprecatedExperimentDict]