pybioos 0.0.16__py3-none-any.whl → 0.0.19__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.
@@ -339,6 +339,13 @@ class Submission(metaclass=SingletonType): # 与run class行为相同
339
339
  if not item.get("Status") in ("Running", "Pending"):
340
340
  self._finish_time = item.get("FinishTime")
341
341
 
342
+ def delete(self):
343
+ """Delete this submission from the workspace."""
344
+ Config.service().delete_submission({
345
+ "WorkspaceID": self.workspace_id,
346
+ "ID": self.id,
347
+ })
348
+
342
349
 
343
350
  class WorkflowResource(metaclass=SingletonType):
344
351
 
@@ -603,7 +610,7 @@ class Workflow(metaclass=SingletonType):
603
610
  "create_time": self.create_time,
604
611
  "update_time": self.update_time
605
612
  })
606
- return f"WorkflowInfo:\n{info_dict}"
613
+ return f"Workflow:\n{info_dict}"
607
614
 
608
615
  @property
609
616
  @cached(cache=TTLCache(maxsize=100, ttl=1))
@@ -753,6 +760,81 @@ class Workflow(metaclass=SingletonType):
753
760
  self._graph = detail.get("Graph", "")
754
761
  self._source_type = detail.get("SourceType", "")
755
762
 
763
+ def get_input_template(self) -> Dict[str, str]:
764
+ """Return a readable template of input parameters.
765
+
766
+ Each entry maps parameter name to a human-friendly description,
767
+ e.g. "String (optional, default = \"abc\")" or "Int".
768
+ """
769
+ result: Dict[str, str] = {}
770
+ inputs = self.inputs or []
771
+ for item in inputs:
772
+ name = item.get("Name", "")
773
+ if not name:
774
+ continue
775
+ type_str = item.get("Type", "")
776
+ optional = item.get("Optional", False)
777
+ default = self._fmt_default(item.get("Default"))
778
+ if optional:
779
+ value = f"{type_str} (optional" + (f", default = {default})" if default is not None else ")")
780
+ else:
781
+ value = type_str
782
+ result[name] = value
783
+ return result
784
+
785
+ def get_output_types(self) -> Dict[str, str]:
786
+ """Return a mapping of output parameter name to its type."""
787
+ outputs = self.outputs or []
788
+ return {item.get("Name", ""): item.get("Type", "") for item in outputs if item.get("Name")}
789
+
790
+ def get_metadata(self) -> Dict[str, Any]:
791
+ """Return workflow metadata in a flat dictionary."""
792
+ return {
793
+ "name": self.name,
794
+ "description": self.description,
795
+ "language": self.language,
796
+ "source": self.source,
797
+ "tag": self.tag,
798
+ "status": self.status,
799
+ "owner_name": self.owner_name,
800
+ "create_time": self.create_time,
801
+ "update_time": self.update_time,
802
+ "main_workflow_path": self.main_workflow_path,
803
+ "source_type": self.source_type,
804
+ }
805
+
806
+ @staticmethod
807
+ def _fmt_default(raw: Any) -> Optional[str]:
808
+ """Format default values into a readable string.
809
+
810
+ - None -> None
811
+ - bool -> "true" / "false"
812
+ - int/float -> numeric string
813
+ - other strings -> quoted string
814
+ """
815
+ if raw is None:
816
+ return None
817
+ if isinstance(raw, bool):
818
+ return str(raw).lower()
819
+ if isinstance(raw, (int, float)):
820
+ return str(raw)
821
+ if isinstance(raw, str):
822
+ lo = raw.lower()
823
+ if lo in {"true", "false"}:
824
+ return lo
825
+ try:
826
+ int(raw)
827
+ return raw
828
+ except ValueError:
829
+ pass
830
+ try:
831
+ float(raw)
832
+ return raw
833
+ except ValueError:
834
+ pass
835
+ return f'"{raw}"'
836
+ return str(raw)
837
+
756
838
  @property
757
839
  @cached(cache=TTLCache(maxsize=100, ttl=1))
758
840
  def get_cluster(self):
