bge-python-sdk 1.0.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.
Files changed (126) hide show
  1. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/LICENSE +1 -1
  2. bge_python_sdk-2.0.0/MANIFEST.in +10 -0
  3. {bge-python-sdk-1.0.0/bge_python_sdk.egg-info → bge_python_sdk-2.0.0}/PKG-INFO +21 -26
  4. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/README.md +1 -1
  5. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0/bge_python_sdk.egg-info}/PKG-INFO +21 -26
  6. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bge_python_sdk.egg-info/SOURCES.txt +39 -5
  7. bge_python_sdk-2.0.0/bge_python_sdk.egg-info/requires.txt +15 -0
  8. bge_python_sdk-2.0.0/bge_python_sdk.egg-info/top_level.txt +6 -0
  9. bge_python_sdk-2.0.0/bgesdk/__init__.py +5 -0
  10. bge_python_sdk-2.0.0/bgesdk/__main__.py +66 -0
  11. bge_python_sdk-2.0.0/bgesdk/api/__init__.py +5 -0
  12. bge_python_sdk-2.0.0/bgesdk/api/api.py +29 -0
  13. bge_python_sdk-2.0.0/bgesdk/api/base.py +210 -0
  14. bge_python_sdk-2.0.0/bgesdk/api/file.py +420 -0
  15. bge_python_sdk-2.0.0/bgesdk/api/microbiome.py +143 -0
  16. bge_python_sdk-2.0.0/bgesdk/api/misc.py +224 -0
  17. bge_python_sdk-2.0.0/bgesdk/api/model.py +312 -0
  18. bge_python_sdk-2.0.0/bgesdk/api/samples.py +181 -0
  19. bge_python_sdk-2.0.0/bgesdk/api/stream.py +243 -0
  20. bge_python_sdk-2.0.0/bgesdk/api/variants.py +93 -0
  21. bge_python_sdk-2.0.0/bgesdk/client.py +248 -0
  22. bge_python_sdk-2.0.0/bgesdk/constants.py +46 -0
  23. bge_python_sdk-2.0.0/bgesdk/error.py +145 -0
  24. bge_python_sdk-2.0.0/bgesdk/fs.py +11 -0
  25. bge_python_sdk-2.0.0/bgesdk/http.py +193 -0
  26. bge_python_sdk-2.0.0/bgesdk/management/command.py +110 -0
  27. bge_python_sdk-2.0.0/bgesdk/management/commands/api/__init__.py +30 -0
  28. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/aggregate_omics_data.py +22 -34
  29. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/applet_url.py +10 -14
  30. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/download.py +17 -27
  31. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/ferry_to_oss.py +18 -34
  32. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_data_items.py +13 -28
  33. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_externals.py +9 -23
  34. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_func_abundance.py +22 -31
  35. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_gene_abundance.py +14 -28
  36. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_overview.py +13 -23
  37. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_range_stream.py +15 -40
  38. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_samples.py +19 -41
  39. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_taxon_abundance.py +12 -28
  40. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_user.py +7 -11
  41. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/get_variants.py +9 -19
  42. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/id_meta.py +10 -26
  43. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/task.py +8 -15
  44. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/upload.py +17 -27
  45. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/upload_dir.py +19 -30
  46. bge_python_sdk-2.0.0/bgesdk/management/commands/config.py +178 -0
  47. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/login.py +42 -39
  48. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/model.py +717 -692
  49. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/token.py +22 -21
  50. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/workon.py +6 -9
  51. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/constants.py +16 -25
  52. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/__init__.py +13 -0
  53. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/model_runtime.py +591 -0
  54. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/__init__.py +10 -0
  55. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/app/__init__.py +8 -0
  56. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/app/__main__.py +54 -0
  57. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/app/app_fastapi.py +168 -0
  58. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/app/app_tornado.py +182 -0
  59. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/bge_model_server/app/logging_conf.py +80 -0
  60. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/__init__.py +10 -0
  61. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/__init__.py +8 -0
  62. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/__main__.py +54 -0
  63. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/app_fastapi.py +168 -0
  64. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/app_tornado.py +182 -0
  65. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/bge_model_server/app/logging_conf.py +80 -0
  66. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/model_license.py +20 -0
  67. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/build/lib/secure.py +99 -0
  68. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/model_license.py +20 -0
  69. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/secure.py +99 -0
  70. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/setup.py +29 -0
  71. bge_python_sdk-2.0.0/bgesdk/management/model_runtime/server/wheels/bge_model_server-0.1.0-py3-none-any.whl +0 -0
  72. bge_python_sdk-2.0.0/bgesdk/management/utils.py +280 -0
  73. bge_python_sdk-2.0.0/bgesdk/models.py +327 -0
  74. bge_python_sdk-2.0.0/bgesdk/py.typed +2 -0
  75. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/utils.py +10 -12
  76. bge_python_sdk-2.0.0/bgesdk/version.py +1 -0
  77. bge_python_sdk-2.0.0/completions/_bge +14 -0
  78. bge_python_sdk-2.0.0/completions/bge.bash +14 -0
  79. bge_python_sdk-2.0.0/pyproject.toml +164 -0
  80. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/pytest.ini +2 -0
  81. bge_python_sdk-2.0.0/setup.cfg +4 -0
  82. bge_python_sdk-2.0.0/tests/__init__.py +3 -0
  83. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/tests/conftest.py +61 -14
  84. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/tests/test_abundance.py +57 -40
  85. bge_python_sdk-2.0.0/tests/test_api_offline.py +160 -0
  86. bge_python_sdk-2.0.0/tests/test_api_structure.py +115 -0
  87. bge_python_sdk-2.0.0/tests/test_error.py +178 -0
  88. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/tests/test_fs.py +2 -2
  89. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/tests/test_model.py +3 -1
  90. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/tests/test_models.py +2 -4
  91. bge_python_sdk-2.0.0/tests/test_models_offline.py +47 -0
  92. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/tests/test_oauth2.py +5 -6
  93. bge_python_sdk-2.0.0/tests/test_phenotype.py +85 -0
  94. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/tests/test_samples.py +9 -10
  95. bge_python_sdk-2.0.0/tests/test_token.py +138 -0
  96. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/tests/test_user.py +3 -1
  97. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/tests/test_variants.py +31 -21
  98. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/tests/test_wgs.py +29 -17
  99. bge-python-sdk-1.0.0/MANIFEST.in +0 -2
  100. bge-python-sdk-1.0.0/bge_python_sdk.egg-info/requires.txt +0 -15
  101. bge-python-sdk-1.0.0/bge_python_sdk.egg-info/top_level.txt +0 -2
  102. bge-python-sdk-1.0.0/bgesdk/__init__.py +0 -5
  103. bge-python-sdk-1.0.0/bgesdk/__main__.py +0 -74
  104. bge-python-sdk-1.0.0/bgesdk/client.py +0 -1587
  105. bge-python-sdk-1.0.0/bgesdk/constants.py +0 -48
  106. bge-python-sdk-1.0.0/bgesdk/error.py +0 -26
  107. bge-python-sdk-1.0.0/bgesdk/fs.py +0 -6
  108. bge-python-sdk-1.0.0/bgesdk/http.py +0 -146
  109. bge-python-sdk-1.0.0/bgesdk/management/command.py +0 -27
  110. bge-python-sdk-1.0.0/bgesdk/management/commands/api/__init__.py +0 -58
  111. bge-python-sdk-1.0.0/bgesdk/management/commands/config.py +0 -204
  112. bge-python-sdk-1.0.0/bgesdk/management/commands/model_doc.py +0 -359
  113. bge-python-sdk-1.0.0/bgesdk/management/utils.py +0 -215
  114. bge-python-sdk-1.0.0/bgesdk/management/validate.py +0 -50
  115. bge-python-sdk-1.0.0/bgesdk/models.py +0 -248
  116. bge-python-sdk-1.0.0/bgesdk/version.py +0 -3
  117. bge-python-sdk-1.0.0/requirements.txt +0 -15
  118. bge-python-sdk-1.0.0/setup.cfg +0 -54
  119. bge-python-sdk-1.0.0/setup.py +0 -18
  120. bge-python-sdk-1.0.0/tests/__init__.py +0 -2
  121. bge-python-sdk-1.0.0/tests/test_phenotype.py +0 -60
  122. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bge_python_sdk.egg-info/dependency_links.txt +0 -0
  123. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bge_python_sdk.egg-info/entry_points.txt +0 -0
  124. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/__init__.py +0 -0
  125. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/__init__.py +0 -0
  126. {bge-python-sdk-1.0.0 → bge_python_sdk-2.0.0}/bgesdk/management/commands/api/commands/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 teambge
