pybiolib 1.1.1629__py3-none-any.whl → 1.1.1881__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.
Files changed (53) hide show
  1. biolib/__init__.py +11 -3
  2. biolib/_internal/data_record/__init__.py +1 -0
  3. biolib/_internal/data_record/data_record.py +153 -0
  4. biolib/_internal/data_record/remote_storage_endpoint.py +27 -0
  5. biolib/_internal/http_client.py +45 -15
  6. biolib/_internal/push_application.py +22 -37
  7. biolib/_internal/runtime.py +73 -0
  8. biolib/_internal/utils/__init__.py +18 -0
  9. biolib/api/client.py +12 -6
  10. biolib/app/app.py +6 -1
  11. biolib/app/search_apps.py +8 -12
  12. biolib/biolib_api_client/api_client.py +14 -9
  13. biolib/biolib_api_client/app_types.py +1 -0
  14. biolib/biolib_api_client/auth.py +0 -12
  15. biolib/biolib_api_client/biolib_app_api.py +53 -27
  16. biolib/biolib_api_client/biolib_job_api.py +11 -40
  17. biolib/biolib_binary_format/utils.py +19 -2
  18. biolib/cli/__init__.py +9 -3
  19. biolib/cli/auth.py +58 -0
  20. biolib/cli/data_record.py +43 -0
  21. biolib/cli/download_container.py +3 -1
  22. biolib/cli/init.py +1 -0
  23. biolib/cli/lfs.py +39 -9
  24. biolib/cli/push.py +1 -1
  25. biolib/cli/run.py +3 -2
  26. biolib/cli/start.py +1 -0
  27. biolib/compute_node/cloud_utils/cloud_utils.py +38 -65
  28. biolib/compute_node/job_worker/cache_state.py +1 -1
  29. biolib/compute_node/job_worker/executors/docker_executor.py +10 -8
  30. biolib/compute_node/job_worker/job_storage.py +9 -13
  31. biolib/compute_node/job_worker/job_worker.py +10 -4
  32. biolib/compute_node/remote_host_proxy.py +48 -11
  33. biolib/compute_node/webserver/worker_thread.py +2 -2
  34. biolib/jobs/job.py +33 -32
  35. biolib/lfs/__init__.py +0 -2
  36. biolib/lfs/utils.py +23 -115
  37. biolib/runtime/__init__.py +13 -1
  38. biolib/sdk/__init__.py +17 -4
  39. biolib/user/sign_in.py +8 -12
  40. biolib/utils/__init__.py +17 -45
  41. biolib/utils/app_uri.py +11 -4
  42. biolib/utils/cache_state.py +2 -2
  43. biolib/utils/multipart_uploader.py +42 -68
  44. biolib/utils/seq_util.py +47 -9
  45. biolib/utils/zip/remote_zip.py +9 -17
  46. {pybiolib-1.1.1629.dist-info → pybiolib-1.1.1881.dist-info}/METADATA +1 -2
  47. {pybiolib-1.1.1629.dist-info → pybiolib-1.1.1881.dist-info}/RECORD +50 -46
  48. {pybiolib-1.1.1629.dist-info → pybiolib-1.1.1881.dist-info}/WHEEL +1 -1
  49. biolib/biolib_api_client/biolib_account_api.py +0 -21
  50. biolib/biolib_api_client/biolib_large_file_system_api.py +0 -53
  51. biolib/runtime/results.py +0 -20
  52. {pybiolib-1.1.1629.dist-info → pybiolib-1.1.1881.dist-info}/LICENSE +0 -0
  53. {pybiolib-1.1.1629.dist-info → pybiolib-1.1.1881.dist-info}/entry_points.txt +0 -0
biolib/utils/seq_util.py CHANGED
@@ -1,16 +1,36 @@
1
- from biolib.typing_utils import List, Optional
1
+ import re
2
+ from io import BufferedIOBase
3
+ from biolib.typing_utils import List, Optional, Dict, Union
2
4
 
3
5
  allowed_sequence_chars = set("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.")
6
+
7
+
4
8
  def find_invalid_sequence_characters(sequence):
5
9
  invalid_chars = [char for char in sequence if char not in allowed_sequence_chars]
6
10
  return invalid_chars
7
11
 
12
+
8
13
  class SeqUtilRecord:
9
- def __init__(self, sequence: str, sequence_id: str, description: Optional['str']):
14
+ def __init__(
15
+ self,
16
+ sequence: str,
17
+ sequence_id: str,
18
+ description: Optional['str'],
19
+ properties: Optional[Dict[str, str]] = None,
20
+ ):
10
21
  self.sequence = sequence
11
22
  self.id = sequence_id # pylint: disable=invalid-name
12
23
  self.description = description
13
24
 