@@ -795,7 +877,8 @@ class Workflow(metaclass=SingletonType):
795
877
  call_caching: bool,
796
878
  submission_name_suffix: str = "",
797
879
  row_ids: List[str] = [],
798
- data_model_name: str = '') -> List[Run]:
880
+ data_model_name: str = '',
881
+ mount_tos: bool = False) -> List[Run]:
799
882
  """Submit an existed workflow.
800
883
 
801
884
  *Example*:
@@ -846,6 +929,7 @@ class Workflow(metaclass=SingletonType):
846
929
  'Inputs': inputs,
847
930
  'ExposedOptions': {
848
931
  "ReadFromCache": call_caching,
932
+ "MountTOS": mount_tos,
849
933
  # TODO this may change in the future
850
934
  "ExecutionRootDir": f"s3://{self.bucket}"
851
935
  },
@@ -1,4 +1,7 @@
1
1
  from datetime import datetime
2
+ import os
3
+ import time
4
+ import urllib.request
2
5
 
3
6
  import pandas as pd
4
7
  from cachetools import TTLCache, cached
@@ -7,6 +10,7 @@ from bioos.config import Config
7
10
  from bioos.resource.data_models import DataModelResource
8
11
  from bioos.resource.files import FileResource
9
12
  from bioos.resource.workflows import Workflow, WorkflowResource
13
+ from bioos.resource.iesapp import WebInstanceApp, WebInstanceAppResource
10
14
  from bioos.utils.common_tools import SingletonType, dict_str
11
15
 
12
16
 
@@ -110,6 +114,15 @@ class Workspace(metaclass=SingletonType):
110
114
 
111
115
  return FileResource(self._id, self._bucket)
112
116
 
117
+ @property
118
+ def webinstanceapps(self) -> WebInstanceAppResource:
119
+ """Returns WebInstanceAppResource object.
120
+
121
+ :return: WebInstanceAppResource object
122
+ :rtype: WebInstanceAppResource
123
+ """
124
+ return WebInstanceAppResource(self._id)
125
+
113
126
  def workflow(self, name: str) -> Workflow: # 通过这里执行的选择workflow生成wf的操作
114
127
  """Returns the workflow for the given name
115
128
 
@@ -121,3 +134,130 @@ class Workspace(metaclass=SingletonType):
121
134
  if not self._bucket:
122
135
  self._bucket = self.basic_info.get("s3_bucket")
123
136
  return Workflow(name, self._id, self._bucket)