3
+ Copyright (c) 2026 teambge
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,10 @@
1
+ include README.md
2
+ include LICENSE
3
+ include pytest.ini
4
+ recursive-include completions *
5
+ include bgesdk/py.typed
6
+
7
+ # 排除编译产物
8
+ global-exclude *.pyc
9
+ global-exclude *.pyo
10
+ recursive-exclude * __pycache__
@@ -1,14 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bge-python-sdk
3
- Version: 1.0.0
3
+ Version: 2.0.0
4
4
  Summary: 可用于调用 BGE 开放平台的相关接口。
5
- Home-page: https://github.com/teambge/bge-python-sdk
6
- Author: leafcoder,xiangji1204
7
- Author-email: leafcoder@gmail.com,xiangji1204@genomics.cn
8
- Maintainer: leafcoder
9
- Maintainer-email: leafcoder@gmail.com
5
+ Author-email: leafcoder <leafcoder@gmail.com>, xiangji1204 <xiangji1204@genomics.cn>
6
+ Maintainer-email: leafcoder <leafcoder@gmail.com>
10
7
  License: MIT
11
- Keywords: bge-python-sdk bge bgesdk sdk
8
+ Project-URL: Homepage, https://github.com/teambge/bge-python-sdk
9
+ Keywords: bge-python-sdk,bge,bgesdk,sdk
12
10
  Classifier: Development Status :: 5 - Production/Stable