25
+ if properties:
26
+ disallowed_pattern = re.compile(r"[=\[\]\n]")
27
+ for key, value in properties.items():
28
+ assert not bool(disallowed_pattern.search(key)), "Key cannot contain characters =[] and newline"
29
+ assert not bool(disallowed_pattern.search(value)), "Value cannot contain characters =[] and newline"
30
+ self.properties = properties
31
+ else:
32
+ self.properties = {}
33
+
14
34
  def __repr__(self) -> str:
15
35
  return f'{self.__class__.__name__} ({self.id})'
16
36
 
@@ -18,13 +38,24 @@ class SeqUtilRecord:
18
38
  class SeqUtil:
19
39
  @staticmethod
20
40
  def parse_fasta(
21
- file_name: str,
22
- default_header: Optional[str] = None,
23
- run_validation: bool = True
41
+ input_file: Union[str, BufferedIOBase, None] = None,
42
+ default_header: Optional[str] = None,
43
+ allow_any_sequence_characters: bool = False,
44
+ allow_empty_sequence: bool = False,
45
+ file_name: Optional[str] = None,
24
46
  ) -> List[SeqUtilRecord]:
25
- with open(file_name, 'r') as file_handle:
26
- data = file_handle.read().strip()
27
-
47
+ if input_file is None:
48
+ if file_name:
49
+ input_file = file_name
50
+ else:
51
+ raise ValueError("input_file must be a file name (str) or a BufferedIOBase object")
52
+ if isinstance(input_file, str):
53
+ with open(input_file, 'r') as file_handle:
54
+ data = file_handle.read().strip()
55
+ elif isinstance(input_file, BufferedIOBase):
56
+ data = input_file.read().decode('utf-8')
57
+ else:
58
+ raise ValueError("input_file must be a file name (str) or a BufferedIOBase object")
28
59
  if not data:
29
60
  return []
30
61
 
@@ -61,12 +92,16 @@ class SeqUtil:
61
92
  description = sequence_data_splitted[0][len(sequence_id):].strip()
62
93
  sequence = "".join([seq.strip().upper() for seq in sequence_data_splitted[1:]])
63
94
 
64
- if run_validation:
95
+ if not allow_any_sequence_characters:
65
96
  invalid_sequence_characters = find_invalid_sequence_characters(sequence)
66
97
  if len(invalid_sequence_characters) > 0:
67
98
  raise Exception(
68
99
  f'Error: Invalid character ("{invalid_sequence_characters[0]}") found in sequence {sequence_id}'
69
100
  )
101
+ if not allow_empty_sequence and len(sequence) == 0:
102
+ raise Exception(
103
+ f'Error: No sequence found for fasta entry {sequence_id}'
104
+ )
70
105
 