137
+
138
+ def webinstanceapp(self, name: str) -> WebInstanceApp:
139
+ """Returns the webinstanceapp for the given name
140
+
141
+ :param name: WebInstanceApp name
142
+ :type name: str
143
+ :return: Specified webinstanceapp object
144
+ :rtype: WebInstanceApp
145
+ """
146
+ return WebInstanceApp(name, self._id)
147
+
148
+ def bind_cluster(self, cluster_id: str, type_: str = "workflow") -> dict:
149
+ """把当前 Workspace 绑定到指定集群"""
150
+ params = {"ClusterID": cluster_id, "Type": type_, "ID": self._id}
151
+ return Config.service().bind_cluster_to_workspace(params)
152
+
153
+
154
+ def export_workspace_v2(self,
155
+ download_path: str = "./",
156
+ monitor: bool = True,
157
+ monitor_interval: int = 5,
158
+ max_retries: int = 60) -> dict:
159
+ """导出当前 Workspace 的所有元信息并下载到本地
160
+
161
+ :param download_path: 下载文件保存路径,默认当前目录
162
+ :type download_path: str
163
+ :param monitor: 是否监控导出状态直到完成,默认 True
164
+ :type monitor: bool
165
+ :param monitor_interval: 轮询间隔(秒),默认 5 秒
166
+ :type monitor_interval: int
167
+ :param max_retries: 最大重试次数,默认 60 次(5 分钟)
168
+ :type max_retries: int
169
+ :return: 导出结果信息,包含 status、schema_id、file_path 等
170
+ :rtype: dict
171
+ """
172
+ params = {"WorkspaceID": self._id}
173
+ result = Config.service().export_workspace_v2(params)
174
+ schema_id = result.get('ID')
175
+
176
+ if not schema_id:
177
+ raise Exception("Failed to create export task: No schema ID returned")
178
+
179
+ # 如果不监控,直接返回任务 ID
180
+ if not monitor:
181
+ return {
182
+ "status": "submitted",
183
+ "schema_id": schema_id,
184
+ "message": "Export task submitted. Use list_schemas to check status."
185
+ }
186
+
187
+ # 步骤 2: 轮询查询导出状态
188
+ Config.Logger.info(f"Export task created with schema ID: {schema_id}")
189
+ Config.Logger.info(f"Monitoring export status (checking every {monitor_interval}s, max {max_retries} retries)...")
190
+
191
+ retry_count = 0
192
+ schema_key = None
193
+
194
+ while retry_count < max_retries:
195
+ # 查询所有 schemas
196
+ schemas_result = Config.service().list_schemas({"Filter": {}})
197
+ schemas = schemas_result.get("Items", [])
198
+
199
+ # 查找当前导出任务
200
+ for schema in schemas:
201
+ if schema.get("ID") == schema_id:
202
+ phase = schema.get("Status", {}).get("Phase", "")
203
+ message = schema.get("Status", {}).get("Message", "")
204
+
205
+ if phase == "Succeeded":
206
+ Config.Logger.info("Export task succeeded!")
207
+ schema_key = schema.get("SchemaKey")
208
+ break
209
+ elif phase == "Failed":
210
+ error_msg = f"Export task failed: {message}"
211
+ Config.Logger.error(error_msg)
212
+ raise Exception(error_msg)
213
+ else:
214
+ Config.Logger.info(f"Export task status: {phase}")
215
+
216
+ # 如果成功找到文件,跳出循环
217
+ if schema_key:
218
+ break
219
+
220
+ # 继续等待
221
+ time.sleep(monitor_interval)
222
+ retry_count += 1
223
+
224
+ # 超时检查
225
+ if not schema_key:
226
+ raise Exception(f"Export task timeout after {max_retries * monitor_interval} seconds")
227
+
228
+ # 步骤 3: 获取预签名 URL
229
+ Config.Logger.info(f"Getting presigned URL for schema: {schema_id}")
230
+ presigned_params = {
231
+ "ID": schema_id,
232
+ "WorkspaceID": self._id
233
+ }
234
+ presigned_result = Config.service().get_export_workspace_presigned_url(presigned_params)
235
+ presigned_url = presigned_result.get("PreSignedURL")
236
+
237
+ if not presigned_url:
238
+ raise Exception("Failed to get presigned URL for export file")
239
+
240
+ Config.Logger.info(f"Downloading export file from presigned URL...")
241
+
242
+ # 步骤 4: 使用 HTTP 请求下载文件
243
+ # 确保下载目录存在
244
+ os.makedirs(download_path, exist_ok=True)
245
+
246
+ # 从 URL 中提取文件名
247
+ filename = os.path.basename(schema_key)
248
+ local_file_path = os.path.join(download_path, filename)
249
+
250
+ try:
251
+ # 使用 urllib 下载文件
252
+ urllib.request.urlretrieve(presigned_url, local_file_path)
253
+ Config.Logger.info(f"Export file downloaded successfully to: {local_file_path}")
254
+ except Exception as e:
255
+ raise Exception(f"Failed to download export file from presigned URL: {str(e)}")
256
+
257
+ return {
258
+ "status": "success",
259
+ "schema_id": schema_id,
260
+ "schema_key": schema_key,
261
+ "file_path": local_file_path,
262
+ "message": f"Workspace exported and downloaded successfully"
263
+ }
@@ -47,6 +47,11 @@ class BioOsService(Service):
47
47
  'Action': 'ListWorkspaces',
48
48
  'Version': '2021-03-04'
49
49
  }, {}, {}),
50
+ 'CreateWorkspace':
51
+ ApiInfo('POST', '/', {
52
+ 'Action': 'CreateWorkspace',
53
+ 'Version': '2021-03-04'
54
+ }, {}, {}),
50
55
  'CreateDataModel':