13
11
  Classifier: Intended Audience :: Developers
14
12
  Classifier: License :: OSI Approved :: MIT License
@@ -18,8 +16,6 @@ Classifier: Operating System :: Microsoft :: Windows :: Windows 10
18
16
  Classifier: Operating System :: POSIX :: Linux
19
17
  Classifier: Programming Language :: Python
20
18
  Classifier: Programming Language :: Python :: 3
21
- Classifier: Programming Language :: Python :: 3.6
22
- Classifier: Programming Language :: Python :: 3.7
23
19
  Classifier: Programming Language :: Python :: 3.8
24
20
  Classifier: Programming Language :: Python :: 3.9
25
21
  Classifier: Programming Language :: Python :: 3.10
@@ -29,24 +25,23 @@ Classifier: Programming Language :: Python :: 3.13
29
25
  Classifier: Topic :: Software Development :: Libraries
30
26
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
31
27
  Classifier: Topic :: Utilities
32
- Requires-Python: >=3.6.3
28
+ Requires-Python: >=3.8
33
29
  Description-Content-Type: text/markdown
34
30
  License-File: LICENSE
35
- Requires-Dist: aliyun-python-sdk-core
36
- Requires-Dist: six
37
- Requires-Dist: certifi
38
- Requires-Dist: chardet
39
- Requires-Dist: idna
40
- Requires-Dist: requests
41
- Requires-Dist: urllib3
42
- Requires-Dist: oss2
43
- Requires-Dist: docker
44
- Requires-Dist: pimento
45
- Requires-Dist: qprompt
46
- Requires-Dist: requests_toolbelt
47
- Requires-Dist: validator.py
48
- Requires-Dist: python-minifier
49
- Requires-Dist: rich
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"
50
45
 
51
46
 
52
47
  <div align="center">
@@ -115,7 +110,7 @@ $ make install
115
110
  再或者
116
111
 
