robodock-cli 0.1.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 (172) hide show
  1. robodock_cli-0.1.0/PKG-INFO +97 -0
  2. robodock_cli-0.1.0/README.md +67 -0
  3. robodock_cli-0.1.0/app/__init__.py +1 -0
  4. robodock_cli-0.1.0/app/app.py +14 -0
  5. robodock_cli-0.1.0/app/auth.py +58 -0
  6. robodock_cli-0.1.0/app/task_management.py +97 -0
  7. robodock_cli-0.1.0/config.py +9 -0
  8. robodock_cli-0.1.0/fast_api_client/__init__.py +8 -0
  9. robodock_cli-0.1.0/fast_api_client/api/__init__.py +1 -0
  10. robodock_cli-0.1.0/fast_api_client/api/auth/__init__.py +1 -0
  11. robodock_cli-0.1.0/fast_api_client/api/auth/change_password_api_p_v1_auth_change_password_post.py +172 -0
  12. robodock_cli-0.1.0/fast_api_client/api/auth/forgot_password_api_p_v1_auth_forgot_password_post.py +172 -0
  13. robodock_cli-0.1.0/fast_api_client/api/auth/login_api_p_v1_auth_login_post.py +172 -0
  14. robodock_cli-0.1.0/fast_api_client/api/auth/logout_api_p_v1_auth_logout_post.py +172 -0
  15. robodock_cli-0.1.0/fast_api_client/api/auth/me_api_p_v1_auth_me_get.py +85 -0
  16. robodock_cli-0.1.0/fast_api_client/api/auth/refresh_token_api_p_v1_auth_refresh_post.py +172 -0
  17. robodock_cli-0.1.0/fast_api_client/api/auth/reset_password_api_p_v1_auth_reset_password_post.py +172 -0
  18. robodock_cli-0.1.0/fast_api_client/api/auth/switch_group_api_p_v1_auth_switch_group_post.py +176 -0
  19. robodock_cli-0.1.0/fast_api_client/api/config/__init__.py +1 -0
  20. robodock_cli-0.1.0/fast_api_client/api/config/get_config_api_p_v1_config_get.py +85 -0
  21. robodock_cli-0.1.0/fast_api_client/api/default/__init__.py +1 -0
  22. robodock_cli-0.1.0/fast_api_client/api/default/root_get.py +81 -0
  23. robodock_cli-0.1.0/fast_api_client/api/groups/__init__.py +1 -0
  24. robodock_cli-0.1.0/fast_api_client/api/groups/add_member_api_p_v1_groups_group_id_members_post.py +188 -0
  25. robodock_cli-0.1.0/fast_api_client/api/groups/create_group_api_p_v1_groups_post.py +172 -0
  26. robodock_cli-0.1.0/fast_api_client/api/groups/create_platform_role_binding_api_p_v1_admin_platform_roles_bindings_post.py +172 -0
  27. robodock_cli-0.1.0/fast_api_client/api/groups/delete_group_api_p_v1_groups_group_id_delete.py +167 -0
  28. robodock_cli-0.1.0/fast_api_client/api/groups/delete_platform_role_binding_api_p_v1_admin_platform_roles_bindings_user_id_delete.py +167 -0
  29. robodock_cli-0.1.0/fast_api_client/api/groups/get_group_api_p_v1_groups_group_id_get.py +167 -0
  30. robodock_cli-0.1.0/fast_api_client/api/groups/list_groups_api_p_v1_groups_get.py +85 -0
  31. robodock_cli-0.1.0/fast_api_client/api/groups/list_members_api_p_v1_groups_group_id_members_get.py +167 -0
  32. robodock_cli-0.1.0/fast_api_client/api/groups/list_platform_role_bindings_api_p_v1_admin_platform_roles_bindings_get.py +85 -0
  33. robodock_cli-0.1.0/fast_api_client/api/groups/remove_member_api_p_v1_groups_group_id_members_user_id_delete.py +181 -0
  34. robodock_cli-0.1.0/fast_api_client/api/groups/reset_member_password_api_p_v1_groups_group_id_members_user_id_reset_password_post.py +181 -0
  35. robodock_cli-0.1.0/fast_api_client/api/groups/update_group_api_p_v1_groups_group_id_patch.py +188 -0
  36. robodock_cli-0.1.0/fast_api_client/api/groups/update_member_role_api_p_v1_groups_group_id_members_user_id_patch.py +202 -0
  37. robodock_cli-0.1.0/fast_api_client/api/post_train/__init__.py +1 -0
  38. robodock_cli-0.1.0/fast_api_client/api/post_train/check_patch_duplicate_api_p_v1_singledata_patch_check_post.py +164 -0
  39. robodock_cli-0.1.0/fast_api_client/api/post_train/check_patch_duplicate_batch_api_p_v1_singledata_patch_check_batch_post.py +164 -0
  40. robodock_cli-0.1.0/fast_api_client/api/post_train/create_dataset_api_p_v1_dataset_post.py +172 -0
  41. robodock_cli-0.1.0/fast_api_client/api/post_train/create_patch_upload_api_p_v1_singledata_patch_upload_post.py +164 -0
  42. robodock_cli-0.1.0/fast_api_client/api/post_train/data_ops_overview_api_p_v1_data_ops_overview_get.py +624 -0
  43. robodock_cli-0.1.0/fast_api_client/api/post_train/data_ops_patches_api_p_v1_data_ops_patches_get.py +474 -0
  44. robodock_cli-0.1.0/fast_api_client/api/post_train/delete_dataset_api_p_v1_dataset_dataset_uuid_delete.py +167 -0
  45. robodock_cli-0.1.0/fast_api_client/api/post_train/delete_singledata_api_p_v1_singledata_uuid_delete.py +167 -0
  46. robodock_cli-0.1.0/fast_api_client/api/post_train/delete_singledata_by_patch_api_p_v1_singledata_patch_patch_id_delete.py +167 -0
  47. robodock_cli-0.1.0/fast_api_client/api/post_train/delete_singledata_list_api_p_v1_singledata_delete.py +172 -0
  48. robodock_cli-0.1.0/fast_api_client/api/post_train/download_singledata_api_p_v1_singledata_download_uuid_get.py +167 -0
  49. robodock_cli-0.1.0/fast_api_client/api/post_train/download_singledata_list_api_p_v1_singledata_download_get.py +178 -0
  50. robodock_cli-0.1.0/fast_api_client/api/post_train/get_singledata_api_p_v1_singledata_uuid_get.py +167 -0
  51. robodock_cli-0.1.0/fast_api_client/api/post_train/link_singledata_api_p_v1_singledata_link_post.py +172 -0
  52. robodock_cli-0.1.0/fast_api_client/api/post_train/list_dataset_api_p_v1_dataset_get.py +307 -0
  53. robodock_cli-0.1.0/fast_api_client/api/post_train/list_singledata_api_p_v1_singledata_get.py +737 -0
  54. robodock_cli-0.1.0/fast_api_client/api/post_train/trigger_process_api_p_v1_singledata_trigger_post.py +172 -0
  55. robodock_cli-0.1.0/fast_api_client/api/post_train/unlink_singledata_api_p_v1_singledata_unlink_post.py +172 -0
  56. robodock_cli-0.1.0/fast_api_client/api/post_train/update_dataset_add_api_p_v1_dataset_update_dataset_uuid_post.py +188 -0
  57. robodock_cli-0.1.0/fast_api_client/api/post_train/update_dataset_all_fields_api_p_v1_dataset_uuid_patch.py +188 -0
  58. robodock_cli-0.1.0/fast_api_client/api/post_train/update_dataset_info_api_p_v1_dataset_update_post.py +172 -0
  59. robodock_cli-0.1.0/fast_api_client/api/post_train/update_dataset_reduce_api_p_v1_dataset_reduce_dataset_uuid_post.py +188 -0
  60. robodock_cli-0.1.0/fast_api_client/api/post_train/update_singledata_api_p_v1_singledata_uuid_patch.py +188 -0
  61. robodock_cli-0.1.0/fast_api_client/api/post_train/update_singledata_tag_api_p_v1_singledata_tag_post.py +176 -0
  62. robodock_cli-0.1.0/fast_api_client/api/post_train/update_upload_status_api_p_v1_singledata_upload_status_patch.py +176 -0
  63. robodock_cli-0.1.0/fast_api_client/api/post_train/upload_singledata_api_p_v1_singledata_post.py +172 -0
  64. robodock_cli-0.1.0/fast_api_client/api/post_train/upload_singledata_list_api_p_v1_singledata_list_post.py +172 -0
  65. robodock_cli-0.1.0/fast_api_client/api/task_management/__init__.py +1 -0
  66. robodock_cli-0.1.0/fast_api_client/api/task_management/create_project_api_p_v1_project_project_name_post.py +204 -0
  67. robodock_cli-0.1.0/fast_api_client/api/task_management/create_rl_stage_api_p_v1_run_run_uuid_stage_rl_post.py +180 -0
  68. robodock_cli-0.1.0/fast_api_client/api/task_management/create_run_api_p_v1_run_post.py +172 -0
  69. robodock_cli-0.1.0/fast_api_client/api/task_management/delete_project_api_p_v1_project_uuid_delete.py +159 -0
  70. robodock_cli-0.1.0/fast_api_client/api/task_management/delete_run_api_p_v1_run_uuid_delete.py +159 -0
  71. robodock_cli-0.1.0/fast_api_client/api/task_management/delete_run_stage_api_p_v1_run_run_uuid_stage_stage_name_delete.py +181 -0
  72. robodock_cli-0.1.0/fast_api_client/api/task_management/get_checkpoint_download_url_api_p_v1_run_checkpoint_download_post.py +172 -0
  73. robodock_cli-0.1.0/fast_api_client/api/task_management/get_project_api_p_v1_project_uuid_get.py +159 -0
  74. robodock_cli-0.1.0/fast_api_client/api/task_management/get_run_api_p_v1_run_unique_id_get.py +180 -0
  75. robodock_cli-0.1.0/fast_api_client/api/task_management/get_run_log_info_api_p_v1_run_log_get.py +206 -0
  76. robodock_cli-0.1.0/fast_api_client/api/task_management/get_run_stage_api_p_v1_run_run_uuid_stage_stage_name_get.py +173 -0
  77. robodock_cli-0.1.0/fast_api_client/api/task_management/get_run_status_api_p_v1_run_status_uuid_get.py +159 -0
  78. robodock_cli-0.1.0/fast_api_client/api/task_management/list_projects_api_p_v1_project_get.py +359 -0
  79. robodock_cli-0.1.0/fast_api_client/api/task_management/list_runs_api_p_v1_run_get.py +399 -0
  80. robodock_cli-0.1.0/fast_api_client/api/task_management/open_artifact_api_p_v1_run_artifact_open_post.py +164 -0
  81. robodock_cli-0.1.0/fast_api_client/api/task_management/proxy_argo_log_api_p_v1_run_log_proxy_get.py +85 -0
  82. robodock_cli-0.1.0/fast_api_client/api/task_management/resubmit_run_api_p_v1_run_resubmit_unique_id_post.py +180 -0
  83. robodock_cli-0.1.0/fast_api_client/api/task_management/retry_run_api_p_v1_run_retry_unique_id_post.py +180 -0
  84. robodock_cli-0.1.0/fast_api_client/api/task_management/stop_run_api_p_v1_run_stop_uuid_post.py +159 -0
  85. robodock_cli-0.1.0/fast_api_client/api/task_management/trigger_model_convert_api_p_v1_run_model_convert_trigger_post.py +172 -0
  86. robodock_cli-0.1.0/fast_api_client/api/task_management/update_project_api_p_v1_project_uuid_patch.py +180 -0
  87. robodock_cli-0.1.0/fast_api_client/api/task_management/update_run_api_p_v1_run_unique_id_patch.py +200 -0
  88. robodock_cli-0.1.0/fast_api_client/api/task_mapping/__init__.py +1 -0
  89. robodock_cli-0.1.0/fast_api_client/api/task_mapping/create_task_mapping_api_p_v1_task_mapping_post.py +164 -0
  90. robodock_cli-0.1.0/fast_api_client/api/task_mapping/delete_task_mapping_api_p_v1_task_mapping_task_id_delete.py +159 -0
  91. robodock_cli-0.1.0/fast_api_client/api/task_mapping/get_task_mapping_api_p_v1_task_mapping_task_id_get.py +159 -0
  92. robodock_cli-0.1.0/fast_api_client/api/task_mapping/list_task_mapping_patches_api_p_v1_task_mapping_task_id_patches_get.py +195 -0
  93. robodock_cli-0.1.0/fast_api_client/api/task_mapping/list_task_mappings_api_p_v1_task_mapping_get.py +279 -0
  94. robodock_cli-0.1.0/fast_api_client/api/task_mapping/update_task_mapping_api_p_v1_task_mapping_task_id_patch.py +180 -0
  95. robodock_cli-0.1.0/fast_api_client/client.py +268 -0
  96. robodock_cli-0.1.0/fast_api_client/errors.py +16 -0
  97. robodock_cli-0.1.0/fast_api_client/models/__init__.py +121 -0
  98. robodock_cli-0.1.0/fast_api_client/models/add_member_request.py +89 -0
  99. robodock_cli-0.1.0/fast_api_client/models/artifact_item.py +251 -0
  100. robodock_cli-0.1.0/fast_api_client/models/artifact_item_extra_info_type_0.py +45 -0
  101. robodock_cli-0.1.0/fast_api_client/models/artifact_open_request.py +93 -0
  102. robodock_cli-0.1.0/fast_api_client/models/body_download_singledata_list_api_pv1_singledata_download_get.py +61 -0
  103. robodock_cli-0.1.0/fast_api_client/models/change_password_request.py +69 -0
  104. robodock_cli-0.1.0/fast_api_client/models/checkpoint_download_request.py +69 -0
  105. robodock_cli-0.1.0/fast_api_client/models/create_group_request.py +72 -0
  106. robodock_cli-0.1.0/fast_api_client/models/create_platform_role_binding_request.py +69 -0
  107. robodock_cli-0.1.0/fast_api_client/models/dataset_add_request.py +165 -0
  108. robodock_cli-0.1.0/fast_api_client/models/dataset_create_request.py +253 -0
  109. robodock_cli-0.1.0/fast_api_client/models/dataset_full_update_request.py +133 -0
  110. robodock_cli-0.1.0/fast_api_client/models/dataset_reduce_request.py +84 -0
  111. robodock_cli-0.1.0/fast_api_client/models/dataset_update_request.py +123 -0
  112. robodock_cli-0.1.0/fast_api_client/models/forgot_password_request.py +61 -0
  113. robodock_cli-0.1.0/fast_api_client/models/http_validation_error.py +79 -0
  114. robodock_cli-0.1.0/fast_api_client/models/login_request.py +69 -0
  115. robodock_cli-0.1.0/fast_api_client/models/logout_request.py +61 -0
  116. robodock_cli-0.1.0/fast_api_client/models/model_convert_trigger_request.py +69 -0
  117. robodock_cli-0.1.0/fast_api_client/models/patch_duplicate_batch_item_request.py +69 -0
  118. robodock_cli-0.1.0/fast_api_client/models/patch_duplicate_batch_request.py +75 -0
  119. robodock_cli-0.1.0/fast_api_client/models/patch_duplicate_check_request.py +69 -0
  120. robodock_cli-0.1.0/fast_api_client/models/patch_episode_create_request.py +547 -0
  121. robodock_cli-0.1.0/fast_api_client/models/patch_episode_create_request_lable_info.py +47 -0
  122. robodock_cli-0.1.0/fast_api_client/models/patch_upload_create_request.py +94 -0
  123. robodock_cli-0.1.0/fast_api_client/models/project_create_request.py +174 -0
  124. robodock_cli-0.1.0/fast_api_client/models/project_create_request_default_configs.py +47 -0
  125. robodock_cli-0.1.0/fast_api_client/models/project_update_request.py +175 -0
  126. robodock_cli-0.1.0/fast_api_client/models/project_update_request_default_configs_type_0.py +45 -0
  127. robodock_cli-0.1.0/fast_api_client/models/refresh_request.py +61 -0
  128. robodock_cli-0.1.0/fast_api_client/models/reset_password_request.py +69 -0
  129. robodock_cli-0.1.0/fast_api_client/models/rl_stage_create_request.py +75 -0
  130. robodock_cli-0.1.0/fast_api_client/models/rl_stage_create_request_configs.py +47 -0
  131. robodock_cli-0.1.0/fast_api_client/models/run_create_request.py +243 -0
  132. robodock_cli-0.1.0/fast_api_client/models/run_create_request_configs.py +47 -0
  133. robodock_cli-0.1.0/fast_api_client/models/run_update_request.py +533 -0
  134. robodock_cli-0.1.0/fast_api_client/models/run_update_request_artifacts_type_0.py +45 -0
  135. robodock_cli-0.1.0/fast_api_client/models/run_update_request_configs_type_0.py +45 -0
  136. robodock_cli-0.1.0/fast_api_client/models/run_update_request_stages_type_0_item.py +45 -0
  137. robodock_cli-0.1.0/fast_api_client/models/single_data_create_request.py +189 -0
  138. robodock_cli-0.1.0/fast_api_client/models/single_data_link_request.py +69 -0
  139. robodock_cli-0.1.0/fast_api_client/models/single_data_list_request.py +169 -0
  140. robodock_cli-0.1.0/fast_api_client/models/single_data_tag_request.py +69 -0
  141. robodock_cli-0.1.0/fast_api_client/models/single_data_trigger_request.py +61 -0
  142. robodock_cli-0.1.0/fast_api_client/models/single_data_unlink_request.py +69 -0
  143. robodock_cli-0.1.0/fast_api_client/models/single_data_update_request.py +775 -0
  144. robodock_cli-0.1.0/fast_api_client/models/single_data_update_request_lable_info_type_0.py +45 -0
  145. robodock_cli-0.1.0/fast_api_client/models/stage_artifact_append.py +85 -0
  146. robodock_cli-0.1.0/fast_api_client/models/stage_artifact_append_category.py +10 -0
  147. robodock_cli-0.1.0/fast_api_client/models/switch_group_request.py +61 -0
  148. robodock_cli-0.1.0/fast_api_client/models/task_mapping_create_request.py +111 -0
  149. robodock_cli-0.1.0/fast_api_client/models/task_mapping_update_request.py +93 -0
  150. robodock_cli-0.1.0/fast_api_client/models/update_group_request.py +93 -0
  151. robodock_cli-0.1.0/fast_api_client/models/update_member_request.py +61 -0
  152. robodock_cli-0.1.0/fast_api_client/models/upload_status_request.py +69 -0
  153. robodock_cli-0.1.0/fast_api_client/models/validation_error.py +123 -0
  154. robodock_cli-0.1.0/fast_api_client/models/validation_error_context.py +45 -0
  155. robodock_cli-0.1.0/fast_api_client/py.typed +1 -0
  156. robodock_cli-0.1.0/fast_api_client/types.py +54 -0
  157. robodock_cli-0.1.0/pyproject.toml +57 -0
  158. robodock_cli-0.1.0/robodock_cli.egg-info/PKG-INFO +97 -0
  159. robodock_cli-0.1.0/robodock_cli.egg-info/SOURCES.txt +170 -0
  160. robodock_cli-0.1.0/robodock_cli.egg-info/dependency_links.txt +1 -0
  161. robodock_cli-0.1.0/robodock_cli.egg-info/entry_points.txt +2 -0
  162. robodock_cli-0.1.0/robodock_cli.egg-info/requires.txt +9 -0
  163. robodock_cli-0.1.0/robodock_cli.egg-info/top_level.txt +4 -0
  164. robodock_cli-0.1.0/sdk/__init__.py +1 -0
  165. robodock_cli-0.1.0/sdk/client/__init__.py +1 -0
  166. robodock_cli-0.1.0/sdk/client/auth.py +171 -0
  167. robodock_cli-0.1.0/sdk/client/client.py +9 -0
  168. robodock_cli-0.1.0/sdk/client/task_management.py +29 -0
  169. robodock_cli-0.1.0/sdk/exception.py +95 -0
  170. robodock_cli-0.1.0/sdk/utils/__init__.py +1 -0
  171. robodock_cli-0.1.0/sdk/utils/downloader.py +267 -0
  172. robodock_cli-0.1.0/setup.cfg +4 -0