71
106
  parsed_sequences.append(
72
107
  SeqUtilRecord(sequence=sequence, sequence_id=sequence_id, description=description)
@@ -78,5 +113,8 @@ class SeqUtil:
78
113
  with open(file_name, mode='w') as file_handle:
79
114
  for record in records:
80
115
  optional_description = f' {record.description}' if record.description else ''
116
+ if record.properties:
117
+ for key, value in record.properties.items():
118
+ optional_description += f' [{key}={value}]'
81
119
  sequence = '\n'.join(record.sequence[i:i + 80] for i in range(0, len(record.sequence), 80))
82
120
  file_handle.write(f'>{record.id}{optional_description}\n{sequence}\n')
@@ -9,14 +9,15 @@ https://github.com/uktrade/stream-unzip
9
9
  import io
10
10
  import zipfile
11
11
 
12
- import requests
13
-
14
12
  from functools import partial
15
13
  from struct import Struct
16
14
  import zlib
17
15
 
18
16
  __all__ = ['RemoteIOError', 'RemoteZip']
19
17
 
18
+ from biolib._internal.http_client import HttpClient
19
+
20
+
20
21
  class RemoteZipError(Exception):
21
22
  pass
22
23
 
@@ -152,8 +153,7 @@ class RemoteIO(io.IOBase):
152
153
 
153
154
 
154
155
  class RemoteZip(zipfile.ZipFile):
155
- def __init__(self, url, initial_buffer_size=64*1024, **kwargs):
156
- self.kwargs = kwargs
156
+ def __init__(self, url, initial_buffer_size=64*1024):
157
157
  self.url = url
158
158
 
159
159
  rio = RemoteIO(self.fetch_fun, initial_buffer_size)
@@ -191,22 +191,14 @@ class RemoteZip(zipfile.ZipFile):
191
191
  return "bytes=%s%s" % (range_min, '' if range_min < 0 else '-')
192
192
  return "bytes=%s-%s" % (range_min, range_max)
193
193
 
194
- @staticmethod
195
- def request(url, range_header, kwargs):
196
- kwargs['headers'] = headers = dict(kwargs.get('headers', {}))
197
- headers['Range'] = range_header
198
- res = requests.get(url, stream=True, **kwargs)
199
- res.raise_for_status()
200
- if 'Content-Range' not in res.headers:
201
- raise RangeNotSupported("The server doesn't support range requests")
202
- return res.raw, res.headers
203
-
204
194
  def fetch_fun(self, data_range, stream=False):
205
195
  range_header = self.make_header(*data_range)
206
- kwargs = dict(self.kwargs)
207
196
  try:
208
- res, headers = self.request(self.url, range_header, kwargs)
209
- return self.make_buffer(res, headers['Content-Range'], stream=stream)
197
+ response = HttpClient.request(url=self.url, headers={'Range': range_header})
198
+ if 'Content-Range' not in response.headers:
199
+ raise RangeNotSupported("The server doesn't support range requests")
200
+
201
+ return self.make_buffer(io.BytesIO(response.content), response.headers['Content-Range'], stream=False)
210
202
  except IOError as e:
211
203
  raise RemoteIOError(str(e))
212
204
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybiolib
3
- Version: 1.1.1629
3
+ Version: 1.1.1881
4
4
  Summary: BioLib Python Client
5
5
  Home-page: https://github.com/biolib
6
6
  License: MIT
@@ -25,7 +25,6 @@ Requires-Dist: flask (>=2.0.1) ; extra == "compute-node"
25
25
  Requires-Dist: gunicorn (>=20.1.0) ; extra == "compute-node"
26
26
  Requires-Dist: importlib-metadata (>=1.6.1)
27
27
  Requires-Dist: pyyaml (>=5.3.1)
28
- Requires-Dist: requests (>=2.25.1)
29
28
  Requires-Dist: rich (>=12.4.4)
30
29
  Requires-Dist: typing_extensions (>=3.10.0) ; python_version < "3.8"
31
30
  Description-Content-Type: text/markdown
@@ -1,22 +1,25 @@
1
1
  LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
2
2
  README.md,sha256=_IH7pxFiqy2bIAmaVeA-iVTyUwWRjMIlfgtUbYTtmls,368
3
- biolib/__init__.py,sha256=_ydjlp3Kyqr4iWkT63ZdiiwTbqtHjPS2S51EdU0UTk4,3690
3
+ biolib/__init__.py,sha256=nfZvVkrHZLvjvvlAvFzhvem9NMfqgmw8NWaCH9HGzew,4045
4
4
  biolib/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- biolib/_internal/http_client.py,sha256=QlOXLeXIHHmgeIQuNMowD4XFzkTq-Pz_67-HyLmFxHM,3042
6
- biolib/_internal/push_application.py,sha256=NXQNLPucqkq7eKbNCJQA8OYx4CXYHRJ1CG1ViPAJJH4,10680
5
+ biolib/_internal/data_record/__init__.py,sha256=1Bk303i3rFet9veS56fIsrBYtT5X3n9vcsYMA6T6c5o,36
6
+ biolib/_internal/data_record/data_record.py,sha256=oQ2R7bD1on5aPC3jXP7OOSPeuXkWEqRUR8GV4a6hsJA,6539
7
+ biolib/_internal/data_record/remote_storage_endpoint.py,sha256=LPq8Lr5FhKF9_o5K-bUdT7TeLe5XFUD0AAeTkNEVZug,1133
8
+ biolib/_internal/http_client.py,sha256=cSBIzh00x2HL3BmLxt_GvDI7bWQMNytv_wOy7EXg8kI,4064
9
+ biolib/_internal/push_application.py,sha256=H1PGNtVJ0vRC0li39gFMpPpjm6QeZ8Ob-7cLkLmxS_Y,10009
10
+ biolib/_internal/runtime.py,sha256=un18gmB2wFOXVjKca1Oe6mZI-xGydz8C8seScNvnC2s,2197
11
+ biolib/_internal/utils/__init__.py,sha256=p5vsIFyu-zYqBgdSMfwW9NC_jk7rXvvCbV4Bzd3As7c,630
7
12
  biolib/api/__init__.py,sha256=iIO8ZRdn7YDhY5cR47-Wo1YsNOK8H6RN6jn8yor5WJI,137
8
- biolib/api/client.py,sha256=jts2QbR-pPU0pAuUaYfWsK4q1O4Nu1nQKv6LYu0T0L0,2754
13
+ biolib/api/client.py,sha256=MtDkH2Amr2Fko-bCR5DdookJu0yZ1q-6K_PPg4KK_Ek,2941
9
14
  biolib/app/__init__.py,sha256=cdPtcfb_U-bxb9iSL4fCEq2rpD9OjkyY4W-Zw60B0LI,37
10
- biolib/app/app.py,sha256=O8bpuHTWF-sFgQJX9NWoVjwaFpydJqqsFa-p7VPO7fE,10004
11
- biolib/app/search_apps.py,sha256=CIanvDebNpMtWck0w4IoR_tRZ6LpSWC8DPxXW2e6Ww4,1495
15
+ biolib/app/app.py,sha256=r63gDoH1s8uQOGITmiKOVIrYDYdMrB5nwXHNRt2Da2M,10197
16
+ biolib/app/search_apps.py,sha256=K4a41f5XIWth2BWI7OffASgIsD0ko8elCax8YL2igaY,1470
12
17
  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
14
- biolib/biolib_api_client/app_types.py,sha256=vEjkpMwaMfz8MxBBZQfWCkxqT7NXxWocB_Oe9WHjJ_g,2425
15
- biolib/biolib_api_client/auth.py,sha256=BAXtic6DdaA2QjoDVglnO3PFPoBETQbSraTpIwsZbFc,1267
16
- biolib/biolib_api_client/biolib_account_api.py,sha256=2Mc6SbmjBSsz8lF2H3iiaZHEm47LyI0B4rjmvzxKHt4,580
17
- biolib/biolib_api_client/biolib_app_api.py,sha256=naEy1tShrVkL8yCd1n9Q-gNrq6lAcNEAnt7qNl0KJyY,3291
18
- biolib/biolib_api_client/biolib_job_api.py,sha256=AvNvflEeCBjG2ZTaFcwvRU-61GdNodFCZQNe50491RM,7823
19
- biolib/biolib_api_client/biolib_large_file_system_api.py,sha256=5q4UlRw-OB2bRu7CeB14fy-azz2YeSgem5DbvMSaS44,1777
18
+ biolib/biolib_api_client/api_client.py,sha256=J03jRVvod1bgwwAZ3BZVKlUSJi43-ev2DUB0j63GZpc,7189
19
+ biolib/biolib_api_client/app_types.py,sha256=rEw4HICV7ujdmlzM3BjRcMNMbiYItliivpH0rkeJx4s,2465
20
+ biolib/biolib_api_client/auth.py,sha256=kjm0ZHnH3I8so3su2sZbBxNHYp-ZUdrZ5lwQ0K36RSw,949
21
+ biolib/biolib_api_client/biolib_app_api.py,sha256=DndlVxrNTes6DOaWyMINLGZQCRMWVvR7gwt5HVlyf5Y,4240
22
+ biolib/biolib_api_client/biolib_job_api.py,sha256=IpFahcRzm7GNy8DJ-XHYe-x7r4Voba8o22IXw5puHn8,6782
20
23
  biolib/biolib_api_client/common_types.py,sha256=RH-1KNHqUF-EkTpfPOSTt5Mq1GPdfju_cqXDesscO1I,123
21
24
  biolib/biolib_api_client/job_types.py,sha256=XlDIxijxymLoJcClXhl91h1E4b2fT3pszO9wjlssD4A,1284
22
25
  biolib/biolib_api_client/lfs_types.py,sha256=xaGjE-yUyNVM3LyKdslJn5ZXWp6_kVCd4o-ch8Czfm4,227
@@ -32,41 +35,43 @@ biolib/biolib_binary_format/saved_job.py,sha256=nFHVFRNTNcAFGODLSiBntCtMk55QKwre
32
35
  biolib/biolib_binary_format/stdout_and_stderr.py,sha256=WfUUJFFCBrtfXjuWIaRPiWCpuBLxfko68oxoTKhrwx8,1023
33
36
  biolib/biolib_binary_format/system_exception.py,sha256=T3iL4_cSHAHim3RSDPS8Xyb1mfteaJBZonSXuRltc28,853
34
37
  biolib/biolib_binary_format/system_status_update.py,sha256=aOELuQ0k-GtpaZTUxYd0GFomP_OInmrK585y6fuQuKE,1191
35
- biolib/biolib_binary_format/utils.py,sha256=0MDEGsyShkiIAHNWXuHfmhrKYVvVhn21Yl9BNWqHIiw,3693
38
+ biolib/biolib_binary_format/utils.py,sha256=1mZFX6KtbhvAXnzxnMJC_rYkiAjh9zhV31l68wVpA4A,4150
36
39
  biolib/biolib_docker_client/__init__.py,sha256=aBfA6mtWSI5dBEfNNMD6bIZzCPloW4ghKm0wqQiljdo,1481
37
40
  biolib/biolib_download_container.py,sha256=8TmBV8iv3bCvkNlHa1SSsc4zl0wX_eaxhfnW5rvFIh8,1779
38
41
  biolib/biolib_errors.py,sha256=5m4lK2l39DafpoXBImEBD4EPH3ayXBX0JgtPzmGClow,689
39
42
  biolib/biolib_logging.py,sha256=J3E5H_LL5k6ZUim2C8gqN7E6lCBZMTpO4tnMpOPwG9U,2854
40
- biolib/cli/__init__.py,sha256=KChTCmC9swEXHnb3dxoq5lCiospWos_rAMPOOOeRyAw,1022
41
- biolib/cli/download_container.py,sha256=0X109ZRtThfbEqsXBPU_ocGjxuRVLilNA9pjRMueTqI,466
42
- biolib/cli/init.py,sha256=Rd6_zpQxQbB0UaSEBFxfsL2j64YuINilNzhDydDDBig,820
43
- biolib/cli/lfs.py,sha256=S7S4vNF77ptzddU0Jg5U3TipN9nUyW-9WmiqGRyXHsM,2630
44
- biolib/cli/push.py,sha256=HVSrfqmd3NxER-DBhoK5wYQN-LavpuDZxe4CtKKSFak,813
45
- biolib/cli/run.py,sha256=04T1Ez7hp42BiX7DoDc0m2nJmrSUarVz4sPA3avY5yM,1647
43
+ biolib/cli/__init__.py,sha256=0v3c_J-U0k46c5ZWeQjLG_kTaKDJm81LBxQpDO2B_aI,1286
44
+ biolib/cli/auth.py,sha256=wp-JQRzDgiEbxeUTxwlHfugk-9u6PiOtZiHl9brAgcA,2050
45
+ biolib/cli/data_record.py,sha256=piN3QUbRAkMi4wpayghN4unFfuiNE5VCjI1gag4d8qg,1725
46
+ biolib/cli/download_container.py,sha256=HIZVHOPmslGE5M2Dsp9r2cCkAEJx__vcsDz5Wt5LRos,483
47
+ biolib/cli/init.py,sha256=wQOfii_au-d30Hp7DdH-WVw-WVraKvA_zY4za1w7DE8,821
48
+ biolib/cli/lfs.py,sha256=S9Ov-HWwtpMeRcwclh0qItnzviOaQL4aI0nnaCcZ_MM,3771
49
+ biolib/cli/push.py,sha256=TFi7O9tJ3zFe0VmtVTV3Vh9_xIMHnrc41xxcaBKU46g,813
50
+ biolib/cli/run.py,sha256=BbvXLQ-XibjQ71Y2d4URMH_8dflNVwM0i3TIWhw_u_c,1634
46
51
  biolib/cli/runtime.py,sha256=Xv-nrma5xX8NidWcvbUKcUvuN5TCarZa4A8mPVmF-z0,361
47
- biolib/cli/start.py,sha256=TpZq1VHVkLTW1_PyjIGkJg44E3PzxSaGrN2D_rNJL0c,1736
52
+ biolib/cli/start.py,sha256=rg8VVY8rboFhf1iQo3zE3WA5oh_R1VWWfYJEO1gMReY,1737
48
53
  biolib/compute_node/.gitignore,sha256=GZdZ4g7HftqfOfasFpBC5zV1YQAbht1a7EzcXD6f3zg,45
49
54
  biolib/compute_node/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
55
  biolib/compute_node/cloud_utils/__init__.py,sha256=VZSScLqaz5tg_gpMvWgwkAu9Qf-vgW_QHRoDOaAmU44,67
51
- biolib/compute_node/cloud_utils/cloud_utils.py,sha256=ZCNaNwFK8E9s8im8HKTlauIUILXskfMImBEIc4NLtNs,8864
56
+ biolib/compute_node/cloud_utils/cloud_utils.py,sha256=KIZjBnZPBtHParrR_KnRl7N343sHXMQugH9lkwAwTFk,7621
52
57
  biolib/compute_node/job_worker/__init__.py,sha256=ipdPWaABKYrltxny15e2kK8PWdEE7VzXbkKK6wM_zDk,71
53
- biolib/compute_node/job_worker/cache_state.py,sha256=N2AxvvgfizKx9P_ysM0GDCmueMUlgcveA4xSdz_Z2IQ,4822
58
+ biolib/compute_node/job_worker/cache_state.py,sha256=MwjSRzcJJ_4jybqvBL4xdgnDYSIiw4s90pNn83Netoo,4830
54
59
  biolib/compute_node/job_worker/cache_types.py,sha256=ajpLy8i09QeQS9dEqTn3T6NVNMY_YsHQkSD5nvIHccQ,818
55
60
  biolib/compute_node/job_worker/docker_image_cache.py,sha256=ansHIkJIq_EMW1nZNlW-RRLVVeKWTbzNICYaOHpKiRE,7460
56
61
  biolib/compute_node/job_worker/executors/__init__.py,sha256=bW6t1qi3PZTlHM4quaTLa8EI4ALTCk83cqcVJfJfJfE,145
57
- biolib/compute_node/job_worker/executors/docker_executor.py,sha256=74wUy5piILgCY-eFu2LuEOWDqmuYkaijy-ZW83S6WKw,26335
62
+ biolib/compute_node/job_worker/executors/docker_executor.py,sha256=ezXRhVBW5dYpLJjM2m5Qf-I6PrrNeBdEYjApjo7XVso,26419
58
63
  biolib/compute_node/job_worker/executors/docker_types.py,sha256=VhsU1DKtJjx_BbCkVmiPZPH4ROiL1ygW1Y_s1Kbpa2o,216
59
64
  biolib/compute_node/job_worker/executors/tars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
65
  biolib/compute_node/job_worker/executors/types.py,sha256=yP5gG39hr-DLnw9bOE--VHi-1arDbIYiGuV1rlTbbHI,1466
61
66
  biolib/compute_node/job_worker/job_legacy_input_wait_timeout_thread.py,sha256=_cvEiZbOwfkv6fYmfrvdi_FVviIEYr_dSClQcOQaUWM,1198
62
67
  biolib/compute_node/job_worker/job_max_runtime_timer_thread.py,sha256=K_xgz7IhiIjpLlXRk8sqaMyLoApcidJkgu29sJX0gb8,1174
63
- biolib/compute_node/job_worker/job_storage.py,sha256=o4kRBIMyjnbeQyb4CXMDKWVll3aIKkHKSRKBveEii2c,4220
64
- biolib/compute_node/job_worker/job_worker.py,sha256=nVesFh7Q2VqVywY3MRKlF8PAsqNNOvKIBLac2ih3r5E,27903
68
+ biolib/compute_node/job_worker/job_storage.py,sha256=Ol43f43W6aD2EUkA6G2i9-WxdREr5JPSjo1xFylddOQ,4030
69
+ biolib/compute_node/job_worker/job_worker.py,sha256=QifGpDBn1ojJ5b43--XyXmz8YqsgNlGskh-z8mkYQqg,28147
65
70
  biolib/compute_node/job_worker/large_file_system.py,sha256=XXqRlVtYhs-Ji9zQGIk5KQPXFO_Q5jJH0nnlw4GkeMY,10461
66
71
  biolib/compute_node/job_worker/mappings.py,sha256=Z48Kg4nbcOvsT2-9o3RRikBkqflgO4XeaWxTGz-CNvI,2499
67
72
  biolib/compute_node/job_worker/utilization_reporter_thread.py,sha256=7tm5Yk9coqJ9VbEdnO86tSXI0iM0omwIyKENxdxiVXk,8575
68
73
  biolib/compute_node/job_worker/utils.py,sha256=wgxcIA8yAhUPdCwyvuuJ0JmreyWmmUoBO33vWtG60xg,1282
69
- biolib/compute_node/remote_host_proxy.py,sha256=SabbH0EC946F_aRFB8XhQ5Uabf5hy67RgxBDVj8PzoY,13582
74
+ biolib/compute_node/remote_host_proxy.py,sha256=spjYghbqwX3dFrmedGvXZGXEsnwop1IbbyrXTv1PWz0,15080
70
75
  biolib/compute_node/socker_listener_thread.py,sha256=T5_UikA3MB9bD5W_dckYLPTgixh72vKUlgbBvj9dbM0,1601
71
76
  biolib/compute_node/socket_sender_thread.py,sha256=YgamPHeUm2GjMFGx8qk-99WlZhEs-kAb3q_2O6qByig,971
72
77
  biolib/compute_node/utils.py,sha256=M7i_WTyxbFM3Lri9RWZ_8FeQNYrQIWpKGLfp2I55oeY,4677
@@ -75,34 +80,33 @@ biolib/compute_node/webserver/gunicorn_flask_application.py,sha256=jPfR_YvNBekLU
75
80
  biolib/compute_node/webserver/webserver.py,sha256=15PkRyhtdtSgFDxa0z78aPO4ciZURsFqJYi-HtUmZF8,6494
76
81
  biolib/compute_node/webserver/webserver_types.py,sha256=Vmt1ZDecYhGBVEYWcW1DVxee1DEPqkqyxQzbsObXWbI,420
77
82
  biolib/compute_node/webserver/webserver_utils.py,sha256=XWvwYPbWNR3qS0FYbLLp-MDDfVk0QdaAmg3xPrT0H2s,4234
78
- biolib/compute_node/webserver/worker_thread.py,sha256=-d0WCrZkf9X0TNO9JBOzwScFUcToKPzW7hOeHXHiE6g,11539
83
+ biolib/compute_node/webserver/worker_thread.py,sha256=26tG73TADnOcXsAr7Iyf6smrLlCqB4x-vvmpUb8WqnA,11569
79
84
  biolib/experiments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
85
  biolib/experiments/experiment.py,sha256=xUd3LkV5ztFIjTx_ehBu8e-flvfuQnYimFtPj1upzb0,5942
81
86
  biolib/experiments/types.py,sha256=n9GxdFA7cLMfHvLLqLmZzX31ELeSSkMXFoEEdFsdWGY,171
82
87
  biolib/jobs/__init__.py,sha256=aIb2H2DHjQbM2Bs-dysFijhwFcL58Blp0Co0gimED3w,32
83
- biolib/jobs/job.py,sha256=yxivXHZ5lcpu4vLEaFseIwU9_raRfT8agbRBUSo4K0E,14965
88
+ biolib/jobs/job.py,sha256=_lYtqaTrtq3ayDvnaB9RuUMBTxCRKYGKVADUd473pWQ,15718
84
89
  biolib/jobs/job_result.py,sha256=8GasUmUXD8SjUYrE2N-HrDx7-AI6TEkFONH8H91t01Q,4913
85
90
  biolib/jobs/types.py,sha256=4OAvlhOKANzFMrZDd-mhXpEd8RaKcx8sPneZUoWhJ2U,970
86
- biolib/lfs/__init__.py,sha256=wspftSqe_x7xPMZbeW8mcIBuxbHFCiFI3V4TuZU4nZ4,193
91
+ biolib/lfs/__init__.py,sha256=Qv8vdYeK43JecT4SsE93ZYE2VmNiZENdNpW8P9-omxs,115
87
92
  biolib/lfs/cache.py,sha256=pQS2np21rdJ6I3DpoOutnzPHpLOZgUIS8TMltUJk_k4,2226
88
- biolib/lfs/utils.py,sha256=DZmVCgnZywDeFo5VDitED1wNnFt71lzP-KllSYHmyrY,10010
89
- biolib/runtime/__init__.py,sha256=WyuNnkzj1r-Sx4J-xWzp3US2oo9m5aIuCOYRmjlZ3ug,44
90
- biolib/runtime/results.py,sha256=7Fzrddb319dLMgTS1AVvz-RaTxAWOr7Qt75ftfSci9E,778
91
- biolib/sdk/__init__.py,sha256=vqqE2Sf3gLySkaJv8VgWtPRkYMi9hOf66y9Ay2waYVE,1339
93
+ biolib/lfs/utils.py,sha256=HSs7F2wXklYhhv5tabfaeC5noXJyxRjbGD5IhWOVdxs,5918
94
+ biolib/runtime/__init__.py,sha256=x1Ivydtu9TFTaX-Cofg_kGA-TI0zLon-ccrFiiVgBok,492
95
+ biolib/sdk/__init__.py,sha256=77IBthMbwgmYymjQwLP4ny1X2ikvI1I0ocP6Eyzfyaw,1766
92
96
  biolib/tables.py,sha256=acH7VjwAbadLo8P84FSnKEZxCTVsF5rEg9VPuxElNs8,872
93
97
  biolib/templates/__init__.py,sha256=Yx62sSyDCDesRQDQgmbDsLpfgEh93fWE8r9u4g2azXk,36
94
98
  biolib/templates/example_app.py,sha256=EB3E3RT4SeO_ii5nVQqJpi5KDGNE_huF1ub-e5ZFveE,715
95
99
  biolib/typing_utils.py,sha256=krMhxB3SedVQA3HXIrC7DBXWpHKWN5JNmXGcSrrysOc,263
96
100
  biolib/user/__init__.py,sha256=Db5wtxLfFz3ID9TULSSTo77csw9tO6RtxMRvV5cqKEE,39
97
- biolib/user/sign_in.py,sha256=CvHBgoYjg5d5CL9etVopns_g1pImgW8mQH3zAjpe1Ik,2061
98
- biolib/utils/__init__.py,sha256=RxXoO8sLfmv5UIdkYAX7p5K03UUIUzss_A5vtb8CLlw,6897
99
- biolib/utils/app_uri.py,sha256=hOFsTQfA7QbyQyg9ItGdD8VDWBJw0vYMqzLdSiJXmqQ,1857
100
- biolib/utils/cache_state.py,sha256=BFrZlV4XZIueIFzAFiPidX4hmwADKY5Y5ZuqlerF5l0,3060
101
- biolib/utils/multipart_uploader.py,sha256=PEorMsTNg5f72e3Y-KA3LrI-F6EAnsD9vENV-5EuiX0,9896
102
- biolib/utils/seq_util.py,sha256=hudZ7o1LI7xdpjb1OFKPBZvGVxjiqKez8zMwjtWT0TY,3269
103
- biolib/utils/zip/remote_zip.py,sha256=NCdUnVbGCv7SfXCI-yVU-is_OnyWmLAnVpIdSvo-W4k,23500
104
- pybiolib-1.1.1629.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
105
- pybiolib-1.1.1629.dist-info/METADATA,sha256=grvWM24XHQjGcGXpjHv79ba0vY8PzvyTce4CUjkQ3wk,1543
106
- pybiolib-1.1.1629.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
107
- pybiolib-1.1.1629.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
108
- pybiolib-1.1.1629.dist-info/RECORD,,
101
+ biolib/user/sign_in.py,sha256=q-E2B3wLVwPU5plbITJXP4GDWWUzUcDpYu_y8BShNQ8,2039
102
+ biolib/utils/__init__.py,sha256=fwjciJyJicvYyZcVTzfDBgD0SKY13DeXqvTeG4qZIy8,5548
103
+ biolib/utils/app_uri.py,sha256=Yq_-_VGugQhMMo6mM5f0G9yNlLkr0WK4j0Nrf3FE4xQ,2171
104
+ biolib/utils/cache_state.py,sha256=u256F37QSRIVwqKlbnCyzAX4EMI-kl6Dwu6qwj-Qmag,3100
105
+ biolib/utils/multipart_uploader.py,sha256=XvGP1I8tQuKhAH-QugPRoEsCi9qvbRk-DVBs5PNwwJo,8452
106
+ biolib/utils/seq_util.py,sha256=jC5WhH63FTD7SLFJbxQGA2hOt9NTwq9zHl_BEec1Z0c,4907
107
+ biolib/utils/zip/remote_zip.py,sha256=0wErYlxir5921agfFeV1xVjf29l9VNgGQvNlWOlj2Yc,23232
108
+ pybiolib-1.1.1881.dist-info/LICENSE,sha256=F2h7gf8i0agDIeWoBPXDMYScvQOz02pAWkKhTGOHaaw,1067
109
+ pybiolib-1.1.1881.dist-info/METADATA,sha256=oanwAPIfyI5nATML26HjNK4sjPb2ciuoyP2jLxg8Kbs,1508
110
+ pybiolib-1.1.1881.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
111
+ pybiolib-1.1.1881.dist-info/entry_points.txt,sha256=p6DyaP_2kctxegTX23WBznnrDi4mz6gx04O5uKtRDXg,42
112
+ pybiolib-1.1.1881.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.8.1
2
+ Generator: poetry-core 1.9.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,21 +0,0 @@
1
- import requests
2
-
3
- from biolib.biolib_api_client.auth import BearerAuth
4
- from biolib.biolib_api_client import BiolibApiClient
5
- from biolib.biolib_errors import BioLibError
6
-
7
-
8
- class BiolibAccountApi:
9
-
10
- @staticmethod
11
- def fetch_by_handle(account_handle):
12
- response = requests.get(
13
- f'{BiolibApiClient.get().base_url}/api/account/{account_handle}',
14
- auth=BearerAuth(BiolibApiClient.get().access_token),
15
- timeout=5
16
- )
17
-
18
- if not response.ok:
19
- raise BioLibError(response.content.decode())
20
-
21
- return response.json()
@@ -1,53 +0,0 @@
1
- import requests
2
-
3
- from biolib.biolib_api_client.auth import BearerAuth
4
- from biolib.biolib_api_client import BiolibApiClient
5
- from biolib.biolib_api_client.lfs_types import LargeFileSystemVersion, LargeFileSystem
6
- from biolib.biolib_errors import BioLibError
7
-
8
-
9
- class BiolibLargeFileSystemApi:
10
-
11
- @staticmethod
12
- def create(account_uuid: str, name: str) -> LargeFileSystem:
13
- response = requests.post(
14
- f'{BiolibApiClient.get().base_url}/api/lfs/',
15
- auth=BearerAuth(BiolibApiClient.get().access_token),
16
- timeout=5,
17
- json={'account_uuid': account_uuid, 'name': name}
18
- )
19
-
20
- if not response.ok:
21
- raise BioLibError(response.content.decode())
22
-
23
- lfs: LargeFileSystem = response.json()
24
- return lfs
25
-
26
- @staticmethod
27
- def fetch_version(lfs_version_uuid: str) -> LargeFileSystemVersion:
28
- response = requests.get(
29
- f'{BiolibApiClient.get().base_url}/api/lfs/versions/{lfs_version_uuid}/',
30
- auth=BearerAuth(BiolibApiClient.get().access_token),
31
- timeout=5,
32
- )
33
-
34
- if not response.ok:
35
- raise BioLibError(response.content.decode())
36
-
37
- lfs_version: LargeFileSystemVersion = response.json()
38
- return lfs_version
39
-
40
- @staticmethod
41
- def create_version(resource_uuid: str) -> LargeFileSystemVersion:
42
- response = requests.post(
43
- f'{BiolibApiClient.get().base_url}/api/lfs/versions/',
44
- auth=BearerAuth(BiolibApiClient.get().access_token),
45
- json={'resource_uuid': resource_uuid},
46
- timeout=5,
47
- )
48
-
49
- if not response.ok:
50
- raise BioLibError(response.content.decode())
51
-
52
- lfs_version: LargeFileSystemVersion = response.json()
53
- return lfs_version
biolib/runtime/results.py DELETED
@@ -1,20 +0,0 @@
1
- import json
2
-
3
- from biolib import api
4
-
5
-
6
- 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")
15
-
16
- api.client.patch(
17
- 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/",
20
- )