51
56
  ApiInfo('POST', '/', {
52
57
  'Action': 'CreateDataModel',
@@ -127,12 +132,74 @@ class BioOsService(Service):
127
132
  'Action': 'DeleteWorkflow',
128
133
  'Version': '2021-03-04'
129
134
  }, {}, {}),
135
+ 'BindClusterToWorkspace':
136
+ ApiInfo('POST', '/', {
137
+ 'Action': 'BindClusterToWorkspace',
138
+ 'Version': '2021-03-04'
139
+ }, {}, {}),
140
+ 'ListWebappInstances':
141
+ ApiInfo('POST', '/', {
142
+ 'Action': 'ListWebappInstances',
143
+ 'Version': '2021-03-04'
144
+ }, {}, {}),
145
+ 'CreateWebappInstance':
146
+ ApiInfo('POST', '/', {
147
+ 'Action': 'CreateWebappInstance',
148
+ 'Version': '2021-03-04'
149
+ }, {}, {}),
150
+ 'CheckCreateWebappInstance':
151
+ ApiInfo('POST', '/', {
152
+ 'Action': 'CheckCreateWebappInstance',
153
+ 'Version': '2021-03-04'
154
+ }, {}, {}),
155
+ 'DeleteWebappInstance':
156
+ ApiInfo('POST', '/', {
157
+ 'Action': 'DeleteWebappInstance',
158
+ 'Version': '2021-03-04'
159
+ }, {}, {}),
160
+ 'StartWebappInstance':
161
+ ApiInfo('POST', '/', {
162
+ 'Action': 'StartWebappInstance',
163
+ 'Version': '2021-03-04'
164
+ }, {}, {}),
165
+ 'StopWebappInstance':
166
+ ApiInfo('POST', '/', {
167
+ 'Action': 'StopWebappInstance',
168
+ 'Version': '2021-03-04'
169
+ }, {}, {}),
170
+ 'ListWebappInstanceEvents':
171
+ ApiInfo('POST', '/', {
172
+ 'Action': 'ListWebappInstanceEvents',
173
+ 'Version': '2021-03-04'
174
+ }, {}, {}),
175
+ 'CommitIESImage':
176
+ ApiInfo('POST', '/', {
177
+ 'Action': 'CommitIESImage',
178
+ 'Version': '2021-03-04'
179
+ }, {}, {}),
180
+ 'ExportWorkspaceV2':
181
+ ApiInfo('POST', '/', {
182
+ 'Action': 'ExportWorkspaceV2',
183
+ 'Version': '2021-03-04'
184
+ }, {}, {}),
185
+ 'ListSchemas':
186
+ ApiInfo('POST', '/', {
187
+ 'Action': 'ListSchemas',
188
+ 'Version': '2021-03-04'
189
+ }, {}, {}),
190
+ 'GetExportWorkspacePreSignedURL':
191
+ ApiInfo('POST', '/', {
192
+ 'Action': 'GetExportWorkspacePreSignedURL',
193
+ 'Version': '2021-03-04'
194
+ }, {}, {}),
130
195
  }
131
196
  return api_info
132
197
 
133
198
  def list_workspaces(self, params): # 以下各方法的params需要在外部使用时构建
134
199
  return self.__request('ListWorkspaces', params)
135
200
 
201
+ def create_workspace(self, params):
202
+ return self.__request('CreateWorkspace', params)
136
203
  def create_data_model(self, params):
137
204
  return self.__request('CreateDataModel', params)
138
205
 
@@ -181,6 +248,42 @@ class BioOsService(Service):
181
248
  def delete_workflow(self, params):
182
249
  return self.__request("DeleteWorkflow", params)
183
250
 
