pybioos 0.0.15__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.
- bioos/__about__.py +1 -1
- bioos/bioos.py +32 -7
- bioos/bioos_workflow.py +99 -8
- bioos/bw_import.py +5 -24
- bioos/bw_import_status_check.py +7 -2
- bioos/bw_status_check.py +7 -2
- bioos/config.py +4 -1
- bioos/get_submission_logs.py +7 -2
- bioos/resource/__init__.py +1 -1
- bioos/resource/iesapp.py +806 -0
- bioos/resource/workflows.py +273 -6
- bioos/resource/workspaces.py +140 -0
- bioos/service/BioOsService.py +103 -0
- bioos/workflow_info.py +207 -0
- {pybioos-0.0.15.dist-info → pybioos-0.0.19.dist-info}/METADATA +1 -1
- {pybioos-0.0.15.dist-info → pybioos-0.0.19.dist-info}/RECORD +20 -18
- {pybioos-0.0.15.dist-info → pybioos-0.0.19.dist-info}/LICENSE +0 -0
- {pybioos-0.0.15.dist-info → pybioos-0.0.19.dist-info}/WHEEL +0 -0
- {pybioos-0.0.15.dist-info → pybioos-0.0.19.dist-info}/entry_points.txt +0 -0
- {pybioos-0.0.15.dist-info → pybioos-0.0.19.dist-info}/top_level.txt +0 -0
bioos/workflow_info.py
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
from typing import Dict, Any, List, Optional
|
|
2
|
+
import pandas as pd
|
|
3
|
+
|
|
4
|
+
from bioos import bioos
|
|
5
|
+
from bioos.config import Config, DEFAULT_ENDPOINT
|
|
6
|
+
from bioos.errors import NotFoundError
|
|
7
|
+
|
|
8
|
+
class WorkflowInfo:
|
|
9
|
+
"""Bio-OS 工作流信息查询类"""
|
|
10
|
+
|
|
11
|
+
def __init__(self, ak: str, sk: str, endpoint: str = DEFAULT_ENDPOINT):
|
|
12
|
+
"""
|
|
13
|
+
初始化工作流信息查询类
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
ak: Bio-OS 访问密钥
|
|
17
|
+
sk: Bio-OS 私钥
|
|
18
|
+
endpoint: Bio-OS API 端点,默认为 https://bio-top.miracle.ac.cn
|
|
19
|
+
"""
|
|
20
|
+
self.ak = ak
|
|
21
|
+
self.sk = sk
|
|
22
|
+
self.endpoint = endpoint
|
|
23
|
+
# 配置 Bio-OS
|
|
24
|
+
Config.set_access_key(ak)
|
|
25
|
+
Config.set_secret_key(sk)
|
|
26
|
+
Config.set_endpoint(endpoint)
|
|
27
|
+
|
|
28
|
+
@staticmethod
|
|
29
|
+
def _fmt_default(raw: Any) -> str | None:
|
|
30
|
+
"""
|
|
31
|
+
将 Default 字段格式化成人类可读形式:
|
|
32
|
+
- None → None
|
|
33
|
+
- int/float → 123 / 1.23
|
|
34
|
+
- bool → true / false
|
|
35
|
+
- 其余字符串 → "value"(保留双引号)
|
|
36
|
+
"""
|
|
37
|
+
if raw is None:
|
|
38
|
+
return None
|
|
39
|
+
if isinstance(raw, (int, float, bool)):
|
|
40
|
+
return str(raw).lower() # bool 转成 'true' / 'false'
|
|
41
|
+
if isinstance(raw, str):
|
|
42
|
+
lo = raw.lower()
|
|
43
|
+
# 尝试将字符串视为数字或布尔
|
|
44
|
+
if lo in {"true", "false"}:
|
|
45
|
+
return lo
|
|
46
|
+
try:
|
|
47
|
+
int(raw); return raw
|
|
48
|
+
except ValueError:
|
|
49
|
+
pass
|
|
50
|
+
try:
|
|
51
|
+
float(raw); return raw
|
|
52
|
+
except ValueError:
|
|
53
|
+
pass
|
|
54
|
+
return f"\"{raw}\""
|
|
55
|
+
return str(raw)
|
|
56
|
+
|
|
57
|
+
def get_workspace_id(self, workspace_name: str) -> str:
|
|
58
|
+
"""
|
|
59
|
+
获取工作区ID
|
|
60
|
+
Args:
|
|
61
|
+
workspace_name: 工作区名称
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
str: 工作区ID
|
|
65
|
+
|
|
66
|
+
Raises:
|
|
67
|
+
NotFoundError: 未找到指定工作区
|
|
68
|
+
"""
|
|
69
|
+
df = bioos.list_workspaces()
|
|
70
|
+
ser = df[df.Name == workspace_name].ID
|
|
71
|
+
if len(ser) != 1:
|
|
72
|
+
raise NotFoundError("Workspace", workspace_name)
|
|
73
|
+
return ser.to_list()[0]
|
|
74
|
+
|
|
75
|
+
def get_workflow(self, workspace_name: str, workflow_name: str):
|
|
76
|
+
"""
|
|
77
|
+
获取工作流对象
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
workspace_name: 工作区名称
|
|
81
|
+
workflow_name: 工作流名称
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
Workflow: 工作流对象
|
|
85
|
+
Raises:
|
|
86
|
+
NotFoundError: 未找到指定工作区或工作流
|
|
87
|
+
"""
|
|
88
|
+
workspace_id = self.get_workspace_id(workspace_name)
|
|
89
|
+
ws = bioos.workspace(workspace_id)
|
|
90
|
+
return ws.workflow(name=workflow_name)
|
|
91
|
+
|
|
92
|
+
def list_workflows(self, workspace_name: str) -> List[Dict[str, Any]]:
|
|
93
|
+
"""
|
|
94
|
+
列出工作区下的所有工作流
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
workspace_name: 工作区名称
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
List[Dict[str, Any]]: 工作流列表
|
|
101
|
+
"""
|
|
102
|
+
workspace_id = self.get_workspace_id(workspace_name)
|
|
103
|
+
ws = bioos.workspace(workspace_id)
|
|
104
|
+
return ws.list_workflows()
|
|
105
|
+
|
|
106
|
+
def get_workflow_inputs(self, workspace_name: str, workflow_name: str) -> Dict[str, str]:
|
|
107
|
+
"""
|
|
108
|
+
获取工作流的输入参数模板
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
workspace_name: 工作区名称
|
|
112
|
+
workflow_name: 工作流名称
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
Dict[str, str]: 包含工作流输入参数模板的字典,格式为:
|
|
116
|
+
{
|
|
117
|
+
"param_name": "Type (optional, default = value)", # 对于可选参数
|
|
118
|
+
"param_name": "Type" # 对于必需参数
|
|
119
|
+
}
|
|
120
|
+
其中:
|
|
121
|
+
- Type 为参数类型(如 String, Int, File 等)
|
|
122
|
+
- optional 表示参数为可选
|
|
123
|
+
- value 为默认值(数字和布尔值直接显示,字符串加引号)
|
|
124
|
+
"""
|
|
125
|
+
try:
|
|
126
|
+
wf = self.get_workflow(workspace_name, workflow_name)
|
|
127
|
+
result = {}
|
|
128
|
+
|
|
129
|
+
for item in wf.inputs:
|
|
130
|
+
type_str = item.get("Type", "")
|
|
131
|
+
optional = item.get("Optional", False)
|
|
132
|
+
default = self._fmt_default(item.get("Default"))
|
|
133
|
+
|
|
134
|
+
if optional:
|
|
135
|
+
value = f"{type_str} (optional" + (f", default = {default})" if default is not None else ")")
|
|
136
|
+
else:
|
|
137
|
+
value = type_str
|
|
138
|
+
|
|
139
|
+
result[item["Name"]] = value
|
|
140
|
+
|
|
141
|
+
return result
|
|
142
|
+
|
|
143
|
+
except NotFoundError as e:
|
|
144
|
+
return {"error": str(e)}
|
|
145
|
+
except Exception as e:
|
|
146
|
+
return {"error": str(e)}
|
|
147
|
+
|
|
148
|
+
def get_workflow_outputs(self, workspace_name: str, workflow_name: str) -> Dict[str, str]:
|
|
149
|
+
"""
|
|
150
|
+
获取工作流的输出参数信息
|
|
151
|
+
|
|
152
|
+
Args:
|
|
153
|
+
workspace_name: 工作区名称
|
|
154
|
+
workflow_name: 工作流名称
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
Dict[str, str]: 包含工作流输出参数的字典
|
|
158
|
+
"""
|
|
159
|
+
try:
|
|
160
|
+
wf = self.get_workflow(workspace_name, workflow_name)
|
|
161
|
+
return {output["Name"]: output["Type"] for output in wf.outputs}
|
|
162
|
+
except NotFoundError as e:
|
|
163
|
+
return {"error": str(e)}
|
|
164
|
+
except Exception as e:
|
|
165
|
+
return {"error": str(e)}
|
|
166
|
+
|
|
167
|
+
def get_workflow_metadata(self, workspace_name: str, workflow_name: str) -> Dict[str, Any]:
|
|
168
|
+
"""
|
|
169
|
+
获取工作流的元数据信息
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
workspace_name: 工作区名称
|
|
173
|
+
workflow_name: 工作流名称
|
|
174
|
+
|
|
175
|
+
Returns:
|
|
176
|
+
Dict[str, Any]: 包含工作流元数据的字典,包括:
|
|
177
|
+
- name: 工作流名称
|
|
178
|
+
- description: 工作流描述
|
|
179
|
+
- language: 工作流语言
|
|
180
|
+
- source: 工作流源
|
|
181
|
+
- tag: 版本标签
|
|
182
|
+
- status: 工作流状态
|
|
183
|
+
- owner_name: 所有者
|
|
184
|
+
- create_time: 创建时间
|
|
185
|
+
- update_time: 更新时间
|
|
186
|
+
- main_workflow_path: 主工作流文件路径
|
|
187
|
+
- source_type: 源类型
|
|
188
|
+
"""
|
|
189
|
+
try:
|
|
190
|
+
wf = self.get_workflow(workspace_name, workflow_name)
|
|
191
|
+
return {
|
|
192
|
+
"name": wf.name,
|
|
193
|
+
"description": wf.description,
|
|
194
|
+
"language": wf.language,
|
|
195
|
+
"source": wf.source,
|
|
196
|
+
"tag": wf.tag,
|
|
197
|
+
"status": wf.status,
|
|
198
|
+
"owner_name": wf.owner_name,
|
|
199
|
+
"create_time": wf.create_time,
|
|
200
|
+
"update_time": wf.update_time,
|
|
201
|
+
"main_workflow_path": wf.main_workflow_path,
|
|
202
|
+
"source_type": wf.source_type
|
|
203
|
+
}
|
|
204
|
+
except NotFoundError as e:
|
|
205
|
+
return {"error": str(e)}
|
|
206
|
+
except Exception as e:
|
|
207
|
+
return {"error": str(e)}
|
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
bioos/__about__.py,sha256=
|
|
1
|
+
bioos/__about__.py,sha256=aWkoDtGPtBbAnLeddD1e0dWwgcOhvbjUFTY5JL8fl8k,57
|
|
2
2
|
bioos/__init__.py,sha256=4GZKi13lDTD25YBkGakhZyEQZWTER_OWQMNPoH_UM2c,22
|
|
3
|
-
bioos/bioos.py,sha256=
|
|
4
|
-
bioos/bioos_workflow.py,sha256=
|
|
5
|
-
bioos/bw_import.py,sha256=
|
|
6
|
-
bioos/bw_import_status_check.py,sha256=
|
|
7
|
-
bioos/bw_status_check.py,sha256=
|
|
8
|
-
bioos/config.py,sha256
|
|
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=
|
|
10
|
+
bioos/get_submission_logs.py,sha256=e0OlWwMso8bB6u1TepJpRim2L-trxM6x3IdgZSwo7jc,4112
|
|
11
11
|
bioos/log.py,sha256=twiCvf5IgJB7uvzANwBluSlztJN8ZrxbGZUBGlZ0vps,3204
|
|
12
|
+
bioos/workflow_info.py,sha256=5PT45Lv-Js84ljZxjb9uNl0Jd5l-LYnXyKHYKrOhcjI,6840
|
|
12
13
|
bioos/internal/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
13
14
|
bioos/internal/tos.py,sha256=0R6YN2lxjjZsuMfv0yLSkBmz_LqmzQGb8GagnUMc8EY,12264
|
|
14
15
|
bioos/models/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
15
16
|
bioos/models/models.py,sha256=HPCLZ4jK2HDth4vrlVHba21CiW6y7y5im1kOjV4adc8,391
|
|
16
|
-
bioos/resource/__init__.py,sha256=
|
|
17
|
+
bioos/resource/__init__.py,sha256=lOylK3fo0IRrF4rCte0oJRiKRX1iNx-mFkuoTM9c92s,58
|
|
17
18
|
bioos/resource/data_models.py,sha256=enKp8yyQI8IbRqe--0Xtyg1XzOwQQPQzoQsx_hNuZ6E,5089
|
|
18
19
|
bioos/resource/files.py,sha256=1HY0IHvq8H843VM2XZIHDdCuXXNcMrlEFhSNqWXmFzE,8456
|
|
20
|
+
bioos/resource/iesapp.py,sha256=eXYzGkkz4oGtG0x5laMcXKLb7OJp--GlM-UmqwuXQ_w,26101
|
|
19
21
|
bioos/resource/utility.py,sha256=emY7qVLLLvGmQYlVj-_bLAxU7i1GfQOUybdRkfEDwVA,1300
|
|
20
|
-
bioos/resource/workflows.py,sha256=
|
|
21
|
-
bioos/resource/workspaces.py,sha256=
|
|
22
|
-
bioos/service/BioOsService.py,sha256=
|
|
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
|
|
23
25
|
bioos/service/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
24
26
|
bioos/service/api.py,sha256=Khihn187bACEfBcJ-tRS9JO29-VCBsH0-9qq-i5WxkQ,8737
|
|
25
27
|
bioos/service/config.py,sha256=FbBsb6CpcLsQZH7n8uuUbFVhkpqYOEnOe0xGkA7ZrjA,1009
|
|
@@ -34,9 +36,9 @@ bioos/tests/workspaces.py,sha256=LuuRrTs2XqfE5mGQyJNl9RBtuMb4NZHBJFoO8HMZVYQ,522
|
|
|
34
36
|
bioos/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
37
|
bioos/utils/common_tools.py,sha256=fgMoE_-qZjgfQtUj_pmCTyYDtbJasyfH4Gm3VQsbgBQ,1651
|
|
36
38
|
bioos/utils/workflows.py,sha256=zRbwTUigoM5V5LFOgzQPm3kwxt5Ogz95OFfefJc6Fjo,133
|
|
37
|
-
pybioos-0.0.
|
|
38
|
-
pybioos-0.0.
|
|
39
|
-
pybioos-0.0.
|
|
40
|
-
pybioos-0.0.
|
|
41
|
-
pybioos-0.0.
|
|
42
|
-
pybioos-0.0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|