qwak-sdk 0.1.0__py3-none-any.whl → 0.2.21rc0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of qwak-sdk might be problematic. Click here for more details.

Files changed (305) hide show
  1. qwak_sdk/__init__.py +9 -0
  2. qwak_sdk/cli.py +51 -0
  3. qwak_sdk/commands/admin/__init__.py +0 -0
  4. qwak_sdk/commands/admin/admin_commands_group.py +17 -0
  5. qwak_sdk/commands/admin/apikeys/__init__.py +0 -0
  6. qwak_sdk/commands/admin/apikeys/api_keys_commands_group.py +17 -0
  7. qwak_sdk/commands/admin/apikeys/generate/__init__.py +0 -0
  8. qwak_sdk/commands/admin/apikeys/generate/_logic.py +21 -0
  9. qwak_sdk/commands/admin/apikeys/generate/ui.py +45 -0
  10. qwak_sdk/commands/admin/apikeys/revoke/__init__.py +0 -0
  11. qwak_sdk/commands/admin/apikeys/revoke/_logic.py +22 -0
  12. qwak_sdk/commands/admin/apikeys/revoke/ui.py +31 -0
  13. qwak_sdk/commands/audience/__init__.py +0 -0
  14. qwak_sdk/commands/audience/_logic/__init__.py +0 -0
  15. qwak_sdk/commands/audience/_logic/config/__init__.py +0 -0
  16. qwak_sdk/commands/audience/_logic/config/config_base.py +16 -0
  17. qwak_sdk/commands/audience/_logic/config/parser.py +28 -0
  18. qwak_sdk/commands/audience/_logic/config/v1/__init__.py +0 -0
  19. qwak_sdk/commands/audience/_logic/config/v1/audience_config.py +26 -0
  20. qwak_sdk/commands/audience/_logic/config/v1/conditions_config.py +60 -0
  21. qwak_sdk/commands/audience/_logic/config/v1/config_v1.py +24 -0
  22. qwak_sdk/commands/audience/_logic/config/v1/route_config.py +14 -0
  23. qwak_sdk/commands/audience/_logic/config/v1/spec.py +11 -0
  24. qwak_sdk/commands/auto_scalling/__init__.py +0 -0
  25. qwak_sdk/commands/auto_scalling/_logic/__init__.py +0 -0
  26. qwak_sdk/commands/auto_scalling/_logic/config/__init__.py +3 -0
  27. qwak_sdk/commands/auto_scalling/_logic/config/config.py +100 -0
  28. qwak_sdk/commands/auto_scalling/_logic/config/parser.py +21 -0
  29. qwak_sdk/commands/auto_scalling/attach/__init__.py +0 -0
  30. qwak_sdk/commands/auto_scalling/attach/_logic.py +43 -0
  31. qwak_sdk/commands/auto_scalling/attach/ui.py +21 -0
  32. qwak_sdk/commands/auto_scalling/autoscaling_commands_group.py +15 -0
  33. qwak_sdk/commands/automations/__init__.py +0 -0
  34. qwak_sdk/commands/automations/automations_commands_group.py +30 -0
  35. qwak_sdk/commands/automations/delete/__init__.py +0 -0
  36. qwak_sdk/commands/automations/delete/_logic.py +6 -0
  37. qwak_sdk/commands/automations/delete/ui.py +23 -0
  38. qwak_sdk/commands/automations/executions/__init__.py +0 -0
  39. qwak_sdk/commands/automations/executions/executions_commands_group.py +14 -0
  40. qwak_sdk/commands/automations/executions/list/__init__.py +0 -0
  41. qwak_sdk/commands/automations/executions/list/_logic.py +8 -0
  42. qwak_sdk/commands/automations/executions/list/ui.py +25 -0
  43. qwak_sdk/commands/automations/list/__init__.py +0 -0
  44. qwak_sdk/commands/automations/list/_logic.py +8 -0
  45. qwak_sdk/commands/automations/list/ui.py +21 -0
  46. qwak_sdk/commands/automations/register/__init__.py +0 -0
  47. qwak_sdk/commands/automations/register/_logic.py +43 -0
  48. qwak_sdk/commands/automations/register/ui.py +44 -0
  49. qwak_sdk/commands/feature_store/__init__.py +0 -0
  50. qwak_sdk/commands/feature_store/delete/__init__.py +0 -0
  51. qwak_sdk/commands/feature_store/delete/_logic.py +52 -0
  52. qwak_sdk/commands/feature_store/delete/ui.py +40 -0
  53. qwak_sdk/commands/feature_store/feature_store_command_group.py +25 -0
  54. qwak_sdk/commands/feature_store/list/__init__.py +0 -0
  55. qwak_sdk/commands/feature_store/list/ui.py +140 -0
  56. qwak_sdk/commands/feature_store/pause/__init__.py +0 -0
  57. qwak_sdk/commands/feature_store/pause/ui.py +18 -0
  58. qwak_sdk/commands/feature_store/register/__init__.py +0 -0
  59. qwak_sdk/commands/feature_store/register/_logic.py +289 -0
  60. qwak_sdk/commands/feature_store/register/ui.py +105 -0
  61. qwak_sdk/commands/feature_store/resume/__init__.py +0 -0
  62. qwak_sdk/commands/feature_store/resume/ui.py +18 -0
  63. qwak_sdk/commands/feature_store/trigger/__init__.py +0 -0
  64. qwak_sdk/commands/feature_store/trigger/ui.py +32 -0
  65. qwak_sdk/commands/models/__init__.py +0 -0
  66. qwak_sdk/commands/models/_logic/__init__.py +0 -0
  67. qwak_sdk/commands/models/_logic/variations.py +55 -0
  68. qwak_sdk/commands/models/build/__init__.py +0 -0
  69. qwak_sdk/commands/models/build/_logic/__init__.py +0 -0
  70. qwak_sdk/commands/models/build/_logic/build_steps.py +68 -0
  71. qwak_sdk/commands/models/build/_logic/client_logs/__init__.py +0 -0
  72. qwak_sdk/commands/models/build/_logic/client_logs/build_run_handlers.py +189 -0
  73. qwak_sdk/commands/models/build/_logic/client_logs/cli_ui.py +125 -0
  74. qwak_sdk/commands/models/build/_logic/client_logs/logger.py +88 -0
  75. qwak_sdk/commands/models/build/_logic/client_logs/messages.py +40 -0
  76. qwak_sdk/commands/models/build/_logic/client_logs/notifier_impl.py +49 -0
  77. qwak_sdk/commands/models/build/_logic/client_logs/spinner.py +14 -0
  78. qwak_sdk/commands/models/build/_logic/client_logs/time_source.py +37 -0
  79. qwak_sdk/commands/models/build/_logic/client_logs/utils.py +12 -0
  80. qwak_sdk/commands/models/build/_logic/config/config_v1.py +253 -0
  81. qwak_sdk/commands/models/build/_logic/constant/host_resource.py +4 -0
  82. qwak_sdk/commands/models/build/_logic/constant/step_description.py +29 -0
  83. qwak_sdk/commands/models/build/_logic/constant/temp_dir.py +2 -0
  84. qwak_sdk/commands/models/build/_logic/constant/upload_tag.py +5 -0
  85. qwak_sdk/commands/models/build/_logic/context.py +62 -0
  86. qwak_sdk/commands/models/build/_logic/interface/__init__.py +0 -0
  87. qwak_sdk/commands/models/build/_logic/interface/notifier_interface.py +29 -0
  88. qwak_sdk/commands/models/build/_logic/interface/step_inteface.py +29 -0
  89. qwak_sdk/commands/models/build/_logic/phase/__init__.py +0 -0
  90. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/__init__.py +14 -0
  91. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/__init__.py +0 -0
  92. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_model_step.py +42 -0
  93. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/__init__.py +0 -0
  94. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/common.py +33 -0
  95. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/fetch_strategy_manager.py +60 -0
  96. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/__init__.py +0 -0
  97. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/folder/__init__.py +0 -0
  98. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/folder/folder_strategy.py +73 -0
  99. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/git/__init__.py +0 -0
  100. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/git/git_strategy.py +149 -0
  101. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/strategy.py +69 -0
  102. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/zip/__init__.py +0 -0
  103. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/zip/zip_strategy.py +64 -0
  104. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/post_fetch_validation_step.py +117 -0
  105. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/pre_fetch_validation_step.py +135 -0
  106. qwak_sdk/commands/models/build/_logic/phase/b_remote_register_qwak_build/__init__.py +11 -0
  107. qwak_sdk/commands/models/build/_logic/phase/b_remote_register_qwak_build/cleanup_step.py +20 -0
  108. qwak_sdk/commands/models/build/_logic/phase/b_remote_register_qwak_build/start_remote_build_step.py +42 -0
  109. qwak_sdk/commands/models/build/_logic/phase/b_remote_register_qwak_build/upload_step.py +349 -0
  110. qwak_sdk/commands/models/build/_logic/phase/c_deploy/__init__.py +6 -0
  111. qwak_sdk/commands/models/build/_logic/phase/c_deploy/build_polling_status.py +54 -0
  112. qwak_sdk/commands/models/build/_logic/phase/c_deploy/deploy_build.py +44 -0
  113. qwak_sdk/commands/models/build/_logic/util/__init__.py +0 -0
  114. qwak_sdk/commands/models/build/_logic/util/protobuf_factory.py +45 -0
  115. qwak_sdk/commands/models/build/_logic/util/step_decorator.py +37 -0
  116. qwak_sdk/commands/models/build/_logic/util/text.py +9 -0
  117. qwak_sdk/commands/models/build/ui.py +241 -0
  118. qwak_sdk/commands/models/builds/__init__.py +0 -0
  119. qwak_sdk/commands/models/builds/builds_commands_group.py +16 -0
  120. qwak_sdk/commands/models/builds/cancel/__init__.py +0 -0
  121. qwak_sdk/commands/models/builds/cancel/_logic.py +5 -0
  122. qwak_sdk/commands/models/builds/cancel/ui.py +15 -0
  123. qwak_sdk/commands/models/builds/logs/__init__.py +0 -0
  124. qwak_sdk/commands/models/builds/logs/ui.py +35 -0
  125. qwak_sdk/commands/models/builds/status/__init__.py +0 -0
  126. qwak_sdk/commands/models/builds/status/_logic.py +6 -0
  127. qwak_sdk/commands/models/builds/status/ui.py +30 -0
  128. qwak_sdk/commands/models/create/__init__.py +0 -0
  129. qwak_sdk/commands/models/create/_logic.py +35 -0
  130. qwak_sdk/commands/models/create/ui.py +27 -0
  131. qwak_sdk/commands/models/delete/__init__.py +0 -0
  132. qwak_sdk/commands/models/delete/_logic.py +5 -0
  133. qwak_sdk/commands/models/delete/ui.py +16 -0
  134. qwak_sdk/commands/models/deployments/__init__.py +0 -0
  135. qwak_sdk/commands/models/deployments/deploy/__init__.py +0 -0
  136. qwak_sdk/commands/models/deployments/deploy/_logic/__init__.py +0 -0
  137. qwak_sdk/commands/models/deployments/deploy/_logic/advance_deployment_options_handler.py +31 -0
  138. qwak_sdk/commands/models/deployments/deploy/_logic/base_deploy_executor.py +64 -0
  139. qwak_sdk/commands/models/deployments/deploy/_logic/deploy_config.py +241 -0
  140. qwak_sdk/commands/models/deployments/deploy/_logic/deployment.py +405 -0
  141. qwak_sdk/commands/models/deployments/deploy/_logic/deployment_message_helpers.py +98 -0
  142. qwak_sdk/commands/models/deployments/deploy/_logic/deployment_response_handler.py +154 -0
  143. qwak_sdk/commands/models/deployments/deploy/_logic/deployment_size_mapper.py +21 -0
  144. qwak_sdk/commands/models/deployments/deploy/_logic/get_latest_successful_build.py +31 -0
  145. qwak_sdk/commands/models/deployments/deploy/_logic/variations.py +79 -0
  146. qwak_sdk/commands/models/deployments/deploy/batch/__init__.py +0 -0
  147. qwak_sdk/commands/models/deployments/deploy/batch/_logic/__init__.py +0 -0
  148. qwak_sdk/commands/models/deployments/deploy/batch/_logic/advanced_deployment_mapper.py +14 -0
  149. qwak_sdk/commands/models/deployments/deploy/batch/_logic/deploy_executor.py +24 -0
  150. qwak_sdk/commands/models/deployments/deploy/batch/ui.py +104 -0
  151. qwak_sdk/commands/models/deployments/deploy/deploy_commands_group.py +19 -0
  152. qwak_sdk/commands/models/deployments/deploy/realtime/__init__.py +0 -0
  153. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/__init__.py +0 -0
  154. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/advanced_deployment_mapper.py +20 -0
  155. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/deploy_executor.py +24 -0
  156. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/serving_strategy_mapper.py +105 -0
  157. qwak_sdk/commands/models/deployments/deploy/realtime/ui.py +179 -0
  158. qwak_sdk/commands/models/deployments/deploy/streaming/__init__.py +0 -0
  159. qwak_sdk/commands/models/deployments/deploy/streaming/_logic/__init__.py +0 -0
  160. qwak_sdk/commands/models/deployments/deploy/streaming/_logic/deploy_executor.py +24 -0
  161. qwak_sdk/commands/models/deployments/deploy/streaming/_logic/serving_strategy_mapper.py +38 -0
  162. qwak_sdk/commands/models/deployments/deploy/streaming/ui.py +196 -0
  163. qwak_sdk/commands/models/deployments/undeploy/__init__.py +0 -0
  164. qwak_sdk/commands/models/deployments/undeploy/_logic/__init__.py +0 -0
  165. qwak_sdk/commands/models/deployments/undeploy/_logic/request_undeploy.py +176 -0
  166. qwak_sdk/commands/models/deployments/undeploy/_logic/variations.py +74 -0
  167. qwak_sdk/commands/models/deployments/undeploy/ui.py +78 -0
  168. qwak_sdk/commands/models/executions/__init__.py +0 -0
  169. qwak_sdk/commands/models/executions/cancel/__init__.py +0 -0
  170. qwak_sdk/commands/models/executions/cancel/_logic.py +9 -0
  171. qwak_sdk/commands/models/executions/cancel/ui.py +27 -0
  172. qwak_sdk/commands/models/executions/execution_commands_group.py +24 -0
  173. qwak_sdk/commands/models/executions/report/__init__.py +0 -0
  174. qwak_sdk/commands/models/executions/report/_logic.py +14 -0
  175. qwak_sdk/commands/models/executions/report/ui.py +43 -0
  176. qwak_sdk/commands/models/executions/start/__init__.py +0 -0
  177. qwak_sdk/commands/models/executions/start/_logic.py +16 -0
  178. qwak_sdk/commands/models/executions/start/ui.py +176 -0
  179. qwak_sdk/commands/models/executions/status/__init__.py +0 -0
  180. qwak_sdk/commands/models/executions/status/_logic.py +13 -0
  181. qwak_sdk/commands/models/executions/status/ui.py +27 -0
  182. qwak_sdk/commands/models/init/__init__.py +0 -0
  183. qwak_sdk/commands/models/init/_logic/__init__.py +0 -0
  184. qwak_sdk/commands/models/init/_logic/initialize_model_structure.py +40 -0
  185. qwak_sdk/commands/models/init/_logic/template/__init__.py +0 -0
  186. qwak_sdk/commands/models/init/_logic/template/churn/__init__.py +0 -0
  187. qwak_sdk/commands/models/init/_logic/template/churn/cookiecutter.json +3 -0
  188. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/__init__.py +0 -0
  189. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  190. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/conda.yml +10 -0
  191. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/data.csv +1001 -0
  192. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/model.py +95 -0
  193. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/__init__.py +0 -0
  194. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/it/__init__.py +0 -0
  195. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/it/test_churn.py +32 -0
  196. qwak_sdk/commands/models/init/_logic/template/credit_risk/__init__.py +0 -0
  197. qwak_sdk/commands/models/init/_logic/template/credit_risk/cookiecutter.json +3 -0
  198. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/__init__.py +0 -0
  199. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  200. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/conda.yml +10 -0
  201. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/data.csv +1001 -0
  202. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/model.py +108 -0
  203. qwak_sdk/commands/models/init/_logic/template/general/__init__.py +0 -0
  204. qwak_sdk/commands/models/init/_logic/template/general/cookiecutter.json +6 -0
  205. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/__init__.py +0 -0
  206. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/__init__.py +5 -0
  207. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/conda.yml +8 -0
  208. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/model.py +66 -0
  209. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.test_directory}}/__init__.py +0 -0
  210. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.test_directory}}/test_qwak_model.py +5 -0
  211. qwak_sdk/commands/models/init/_logic/template/titanic/__init__.py +0 -0
  212. qwak_sdk/commands/models/init/_logic/template/titanic/cookiecutter.json +3 -0
  213. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/__init__.py +0 -0
  214. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  215. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/conda.yml +10 -0
  216. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/model.py +98 -0
  217. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/__init__.py +0 -0
  218. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/it/__init__.py +0 -0
  219. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/it/test_titanic.py +24 -0
  220. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/__init__.py +0 -0
  221. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/cookiecutter.json +3 -0
  222. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/__init__.py +0 -0
  223. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  224. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/model.py +98 -0
  225. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/pyproject.toml +18 -0
  226. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/__init__.py +0 -0
  227. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it/__init__.py +0 -0
  228. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it/test_titanic.py +25 -0
  229. qwak_sdk/commands/models/init/ui.py +61 -0
  230. qwak_sdk/commands/models/list/__init__.py +0 -0
  231. qwak_sdk/commands/models/list/_logic.py +5 -0
  232. qwak_sdk/commands/models/list/ui.py +31 -0
  233. qwak_sdk/commands/models/models_command_group.py +36 -0
  234. qwak_sdk/commands/models/runtime/__init__.py +0 -0
  235. qwak_sdk/commands/models/runtime/feedback/__init__.py +0 -0
  236. qwak_sdk/commands/models/runtime/feedback/_logic.py +81 -0
  237. qwak_sdk/commands/models/runtime/feedback/ui.py +45 -0
  238. qwak_sdk/commands/models/runtime/logs/__init__.py +0 -0
  239. qwak_sdk/commands/models/runtime/logs/ui.py +63 -0
  240. qwak_sdk/commands/models/runtime/runtime_commands_group.py +21 -0
  241. qwak_sdk/commands/models/runtime/traffic_update/__init__.py +0 -0
  242. qwak_sdk/commands/models/runtime/traffic_update/_logic/__init__.py +0 -0
  243. qwak_sdk/commands/models/runtime/traffic_update/_logic/execute_runtime_update_traffic.py +54 -0
  244. qwak_sdk/commands/models/runtime/traffic_update/_logic/variations.py +84 -0
  245. qwak_sdk/commands/models/runtime/traffic_update/ui.py +37 -0
  246. qwak_sdk/commands/models/runtime/update/__init__.py +0 -0
  247. qwak_sdk/commands/models/runtime/update/_logic.py +9 -0
  248. qwak_sdk/commands/models/runtime/update/ui.py +15 -0
  249. qwak_sdk/commands/projects/__init__.py +0 -0
  250. qwak_sdk/commands/projects/create/__init__.py +0 -0
  251. qwak_sdk/commands/projects/create/_logic.py +6 -0
  252. qwak_sdk/commands/projects/create/ui.py +21 -0
  253. qwak_sdk/commands/projects/delete/__init__.py +0 -0
  254. qwak_sdk/commands/projects/delete/_logic.py +6 -0
  255. qwak_sdk/commands/projects/delete/ui.py +15 -0
  256. qwak_sdk/commands/projects/list/__init__.py +0 -0
  257. qwak_sdk/commands/projects/list/_logic.py +6 -0
  258. qwak_sdk/commands/projects/list/ui.py +36 -0
  259. qwak_sdk/commands/projects/projects_command_group.py +19 -0
  260. qwak_sdk/commands/secrets/__init__.py +0 -0
  261. qwak_sdk/commands/secrets/delete/__init__.py +0 -0
  262. qwak_sdk/commands/secrets/delete/_logic.py +5 -0
  263. qwak_sdk/commands/secrets/delete/ui.py +21 -0
  264. qwak_sdk/commands/secrets/get/__init__.py +0 -0
  265. qwak_sdk/commands/secrets/get/_logic.py +5 -0
  266. qwak_sdk/commands/secrets/get/ui.py +17 -0
  267. qwak_sdk/commands/secrets/secrets_commands_group.py +19 -0
  268. qwak_sdk/commands/secrets/set/__init__.py +0 -0
  269. qwak_sdk/commands/secrets/set/_logic.py +5 -0
  270. qwak_sdk/commands/secrets/set/ui.py +16 -0
  271. qwak_sdk/commands/ui_tools.py +18 -0
  272. qwak_sdk/common/__init__.py +0 -0
  273. qwak_sdk/common/run_config/__init__.py +22 -0
  274. qwak_sdk/common/run_config/base.py +101 -0
  275. qwak_sdk/common/run_config/utils.py +249 -0
  276. qwak_sdk/exceptions/__init__.py +11 -0
  277. qwak_sdk/exceptions/qwak_command_exception.py +2 -0
  278. qwak_sdk/exceptions/qwak_deploy_new_build_failed.py +5 -0
  279. qwak_sdk/exceptions/qwak_general_build_exception.py +13 -0
  280. qwak_sdk/exceptions/qwak_remote_build_failed.py +5 -0
  281. qwak_sdk/exceptions/qwak_resource_not_found.py +2 -0
  282. qwak_sdk/exceptions/qwak_suggestion_exception.py +27 -0
  283. qwak_sdk/inner/__init__.py +0 -0
  284. qwak_sdk/inner/file_registry.py +97 -0
  285. qwak_sdk/inner/tools/__init__.py +0 -0
  286. qwak_sdk/inner/tools/cli_tools.py +159 -0
  287. qwak_sdk/inner/tools/config_handler.py +18 -0
  288. qwak_sdk/inner/tools/logger/__init__.py +3 -0
  289. qwak_sdk/inner/tools/logger/logger.py +269 -0
  290. qwak_sdk/inner/tools/logger/logging.yml +79 -0
  291. qwak_sdk/inner/tools/tracking.py +47 -0
  292. qwak_sdk/main.py +9 -0
  293. qwak_sdk/tools/__init__.py +0 -0
  294. qwak_sdk/tools/colors.py +13 -0
  295. qwak_sdk/tools/files.py +9 -0
  296. qwak_sdk/tools/log_handling.py +146 -0
  297. qwak_sdk/tools/utils.py +46 -0
  298. qwak_sdk-0.2.21rc0.dist-info/METADATA +42 -0
  299. qwak_sdk-0.2.21rc0.dist-info/RECORD +302 -0
  300. {qwak_sdk-0.1.0.dist-info → qwak_sdk-0.2.21rc0.dist-info}/WHEEL +1 -2
  301. qwak_sdk-0.2.21rc0.dist-info/entry_points.txt +3 -0
  302. qwak_sdk-0.1.0.dist-info/METADATA +0 -19
  303. qwak_sdk-0.1.0.dist-info/RECORD +0 -5
  304. qwak_sdk-0.1.0.dist-info/top_level.txt +0 -1
  305. {qwak-sdk → qwak_sdk/commands}/__init__.py +0 -0