117
112
  ```shell
118
- $ python setup.py install
113
+ $ pip install .
119
114
  ```
120
115
 
121
116
  # SDK 文档
@@ -65,7 +65,7 @@ $ make install
65
65
  再或者
66
66
 
67
67
  ```shell
68
- $ python setup.py install
68
+ $ pip install .
69
69
  ```
70
70
 
71
71
  # SDK 文档
@@ -1,14 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bge-python-sdk
3
- Version: 1.0.0
3
+ Version: 2.0.0
4
4
  Summary: 可用于调用 BGE 开放平台的相关接口。
5
- Home-page: https://github.com/teambge/bge-python-sdk
6
- Author: leafcoder,xiangji1204
7
- Author-email: leafcoder@gmail.com,xiangji1204@genomics.cn
8
- Maintainer: leafcoder
9
- Maintainer-email: leafcoder@gmail.com
5
+ Author-email: leafcoder <leafcoder@gmail.com>, xiangji1204 <xiangji1204@genomics.cn>
6
+ Maintainer-email: leafcoder <leafcoder@gmail.com>
10
7
  License: MIT
11
- Keywords: bge-python-sdk bge bgesdk sdk
8
+ Project-URL: Homepage, https://github.com/teambge/bge-python-sdk
9
+ Keywords: bge-python-sdk,bge,bgesdk,sdk
12
10
  Classifier: Development Status :: 5 - Production/Stable
13
11
  Classifier: Intended Audience :: Developers
14
12
  Classifier: License :: OSI Approved :: MIT License
@@ -18,8 +16,6 @@ Classifier: Operating System :: Microsoft :: Windows :: Windows 10
18
16
  Classifier: Operating System :: POSIX :: Linux
19
17
  Classifier: Programming Language :: Python
20
18
  Classifier: Programming Language :: Python :: 3
21
- Classifier: Programming Language :: Python :: 3.6
22
- Classifier: Programming Language :: Python :: 3.7
23
19
  Classifier: Programming Language :: Python :: 3.8
24
20
  Classifier: Programming Language :: Python :: 3.9
25
21
  Classifier: Programming Language :: Python :: 3.10
@@ -29,24 +25,23 @@ Classifier: Programming Language :: Python :: 3.13
29
25
  Classifier: Topic :: Software Development :: Libraries
30
26
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
31
27
  Classifier: Topic :: Utilities
32
- Requires-Python: >=3.6.3
28
+ Requires-Python: >=3.8
33
29
  Description-Content-Type: text/markdown
34
30
  License-File: LICENSE
35
- Requires-Dist: aliyun-python-sdk-core
36
- Requires-Dist: six
37
- Requires-Dist: certifi
38
- Requires-Dist: chardet
39
- Requires-Dist: idna
40
- Requires-Dist: requests
41
- Requires-Dist: urllib3
42
- Requires-Dist: oss2
43
- Requires-Dist: docker
44
- Requires-Dist: pimento
45
- Requires-Dist: qprompt
46
- Requires-Dist: requests_toolbelt
47
- Requires-Dist: validator.py
48
- Requires-Dist: python-minifier
49
- Requires-Dist: rich
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"
50
45
 
51
46
 
52
47
  <div align="center">
@@ -115,7 +110,7 @@ $ make install
115
110
  再或者
116
111
 
117
112
  ```shell
118
- $ python setup.py install
113
+ $ pip install .
119
114
  ```
120
115
 
121
116
  # SDK 文档
@@ -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,15 +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
100
  tests/test_variants.py