251
+ def bind_cluster_to_workspace(self, params):
252
+ return self.__request("BindClusterToWorkspace", params)
253
+
254
+ def list_webinstance_apps(self, params):
255
+ return self.__request('ListWebappInstances', params)
256
+
257
+ def create_webinstance_app(self, params):
258
+ return self.__request('CreateWebappInstance', params)
259
+
260
+ def check_webinstance_app(self, params):
261
+ return self.__request("CheckCreateWebappInstance", params)
262
+
263
+ def delete_webinstance_app(self, params):
264
+ return self.__request("DeleteWebappInstance", params)
265
+
266
+ def start_webinstance_app(self, params):
267
+ return self.__request("StartWebappInstance", params)
268
+
269
+ def stop_webinstance_app(self, params):
270
+ return self.__request("StopWebappInstance", params)
271
+
272
+ def list_webinstance_events(self, params):
273
+ return self.__request("ListWebappInstanceEvents", params)
274
+
275
+ def commit_ies_image(self, params):
276
+ return self.__request("CommitIESImage", params)
277
+
278
+ def export_workspace_v2(self, params):
279
+ return self.__request("ExportWorkspaceV2", params)
280
+
281
+ def list_schemas(self, params):
282
+ return self.__request("ListSchemas", params)
283
+
284
+ def get_export_workspace_presigned_url(self, params):
285
+ return self.__request("GetExportWorkspacePreSignedURL", params)
286
+
184
287
  def __request(self, action, params):