@@ -0,0 +1,30 @@
1
+ import logging
2
+
3
+ import click
4
+
5
+ from qwak_sdk.commands.automations.delete.ui import delete
6
+ from qwak_sdk.commands.automations.executions.executions_commands_group import (
7
+ executions_command_group,
8
+ )
9
+ from qwak_sdk.commands.automations.list.ui import list_automations
10
+ from qwak_sdk.commands.automations.register.ui import register
11
+
12
+ logger = logging.getLogger(__name__)
13
+ DELIMITER = "----------------------------------------"
14
+
15
+ AUTOMATION = "automation"
16
+
17
+
18
+ @click.group(
19
+ name="automations",
20
+ help="Commands for interacting with the Qwak Automations",
21
+ )
22
+ def automations_commands_group():
23
+ # Click commands group injection
24
+ pass
25
+
26
+
27
+ automations_commands_group.add_command(delete)
28
+ automations_commands_group.add_command(list_automations)
29
+ automations_commands_group.add_command(register)
30
+ automations_commands_group.add_command(executions_command_group)
File without changes
@@ -0,0 +1,6 @@
1
+ from qwak.clients.automation_management.client import AutomationsManagementClient
2
+
3
+
4
+ def delete_automation(automation_id: str):
5
+ client = AutomationsManagementClient()
6
+ return client.delete_automation(automation_id=automation_id)
@@ -0,0 +1,23 @@
1
+ import click
2
+
3
+ from qwak_sdk.commands.automations.delete._logic import delete_automation
4
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
5
+
6
+
7
+ @click.command(
8
+ "delete",
9
+ help="Delete an automation object",
10
+ cls=QwakCommand,
11
+ )
12
+ @click.option(
13
+ "--automation-id",
14
+ type=str,
15
+ metavar="ID",
16
+ help="The automation id to delete",
17
+ )
18
+ def delete(automation_id: str, **kwargs):
19
+ deleted = delete_automation(automation_id=automation_id)
20
+ if deleted:
21
+ print(f"Automation {automation_id} deleted successfully")
22
+ else:
23
+ print(f"Automation {automation_id} was not found")
File without changes
@@ -0,0 +1,14 @@
1
+ import click
2
+
3
+ from qwak_sdk.commands.automations.executions.list.ui import list_executions
4
+
5
+ DELIMITER = "----------------------------------------"
6
+
7
+
8
+ @click.group(name="executions", help=" automation executions")
9
+ def executions_command_group():
10
+ # Click commands group injection
11
+ pass
12
+
13
+
14
+ executions_command_group.add_command(list_executions)
@@ -0,0 +1,8 @@
1
+ from typing import List
2
+
3
+ from qwak.automations.automation_executions import AutomationExecution
4
+ from qwak.clients.automation_management.client import AutomationsManagementClient
5
+
6
+
7
+ def execute_list_executions(automation_id: str) -> List[AutomationExecution]:
8
+ return AutomationsManagementClient().list_executions(automation_id)
@@ -0,0 +1,25 @@
1
+ import click
2
+
3
+ from qwak_sdk.commands.automations.executions.list._logic import execute_list_executions
4
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
5
+
6
+ DELIMITER = "----------------------------------------"
7
+
8
+
9
+ @click.command(
10
+ "list",
11
+ help="List all executions for a specific automation",
12
+ cls=QwakCommand,
13
+ )
14
+ @click.option(
15
+ "--automation-id",
16
+ type=str,
17
+ metavar="ID",
18
+ required=True,
19
+ help="The automation id to list its executions",
20
+ )
21
+ def list_executions(automation_id: str, **kwargs):
22
+ executions_list = execute_list_executions(automation_id)
23
+ for execution in executions_list:
24
+ print(execution)
25
+ print(DELIMITER)
File without changes
@@ -0,0 +1,8 @@
1
+ from qwak.clients.automation_management.client import AutomationsManagementClient
2
+
3
+ DELIMITER = "----------------------------------------"
4
+
5
+
6
+ def execute_list_automations():
7
+ client = AutomationsManagementClient()
8
+ return client.list_automations()
@@ -0,0 +1,21 @@
1
+ from typing import List
2
+
3
+ import click
4
+ from qwak.automations import Automation
5
+
6
+ from qwak_sdk.commands.automations.list._logic import execute_list_automations
7
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
8
+
9
+ DELIMITER = "----------------------------------------"
10
+
11
+
12
+ @click.command(
13
+ "list",
14
+ help="List all automations",
15
+ cls=QwakCommand,
16
+ )
17
+ def list_automations(**kwargs):
18
+ automations_list: List[Automation] = execute_list_automations()
19
+ for automation in automations_list:
20
+ print(automation)
21
+ print(DELIMITER)
File without changes
@@ -0,0 +1,43 @@
1
+ from typing import List
2
+
3
+ from qwak.automations import Automation
4
+ from qwak.clients.automation_management.client import AutomationsManagementClient
5
+
6
+ from qwak_sdk.inner.file_registry import extract_class_objects
7
+ from qwak_sdk.inner.tools.cli_tools import ask_yesno
8
+ from qwak_sdk.tools.utils import qwak_spinner
9
+
10
+ DELIMITER = "----------------------------------------"
11
+
12
+
13
+ def register_automations(qwak_python_files: List[str], force: bool):
14
+ """
15
+ Register Automation Entities Objects
16
+
17
+ Args:
18
+ qwak_python_files: a list of python files containing qwak package imports
19
+ force: to force
20
+ """
21
+ with qwak_spinner(
22
+ begin_text="Finding Automations to register", print_callback=print
23
+ ):
24
+ qwak_automations: List[Automation] = extract_class_objects(
25
+ qwak_python_files, Automation
26
+ )
27
+ client = AutomationsManagementClient()
28
+ print(f"Found {len(qwak_automations)} Automations")
29
+ for automation, source_file_path in qwak_automations:
30
+ existing_automation = client.get_automation_by_name(automation.name)
31
+ if existing_automation:
32
+ if ask_yesno(
33
+ f"Update existing Automation '{automation.name}' from source file '{source_file_path}'?",
34
+ force,
35
+ ):
36
+ client.update_automation(existing_automation.id, automation.to_proto())
37
+ else:
38
+ if ask_yesno(
39
+ f"Create new Automation '{automation.name}' from source file '{source_file_path}'?",
40
+ force,
41
+ ):
42
+ client.create_automation(automation.to_proto())
43
+ print(DELIMITER)
@@ -0,0 +1,44 @@
1
+ import os
2
+ from pathlib import Path
3
+
4
+ import click
5
+
6
+ from qwak_sdk.commands.automations.register._logic import register_automations
7
+ from qwak_sdk.inner.file_registry import list_qwak_python_files
8
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
9
+ from qwak_sdk.tools.utils import qwak_spinner
10
+
11
+
12
+ @click.command(
13
+ "register",
14
+ help="Register all automations object under the given path. Registered "
15
+ "automations will be visible on the Qwak management platform after registration",
16
+ cls=QwakCommand,
17
+ )
18
+ @click.option(
19
+ "--path",
20
+ "-p",
21
+ type=click.Path(exists=True),
22
+ metavar="PATH",
23
+ help="Directory / module where qwak automations objects are stored",
24
+ )
25
+ @click.option(
26
+ "--force",
27
+ "-f",
28
+ default=False,
29
+ is_flag=True,
30
+ metavar="FLAG",
31
+ help="Force register all found qwak automations Store objects",
32
+ )
33
+ def register(path: Path, force: bool, **kwargs):
34
+ path = Path(path) if path else Path.cwd()
35
+ if path.is_file():
36
+ qwak_python_files = [(str(path), os.path.abspath(path))]
37
+ elif Path.is_dir(path):
38
+ with qwak_spinner(
39
+ begin_text="Recursively looking for python files in input dir",
40
+ print_callback=print,
41
+ ) as sp:
42
+ qwak_python_files = list_qwak_python_files(path, sp)
43
+
44
+ register_automations(qwak_python_files, force)
File without changes
File without changes
@@ -0,0 +1,52 @@
1
+ from qwak_sdk.tools.colors import Color
2
+
3
+ FEATURE_SET = "feature_set"
4
+ ENTITY = "entity"
5
+ DATA_SOURCE = "data_source"
6
+ All = "all"
7
+
8
+
9
+ def _inner_delete(name, object, registry_client):
10
+ if object == ENTITY:
11
+ feature_store_entity = registry_client.get_entity_by_name(name)
12
+ _delete_object(
13
+ lambda e: registry_client.delete_entity(
14
+ e.entity.entity_definition.entity_id
15
+ ),
16
+ feature_store_entity,
17
+ "entity",
18
+ name,
19
+ )
20
+ if object == FEATURE_SET:
21
+ feature_set = registry_client.get_feature_set_by_name(name)
22
+ if feature_set:
23
+ registry_client.delete_feature_set(
24
+ feature_set.feature_set.feature_set_definition.feature_set_id
25
+ )
26
+ print(
27
+ f"{Color.GREEN}Feature Set '{name}' deletion request is being handled by the service"
28
+ )
29
+ else:
30
+ print(
31
+ f"{Color.RED}Could not find specified feature set named '{name}' to delete{Color.END}"
32
+ )
33
+ if object == DATA_SOURCE:
34
+ feature_store_ds = registry_client.get_data_source_by_name(name)
35
+ _delete_object(
36
+ lambda e: registry_client.delete_data_source(
37
+ e.data_source.data_source_definition.data_source_id
38
+ ),
39
+ feature_store_ds,
40
+ "data source",
41
+ name,
42
+ )
43
+
44
+
45
+ def _delete_object(delete_func, _object, _type, name):
46
+ if _object:
47
+ delete_func(_object)
48
+ print(f"{Color.GREEN}Successfully deleted the {_type} named '{name}'")
49
+ else:
50
+ print(
51
+ f"{Color.RED}Could not find specified {_type} named '{name}' to delete{Color.END}"
52
+ )
@@ -0,0 +1,40 @@
1
+ import click
2
+ from qwak.clients.feature_store import FeatureRegistryClient
3
+
4
+ from qwak_sdk.commands.feature_store.delete._logic import (
5
+ DATA_SOURCE,
6
+ ENTITY,
7
+ FEATURE_SET,
8
+ _inner_delete,
9
+ )
10
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
11
+
12
+
13
+ @click.command(
14
+ "delete",
15
+ cls=QwakCommand,
16
+ help="Delete by name a feature store object - a feature set, entity, or data source",
17
+ )
18
+ @click.option(
19
+ "--feature-set",
20
+ "object",
21
+ flag_value=FEATURE_SET,
22
+ default=True,
23
+ help="Delete a feature set [default option]",
24
+ )
25
+ @click.option(
26
+ "--data-source", "object", flag_value=DATA_SOURCE, help="Delete a data source"
27
+ )
28
+ @click.option("--entity", "object", flag_value=ENTITY, help="Delete an entity")
29
+ @click.argument("name")
30
+ def delete_fs_object(object, name, **kwargs):
31
+ """
32
+ Delete Feature Store object
33
+
34
+ Args:
35
+ object: type of object to delete
36
+ name: name of the object to delete
37
+ """
38
+
39
+ registry_client = FeatureRegistryClient()
40
+ _inner_delete(name, object, registry_client)
@@ -0,0 +1,25 @@
1
+ import click
2
+
3
+ from qwak_sdk.commands.feature_store.delete.ui import delete_fs_object
4
+ from qwak_sdk.commands.feature_store.list.ui import list_feature_sets
5
+ from qwak_sdk.commands.feature_store.pause.ui import pause_feature_set
6
+ from qwak_sdk.commands.feature_store.register.ui import register_fs_objects
7
+ from qwak_sdk.commands.feature_store.resume.ui import resume_feature_set
8
+ from qwak_sdk.commands.feature_store.trigger.ui import trigger_feature_set
9
+
10
+
11
+ @click.group(
12
+ name="features",
13
+ help="Commands for interacting with the Qwak Feature Store",
14
+ )
15
+ def feature_store_commands_group():
16
+ # Click commands group injection
17
+ pass
18
+
19
+
20
+ feature_store_commands_group.add_command(delete_fs_object)
21
+ feature_store_commands_group.add_command(list_feature_sets)
22
+ feature_store_commands_group.add_command(pause_feature_set)
23
+ feature_store_commands_group.add_command(resume_feature_set)
24
+ feature_store_commands_group.add_command(trigger_feature_set)
25
+ feature_store_commands_group.add_command(register_fs_objects)
File without changes
@@ -0,0 +1,140 @@
1
+ from datetime import datetime
2
+ from typing import List, Tuple
3
+
4
+ import click
5
+ from _qwak_proto.qwak.feature_store.features.feature_set_pb2 import (
6
+ FeaturesetSchedulingState,
7
+ FeatureStatus,
8
+ )
9
+ from _qwak_proto.qwak.feature_store.features.feature_set_service_pb2 import (
10
+ GetFeaturesetSchedulingStateResponse,
11
+ ListFeatureSetsResponse,
12
+ )
13
+ from qwak.clients.feature_store import FeatureRegistryClient
14
+ from tabulate import tabulate
15
+
16
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
17
+
18
+
19
+ def _pts_to_datetime(pts) -> datetime:
20
+ return datetime.fromtimestamp(pts.seconds + pts.nanos / 1e9)
21
+
22
+
23
+ def _datetime_to_str(dt: datetime) -> str:
24
+ return dt.strftime("%Y-%b-%d %H:%M:%S")
25
+
26
+
27
+ def get_featureset_scheduling_state_as_str(
28
+ registry_client: FeatureRegistryClient,
29
+ featureset_name: str,
30
+ ) -> str:
31
+ try:
32
+ resp: GetFeaturesetSchedulingStateResponse = (
33
+ registry_client.get_feature_set_scheduling_state(
34
+ featureset_name=featureset_name
35
+ )
36
+ )
37
+ if resp.state == FeaturesetSchedulingState.SCHEDULING_STATE_PAUSED:
38
+ return "Paused"
39
+ elif resp.state == FeaturesetSchedulingState.SCHEDULING_STATE_ENABLED:
40
+ return "Enabled"
41
+ else:
42
+ return "Unknown"
43
+ except Exception:
44
+ return "Unknown"
45
+
46
+
47
+ def _list_feature_sets_verbose(
48
+ resp: ListFeatureSetsResponse, registry_client: FeatureRegistryClient
49
+ ) -> Tuple[List[str], List[str]]:
50
+ columns = [
51
+ "Name",
52
+ "Type",
53
+ "Status",
54
+ "Scheduling state",
55
+ "Owner",
56
+ "Description",
57
+ "Creation date",
58
+ "Last updated",
59
+ "Featureset id",
60
+ ]
61
+ data = []
62
+ for feature_set in resp.feature_families:
63
+ definition = feature_set.feature_set_definition
64
+ spec = definition.feature_set_spec
65
+ metadata = feature_set.metadata
66
+ if not (spec.feature_set_type.WhichOneof("set_type")):
67
+ feature_set_type = ""
68
+ else:
69
+ feature_set_type = (
70
+ spec.feature_set_type.WhichOneof("set_type")
71
+ .replace("_", " ")
72
+ .capitalize()
73
+ )
74
+
75
+ sched_state: str = "Enabled"
76
+ if spec.feature_set_type.WhichOneof("set_type") in {
77
+ "batch_feature_set",
78
+ "batch_feature_set_v1",
79
+ }:
80
+ sched_state = get_featureset_scheduling_state_as_str(
81
+ registry_client, spec.name
82
+ )
83
+
84
+ data.append(
85
+ [
86
+ spec.name,
87
+ feature_set_type,
88
+ FeatureStatus.Name(definition.status),
89
+ sched_state,
90
+ spec.metadata.owner,
91
+ spec.metadata.description,
92
+ _datetime_to_str(_pts_to_datetime(metadata.created_at)),
93
+ _datetime_to_str(_pts_to_datetime(metadata.last_modified_at)),
94
+ definition.feature_set_id,
95
+ ]
96
+ )
97
+
98
+ return (data, columns)
99
+
100
+
101
+ def _list_feature_sets(
102
+ resp: ListFeatureSetsResponse, registry_client: FeatureRegistryClient
103
+ ) -> Tuple[List[str], List[str]]:
104
+ desired_columns = [
105
+ "Name",
106
+ "Type",
107
+ "Status",
108
+ "Scheduling state",
109
+ "Last updated",
110
+ ]
111
+ verbose_data, verbose_columns = _list_feature_sets_verbose(resp, registry_client)
112
+ col_indexes = [verbose_columns.index(c) for c in desired_columns]
113
+
114
+ def project_lst(lst: List[str]) -> List[str]:
115
+ return [lst[idx] for idx in col_indexes]
116
+
117
+ data = [project_lst(d) for d in verbose_data]
118
+
119
+ return (data, desired_columns)
120
+
121
+
122
+ @click.command("list", cls=QwakCommand, help="List registered feature sets")
123
+ @click.option(
124
+ "--verbose",
125
+ "-v",
126
+ default=False,
127
+ is_flag=True,
128
+ metavar="FLAG",
129
+ help="Verbose output",
130
+ )
131
+ def list_feature_sets(verbose: bool, **kwargs):
132
+ registry_client = FeatureRegistryClient()
133
+ response = registry_client.list_feature_sets()
134
+
135
+ if verbose:
136
+ data, columns = _list_feature_sets_verbose(response, registry_client)
137
+ else:
138
+ data, columns = _list_feature_sets(response, registry_client)
139
+
140
+ print(tabulate(data, headers=columns))
File without changes
@@ -0,0 +1,18 @@
1
+ import click
2
+ from qwak.clients.feature_store import FeatureRegistryClient
3
+ from qwak.exceptions import QwakException
4
+
5
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
6
+ from qwak_sdk.tools.colors import Color
7
+
8
+
9
+ @click.command("pause", cls=QwakCommand, help="Pause a running feature set")
10
+ @click.argument("name")
11
+ def pause_feature_set(name, **kwargs):
12
+ try:
13
+ FeatureRegistryClient().pause_feature_set(feature_set_name=name)
14
+ except Exception as e:
15
+ print(f"{Color.RED} Failed to pause feature set {name} {Color.END}")
16
+ raise QwakException(f"Failed to pause feature set {name}") from e
17
+
18
+ print(f"{Color.GREEN}Successfully paused feature set {Color.YELLOW}{name}")
File without changes