67
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,6 @@
1
+ bgesdk
2
+ completions
3
+ dist
4
+ docs
5
+ htmlcov
6
+ tests
@@ -0,0 +1,5 @@
1
+ from .client import API, OAuth2, endpoints
2
+ from .fs import FileItem
3
+ from .version import __version__
4
+
5
+ __all__ = ['API', 'OAuth2', 'endpoints', 'FileItem', '__version__']
@@ -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,5 @@
1
+ """按域拆分的 API 子模块包。"""
2
+
3
+ from .api import API
4
+
5
+ __all__ = ['API']
@@ -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
+ """
@@ -0,0 +1,210 @@
1
+ """API 基础设施与账户域方法(基类)。
2
+
3
+ 本模块承载:
4
+ * 服务可用性检查 ``alive`` 与上传进度回调 ``progress_callback``(模块级函数);
5
+ * ``APIBase``:鉴权、请求创建与账户域(introspect / get_user / get_overview)方法。
6
+ 其余按域方法拆分到同级 Mixin 模块,最终由 ``bgesdk.api.api.API`` 聚合。
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from .. import constants, models
12
+ from ..error import BGEError
13
+ from ..http import HTTPRequest
14
+ from ..utils import human_byte, new_logger
15
+
16
+ from typing import Any
17
+
18
+ import sys
19
+ import threading
20
+
21
+
22
+ def progress_callback(bytes_consumed: int, total_bytes: int) -> None:
23
+ sys.stdout.write(
24
+ '\r文件大小: {}, 上传进度: {}%, 已上传 {}'.format(
25
+ human_byte(total_bytes, 2),
26
+ '%.2f' % ((bytes_consumed / total_bytes) * 100),
27
+ human_byte(bytes_consumed, 2),
28
+ )
29
+ )
30
+ sys.stdout.flush()
31
+
32
+
33
+ def alive(self) -> bool:
34
+ """检查服务可用性
35
+
36
+ Returns:
37
+ 布尔型: True 代表可用, False 代表不可用
38
+ """
39
+ timeout = self.timeout
40
+ verbose = self.verbose
41
+ max_retries = self.max_retries
42
+ request = HTTPRequest(
43
+ self.endpoint, max_retries=max_retries, verbose=verbose
44
+ )
45
+ try:
46
+ request.get('/ping', timeout=timeout)
47
+ except Exception:
48
+ return False
49
+ return True
50
+
51
+
52
+ class APIBase:
53
+ """BGE 开放平台接口调用客户端基类(基础设施 + 账户域)。"""
54
+
55
+ token_type = 'Bearer'
56
+ alive = alive
57
+
58
+ _token: Any | None
59
+ _token_leeway: int
60
+ _token_lock: Any
61
+
62
+ def _ensure_access_token(self) -> None:
63
+ """调用前确保 access_token 有效:自定义 provider 或内置刷新。"""
64
+ with self._token_lock:
65
+ if self.token_provider is not None:
66
+ token = self.token_provider()
67
+ if token:
68
+ self.access_token = token
69
+ return
70
+ if self._token is not None and self._token.is_expired(
71
+ self._token_leeway
72
+ ):
73
+ self._token = self._token.refresh()
74
+ self.access_token = self._token['access_token']
75
+
76
+ def __init__(
77
+ self,
78
+ access_token: str | models.Model,
79
+ endpoint: str | None = None,
80
+ max_retries: int | None = None,
81
+ timeout: int | None = 18,
82
+ verbose: bool = False,
83
+ token_provider: Any | None = None,
84
+ ) -> None:
85
+ self.token_provider = token_provider
86
+ self._token = None
87
+ self._token_leeway = 60
88
+ self._token_lock = threading.RLock()
89
+ if token_provider is None and hasattr(access_token, 'is_expired'):
90
+ # 传入的是带刷新能力的 token 对象,启用内置自动续期
91
+ self._token = access_token
92
+ assert isinstance(access_token, models.Model)
93
+ access_token = access_token['access_token']
94
+ self.access_token = access_token
95
+ if endpoint is None:
96
+ endpoint = constants.DEFAULT_ENDPOINT
97
+ self.endpoint = endpoint
98
+ if max_retries is not None:
99
+ max_retries = int(max_retries)
100
+ self.max_retries = max_retries
101
+ if timeout is not None:
102
+ timeout = int(timeout)
103
+ self.timeout = timeout
104
+ self.verbose = verbose
105
+ self.logger = new_logger(self.__class__.__name__, verbose=verbose)
106
+
107
+ def _create_request(self) -> HTTPRequest:
108
+ """创建预配置的HTTP请求对象
109
+
110
+ Returns:
111
+ HTTPRequest: 请求对象;
112
+ """
113
+ self._ensure_access_token()
114
+ verbose = self.verbose
115
+ max_retries = self.max_retries
116
+ request = HTTPRequest(
117
+ self.endpoint, max_retries=max_retries, verbose=verbose
118
+ )
119
+ request.set_authorization(self.token_type, self.access_token)
120
+ return request
121
+
122
+ def introspect(self) -> models.Model:
123
+ """验证当前使用的 access_token 有效性
124
+
125
+ Returns:
126
+ Model: Token 元数据;
127
+ """
128
+ timeout = self.timeout
129
+ request = self._create_request()
130
+ result = request.get(
131
+ '/oauth2/introspect',
132
+ params={'token': self.access_token},
133
+ timeout=timeout,
134
+ )
135
+ return models.Model(result)
136
+
137
+ def get_user(self, **params: Any) -> models.Model:
138
+ """获取用户信息
139
+
140
+ Returns:
141
+ Model: 用户数据;
142
+ """
143
+ timeout = self.timeout
144
+ request = self._create_request()
145
+ result = request.get('/profile', params=params, timeout=timeout)
146
+ return models.Model(result)
147
+
148
+ def get_overview(
149
+ self,
150
+ idcard: str | None = None,
151
+ phone: str | None = None,
152
+ biosample_id: str | None = None,
153
+ project_id: str | None = None,
154
+ external_sample_id: str | None = None,
155
+ **kwargs: Any,
156
+ ) -> models.Model:
157
+ """获取用户数据概览
158
+
159
+ Args:
160
+ idcard (str, 非必填): 身份证;
161
+ phone (str, 非必填): 手机号;提供了参数 phone,禁止再提供 biosample_id、
162
+ project_id、external_sample_id;
163
+ biosample_id (str, 非必填): BGE 样本编号;提供了参数 biosample_id,禁
164
+ 止再提供 phone、project_id、external_sample_id;
165
+ project_id (str, 非必填): BGE 项目编号;提供了参数 project_id 必须提
166
+ 供 external_sample_id,且 phone 和 biosample_id 必须为空;
167
+ external_sample_id (str, 非必填): 外部样本编号;提供了参数
168
+ external_sample_id 必须提供 project_id,且 phone 和
169
+ biosample_id 必须为空;
170
+
171
+ Returns:
172
+ Model: 用户数据概览;
173
+ """
174
+ data: dict = {}
175
+ data.update(kwargs)
176
+ if phone and (biosample_id or project_id or external_sample_id):
177
+ raise BGEError(
178
+ '若提供了 phone 参数,则禁止同时提供 biosample_id、'
179
+ 'project_id 和 external_sample_id。'
180
+ )
181
+ elif biosample_id and (phone or project_id or external_sample_id):
182
+ raise BGEError(
183
+ '若提供了 biosample_id 参数,则禁止同时提供 phone、'
184
+ 'project_id 和 external_sample_id。'
185
+ )
186
+ else:
187
+ if (not project_id and external_sample_id) or (
188
+ project_id and not external_sample_id
189
+ ):
190
+ raise BGEError(
191
+ 'project_id 与 external_sample_id 必须同时提供。'
192
+ )
193
+ if project_id and external_sample_id and (phone or biosample_id):
194
+ raise BGEError(
195
+ '提供 external_sample_id 时必须同时提供 project_id,'
196
+ '且 phone 与 biosample_id 必须为空。'
197
+ )
198
+ data.update(
199
+ {
200
+ 'idcard': idcard,
201
+ 'phone': phone,
202
+ 'biosample_id': biosample_id,
203
+ 'project_id': project_id,
204
+ 'external_sample_id': external_sample_id,
205
+ }
206
+ )
207
+ timeout = self.timeout
208
+ request = self._create_request()
209
+ result = request.post('/user/overview', data=data, timeout=timeout)
210
+ return models.Model(result)