bge-python-sdk 0.7.0__tar.gz → 2.0.0__tar.gz
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.
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/LICENSE +1 -1
- bge_python_sdk-2.0.0/MANIFEST.in +10 -0
- bge_python_sdk-2.0.0/PKG-INFO +180 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/README.md +1 -1
- bge_python_sdk-2.0.0/bge_python_sdk.egg-info/PKG-INFO +180 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bge_python_sdk.egg-info/SOURCES.txt +41 -6
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bge_python_sdk.egg-info/entry_points.txt +0 -1
- bge_python_sdk-2.0.0/bge_python_sdk.egg-info/requires.txt +15 -0
- bge_python_sdk-2.0.0/bge_python_sdk.egg-info/top_level.txt +6 -0
- bge_python_sdk-2.0.0/bgesdk/__init__.py +5 -0
- bge_python_sdk-2.0.0/bgesdk/__main__.py +66 -0
- bge_python_sdk-2.0.0/bgesdk/api/__init__.py +5 -0
- bge_python_sdk-2.0.0/bgesdk/api/api.py +29 -0
- bge_python_sdk-2.0.0/bgesdk/api/base.py +210 -0
- bge_python_sdk-2.0.0/bgesdk/api/file.py +420 -0
- bge_python_sdk-2.0.0/bgesdk/api/microbiome.py +143 -0
- bge_python_sdk-2.0.0/bgesdk/api/misc.py +224 -0
- bge_python_sdk-2.0.0/bgesdk/api/model.py +312 -0
- bge_python_sdk-2.0.0/bgesdk/api/samples.py +181 -0
- bge_python_sdk-2.0.0/bgesdk/api/stream.py +243 -0
- bge_python_sdk-2.0.0/bgesdk/api/variants.py +93 -0
- bge_python_sdk-2.0.0/bgesdk/client.py +248 -0
- bge_python_sdk-2.0.0/bgesdk/constants.py +46 -0
- bge_python_sdk-2.0.0/bgesdk/error.py +145 -0
- bge_python_sdk-2.0.0/bgesdk/fs.py +11 -0
- bge_python_sdk-2.0.0/bgesdk/http.py +193 -0
- bge_python_sdk-2.0.0/bgesdk/management/command.py +110 -0
- bge_python_sdk-2.0.0/bgesdk/management/commands/api/__init__.py +30 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/aggregate_omics_data.py +22 -34
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/applet_url.py +10 -14
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/download.py +17 -27
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/ferry_to_oss.py +18 -34
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_data_items.py +13 -28
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_externals.py +9 -23
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_func_abundance.py +22 -31
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_gene_abundance.py +14 -28
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_overview.py +13 -23
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_range_stream.py +15 -40
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_samples.py +19 -41
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_taxon_abundance.py +12 -28
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_user.py +7 -11
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_variants.py +9 -19
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/id_meta.py +10 -26
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/task.py +8 -15
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/upload.py +17 -27
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/upload_dir.py +19 -30
- bge_python_sdk-2.0.0/bgesdk/management/commands/config.py +178 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/login.py +42 -39
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/model.py +717 -692
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/token.py +22 -21
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/workon.py +6 -9
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/constants.py +16 -25
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/__init__.py +13 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/model_runtime.py +591 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/__init__.py +10 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/app/__init__.py +8 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/app/__main__.py +54 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/app/app_fastapi.py +168 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/app/app_tornado.py +182 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/app/logging_conf.py +80 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/__init__.py +10 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/__init__.py +8 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/__main__.py +54 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/app_fastapi.py +168 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/app_tornado.py +182 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/logging_conf.py +80 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/model_license.py +20 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/secure.py +99 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/model_license.py +20 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/secure.py +99 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/setup.py +29 -0
- bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/wheels/bge_model_server-0.1.0-py3-none-any.whl +0 -0
- bge_python_sdk-2.0.0/bgesdk/management/utils.py +280 -0
- bge_python_sdk-2.0.0/bgesdk/models.py +327 -0
- bge_python_sdk-2.0.0/bgesdk/py.typed +2 -0
- bge_python_sdk-2.0.0/bgesdk/utils.py +49 -0
- bge_python_sdk-2.0.0/bgesdk/version.py +1 -0
- bge_python_sdk-2.0.0/completions/_bge +14 -0
- bge_python_sdk-2.0.0/completions/bge.bash +14 -0
- bge_python_sdk-2.0.0/pyproject.toml +164 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/pytest.ini +2 -0
- bge_python_sdk-2.0.0/setup.cfg +4 -0
- bge_python_sdk-2.0.0/tests/__init__.py +3 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/tests/conftest.py +61 -14
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/tests/test_abundance.py +58 -41
- bge_python_sdk-2.0.0/tests/test_api_offline.py +160 -0
- bge_python_sdk-2.0.0/tests/test_api_structure.py +115 -0
- bge_python_sdk-2.0.0/tests/test_error.py +178 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/tests/test_fs.py +2 -2
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/tests/test_model.py +3 -1
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/tests/test_models.py +2 -4
- bge_python_sdk-2.0.0/tests/test_models_offline.py +47 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/tests/test_oauth2.py +5 -6
- bge_python_sdk-2.0.0/tests/test_phenotype.py +85 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/tests/test_samples.py +9 -10
- bge_python_sdk-2.0.0/tests/test_token.py +138 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/tests/test_user.py +3 -1
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/tests/test_variants.py +31 -21
- bge_python_sdk-2.0.0/tests/test_wgs.py +72 -0
- bge-python-sdk-0.7.0/MANIFEST.in +0 -2
- bge-python-sdk-0.7.0/PKG-INFO +0 -170
- bge-python-sdk-0.7.0/bge_python_sdk.egg-info/PKG-INFO +0 -170
- bge-python-sdk-0.7.0/bge_python_sdk.egg-info/requires.txt +0 -15
- bge-python-sdk-0.7.0/bge_python_sdk.egg-info/top_level.txt +0 -2
- bge-python-sdk-0.7.0/bgesdk/__init__.py +0 -5
- bge-python-sdk-0.7.0/bgesdk/__main__.py +0 -74
- bge-python-sdk-0.7.0/bgesdk/client.py +0 -1565
- bge-python-sdk-0.7.0/bgesdk/constants.py +0 -28
- bge-python-sdk-0.7.0/bgesdk/error.py +0 -22
- bge-python-sdk-0.7.0/bgesdk/fs.py +0 -6
- bge-python-sdk-0.7.0/bgesdk/http.py +0 -146
- bge-python-sdk-0.7.0/bgesdk/management/command.py +0 -27
- bge-python-sdk-0.7.0/bgesdk/management/commands/api/__init__.py +0 -58
- bge-python-sdk-0.7.0/bgesdk/management/commands/config.py +0 -204
- bge-python-sdk-0.7.0/bgesdk/management/commands/model_doc.py +0 -359
- bge-python-sdk-0.7.0/bgesdk/management/utils.py +0 -215
- bge-python-sdk-0.7.0/bgesdk/management/validate.py +0 -50
- bge-python-sdk-0.7.0/bgesdk/models.py +0 -184
- bge-python-sdk-0.7.0/bgesdk/utils.py +0 -32
- bge-python-sdk-0.7.0/bgesdk/version.py +0 -3
- bge-python-sdk-0.7.0/requirements.txt +0 -15
- bge-python-sdk-0.7.0/setup.cfg +0 -54
- bge-python-sdk-0.7.0/setup.py +0 -18
- bge-python-sdk-0.7.0/tests/__init__.py +0 -2
- bge-python-sdk-0.7.0/tests/test_phenotype.py +0 -60
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bge_python_sdk.egg-info/dependency_links.txt +0 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/__init__.py +0 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/__init__.py +0 -0
- {bge-python-sdk-0.7.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/__init__.py +0 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: bge-python-sdk
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: 可用于调用 BGE 开放平台的相关接口。
|
|
5
|
+
Author-email: leafcoder <leafcoder@gmail.com>, xiangji1204 <xiangji1204@genomics.cn>
|
|
6
|
+
Maintainer-email: leafcoder <leafcoder@gmail.com>
|
|
7
|
+
License: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/teambge/bge-python-sdk
|
|
9
|
+
Keywords: bge-python-sdk,bge,bgesdk,sdk
|
|
10
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Natural Language :: Chinese (Simplified)
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
|
|
16
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
+
Classifier: Programming Language :: Python
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
26
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
27
|
+
Classifier: Topic :: Utilities
|
|
28
|
+
Requires-Python: >=3.8
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Requires-Dist: requests>=2.25.0
|
|
32
|
+
Requires-Dist: oss2>=2.15.0
|
|
33
|
+
Requires-Dist: requests_toolbelt>=1.0.0
|
|
34
|
+
Requires-Dist: aliyun-python-sdk-core>=2.13.0
|
|
35
|
+
Requires-Dist: rich>=10.0.0
|
|
36
|
+
Requires-Dist: rich_argparse>=1.4.0
|
|
37
|
+
Requires-Dist: argcomplete>=2.0.0
|
|
38
|
+
Requires-Dist: python-minifier>=2.4.0
|
|
39
|
+
Requires-Dist: qprompt>=0.16.0
|
|
40
|
+
Requires-Dist: cython>=0.29.0
|
|
41
|
+
Provides-Extra: test
|
|
42
|
+
Requires-Dist: pytest>=7.0; extra == "test"
|
|
43
|
+
Requires-Dist: pytest-cov>=4.0; extra == "test"
|
|
44
|
+
Requires-Dist: requests-mock>=1.9.0; extra == "test"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
<div align="center">
|
|
48
|
+
|
|
49
|
+
# BGE 开放平台 SDK - Python 版
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
<p>
|
|
53
|
+
<!-- Place this tag where you want the button to render. -->
|
|
54
|
+
<a class="github-button" href="https://github.com/teambge/bge-python-sdk/subscription" data-color-scheme="no-preference: light; light: light; dark: dark;" data-show-count="true" aria-label="Watch teambge/bge-python-sdk on GitHub">
|
|
55
|
+
<img alt="GitHub forks" src="https://img.shields.io/github/watchers/teambge/bge-python-sdk?style=social">
|
|
56
|
+
</a>
|
|
57
|
+
<a class="github-button" href="https://github.com/teambge/bge-python-sdk" data-color-scheme="no-preference: light; light: light; dark: dark;" data-show-count="true" aria-label="Star teambge/bge-python-sdk on GitHub">
|
|
58
|
+
<img alt="GitHub forks" src="https://img.shields.io/github/stars/teambge/bge-python-sdk?style=social">
|
|
59
|
+
</a>
|
|
60
|
+
<a class="github-button" href="https://github.com/teambge/bge-python-sdk/fork" data-color-scheme="no-preference: light; light: light; dark: dark;" data-show-count="true" aria-label="Fork teambge/bge-python-sdk on GitHub">
|
|
61
|
+
<img alt="GitHub forks" src="https://img.shields.io/github/forks/teambge/bge-python-sdk?style=social">
|
|
62
|
+
</a>
|
|
63
|
+
</p>
|
|
64
|
+
|
|
65
|
+
<p>
|
|
66
|
+
<img src="https://img.shields.io/github/v/release/teambge/bge-python-sdk" data-origin="https://img.shields.io/github/v/release/teambge/bge-python-sdk" alt="GitHub release (latest by date)">
|
|
67
|
+
<img src="https://img.shields.io/github/languages/top/teambge/bge-python-sdk" data-origin="https://img.shields.io/github/languages/top/teambge/bge-python-sdk" alt="GitHub top language">
|
|
68
|
+
<img src="https://img.shields.io/github/languages/code-size/teambge/bge-python-sdk" data-origin="https://img.shields.io/github/languages/code-size/teambge/bge-python-sdk" alt="GitHub code size in bytes">
|
|
69
|
+
<img src="https://img.shields.io/github/commit-activity/w/teambge/bge-python-sdk" data-origin="https://img.shields.io/github/commit-activity/w/teambge/bge-python-sdk" alt="GitHub commit activity">
|
|
70
|
+
<img src="https://static.pepy.tech/personalized-badge/bge-python-sdk?period=total&units=international_system&left_color=grey&right_color=blue&left_text=Downloads" data-origin="https://static.pepy.tech/personalized-badge/bge-python-sdk?period=total&units=international_system&left_color=grey&right_color=blue&left_text=Downloads" alt="PyPI - Downloads">
|
|
71
|
+
</p>
|
|
72
|
+
|
|
73
|
+
<pre>
|
|
74
|
+
____ ____________ ______ __________ ______ _ __ _____ ____ __ __
|
|
75
|
+
/ __ )/ ____/ ____/ / __ \ \/ /_ __/ / / / __ \/ | / / / ___// __ \/ //_/
|
|
76
|
+
/ __ / / __/ __/ / /_/ /\ / / / / /_/ / / / / |/ / \__ \/ / / / ,<
|
|
77
|
+
/ /_/ / /_/ / /___ / ____/ / / / / / __ / /_/ / /| / ___/ / /_/ / /| |
|
|
78
|
+
/_____/\____/_____/ /_/ /_/ /_/ /_/ /_/\____/_/ |_/ /____/_____/_/ |_|
|
|
79
|
+
</pre>
|
|
80
|
+
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
BGE 开放平台 是一个跨越多级数据的(多)组学数据平台,开发者在获得用户授权后,将可以通过开放平台提供的 API 访问关联用户的(多)组学数据,甚至写入数据。
|
|
84
|
+
|
|
85
|
+
基于开放平台 API,开发者可避免重复开发采样、提取、测序和生信分析等繁复的流程,直接使用清洁的结构化数据。
|
|
86
|
+
|
|
87
|
+
开发者可以通过开放平台提供的 API 创建极具创意性的(多)组学应用,如:
|
|
88
|
+
|
|
89
|
+
* 包含药物代谢或药物服用建议的应用
|
|
90
|
+
* 包含体检数据和营养代谢基因的餐饮应用
|
|
91
|
+
* 包含肠道菌群数据和痛风相关基因的痛风管理应用
|
|
92
|
+
* 基于祖源成分的社交网络应用,等等
|
|
93
|
+
|
|
94
|
+
BGE 开放平台 API 基于 OAuth 2.0 开发,并使用 SSL/TLS 加密传输,确保用户数据正确无误地授权,并安全地传输到第三方应用,确保用户数据不会被未经授权的应用获得。
|
|
95
|
+
|
|
96
|
+
# 安装
|
|
97
|
+
|
|
98
|
+
推荐使用 pip 进行安装。
|
|
99
|
+
|
|
100
|
+
```shell
|
|
101
|
+
$ pip install -U bge-python-sdk
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
或者
|
|
105
|
+
|
|
106
|
+
```shell
|
|
107
|
+
$ make install
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
再或者
|
|
111
|
+
|
|
112
|
+
```shell
|
|
113
|
+
$ pip install .
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
# SDK 文档
|
|
117
|
+
|
|
118
|
+
更加详细的 SDK 文档请查看 [SDK Documents](https://api.bge.genomics.cn/doc/#/sdk/README)。
|
|
119
|
+
|
|
120
|
+
# 快速开始
|
|
121
|
+
|
|
122
|
+
BGE 开放平台支持 OAuth2 的两种模式,分别是用户授权模式、客户端模式。
|
|
123
|
+
|
|
124
|
+
详情请参考开放平台文档 [https://api.bge.genomics.cn/doc](https://api.bge.genomics.cn/doc) 。
|
|
125
|
+
|
|
126
|
+
## ENDPOINTS
|
|
127
|
+
|
|
128
|
+
BGE 开放平台提供了如下可用的 `endpoint`。
|
|
129
|
+
|
|
130
|
+
| endpoint | 解释 |
|
|
131
|
+
| --------------------------- | ----------------------------------------------------------- |
|
|
132
|
+
| https://api.bge.genomics.cn | **线上环境** 主域名地址 |
|
|
133
|
+
| https://api.bge.omgut.com | **线上环境** 副域名地址,主域名地址不可用时可替换此域名地址 |
|
|
134
|
+
|
|
135
|
+
## 授权码模式
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
from bgesdk import OAuth2, API
|
|
139
|
+
|
|
140
|
+
code = '???????' # 用户确认授权后平台返回的授权码
|
|
141
|
+
client_id = 'demo'
|
|
142
|
+
client_secret = 'demo'
|
|
143
|
+
redirect_uri = 'http://test.cn'
|
|
144
|
+
oauth2 = OAuth2(
|
|
145
|
+
client_id, client_secret,
|
|
146
|
+
endpoint='https://api.bge.genomics.cn', max_retries=3, timeout=16,
|
|
147
|
+
verbose=False)
|
|
148
|
+
token = oauth2.exchange_authorization_code(code, redirect_uri)
|
|
149
|
+
|
|
150
|
+
api = oauth2.get_api(token.access_token)
|
|
151
|
+
print(api.get_user())
|
|
152
|
+
|
|
153
|
+
api = API(token.access_token)
|
|
154
|
+
print(api.get_user())
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 客户端模式
|
|
158
|
+
|
|
159
|
+
```python
|
|
160
|
+
from bgesdk import OAuth2, API
|
|
161
|
+
|
|
162
|
+
client_id = 'demo'
|
|
163
|
+
client_secret = 'demo'
|
|
164
|
+
oauth2 = OAuth2(
|
|
165
|
+
client_id, client_secret,
|
|
166
|
+
endpoint='https://api.bge.genomics.cn', max_retries=3, timeout=16,
|
|
167
|
+
verbose=False)
|
|
168
|
+
token = oauth2.get_credentials_token()
|
|
169
|
+
|
|
170
|
+
api = oauth2.get_api(token.access_token)
|
|
171
|
+
print(api.get_variants('E-B1243433', 'rs333'))
|
|
172
|
+
|
|
173
|
+
api = API(token.access_token)
|
|
174
|
+
print(api.get_variants('E-B1243433', 'rs333'))
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
# Contributors
|
|
178
|
+
|
|
179
|
+
* xiangji1204's [github](https://github.com/xiangji1204)
|
|
180
|
+
* leafcoder(leafcoder@gmail.com)'s [github](https://github.com/leafcoder)
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: bge-python-sdk
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: 可用于调用 BGE 开放平台的相关接口。
|
|
5
|
+
Author-email: leafcoder <leafcoder@gmail.com>, xiangji1204 <xiangji1204@genomics.cn>
|
|
6
|
+
Maintainer-email: leafcoder <leafcoder@gmail.com>
|
|
7
|
+
License: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/teambge/bge-python-sdk
|
|
9
|
+
Keywords: bge-python-sdk,bge,bgesdk,sdk
|
|
10
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Natural Language :: Chinese (Simplified)
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
|
|
16
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
+
Classifier: Programming Language :: Python
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
26
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
27
|
+
Classifier: Topic :: Utilities
|
|
28
|
+
Requires-Python: >=3.8
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Requires-Dist: requests>=2.25.0
|
|
32
|
+
Requires-Dist: oss2>=2.15.0
|
|
33
|
+
Requires-Dist: requests_toolbelt>=1.0.0
|
|
34
|
+
Requires-Dist: aliyun-python-sdk-core>=2.13.0
|
|
35
|
+
Requires-Dist: rich>=10.0.0
|
|
36
|
+
Requires-Dist: rich_argparse>=1.4.0
|
|
37
|
+
Requires-Dist: argcomplete>=2.0.0
|
|
38
|
+
Requires-Dist: python-minifier>=2.4.0
|
|
39
|
+
Requires-Dist: qprompt>=0.16.0
|
|
40
|
+
Requires-Dist: cython>=0.29.0
|
|
41
|
+
Provides-Extra: test
|
|
42
|
+
Requires-Dist: pytest>=7.0; extra == "test"
|
|
43
|
+
Requires-Dist: pytest-cov>=4.0; extra == "test"
|
|
44
|
+
Requires-Dist: requests-mock>=1.9.0; extra == "test"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
<div align="center">
|
|
48
|
+
|
|
49
|
+
# BGE 开放平台 SDK - Python 版
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
<p>
|
|
53
|
+
<!-- Place this tag where you want the button to render. -->
|
|
54
|
+
<a class="github-button" href="https://github.com/teambge/bge-python-sdk/subscription" data-color-scheme="no-preference: light; light: light; dark: dark;" data-show-count="true" aria-label="Watch teambge/bge-python-sdk on GitHub">
|
|
55
|
+
<img alt="GitHub forks" src="https://img.shields.io/github/watchers/teambge/bge-python-sdk?style=social">
|
|
56
|
+
</a>
|
|
57
|
+
<a class="github-button" href="https://github.com/teambge/bge-python-sdk" data-color-scheme="no-preference: light; light: light; dark: dark;" data-show-count="true" aria-label="Star teambge/bge-python-sdk on GitHub">
|
|
58
|
+
<img alt="GitHub forks" src="https://img.shields.io/github/stars/teambge/bge-python-sdk?style=social">
|
|
59
|
+
</a>
|
|
60
|
+
<a class="github-button" href="https://github.com/teambge/bge-python-sdk/fork" data-color-scheme="no-preference: light; light: light; dark: dark;" data-show-count="true" aria-label="Fork teambge/bge-python-sdk on GitHub">
|
|
61
|
+
<img alt="GitHub forks" src="https://img.shields.io/github/forks/teambge/bge-python-sdk?style=social">
|
|
62
|
+
</a>
|
|
63
|
+
</p>
|
|
64
|
+
|
|
65
|
+
<p>
|
|
66
|
+
<img src="https://img.shields.io/github/v/release/teambge/bge-python-sdk" data-origin="https://img.shields.io/github/v/release/teambge/bge-python-sdk" alt="GitHub release (latest by date)">
|
|
67
|
+
<img src="https://img.shields.io/github/languages/top/teambge/bge-python-sdk" data-origin="https://img.shields.io/github/languages/top/teambge/bge-python-sdk" alt="GitHub top language">
|
|
68
|
+
<img src="https://img.shields.io/github/languages/code-size/teambge/bge-python-sdk" data-origin="https://img.shields.io/github/languages/code-size/teambge/bge-python-sdk" alt="GitHub code size in bytes">
|
|
69
|
+
<img src="https://img.shields.io/github/commit-activity/w/teambge/bge-python-sdk" data-origin="https://img.shields.io/github/commit-activity/w/teambge/bge-python-sdk" alt="GitHub commit activity">
|
|
70
|
+
<img src="https://static.pepy.tech/personalized-badge/bge-python-sdk?period=total&units=international_system&left_color=grey&right_color=blue&left_text=Downloads" data-origin="https://static.pepy.tech/personalized-badge/bge-python-sdk?period=total&units=international_system&left_color=grey&right_color=blue&left_text=Downloads" alt="PyPI - Downloads">
|
|
71
|
+
</p>
|
|
72
|
+
|
|
73
|
+
<pre>
|
|
74
|
+
____ ____________ ______ __________ ______ _ __ _____ ____ __ __
|
|
75
|
+
/ __ )/ ____/ ____/ / __ \ \/ /_ __/ / / / __ \/ | / / / ___// __ \/ //_/
|
|
76
|
+
/ __ / / __/ __/ / /_/ /\ / / / / /_/ / / / / |/ / \__ \/ / / / ,<
|
|
77
|
+
/ /_/ / /_/ / /___ / ____/ / / / / / __ / /_/ / /| / ___/ / /_/ / /| |
|
|
78
|
+
/_____/\____/_____/ /_/ /_/ /_/ /_/ /_/\____/_/ |_/ /____/_____/_/ |_|
|
|
79
|
+
</pre>
|
|
80
|
+
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
BGE 开放平台 是一个跨越多级数据的(多)组学数据平台,开发者在获得用户授权后,将可以通过开放平台提供的 API 访问关联用户的(多)组学数据,甚至写入数据。
|
|
84
|
+
|
|
85
|
+
基于开放平台 API,开发者可避免重复开发采样、提取、测序和生信分析等繁复的流程,直接使用清洁的结构化数据。
|
|
86
|
+
|
|
87
|
+
开发者可以通过开放平台提供的 API 创建极具创意性的(多)组学应用,如:
|
|
88
|
+
|
|
89
|
+
* 包含药物代谢或药物服用建议的应用
|
|
90
|
+
* 包含体检数据和营养代谢基因的餐饮应用
|
|
91
|
+
* 包含肠道菌群数据和痛风相关基因的痛风管理应用
|
|
92
|
+
* 基于祖源成分的社交网络应用,等等
|
|
93
|
+
|
|
94
|
+
BGE 开放平台 API 基于 OAuth 2.0 开发,并使用 SSL/TLS 加密传输,确保用户数据正确无误地授权,并安全地传输到第三方应用,确保用户数据不会被未经授权的应用获得。
|
|
95
|
+
|
|
96
|
+
# 安装
|
|
97
|
+
|
|
98
|
+
推荐使用 pip 进行安装。
|
|
99
|
+
|
|
100
|
+
```shell
|
|
101
|
+
$ pip install -U bge-python-sdk
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
或者
|
|
105
|
+
|
|
106
|
+
```shell
|
|
107
|
+
$ make install
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
再或者
|
|
111
|
+
|
|
112
|
+
```shell
|
|
113
|
+
$ pip install .
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
# SDK 文档
|
|
117
|
+
|
|
118
|
+
更加详细的 SDK 文档请查看 [SDK Documents](https://api.bge.genomics.cn/doc/#/sdk/README)。
|
|
119
|
+
|
|
120
|
+
# 快速开始
|
|
121
|
+
|
|
122
|
+
BGE 开放平台支持 OAuth2 的两种模式,分别是用户授权模式、客户端模式。
|
|
123
|
+
|
|
124
|
+
详情请参考开放平台文档 [https://api.bge.genomics.cn/doc](https://api.bge.genomics.cn/doc) 。
|
|
125
|
+
|
|
126
|
+
## ENDPOINTS
|
|
127
|
+
|
|
128
|
+
BGE 开放平台提供了如下可用的 `endpoint`。
|
|
129
|
+
|
|
130
|
+
| endpoint | 解释 |
|
|
131
|
+
| --------------------------- | ----------------------------------------------------------- |
|
|
132
|
+
| https://api.bge.genomics.cn | **线上环境** 主域名地址 |
|
|
133
|
+
| https://api.bge.omgut.com | **线上环境** 副域名地址,主域名地址不可用时可替换此域名地址 |
|
|
134
|
+
|
|
135
|
+
## 授权码模式
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
from bgesdk import OAuth2, API
|
|
139
|
+
|
|
140
|
+
code = '???????' # 用户确认授权后平台返回的授权码
|
|
141
|
+
client_id = 'demo'
|
|
142
|
+
client_secret = 'demo'
|
|
143
|
+
redirect_uri = 'http://test.cn'
|
|
144
|
+
oauth2 = OAuth2(
|
|
145
|
+
client_id, client_secret,
|
|
146
|
+
endpoint='https://api.bge.genomics.cn', max_retries=3, timeout=16,
|
|
147
|
+
verbose=False)
|
|
148
|
+
token = oauth2.exchange_authorization_code(code, redirect_uri)
|
|
149
|
+
|
|
150
|
+
api = oauth2.get_api(token.access_token)
|
|
151
|
+
print(api.get_user())
|
|
152
|
+
|
|
153
|
+
api = API(token.access_token)
|
|
154
|
+
print(api.get_user())
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 客户端模式
|
|
158
|
+
|
|
159
|
+
```python
|
|
160
|
+
from bgesdk import OAuth2, API
|
|
161
|
+
|
|
162
|
+
client_id = 'demo'
|
|
163
|
+
client_secret = 'demo'
|
|
164
|
+
oauth2 = OAuth2(
|
|
165
|
+
client_id, client_secret,
|
|
166
|
+
endpoint='https://api.bge.genomics.cn', max_retries=3, timeout=16,
|
|
167
|
+
verbose=False)
|
|
168
|
+
token = oauth2.get_credentials_token()
|
|
169
|
+
|
|
170
|
+
api = oauth2.get_api(token.access_token)
|
|
171
|
+
print(api.get_variants('E-B1243433', 'rs333'))
|
|
172
|
+
|
|
173
|
+
api = API(token.access_token)
|
|
174
|
+
print(api.get_variants('E-B1243433', 'rs333'))
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
# Contributors
|
|
178
|
+
|
|
179
|
+
* xiangji1204's [github](https://github.com/xiangji1204)
|
|
180
|
+
* leafcoder(leafcoder@gmail.com)'s [github](https://github.com/leafcoder)
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
LICENSE
|
|
2
2
|
MANIFEST.in
|
|
3
3
|
README.md
|
|
4
|
+
pyproject.toml
|
|
4
5
|
pytest.ini
|
|
5
|
-
requirements.txt
|
|
6
|
-
setup.cfg
|
|
7
|
-
setup.py
|
|
8
6
|
bge_python_sdk.egg-info/PKG-INFO
|
|
9
7
|
bge_python_sdk.egg-info/SOURCES.txt
|
|
10
8
|
bge_python_sdk.egg-info/dependency_links.txt
|
|
@@ -19,18 +17,27 @@ bgesdk/error.py
|
|
|
19
17
|
bgesdk/fs.py
|
|
20
18
|
bgesdk/http.py
|
|
21
19
|
bgesdk/models.py
|
|
20
|
+
bgesdk/py.typed
|
|
22
21
|
bgesdk/utils.py
|
|
23
22
|
bgesdk/version.py
|
|
23
|
+
bgesdk/api/__init__.py
|
|
24
|
+
bgesdk/api/api.py
|
|
25
|
+
bgesdk/api/base.py
|
|
26
|
+
bgesdk/api/file.py
|
|
27
|
+
bgesdk/api/microbiome.py
|
|
28
|
+
bgesdk/api/misc.py
|
|
29
|
+
bgesdk/api/model.py
|
|
30
|
+
bgesdk/api/samples.py
|
|
31
|
+
bgesdk/api/stream.py
|
|
32
|
+
bgesdk/api/variants.py
|
|
24
33
|
bgesdk/management/__init__.py
|
|
25
34
|
bgesdk/management/command.py
|
|
26
35
|
bgesdk/management/constants.py
|
|
27
36
|
bgesdk/management/utils.py
|
|
28
|
-
bgesdk/management/validate.py
|
|
29
37
|
bgesdk/management/commands/__init__.py
|
|
30
38
|
bgesdk/management/commands/config.py
|
|
31
39
|
bgesdk/management/commands/login.py
|
|
32
40
|
bgesdk/management/commands/model.py
|
|
33
|
-
bgesdk/management/commands/model_doc.py
|
|
34
41
|
bgesdk/management/commands/token.py
|
|
35
42
|
bgesdk/management/commands/workon.py
|
|
36
43
|
bgesdk/management/commands/api/__init__.py
|
|
@@ -53,14 +60,42 @@ bgesdk/management/commands/api/commands/id_meta.py
|
|
|
53
60
|
bgesdk/management/commands/api/commands/task.py
|
|
54
61
|
bgesdk/management/commands/api/commands/upload.py
|
|
55
62
|
bgesdk/management/commands/api/commands/upload_dir.py
|
|
63
|
+
bgesdk/management/model_runtime/__init__.py
|
|
64
|
+
bgesdk/management/model_runtime/model_runtime.py
|
|
65
|
+
bgesdk/management/model_runtime/server/model_license.py
|
|
66
|
+
bgesdk/management/model_runtime/server/secure.py
|
|
67
|
+
bgesdk/management/model_runtime/server/setup.py
|
|
68
|
+
bgesdk/management/model_runtime/server/bge_model_server/__init__.py
|
|
69
|
+
bgesdk/management/model_runtime/server/bge_model_server/app/__init__.py
|
|
70
|
+
bgesdk/management/model_runtime/server/bge_model_server/app/__main__.py
|
|
71
|
+
bgesdk/management/model_runtime/server/bge_model_server/app/app_fastapi.py
|
|
72
|
+
bgesdk/management/model_runtime/server/bge_model_server/app/app_tornado.py
|
|
73
|
+
bgesdk/management/model_runtime/server/bge_model_server/app/logging_conf.py
|
|
74
|
+
bgesdk/management/model_runtime/server/build/lib/model_license.py
|
|
75
|
+
bgesdk/management/model_runtime/server/build/lib/secure.py
|
|
76
|
+
bgesdk/management/model_runtime/server/build/lib/bge_model_server/__init__.py
|
|
77
|
+
bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/__init__.py
|
|
78
|
+
bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/__main__.py
|
|
79
|
+
bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/app_fastapi.py
|
|
80
|
+
bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/app_tornado.py
|
|
81
|
+
bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/logging_conf.py
|
|
82
|
+
bgesdk/management/model_runtime/server/wheels/bge_model_server-0.1.0-py3-none-any.whl
|
|
83
|
+
completions/_bge
|
|
84
|
+
completions/bge.bash
|
|
56
85
|
tests/__init__.py
|
|
57
86
|
tests/conftest.py
|
|
58
87
|
tests/test_abundance.py
|
|
88
|
+
tests/test_api_offline.py
|
|
89
|
+
tests/test_api_structure.py
|
|
90
|
+
tests/test_error.py
|
|
59
91
|
tests/test_fs.py
|
|
60
92
|
tests/test_model.py
|
|
61
93
|
tests/test_models.py
|
|
94
|
+
tests/test_models_offline.py
|
|
62
95
|
tests/test_oauth2.py
|
|
63
96
|
tests/test_phenotype.py
|
|
64
97
|
tests/test_samples.py
|
|
98
|
+
tests/test_token.py
|
|
65
99
|
tests/test_user.py
|
|
66
|
-
tests/test_variants.py
|
|
100
|
+
tests/test_variants.py
|
|
101
|
+
tests/test_wgs.py
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
requests>=2.25.0
|
|
2
|
+
oss2>=2.15.0
|
|
3
|
+
requests_toolbelt>=1.0.0
|
|
4
|
+
aliyun-python-sdk-core>=2.13.0
|
|
5
|
+
rich>=10.0.0
|
|
6
|
+
rich_argparse>=1.4.0
|
|
7
|
+
argcomplete>=2.0.0
|
|
8
|
+
python-minifier>=2.4.0
|
|
9
|
+
qprompt>=0.16.0
|
|
10
|
+
cython>=0.29.0
|
|
11
|
+
|
|
12
|
+
[test]
|
|
13
|
+
pytest>=7.0
|
|
14
|
+
pytest-cov>=4.0
|
|
15
|
+
requests-mock>=1.9.0
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from . import version
|
|
2
|
+
from .management import commands as commands_package
|
|
3
|
+
from .management.command import CommandError, GroupedRichHelpFormatter
|
|
4
|
+
from .management.utils import discover_commands, output
|
|
5
|
+
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
import argparse
|
|
9
|
+
import sys
|
|
10
|
+
|
|
11
|
+
argcomplete: Any = None # 提供 shell 自动补全(可选依赖),未安装时为 None
|
|
12
|
+
try:
|
|
13
|
+
import argcomplete # type: ignore[no-redef]
|
|
14
|
+
except ImportError:
|
|
15
|
+
pass
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
import readline # noqa: F401 # 启用交互式历史/补全等副作用
|
|
19
|
+
except ImportError:
|
|
20
|
+
pass
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def init_parser():
|
|
24
|
+
parser = argparse.ArgumentParser(
|
|
25
|
+
description=(
|
|
26
|
+
'BGE 开放平台 SDK 命令行工具提供了初始化模型脚手架、部署模型、'
|
|
27
|
+
'初始化模型文档配置文件、上传图片、部署模型文档等命令。'
|
|
28
|
+
),
|
|
29
|
+
formatter_class=GroupedRichHelpFormatter,
|
|
30
|
+
)
|
|
31
|
+
parser.add_argument(
|
|
32
|
+
'-V',
|
|
33
|
+
'--version',
|
|
34
|
+
action='version',
|
|
35
|
+
help='显示当前 BGE 开放平台 Python SDK 版本号。',
|
|
36
|
+
version=f'version {version.__version__}',
|
|
37
|
+
)
|
|
38
|
+
subparsers = parser.add_subparsers(
|
|
39
|
+
dest='command', help='SDK 命令行工具可选子命令。', required=False
|
|
40
|
+
)
|
|
41
|
+
discover_commands(commands_package, subparsers)
|
|
42
|
+
return parser
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def main():
|
|
46
|
+
parser = init_parser()
|
|
47
|
+
if argcomplete is not None:
|
|
48
|
+
argcomplete.autocomplete(parser)
|
|
49
|
+
if len(sys.argv) < 2:
|
|
50
|
+
parser.print_help(sys.stderr)
|
|
51
|
+
sys.exit(1)
|
|
52
|
+
input_args = sys.argv[1:]
|
|
53
|
+
args = parser.parse_args(input_args)
|
|
54
|
+
try:
|
|
55
|
+
args.method(args)
|
|
56
|
+
except KeyboardInterrupt:
|
|
57
|
+
sys.exit(1)
|
|
58
|
+
except CommandError as exc:
|
|
59
|
+
sys.exit(exc.code)
|
|
60
|
+
except Exception as exc: # noqa: BLE001 统一兜底,避免原始堆栈泄露
|
|
61
|
+
output(f'[red]命令执行出错:{exc}[/red]')
|
|
62
|
+
sys.exit(2)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
if __name__ == '__main__':
|
|
66
|
+
main()
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""API 客户端聚合层。
|
|
2
|
+
|
|
3
|
+
按域将能力拆分为多个 Mixin(Samples / Variants / Microbiome / File / Model /
|
|
4
|
+
Stream / Misc),由本模块聚合为 ``API`` 类。对外公开接口与历史 ``client.API``
|
|
5
|
+
保持一致,调用方无需变更(``api.get_samples(...)`` 等照常可用)。
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .file import FileMixin
|
|
9
|
+
from .microbiome import MicrobiomeMixin
|
|
10
|
+
from .misc import MiscMixin
|
|
11
|
+
from .model import ModelMixin
|
|
12
|
+
from .samples import SamplesMixin
|
|
13
|
+
from .stream import StreamMixin
|
|
14
|
+
from .variants import VariantsMixin
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class API(
|
|
18
|
+
SamplesMixin,
|
|
19
|
+
VariantsMixin,
|
|
20
|
+
MicrobiomeMixin,
|
|
21
|
+
FileMixin,
|
|
22
|
+
ModelMixin,
|
|
23
|
+
StreamMixin,
|
|
24
|
+
MiscMixin,
|
|
25
|
+
):
|
|
26
|
+
"""BGE 开放平台接口调用客户端。
|
|
27
|
+
|
|
28
|
+
基础设施与账户域由 ``APIBase`` 经各 Mixin 间接继承提供,其余按业务域分散于各 Mixin。
|
|
29
|
+
"""
|