@@ -0,0 +1,97 @@
1
+ Metadata-Version: 2.4
2
+ Name: robodock-cli
3
+ Version: 0.1.0
4
+ Summary: Robodock 平台命令行 & SDK 工具
5
+ Author-email: KirigiriSuzumiya <boyifan1@126.com>
6
+ Project-URL: Homepage, https://github.com/FII-AILab/robodock-cli
7
+ Project-URL: Repository, https://github.com/FII-AILab/robodock-cli
8
+ Project-URL: Issues, https://github.com/FII-AILab/robodock-cli/issues
9
+ Keywords: robodock,cli,sdk,rl,post-train
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ Requires-Dist: typer>=0.9
23
+ Requires-Dist: rich
24
+ Requires-Dist: httpx<0.29.0,>=0.23.1
25
+ Requires-Dist: attrs>=22.2.0
26
+ Provides-Extra: dev
27
+ Requires-Dist: build; extra == "dev"
28
+ Requires-Dist: twine; extra == "dev"
29
+ Requires-Dist: openapi-python-client; extra == "dev"
30
+
31
+ # robodock-cli robodock平台命令行&sdk工具
32
+
33
+ ## 安装
34
+
35
+ ### 方式一:本地源码安装(推荐)
36
+
37
+ ```bash
38
+ cd robodock-cli
39
+ pip install .
40
+ ```
41
+
42
+ ### 方式二:构建 wheel 后安装
43
+
44
+ ```bash
45
+ cd robodock-cli
46
+ pip install build
47
+ python -m build
48
+ pip install dist/robodock_cli-*.whl
49
+ ```
50
+
51
+ ## Quick Start
52
+
53
+ ```bash
54
+ # 登录
55
+ robodock-cli auth login
56
+
57
+ # 查看登录信息
58
+ robodock-cli auth info
59
+
60
+ # 退出登录
61
+ robodock-cli auth logout
62
+
63
+ # 下载平台模型
64
+ robodock-cli task download_checkpoint [run_uuid] [checkpoint_prefix]
65
+
66
+ # 查看全部命令
67
+ robodock-cli --help
68
+ ```
69
+
70
+ 开发调试时也可以继续使用 `python main.py`,例如 `python main.py auth info`。
71
+
72
+ ## 整体架构
73
+ - app
74
+ - typer命令行工具
75
+ - fast_api_client
76
+ - 由openapi.json生成的client代码(不要手动修改里面的文件)
77
+ - sdk
78
+ - client以及工具封装
79
+ - config.py
80
+ - 全局配置(服务地址、登录态文件路径等)
81
+
82
+ > 注意:`config.py` 会以顶层模块的形式打包进 wheel,若与其他包同名可能冲突。
83
+
84
+ ## 开发依赖
85
+
86
+ ```bash
87
+ pip install -r requirements.txt
88
+ ```
89
+
90
+ ## 生成后端client
91
+ ```
92
+ openapi-python-client generate --path ./openapi.json --overwrite
93
+ rm -rf ./fast_api_client
94
+ cp -r fast-api-client/fast_api_client/ ./fast_api_client/
95
+ ```
96
+
97
+ 注意`fast_api_client`目录是由openapi文件生成的,不要修改里面的文件,每次生成都会被覆盖
@@ -0,0 +1,67 @@
1
+ # robodock-cli robodock平台命令行&sdk工具
2
+
3
+ ## 安装
4
+
5
+ ### 方式一:本地源码安装(推荐)
6
+
7
+ ```bash
8
+ cd robodock-cli
9
+ pip install .
10
+ ```
11
+
12
+ ### 方式二:构建 wheel 后安装
13
+
14
+ ```bash
15
+ cd robodock-cli
16
+ pip install build
17
+ python -m build
18
+ pip install dist/robodock_cli-*.whl
19
+ ```
20
+
21
+ ## Quick Start
22
+
23
+ ```bash
24
+ # 登录
25
+ robodock-cli auth login
26
+
27
+ # 查看登录信息
28
+ robodock-cli auth info
29
+
30
+ # 退出登录
31
+ robodock-cli auth logout
32
+
33
+ # 下载平台模型
34
+ robodock-cli task download_checkpoint [run_uuid] [checkpoint_prefix]
35
+
36
+ # 查看全部命令
37
+ robodock-cli --help
38
+ ```
39
+
40
+ 开发调试时也可以继续使用 `python main.py`,例如 `python main.py auth info`。
41
+
42
+ ## 整体架构
43
+ - app
44
+ - typer命令行工具
45
+ - fast_api_client
46
+ - 由openapi.json生成的client代码(不要手动修改里面的文件)
47
+ - sdk
48
+ - client以及工具封装
49
+ - config.py
50
+ - 全局配置(服务地址、登录态文件路径等)
51
+
52
+ > 注意:`config.py` 会以顶层模块的形式打包进 wheel,若与其他包同名可能冲突。
53
+
54
+ ## 开发依赖
55
+
56
+ ```bash
57
+ pip install -r requirements.txt
58
+ ```
59
+
60
+ ## 生成后端client
61
+ ```
62
+ openapi-python-client generate --path ./openapi.json --overwrite
63
+ rm -rf ./fast_api_client
64
+ cp -r fast-api-client/fast_api_client/ ./fast_api_client/
65
+ ```
66
+
67
+ 注意`fast_api_client`目录是由openapi文件生成的,不要修改里面的文件,每次生成都会被覆盖
@@ -0,0 +1 @@
1
+ """Robodock CLI 命令行入口。"""
@@ -0,0 +1,14 @@
1
+ """robodock-cli 命令行入口。"""
2
+ import typer
3
+
4
+ from app.auth import auth_app
5
+ from app.task_management import task_management_app
6
+
7
+ app = typer.Typer(help="Robodock 命令行工具", suggest_commands=True)
8
+ app.add_typer(auth_app, name="auth")
9
+ app.add_typer(task_management_app, name="task")
10
+
11
+
12
+ def main() -> None:
13
+ """CLI 入口函数,供 console script 与 ``python -m`` 调用。"""
14
+ app()
@@ -0,0 +1,58 @@
1
+ import typer
2
+
3
+ from sdk.client.client import RobodockClient
4
+ from sdk.exception import (
5
+ NotLoggedInError,
6
+ RobodockError,
7
+ UserInfoError
8
+ )
9
+
10
+ auth_app = typer.Typer(help="Robodock登录认证")
11
+
12
+ @auth_app.command("login")
13
+ def login():
14
+ """登录 Robodock 平台。"""
15
+ username = typer.prompt("用户名或邮箱", hide_input=False)
16
+ password = typer.prompt("密码", hide_input=True)
17
+
18
+ client = RobodockClient()
19
+ try:
20
+ client.auth.login(username=username, password=password)
21
+ except RobodockError as e:
22
+ typer.echo(f"登录失败: {e}", err=True)
23
+ raise typer.Exit(code=1)
24
+
25
+ client.auth.save_state()
26
+ typer.echo("登录成功")
27
+ info() # 显示当前登录状态
28
+
29
+
30
+ @auth_app.command("logout")
31
+ def logout():
32
+ """退出登录并清除本地登录态。"""
33
+ client = RobodockClient()
34
+ try:
35
+ client.auth.logout()
36
+ except NotLoggedInError:
37
+ typer.echo("当前未登录", err=False)
38
+ raise typer.Exit(code=1)
39
+ except RobodockError as e:
40
+ typer.echo(f"退出登录失败: {e}", err=True)
41
+ raise typer.Exit(code=1)
42
+ finally:
43
+ client.auth.clear_state()
44
+ typer.echo("已退出登录")
45
+
46
+
47
+ @auth_app.command("info")
48
+ def info():
49
+ """查看当前登录状态。"""
50
+ client = RobodockClient()
51
+ try:
52
+ user_info = client.auth.info()
53
+ except NotLoggedInError as e:
54
+ return typer.echo("当前未登录", err=False)
55
+ except UserInfoError as e:
56
+ typer.echo(f"获取当前登录状态失败: {e}", err=True)
57
+ raise typer.Exit(code=1)
58
+ typer.echo(f"当前已登录: {user_info.get('username')} ({user_info.get('email')})")
@@ -0,0 +1,97 @@
1
+ import typer
2
+ from pathlib import Path
3
+ from typing import Optional
4
+
5
+ from rich.progress import (
6
+ BarColumn,
7
+ DownloadColumn,
8
+ Progress,
9
+ TextColumn,
10
+ TimeRemainingColumn,
11
+ TransferSpeedColumn,
12
+ )
13
+
14
+ from sdk.utils.downloader import download_file
15
+ from sdk.client.client import RobodockClient
16
+ from sdk.exception import (
17
+ NotLoggedInError,
18
+ RobodockError,
19
+ UserInfoError
20
+ )
21
+
22
+ ONNX_PATH_SUFFIX = "_onnx.tar"
23
+ MODEL_PATH_SUFIX = ".tar"
24
+
25
+ task_management_app = typer.Typer(help="Robodock训练任务管理")
26
+
27
+ @task_management_app.command("download_checkpoint")
28
+ def download_checkpoint(
29
+ run_uuid:str,
30
+ checkpoint_prefix:str,
31
+ output_path:str=str(Path.cwd()),
32
+ overwrite:bool=False,
33
+ ):
34
+ local_path = Path(output_path) / run_uuid / Path(checkpoint_prefix).stem
35
+ checkpoint_model_path = checkpoint_prefix + MODEL_PATH_SUFIX
36
+ checkpoint_onnx_path = checkpoint_prefix + ONNX_PATH_SUFFIX
37
+ client = RobodockClient()
38
+
39
+ def get_model_url() -> str:
40
+ return client.task_management.get_checkpoint_download_url(
41
+ run_uuid=run_uuid,
42
+ checkpoint_path=checkpoint_model_path
43
+ )
44
+ def get_onnx_url() -> str:
45
+ return client.task_management.get_checkpoint_download_url(
46
+ run_uuid=run_uuid,
47
+ checkpoint_path=checkpoint_onnx_path
48
+ )
49
+
50
+ model_url = get_model_url()
51
+ typer.echo("已获取模型下载链接")
52
+ onnx_url = get_onnx_url()
53
+ typer.echo("已获取onnx模型下载链接")
54
+ typer.echo(f"开始下载模型文件到{str(local_path)}")
55
+
56
+
57
+
58
+ progress = Progress(
59
+ TextColumn("[bold blue]{task.description}", justify="left"),
60
+ BarColumn(bar_width=None),
61
+ "[progress.percentage]{task.percentage:>3.1f}%",
62
+ "•",
63
+ DownloadColumn(),
64
+ "•",
65
+ TransferSpeedColumn(),
66
+ "•",
67
+ TimeRemainingColumn(),
68
+ )
69
+
70
+ with progress:
71
+ onnx_task = progress.add_task(f"正在下载onnx文件", total=None)
72
+ download_file(
73
+ presigned_url=onnx_url,
74
+ local_path=local_path / Path(checkpoint_onnx_path).name,
75
+ get_presigned_url=get_model_url,
76
+ on_progress=lambda downloaded, total: progress.update(
77
+ onnx_task,
78
+ completed=downloaded,
79
+ total=total,
80
+ ),
81
+ overwrite=overwrite
82
+ )
83
+
84
+ model_task = progress.add_task(f"正在下载模型文件", total=None)
85
+ download_file(
86
+ presigned_url=model_url,
87
+ local_path=local_path / Path(checkpoint_model_path).name,
88
+ get_presigned_url=get_model_url,
89
+ on_progress=lambda downloaded, total: progress.update(
90
+ model_task,
91
+ completed=downloaded,
92
+ total=total,
93
+ ),
94
+ overwrite=overwrite
95
+ )
96
+
97
+ typer.echo("模型下载完成")
@@ -0,0 +1,9 @@
1
+ from pathlib import Path
2
+
3
+ ROBODOCK_BASEURL = "http://43.179.183.27"
4
+
5
+ # 登录态持久化文件:CLI 每次调用是独立进程,登录后把 token 存到本地
6
+ SESSION_FILE = Path.home() / ".robodock-cli" / "session.json"
7
+
8
+ # 提前多少秒刷新 token,避免请求过程中 token 过期
9
+ REFRESH_AHEAD_SECONDS = 60
@@ -0,0 +1,8 @@
1
+ """A client library for accessing FastAPI"""
2
+
3
+ from .client import AuthenticatedClient, Client
4
+
5
+ __all__ = (
6
+ "AuthenticatedClient",
7
+ "Client",
8
+ )
@@ -0,0 +1 @@
1
+ """Contains methods for accessing the API"""
@@ -0,0 +1 @@
1
+ """Contains endpoint functions for accessing the API"""
@@ -0,0 +1,172 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.change_password_request import ChangePasswordRequest
9
+ from ...models.http_validation_error import HTTPValidationError
10
+ from ...types import Response
11
+
12
+
13
+ def _get_kwargs(
14
+ *,
15
+ body: ChangePasswordRequest,
16
+ ) -> dict[str, Any]:
17
+ headers: dict[str, Any] = {}
18
+
19
+ _kwargs: dict[str, Any] = {
20
+ "method": "post",
21
+ "url": "/api/p/v1/auth/change-password",
22
+ }
23
+
24
+ _kwargs["json"] = body.to_dict()
25
+
26
+ headers["Content-Type"] = "application/json"
27
+
28
+ _kwargs["headers"] = headers
29
+ return _kwargs
30
+
31
+
32
+ def _parse_response(
33
+ *, client: AuthenticatedClient | Client, response: httpx.Response
34
+ ) -> Any | HTTPValidationError | None:
35
+ if response.status_code == 200:
36
+ response_200 = response.json()
37
+ return response_200
38
+
39
+ if response.status_code == 422:
40
+ response_422 = HTTPValidationError.from_dict(response.json())
41
+
42
+ return response_422
43
+
44
+ if client.raise_on_unexpected_status:
45
+ raise errors.UnexpectedStatus(response.status_code, response.content)
46
+ else:
47
+ return None
48
+
49
+
50
+ def _build_response(
51
+ *, client: AuthenticatedClient | Client, response: httpx.Response
52
+ ) -> Response[Any | HTTPValidationError]:
53
+ return Response(
54
+ status_code=HTTPStatus(response.status_code),
55
+ content=response.content,
56
+ headers=response.headers,
57
+ parsed=_parse_response(client=client, response=response),
58
+ )
59
+
60
+
61
+ def sync_detailed(
62
+ *,
63
+ client: AuthenticatedClient,
64
+ body: ChangePasswordRequest,
65
+ ) -> Response[Any | HTTPValidationError]:
66
+ """Change Password
67
+
68
+ 修改密码
69
+
70
+ Args:
71
+ body (ChangePasswordRequest):
72
+
73
+ Raises:
74
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
75
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
76
+
77
+ Returns:
78
+ Response[Any | HTTPValidationError]
79
+ """
80
+
81
+ kwargs = _get_kwargs(
82
+ body=body,
83
+ )
84
+
85
+ response = client.get_httpx_client().request(
86
+ **kwargs,
87
+ )
88
+
89
+ return _build_response(client=client, response=response)
90
+
91
+
92
+ def sync(
93
+ *,
94
+ client: AuthenticatedClient,
95
+ body: ChangePasswordRequest,
96
+ ) -> Any | HTTPValidationError | None:
97
+ """Change Password
98
+
99
+ 修改密码
100
+
101
+ Args:
102
+ body (ChangePasswordRequest):
103
+
104
+ Raises:
105
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
106
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
107
+
108
+ Returns:
109
+ Any | HTTPValidationError
110
+ """
111
+
112
+ return sync_detailed(
113
+ client=client,
114
+ body=body,
115
+ ).parsed
116
+
117
+
118
+ async def asyncio_detailed(
119
+ *,
120
+ client: AuthenticatedClient,
121
+ body: ChangePasswordRequest,
122
+ ) -> Response[Any | HTTPValidationError]:
123
+ """Change Password
124
+
125
+ 修改密码
126
+
127
+ Args:
128
+ body (ChangePasswordRequest):
129
+
130
+ Raises:
131
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
132
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
133
+
134
+ Returns:
135
+ Response[Any | HTTPValidationError]
136
+ """
137
+
138
+ kwargs = _get_kwargs(
139
+ body=body,
140
+ )
141
+
142
+ response = await client.get_async_httpx_client().request(**kwargs)
143
+
144
+ return _build_response(client=client, response=response)
145
+
146
+
147
+ async def asyncio(
148
+ *,
149
+ client: AuthenticatedClient,
150
+ body: ChangePasswordRequest,
151
+ ) -> Any | HTTPValidationError | None:
152
+ """Change Password
153
+
154
+ 修改密码
155
+
156
+ Args:
157
+ body (ChangePasswordRequest):
158
+
159
+ Raises:
160
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
161
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
162
+
163
+ Returns:
164
+ Any | HTTPValidationError
165
+ """
166
+
167
+ return (
168
+ await asyncio_detailed(
169
+ client=client,
170
+ body=body,
171
+ )
172
+ ).parsed
@@ -0,0 +1,172 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.forgot_password_request import ForgotPasswordRequest
9
+ from ...models.http_validation_error import HTTPValidationError
10
+ from ...types import Response
11
+
12
+
13
+ def _get_kwargs(
14
+ *,
15
+ body: ForgotPasswordRequest,
16
+ ) -> dict[str, Any]:
17
+ headers: dict[str, Any] = {}
18
+
19
+ _kwargs: dict[str, Any] = {
20
+ "method": "post",
21
+ "url": "/api/p/v1/auth/forgot-password",
22
+ }
23
+
24
+ _kwargs["json"] = body.to_dict()
25
+
26
+ headers["Content-Type"] = "application/json"
27
+
28
+ _kwargs["headers"] = headers
29
+ return _kwargs
30
+
31
+
32
+ def _parse_response(
33
+ *, client: AuthenticatedClient | Client, response: httpx.Response
34
+ ) -> Any | HTTPValidationError | None:
35
+ if response.status_code == 200:
36
+ response_200 = response.json()
37
+ return response_200
38
+
39
+ if response.status_code == 422:
40
+ response_422 = HTTPValidationError.from_dict(response.json())
41
+
42
+ return response_422
43
+
44
+ if client.raise_on_unexpected_status:
45
+ raise errors.UnexpectedStatus(response.status_code, response.content)
46
+ else:
47
+ return None
48
+
49
+
50
+ def _build_response(
51
+ *, client: AuthenticatedClient | Client, response: httpx.Response
52
+ ) -> Response[Any | HTTPValidationError]:
53
+ return Response(
54
+ status_code=HTTPStatus(response.status_code),
55
+ content=response.content,
56
+ headers=response.headers,
57
+ parsed=_parse_response(client=client, response=response),
58
+ )
59
+
60
+
61
+ def sync_detailed(
62
+ *,
63
+ client: AuthenticatedClient | Client,
64
+ body: ForgotPasswordRequest,
65
+ ) -> Response[Any | HTTPValidationError]:
66
+ """Forgot Password
67
+
68
+ 发送密码重置邮件(Phase 4 完善)
69
+
70
+ Args:
71
+ body (ForgotPasswordRequest):
72
+
73
+ Raises:
74
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
75
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
76
+
77
+ Returns:
78
+ Response[Any | HTTPValidationError]
79
+ """
80
+
81
+ kwargs = _get_kwargs(
82
+ body=body,
83
+ )
84
+
85
+ response = client.get_httpx_client().request(
86
+ **kwargs,
87
+ )
88
+
89
+ return _build_response(client=client, response=response)
90
+
91
+
92
+ def sync(
93
+ *,
94
+ client: AuthenticatedClient | Client,
95
+ body: ForgotPasswordRequest,
96
+ ) -> Any | HTTPValidationError | None:
97
+ """Forgot Password
98
+
99
+ 发送密码重置邮件(Phase 4 完善)
100
+
101
+ Args:
102
+ body (ForgotPasswordRequest):
103
+
104
+ Raises:
105
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
106
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
107
+
108
+ Returns:
109
+ Any | HTTPValidationError
110
+ """
111
+
112
+ return sync_detailed(
113
+ client=client,
114
+ body=body,
115
+ ).parsed
116
+
117
+
118
+ async def asyncio_detailed(
119
+ *,
120
+ client: AuthenticatedClient | Client,
121
+ body: ForgotPasswordRequest,
122
+ ) -> Response[Any | HTTPValidationError]:
123
+ """Forgot Password
124
+
125
+ 发送密码重置邮件(Phase 4 完善)
126
+
127
+ Args:
128
+ body (ForgotPasswordRequest):
129
+
130
+ Raises:
131
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
132
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
133
+
134
+ Returns:
135
+ Response[Any | HTTPValidationError]
136
+ """
137
+
138
+ kwargs = _get_kwargs(
139
+ body=body,
140
+ )
141
+
142
+ response = await client.get_async_httpx_client().request(**kwargs)
143
+
144
+ return _build_response(client=client, response=response)
145
+
146
+
147
+ async def asyncio(
148
+ *,
149
+ client: AuthenticatedClient | Client,
150
+ body: ForgotPasswordRequest,
151
+ ) -> Any | HTTPValidationError | None:
152
+ """Forgot Password
153
+
154
+ 发送密码重置邮件(Phase 4 完善)
155
+
156
+ Args:
157
+ body (ForgotPasswordRequest):
158
+
159
+ Raises:
160
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
161
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
162
+
163
+ Returns:
164
+ Any | HTTPValidationError
165
+ """
166
+
167
+ return (
168
+ await asyncio_detailed(
169
+ client=client,
170
+ body=body,
171
+ )
172
+ ).parsed