185
288
  res = self.json(
186
289
  action, dict(),
bioos/workflow_info.py CHANGED
@@ -2,14 +2,13 @@ from typing import Dict, Any, List, Optional
2
2
  import pandas as pd
3
3
 
4
4
  from bioos import bioos
5
- from bioos.config import Config
5
+ from bioos.config import Config, DEFAULT_ENDPOINT
6
6
  from bioos.errors import NotFoundError
7
7
 
8
-
9
8
  class WorkflowInfo:
10
9
  """Bio-OS 工作流信息查询类"""
11
10
 
12
- def __init__(self, ak: str, sk: str, endpoint: str = "https://bio-top.miracle.ac.cn"):
11
+ def __init__(self, ak: str, sk: str, endpoint: str = DEFAULT_ENDPOINT):
13
12
  """
14
13
  初始化工作流信息查询类
15
14
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pybioos
3
- Version: 0.0.16
3
+ Version: 0.0.19
4
4
  Summary: BioOS SDK for Python
5
5
  Home-page: https://github.com/GBA-BI/pybioos
6
6
  Author: Jilong Liu
@@ -13,13 +13,15 @@ Classifier: Intended Audience :: Science/Research
13
13
  Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
14
14
  Classifier: Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator
15
15
  License-File: LICENSE
16
- Requires-Dist: volcengine >=1.0.61
17
- Requires-Dist: tabulate >=0.8.10
18
- Requires-Dist: click >=8.0.0
19
- Requires-Dist: pandas >=1.3.0
20
- Requires-Dist: tos ==2.5.6
21
- Requires-Dist: cachetools >=5.2.0
22
- Requires-Dist: typing-extensions >=4.4.0
23
- Requires-Dist: apscheduler >=3.10.4
24
- Requires-Dist: colorama >=0.4.6
16
+ Requires-Dist: volcengine (>=1.0.61)
17
+ Requires-Dist: tabulate (>=0.8.10)
18
+ Requires-Dist: click (>=8.0.0)
19
+ Requires-Dist: pandas (>=1.3.0)
20
+ Requires-Dist: tos (==2.5.6)
21
+ Requires-Dist: cachetools (>=5.2.0)
22
+ Requires-Dist: typing-extensions (>=4.4.0)
23
+ Requires-Dist: apscheduler (>=3.10.4)
24
+ Requires-Dist: colorama (>=0.4.6)
25
+
26
+ UNKNOWN
25
27
 
@@ -1,26 +1,27 @@
1
- bioos/__about__.py,sha256=TRnHZsxI7bVBqxAdnBiKbEhtnboUzdISbOREW1kz-io,56
1
+ bioos/__about__.py,sha256=aWkoDtGPtBbAnLeddD1e0dWwgcOhvbjUFTY5JL8fl8k,57
2
2
  bioos/__init__.py,sha256=4GZKi13lDTD25YBkGakhZyEQZWTER_OWQMNPoH_UM2c,22
3
- bioos/bioos.py,sha256=fHzOb1l5wYxw6NVYYZDiFcgk4V28BAgWEc3ev12reWs,2409
4
- bioos/bioos_workflow.py,sha256=BgooweeFT4O7SyProup2gOVSeXDb3pXWge--PD7J-lE,15232
5
- bioos/bw_import.py,sha256=lQk_ch_tTz8l4bnWniOzWZ1IxI6ZvKlaASkNMsdDGfA,5697
6
- bioos/bw_import_status_check.py,sha256=sJuso2SAfZWvPzypnGge25Ayv5PsSGRXqSNNwIhNu-E,2794
7
- bioos/bw_status_check.py,sha256=FVilkawRA7GD1JXUBeaR28W1DfN9bAzYBIAjqi4JIno,2916
8
- bioos/config.py,sha256=CvFabYqV1BkFWO8fnr5vBf6xNtNzA8hAEVeEIbvAOm8,4307
3
+ bioos/bioos.py,sha256=fFnbtwOyF5U3N_D41jXPYB2H4xKBsI931nS-qBUFW70,3231
4
+ bioos/bioos_workflow.py,sha256=IhbDVEszcyJ9ivtVGMgI6dOovB18-aRn-kDwPdJSa6I,17709
5
+ bioos/bw_import.py,sha256=kYS4BDbyIXyaFIOCUyOnAzIbLdHvY3l3KLPDVfAnFSM,5829
6
+ bioos/bw_import_status_check.py,sha256=x9Y_0I8huoC7aBgObuox-0z6foSr99TXQB7jozyQ7Eo,2972
7
+ bioos/bw_status_check.py,sha256=Etj_zp6tS0cj4t-nksUq221pPIWUFS0Lz0q0Uqflpes,3094
8
+ bioos/config.py,sha256=-1qS0uYgV-h3d67LyOuJ3lzDskEytXHI7T65-p8tnhA,4405
9
9
  bioos/errors.py,sha256=p0fH6JSMYBjul88lMJ7PPwGNh4SYg62-7VMNuUXWl-E,2540
10
- bioos/get_submission_logs.py,sha256=jUtT8Vic8h_VOcqrqJsTBSonve64RjbKNAyp0wUtIpg,3934
10
+ bioos/get_submission_logs.py,sha256=e0OlWwMso8bB6u1TepJpRim2L-trxM6x3IdgZSwo7jc,4112
11
11
  bioos/log.py,sha256=twiCvf5IgJB7uvzANwBluSlztJN8ZrxbGZUBGlZ0vps,3204
12
- bioos/workflow_info.py,sha256=bE9h1pE7Co8icS-J5WVHfSAbjef9EtLhpWjbHQcnFfc,6838
12
+ bioos/workflow_info.py,sha256=5PT45Lv-Js84ljZxjb9uNl0Jd5l-LYnXyKHYKrOhcjI,6840
13
13
  bioos/internal/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
14
14
  bioos/internal/tos.py,sha256=0R6YN2lxjjZsuMfv0yLSkBmz_LqmzQGb8GagnUMc8EY,12264
15
15
  bioos/models/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
16
16
  bioos/models/models.py,sha256=HPCLZ4jK2HDth4vrlVHba21CiW6y7y5im1kOjV4adc8,391
17
- bioos/resource/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
17
+ bioos/resource/__init__.py,sha256=lOylK3fo0IRrF4rCte0oJRiKRX1iNx-mFkuoTM9c92s,58
18
18
  bioos/resource/data_models.py,sha256=enKp8yyQI8IbRqe--0Xtyg1XzOwQQPQzoQsx_hNuZ6E,5089
19
19
  bioos/resource/files.py,sha256=1HY0IHvq8H843VM2XZIHDdCuXXNcMrlEFhSNqWXmFzE,8456
20
+ bioos/resource/iesapp.py,sha256=eXYzGkkz4oGtG0x5laMcXKLb7OJp--GlM-UmqwuXQ_w,26101
20
21
  bioos/resource/utility.py,sha256=emY7qVLLLvGmQYlVj-_bLAxU7i1GfQOUybdRkfEDwVA,1300
21
- bioos/resource/workflows.py,sha256=RZkREd7EzyRqk3gP09HSzeuI3i7Cn7VMhqjp4jj_cjg,29418
22
- bioos/resource/workspaces.py,sha256=Gmr8y_sjK7TQbhMhQ_7rxqR1KFcwU72I95YYCFrrLBQ,3995
23
- bioos/service/BioOsService.py,sha256=HuYUEwomHCLpA1MYgVqGyWAQWHM-_BHB-jmy9VsOlnQ,6724
22
+ bioos/resource/workflows.py,sha256=k5ZFdce1eHRLJAxz-l_QHEq6J11PUEKWRP6_yW2jR9E,32279
23
+ bioos/resource/workspaces.py,sha256=_oA-Us3nH71RecaSeezhYuVwJDaDucrWbOa9CvzTFGE,9631
24
+ bioos/service/BioOsService.py,sha256=QT848D-JafcZJdCJ_OZsQ8OvPeb4u1hLDtQAVJeEiXk,10513
24
25
  bioos/service/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
25
26
  bioos/service/api.py,sha256=Khihn187bACEfBcJ-tRS9JO29-VCBsH0-9qq-i5WxkQ,8737
26
27
  bioos/service/config.py,sha256=FbBsb6CpcLsQZH7n8uuUbFVhkpqYOEnOe0xGkA7ZrjA,1009
@@ -35,9 +36,9 @@ bioos/tests/workspaces.py,sha256=LuuRrTs2XqfE5mGQyJNl9RBtuMb4NZHBJFoO8HMZVYQ,522
35
36
  bioos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
37
  bioos/utils/common_tools.py,sha256=fgMoE_-qZjgfQtUj_pmCTyYDtbJasyfH4Gm3VQsbgBQ,1651
37
38
  bioos/utils/workflows.py,sha256=zRbwTUigoM5V5LFOgzQPm3kwxt5Ogz95OFfefJc6Fjo,133
38
- pybioos-0.0.16.dist-info/LICENSE,sha256=cPkGXsgfPgEhIns7Lt3Avxx0Uy-VbdsoP8jvNGuj3cE,1063
39
- pybioos-0.0.16.dist-info/METADATA,sha256=9M9p2P6lr9kiUB1KIQ15MZPIADDBFhw8YD1Zjho1oBk,803
40
- pybioos-0.0.16.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
41
- pybioos-0.0.16.dist-info/entry_points.txt,sha256=O-8Gg-zLuYcnOYbx1BMqAgEsoEZfKwtM19cUctHuYus,327
42
- pybioos-0.0.16.dist-info/top_level.txt,sha256=llpzydkKVDSaWZgz3bsTUsQmhoQpc_JcRJg2-H-5a2U,6
43
- pybioos-0.0.16.dist-info/RECORD,,
39
+ pybioos-0.0.19.dist-info/LICENSE,sha256=cPkGXsgfPgEhIns7Lt3Avxx0Uy-VbdsoP8jvNGuj3cE,1063
40
+ pybioos-0.0.19.dist-info/METADATA,sha256=xE7reRBlWdWtPFgG6C0334-BBY1_bT5fZtKdUg6wvek,830
41
+ pybioos-0.0.19.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92
42
+ pybioos-0.0.19.dist-info/entry_points.txt,sha256=Sc5H0_X7r03Mef4Qd70bebqgdIbVAxLU7nV7qP7cKD4,328
43
+ pybioos-0.0.19.dist-info/top_level.txt,sha256=llpzydkKVDSaWZgz3bsTUsQmhoQpc_JcRJg2-H-5a2U,6
44
+ pybioos-0.0.19.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.36.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -4,3 +4,4 @@ bw_import = bioos.bw_import:bioos_workflow_import
4
4
  bw_import_status_check = bioos.bw_import_status_check:bioos_workflow_status_check
5
5
  bw_status_check = bioos.bw_status_check:bioos_workflow_status_check
6
6
  get_submission_logs = bioos.get_submission_logs:get_submission_logs
7
+