qwak-sdk 0.5.102__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.
Files changed (328) hide show
  1. qwak_sdk/__init__.py +9 -0
  2. qwak_sdk/cli.py +79 -0
  3. qwak_sdk/commands/__init__.py +0 -0
  4. qwak_sdk/commands/_logic/__init__.py +0 -0
  5. qwak_sdk/commands/_logic/tools.py +6 -0
  6. qwak_sdk/commands/admin/__init__.py +0 -0
  7. qwak_sdk/commands/admin/admin_commands_group.py +17 -0
  8. qwak_sdk/commands/admin/apikeys/__init__.py +0 -0
  9. qwak_sdk/commands/admin/apikeys/api_keys_commands_group.py +17 -0
  10. qwak_sdk/commands/admin/apikeys/generate/__init__.py +0 -0
  11. qwak_sdk/commands/admin/apikeys/generate/_logic.py +21 -0
  12. qwak_sdk/commands/admin/apikeys/generate/ui.py +45 -0
  13. qwak_sdk/commands/admin/apikeys/revoke/__init__.py +0 -0
  14. qwak_sdk/commands/admin/apikeys/revoke/_logic.py +22 -0
  15. qwak_sdk/commands/admin/apikeys/revoke/ui.py +31 -0
  16. qwak_sdk/commands/alerts/__init__.py +0 -0
  17. qwak_sdk/commands/alerts/alerts_commnad_group.py +18 -0
  18. qwak_sdk/commands/alerts/delete/__init__.py +0 -0
  19. qwak_sdk/commands/alerts/delete/_logic.py +5 -0
  20. qwak_sdk/commands/alerts/delete/ui.py +10 -0
  21. qwak_sdk/commands/alerts/list/__init__.py +0 -0
  22. qwak_sdk/commands/alerts/list/_logic.py +23 -0
  23. qwak_sdk/commands/alerts/list/ui.py +17 -0
  24. qwak_sdk/commands/alerts/register/__init__.py +0 -0
  25. qwak_sdk/commands/alerts/register/_logic.py +72 -0
  26. qwak_sdk/commands/alerts/register/ui.py +30 -0
  27. qwak_sdk/commands/audience/__init__.py +0 -0
  28. qwak_sdk/commands/audience/_logic/__init__.py +0 -0
  29. qwak_sdk/commands/audience/_logic/config/__init__.py +0 -0
  30. qwak_sdk/commands/audience/_logic/config/config_base.py +15 -0
  31. qwak_sdk/commands/audience/_logic/config/parser.py +30 -0
  32. qwak_sdk/commands/audience/_logic/config/v1/__init__.py +0 -0
  33. qwak_sdk/commands/audience/_logic/config/v1/audience_config.py +26 -0
  34. qwak_sdk/commands/audience/_logic/config/v1/conditions_config.py +59 -0
  35. qwak_sdk/commands/audience/_logic/config/v1/config_v1.py +23 -0
  36. qwak_sdk/commands/audience/_logic/config/v1/route_config.py +15 -0
  37. qwak_sdk/commands/audience/_logic/config/v1/spec.py +9 -0
  38. qwak_sdk/commands/audience/audience_api_dump.py +86 -0
  39. qwak_sdk/commands/audience/audience_commands_group.py +30 -0
  40. qwak_sdk/commands/audience/create/__init__.py +0 -0
  41. qwak_sdk/commands/audience/create/logic.py +41 -0
  42. qwak_sdk/commands/audience/create/ui.py +21 -0
  43. qwak_sdk/commands/audience/delete/__init__.py +0 -0
  44. qwak_sdk/commands/audience/delete/logic.py +13 -0
  45. qwak_sdk/commands/audience/delete/ui.py +17 -0
  46. qwak_sdk/commands/audience/get/__init__.py +0 -0
  47. qwak_sdk/commands/audience/get/logic.py +14 -0
  48. qwak_sdk/commands/audience/get/ui.py +25 -0
  49. qwak_sdk/commands/audience/list/__init__.py +0 -0
  50. qwak_sdk/commands/audience/list/logic.py +16 -0
  51. qwak_sdk/commands/audience/list/ui.py +26 -0
  52. qwak_sdk/commands/audience/update/__init__.py +0 -0
  53. qwak_sdk/commands/audience/update/logic.py +37 -0
  54. qwak_sdk/commands/audience/update/ui.py +26 -0
  55. qwak_sdk/commands/auto_scalling/__init__.py +0 -0
  56. qwak_sdk/commands/auto_scalling/_logic/__init__.py +0 -0
  57. qwak_sdk/commands/auto_scalling/_logic/config/__init__.py +3 -0
  58. qwak_sdk/commands/auto_scalling/_logic/config/config.py +152 -0
  59. qwak_sdk/commands/auto_scalling/_logic/config/parser.py +21 -0
  60. qwak_sdk/commands/auto_scalling/attach/__init__.py +0 -0
  61. qwak_sdk/commands/auto_scalling/attach/_logic.py +43 -0
  62. qwak_sdk/commands/auto_scalling/attach/ui.py +21 -0
  63. qwak_sdk/commands/auto_scalling/autoscaling_commands_group.py +15 -0
  64. qwak_sdk/commands/automations/__init__.py +0 -0
  65. qwak_sdk/commands/automations/automations_commands_group.py +30 -0
  66. qwak_sdk/commands/automations/delete/__init__.py +0 -0
  67. qwak_sdk/commands/automations/delete/_logic.py +6 -0
  68. qwak_sdk/commands/automations/delete/ui.py +23 -0
  69. qwak_sdk/commands/automations/executions/__init__.py +0 -0
  70. qwak_sdk/commands/automations/executions/executions_commands_group.py +14 -0
  71. qwak_sdk/commands/automations/executions/list/__init__.py +0 -0
  72. qwak_sdk/commands/automations/executions/list/_logic.py +8 -0
  73. qwak_sdk/commands/automations/executions/list/ui.py +25 -0
  74. qwak_sdk/commands/automations/list/__init__.py +0 -0
  75. qwak_sdk/commands/automations/list/_logic.py +36 -0
  76. qwak_sdk/commands/automations/list/ui.py +21 -0
  77. qwak_sdk/commands/automations/register/__init__.py +0 -0
  78. qwak_sdk/commands/automations/register/_logic.py +43 -0
  79. qwak_sdk/commands/automations/register/ui.py +44 -0
  80. qwak_sdk/commands/feature_store/__init__.py +0 -0
  81. qwak_sdk/commands/feature_store/backfill/__init__.py +0 -0
  82. qwak_sdk/commands/feature_store/backfill/_logic.py +140 -0
  83. qwak_sdk/commands/feature_store/backfill/streaming/__init__.py +0 -0
  84. qwak_sdk/commands/feature_store/backfill/streaming/_logic.py +50 -0
  85. qwak_sdk/commands/feature_store/backfill/streaming/ui.py +67 -0
  86. qwak_sdk/commands/feature_store/backfill/ui.py +146 -0
  87. qwak_sdk/commands/feature_store/delete/__init__.py +0 -0
  88. qwak_sdk/commands/feature_store/delete/_logic.py +104 -0
  89. qwak_sdk/commands/feature_store/delete/ui.py +40 -0
  90. qwak_sdk/commands/feature_store/execution/__init__.py +0 -0
  91. qwak_sdk/commands/feature_store/execution/ui.py +19 -0
  92. qwak_sdk/commands/feature_store/feature_store_command_group.py +29 -0
  93. qwak_sdk/commands/feature_store/list/__init__.py +0 -0
  94. qwak_sdk/commands/feature_store/list/ui.py +140 -0
  95. qwak_sdk/commands/feature_store/pause/__init__.py +0 -0
  96. qwak_sdk/commands/feature_store/pause/ui.py +18 -0
  97. qwak_sdk/commands/feature_store/register/__init__.py +0 -0
  98. qwak_sdk/commands/feature_store/register/_logic.py +367 -0
  99. qwak_sdk/commands/feature_store/register/ui.py +111 -0
  100. qwak_sdk/commands/feature_store/resume/__init__.py +0 -0
  101. qwak_sdk/commands/feature_store/resume/ui.py +18 -0
  102. qwak_sdk/commands/feature_store/trigger/__init__.py +0 -0
  103. qwak_sdk/commands/feature_store/trigger/ui.py +39 -0
  104. qwak_sdk/commands/models/__init__.py +0 -0
  105. qwak_sdk/commands/models/build/__init__.py +0 -0
  106. qwak_sdk/commands/models/build/_logic/__init__.py +0 -0
  107. qwak_sdk/commands/models/build/_logic/build_steps.py +42 -0
  108. qwak_sdk/commands/models/build/_logic/client_logs/__init__.py +0 -0
  109. qwak_sdk/commands/models/build/_logic/client_logs/cli_phase_run_handler.py +123 -0
  110. qwak_sdk/commands/models/build/_logic/client_logs/cli_trigger_build_logger.py +19 -0
  111. qwak_sdk/commands/models/build/_logic/client_logs/logger.py +88 -0
  112. qwak_sdk/commands/models/build/_logic/client_logs/messages.py +36 -0
  113. qwak_sdk/commands/models/build/_logic/client_logs/spinner.py +14 -0
  114. qwak_sdk/commands/models/build/_logic/client_logs/trigger_build_logger.py +54 -0
  115. qwak_sdk/commands/models/build/_logic/client_logs/utils.py +12 -0
  116. qwak_sdk/commands/models/build/_logic/phase/__init__.py +0 -0
  117. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/__init__.py +20 -0
  118. qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/get_sdk_version_step.py +14 -0
  119. qwak_sdk/commands/models/build/_logic/phase/b_remote_register_qwak_build/__init__.py +16 -0
  120. qwak_sdk/commands/models/build/_logic/phase/c_deploy/__init__.py +6 -0
  121. qwak_sdk/commands/models/build/_logic/phase/c_deploy/build_polling_status.py +55 -0
  122. qwak_sdk/commands/models/build/_logic/phase/c_deploy/deploy_build.py +61 -0
  123. qwak_sdk/commands/models/build/_logic/util/__init__.py +0 -0
  124. qwak_sdk/commands/models/build/_logic/util/protobuf_factory.py +45 -0
  125. qwak_sdk/commands/models/build/_logic/util/step_decorator.py +60 -0
  126. qwak_sdk/commands/models/build/_logic/util/text.py +9 -0
  127. qwak_sdk/commands/models/build/_logic/wait_until_finished.py +27 -0
  128. qwak_sdk/commands/models/build/ui.py +337 -0
  129. qwak_sdk/commands/models/builds/__init__.py +0 -0
  130. qwak_sdk/commands/models/builds/builds_commands_group.py +16 -0
  131. qwak_sdk/commands/models/builds/cancel/__init__.py +0 -0
  132. qwak_sdk/commands/models/builds/cancel/_logic.py +5 -0
  133. qwak_sdk/commands/models/builds/cancel/ui.py +15 -0
  134. qwak_sdk/commands/models/builds/logs/__init__.py +0 -0
  135. qwak_sdk/commands/models/builds/logs/ui.py +35 -0
  136. qwak_sdk/commands/models/builds/status/__init__.py +0 -0
  137. qwak_sdk/commands/models/builds/status/_logic.py +6 -0
  138. qwak_sdk/commands/models/builds/status/ui.py +39 -0
  139. qwak_sdk/commands/models/create/__init__.py +0 -0
  140. qwak_sdk/commands/models/create/_logic.py +36 -0
  141. qwak_sdk/commands/models/create/ui.py +43 -0
  142. qwak_sdk/commands/models/delete/__init__.py +0 -0
  143. qwak_sdk/commands/models/delete/_logic.py +5 -0
  144. qwak_sdk/commands/models/delete/ui.py +25 -0
  145. qwak_sdk/commands/models/deployments/__init__.py +0 -0
  146. qwak_sdk/commands/models/deployments/deploy/__init__.py +0 -0
  147. qwak_sdk/commands/models/deployments/deploy/_logic/__init__.py +0 -0
  148. qwak_sdk/commands/models/deployments/deploy/_logic/advance_deployment_options_handler.py +31 -0
  149. qwak_sdk/commands/models/deployments/deploy/_logic/base_deploy_executor.py +68 -0
  150. qwak_sdk/commands/models/deployments/deploy/_logic/deploy_config.py +261 -0
  151. qwak_sdk/commands/models/deployments/deploy/_logic/deployment.py +405 -0
  152. qwak_sdk/commands/models/deployments/deploy/_logic/deployment_message_helpers.py +114 -0
  153. qwak_sdk/commands/models/deployments/deploy/_logic/deployment_response_handler.py +156 -0
  154. qwak_sdk/commands/models/deployments/deploy/_logic/deployment_size_mapper.py +96 -0
  155. qwak_sdk/commands/models/deployments/deploy/_logic/get_latest_successful_build.py +28 -0
  156. qwak_sdk/commands/models/deployments/deploy/_logic/local_deployment.py +193 -0
  157. qwak_sdk/commands/models/deployments/deploy/batch/__init__.py +0 -0
  158. qwak_sdk/commands/models/deployments/deploy/batch/_logic/__init__.py +0 -0
  159. qwak_sdk/commands/models/deployments/deploy/batch/_logic/advanced_deployment_mapper.py +15 -0
  160. qwak_sdk/commands/models/deployments/deploy/batch/_logic/deploy_executor.py +24 -0
  161. qwak_sdk/commands/models/deployments/deploy/batch/ui.py +126 -0
  162. qwak_sdk/commands/models/deployments/deploy/deploy_commands_group.py +19 -0
  163. qwak_sdk/commands/models/deployments/deploy/realtime/__init__.py +0 -0
  164. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/__init__.py +0 -0
  165. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/advanced_deployment_mapper.py +21 -0
  166. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/deploy_executor.py +24 -0
  167. qwak_sdk/commands/models/deployments/deploy/realtime/_logic/serving_strategy_mapper.py +75 -0
  168. qwak_sdk/commands/models/deployments/deploy/realtime/ui.py +209 -0
  169. qwak_sdk/commands/models/deployments/deploy/streaming/__init__.py +0 -0
  170. qwak_sdk/commands/models/deployments/deploy/streaming/_logic/__init__.py +0 -0
  171. qwak_sdk/commands/models/deployments/deploy/streaming/_logic/deploy_executor.py +24 -0
  172. qwak_sdk/commands/models/deployments/deploy/streaming/_logic/serving_strategy_mapper.py +38 -0
  173. qwak_sdk/commands/models/deployments/deploy/streaming/ui.py +213 -0
  174. qwak_sdk/commands/models/deployments/undeploy/__init__.py +0 -0
  175. qwak_sdk/commands/models/deployments/undeploy/_logic/__init__.py +0 -0
  176. qwak_sdk/commands/models/deployments/undeploy/_logic/request_undeploy.py +249 -0
  177. qwak_sdk/commands/models/deployments/undeploy/ui.py +72 -0
  178. qwak_sdk/commands/models/describe/__init__.py +0 -0
  179. qwak_sdk/commands/models/describe/_logic.py +169 -0
  180. qwak_sdk/commands/models/describe/ui.py +35 -0
  181. qwak_sdk/commands/models/executions/__init__.py +0 -0
  182. qwak_sdk/commands/models/executions/cancel/__init__.py +0 -0
  183. qwak_sdk/commands/models/executions/cancel/_logic.py +9 -0
  184. qwak_sdk/commands/models/executions/cancel/ui.py +27 -0
  185. qwak_sdk/commands/models/executions/execution_commands_group.py +24 -0
  186. qwak_sdk/commands/models/executions/report/__init__.py +0 -0
  187. qwak_sdk/commands/models/executions/report/_logic.py +14 -0
  188. qwak_sdk/commands/models/executions/report/ui.py +43 -0
  189. qwak_sdk/commands/models/executions/start/__init__.py +0 -0
  190. qwak_sdk/commands/models/executions/start/_logic.py +81 -0
  191. qwak_sdk/commands/models/executions/start/ui.py +208 -0
  192. qwak_sdk/commands/models/executions/status/__init__.py +0 -0
  193. qwak_sdk/commands/models/executions/status/_logic.py +13 -0
  194. qwak_sdk/commands/models/executions/status/ui.py +27 -0
  195. qwak_sdk/commands/models/init/__init__.py +0 -0
  196. qwak_sdk/commands/models/init/_logic/__init__.py +0 -0
  197. qwak_sdk/commands/models/init/_logic/initialize_model_structure.py +40 -0
  198. qwak_sdk/commands/models/init/_logic/template/__init__.py +0 -0
  199. qwak_sdk/commands/models/init/_logic/template/churn/__init__.py +0 -0
  200. qwak_sdk/commands/models/init/_logic/template/churn/cookiecutter.json +3 -0
  201. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/__init__.py +0 -0
  202. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  203. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/conda.yml +10 -0
  204. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/data.csv +1001 -0
  205. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/model.py +95 -0
  206. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/__init__.py +0 -0
  207. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/it/__init__.py +0 -0
  208. qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/it/test_churn.py +32 -0
  209. qwak_sdk/commands/models/init/_logic/template/credit_risk/__init__.py +0 -0
  210. qwak_sdk/commands/models/init/_logic/template/credit_risk/cookiecutter.json +3 -0
  211. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/__init__.py +0 -0
  212. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  213. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/conda.yml +11 -0
  214. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/data.csv +1001 -0
  215. qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/model.py +108 -0
  216. qwak_sdk/commands/models/init/_logic/template/general/__init__.py +0 -0
  217. qwak_sdk/commands/models/init/_logic/template/general/cookiecutter.json +6 -0
  218. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/__init__.py +0 -0
  219. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/__init__.py +5 -0
  220. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/conda.yml +8 -0
  221. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/model.py +66 -0
  222. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.test_directory}}/__init__.py +0 -0
  223. qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.test_directory}}/test_qwak_model.py +5 -0
  224. qwak_sdk/commands/models/init/_logic/template/titanic/__init__.py +0 -0
  225. qwak_sdk/commands/models/init/_logic/template/titanic/cookiecutter.json +3 -0
  226. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/__init__.py +0 -0
  227. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  228. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/conda.yml +11 -0
  229. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/model.py +98 -0
  230. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/__init__.py +0 -0
  231. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/it/__init__.py +0 -0
  232. qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/it/test_titanic.py +24 -0
  233. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/__init__.py +0 -0
  234. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/cookiecutter.json +3 -0
  235. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/__init__.py +0 -0
  236. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/__init__.py +5 -0
  237. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/model.py +98 -0
  238. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/pyproject.toml +20 -0
  239. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/__init__.py +0 -0
  240. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it/__init__.py +0 -0
  241. qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it/test_titanic.py +25 -0
  242. qwak_sdk/commands/models/init/ui.py +61 -0
  243. qwak_sdk/commands/models/list/__init__.py +0 -0
  244. qwak_sdk/commands/models/list/_logic.py +5 -0
  245. qwak_sdk/commands/models/list/ui.py +40 -0
  246. qwak_sdk/commands/models/list_models/__init__.py +0 -0
  247. qwak_sdk/commands/models/list_models/_logic.py +5 -0
  248. qwak_sdk/commands/models/list_models/ui.py +60 -0
  249. qwak_sdk/commands/models/metadata/__init__.py +0 -0
  250. qwak_sdk/commands/models/metadata/_logic.py +5 -0
  251. qwak_sdk/commands/models/metadata/ui.py +60 -0
  252. qwak_sdk/commands/models/models_command_group.py +44 -0
  253. qwak_sdk/commands/models/runtime/__init__.py +0 -0
  254. qwak_sdk/commands/models/runtime/logs/__init__.py +0 -0
  255. qwak_sdk/commands/models/runtime/logs/ui.py +63 -0
  256. qwak_sdk/commands/models/runtime/runtime_commands_group.py +17 -0
  257. qwak_sdk/commands/models/runtime/update/__init__.py +0 -0
  258. qwak_sdk/commands/models/runtime/update/_logic.py +9 -0
  259. qwak_sdk/commands/models/runtime/update/ui.py +15 -0
  260. qwak_sdk/commands/projects/__init__.py +0 -0
  261. qwak_sdk/commands/projects/create/__init__.py +0 -0
  262. qwak_sdk/commands/projects/create/_logic.py +9 -0
  263. qwak_sdk/commands/projects/create/ui.py +68 -0
  264. qwak_sdk/commands/projects/delete/__init__.py +0 -0
  265. qwak_sdk/commands/projects/delete/_logic.py +6 -0
  266. qwak_sdk/commands/projects/delete/ui.py +24 -0
  267. qwak_sdk/commands/projects/list/__init__.py +0 -0
  268. qwak_sdk/commands/projects/list/_logic.py +6 -0
  269. qwak_sdk/commands/projects/list/ui.py +45 -0
  270. qwak_sdk/commands/projects/projects_command_group.py +19 -0
  271. qwak_sdk/commands/secrets/__init__.py +0 -0
  272. qwak_sdk/commands/secrets/delete/__init__.py +0 -0
  273. qwak_sdk/commands/secrets/delete/_logic.py +5 -0
  274. qwak_sdk/commands/secrets/delete/ui.py +21 -0
  275. qwak_sdk/commands/secrets/get/__init__.py +0 -0
  276. qwak_sdk/commands/secrets/get/_logic.py +5 -0
  277. qwak_sdk/commands/secrets/get/ui.py +17 -0
  278. qwak_sdk/commands/secrets/secrets_commands_group.py +19 -0
  279. qwak_sdk/commands/secrets/set/__init__.py +0 -0
  280. qwak_sdk/commands/secrets/set/_logic.py +5 -0
  281. qwak_sdk/commands/secrets/set/ui.py +16 -0
  282. qwak_sdk/commands/ui_tools.py +18 -0
  283. qwak_sdk/commands/workspaces/__init__.py +0 -0
  284. qwak_sdk/commands/workspaces/_logic/__init__.py +0 -0
  285. qwak_sdk/commands/workspaces/_logic/tools.py +44 -0
  286. qwak_sdk/commands/workspaces/_logic/workspace_validations.py +41 -0
  287. qwak_sdk/commands/workspaces/config/__init__.py +0 -0
  288. qwak_sdk/commands/workspaces/config/workspace_config.py +35 -0
  289. qwak_sdk/commands/workspaces/create/__init__.py +0 -0
  290. qwak_sdk/commands/workspaces/create/_logic.py +54 -0
  291. qwak_sdk/commands/workspaces/create/ui.py +48 -0
  292. qwak_sdk/commands/workspaces/delete/__init__.py +0 -0
  293. qwak_sdk/commands/workspaces/delete/_logic.py +30 -0
  294. qwak_sdk/commands/workspaces/delete/ui.py +23 -0
  295. qwak_sdk/commands/workspaces/start/__init__.py +0 -0
  296. qwak_sdk/commands/workspaces/start/_logic.py +30 -0
  297. qwak_sdk/commands/workspaces/start/ui.py +23 -0
  298. qwak_sdk/commands/workspaces/stop/__init__.py +0 -0
  299. qwak_sdk/commands/workspaces/stop/_logic.py +30 -0
  300. qwak_sdk/commands/workspaces/stop/ui.py +23 -0
  301. qwak_sdk/commands/workspaces/update/__init__.py +0 -0
  302. qwak_sdk/commands/workspaces/update/_logic.py +82 -0
  303. qwak_sdk/commands/workspaces/update/ui.py +57 -0
  304. qwak_sdk/commands/workspaces/workspaces_commands_group.py +23 -0
  305. qwak_sdk/exceptions/__init__.py +11 -0
  306. qwak_sdk/exceptions/qwak_command_exception.py +2 -0
  307. qwak_sdk/exceptions/qwak_deploy_new_build_failed.py +5 -0
  308. qwak_sdk/exceptions/qwak_resource_not_found.py +2 -0
  309. qwak_sdk/inner/__init__.py +0 -0
  310. qwak_sdk/inner/file_registry.py +98 -0
  311. qwak_sdk/inner/tools/__init__.py +0 -0
  312. qwak_sdk/inner/tools/cli_tools.py +220 -0
  313. qwak_sdk/inner/tools/config_handler.py +27 -0
  314. qwak_sdk/inner/tools/dataclasses_utils.py +21 -0
  315. qwak_sdk/inner/tools/logger/__init__.py +3 -0
  316. qwak_sdk/inner/tools/logger/logger.py +269 -0
  317. qwak_sdk/inner/tools/logger/logging.yml +79 -0
  318. qwak_sdk/inner/tools/tracking.py +47 -0
  319. qwak_sdk/main.py +9 -0
  320. qwak_sdk/tools/__init__.py +0 -0
  321. qwak_sdk/tools/colors.py +13 -0
  322. qwak_sdk/tools/files.py +63 -0
  323. qwak_sdk/tools/log_handling.py +159 -0
  324. qwak_sdk/tools/utils.py +42 -0
  325. qwak_sdk-0.5.102.dist-info/METADATA +51 -0
  326. qwak_sdk-0.5.102.dist-info/RECORD +328 -0
  327. qwak_sdk-0.5.102.dist-info/WHEEL +4 -0
  328. qwak_sdk-0.5.102.dist-info/entry_points.txt +3 -0
File without changes
@@ -0,0 +1,104 @@
1
+ from _qwak_proto.qwak.feature_store.entities.entity_pb2 import Entity, EntityDefinition
2
+ from _qwak_proto.qwak.feature_store.entities.entity_service_pb2 import (
3
+ GetEntityByNameResponse,
4
+ )
5
+ from _qwak_proto.qwak.feature_store.features.feature_set_pb2 import FeatureSet
6
+ from _qwak_proto.qwak.feature_store.features.feature_set_service_pb2 import (
7
+ GetFeatureSetByNameResponse,
8
+ )
9
+ from qwak.clients.feature_store import FeatureRegistryClient
10
+ from qwak.exceptions import QwakException
11
+ from qwak.feature_store._common.feature_set_utils import _INTERNAL_KEY_PREFIX
12
+
13
+ from qwak_sdk.tools.colors import Color
14
+
15
+ FEATURE_SET = "feature_set"
16
+ ENTITY = "entity"
17
+ DATA_SOURCE = "data_source"
18
+ All = "all"
19
+
20
+
21
+ def _handle_featureset_key_deletion(
22
+ entity_definition: EntityDefinition, registry_client: FeatureRegistryClient
23
+ ):
24
+ # If entity name start with the fs name
25
+ if entity_definition.entity_spec.name.startswith(_INTERNAL_KEY_PREFIX):
26
+ get_entity_resp: GetEntityByNameResponse = registry_client.get_entity_by_name(
27
+ entity_definition.entity_spec.name
28
+ )
29
+
30
+ # the entity exists
31
+ if get_entity_resp:
32
+ entity_id: str = entity_definition.entity_id
33
+ registered_entity: Entity = get_entity_resp.entity
34
+
35
+ # it has a no registered fs for it
36
+ if (
37
+ not registered_entity.feature_sets
38
+ or len(registered_entity.feature_sets) == 0
39
+ ):
40
+ try:
41
+ # delete since it's a key and not an entity
42
+ registry_client.delete_entity(entity_id=entity_id)
43
+ # we fail this silently
44
+ except QwakException:
45
+ pass
46
+
47
+
48
+ def _inner_delete(name, object, registry_client):
49
+ if object == ENTITY:
50
+ feature_store_entity = registry_client.get_entity_by_name(name)
51
+ _delete_object(
52
+ lambda e: registry_client.delete_entity(
53
+ e.entity.entity_definition.entity_id
54
+ ),
55
+ feature_store_entity,
56
+ "entity",
57
+ name,
58
+ )
59
+ if object == FEATURE_SET:
60
+ feature_set_response: GetFeatureSetByNameResponse = (
61
+ registry_client.get_feature_set_by_name(name)
62
+ )
63
+ if feature_set_response:
64
+ feature_set: FeatureSet = feature_set_response.feature_set
65
+
66
+ # Delete fs regardless
67
+ registry_client.delete_feature_set(
68
+ feature_set.feature_set_definition.feature_set_id
69
+ )
70
+ print(
71
+ f"{Color.GREEN}Feature Set '{name}' deletion request is being handled by the service"
72
+ )
73
+
74
+ entity: EntityDefinition = (
75
+ feature_set.feature_set_definition.feature_set_spec.entity
76
+ )
77
+
78
+ _handle_featureset_key_deletion(
79
+ entity_definition=entity, registry_client=registry_client
80
+ )
81
+ else:
82
+ print(
83
+ f"{Color.RED}Could not find specified feature set named '{name}' to delete{Color.END}"
84
+ )
85
+ if object == DATA_SOURCE:
86
+ feature_store_ds = registry_client.get_data_source_by_name(name)
87
+ _delete_object(
88
+ lambda e: registry_client.delete_data_source(
89
+ e.data_source.data_source_definition.data_source_id
90
+ ),
91
+ feature_store_ds,
92
+ "data source",
93
+ name,
94
+ )
95
+
96
+
97
+ def _delete_object(delete_func, _object, _type, name):
98
+ if _object:
99
+ delete_func(_object)
100
+ print(f"{Color.GREEN}Successfully deleted the {_type} named '{name}'")
101
+ else:
102
+ print(
103
+ f"{Color.RED}Could not find specified {_type} named '{name}' to delete{Color.END}"
104
+ )
@@ -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)
File without changes
@@ -0,0 +1,19 @@
1
+ import click
2
+ from qwak.feature_store.execution.execution_query import ExecutionQuery
3
+
4
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
5
+
6
+
7
+ @click.command(
8
+ "execution-status",
9
+ cls=QwakCommand,
10
+ help="Retrieve the current status of an execution (backfill/batch job ingestion)",
11
+ )
12
+ @click.option(
13
+ "--execution-id",
14
+ type=str,
15
+ required=True,
16
+ help="The id of the execution to retrieve the status for.",
17
+ )
18
+ def execution_status(execution_id: str, **kwargs):
19
+ print(ExecutionQuery.get_execution_status_message(execution_id=execution_id))
@@ -0,0 +1,29 @@
1
+ import click
2
+
3
+ from qwak_sdk.commands.feature_store.backfill.ui import backfill
4
+ from qwak_sdk.commands.feature_store.delete.ui import delete_fs_object
5
+ from qwak_sdk.commands.feature_store.execution.ui import execution_status
6
+ from qwak_sdk.commands.feature_store.list.ui import list_feature_sets
7
+ from qwak_sdk.commands.feature_store.pause.ui import pause_feature_set
8
+ from qwak_sdk.commands.feature_store.register.ui import register_fs_objects
9
+ from qwak_sdk.commands.feature_store.resume.ui import resume_feature_set
10
+ from qwak_sdk.commands.feature_store.trigger.ui import trigger_feature_set
11
+
12
+
13
+ @click.group(
14
+ name="features",
15
+ help="Commands for interacting with the Qwak Feature Store",
16
+ )
17
+ def feature_store_commands_group():
18
+ # Click commands group injection
19
+ pass
20
+
21
+
22
+ feature_store_commands_group.add_command(delete_fs_object)
23
+ feature_store_commands_group.add_command(list_feature_sets)
24
+ feature_store_commands_group.add_command(pause_feature_set)
25
+ feature_store_commands_group.add_command(resume_feature_set)
26
+ feature_store_commands_group.add_command(trigger_feature_set)
27
+ feature_store_commands_group.add_command(register_fs_objects)
28
+ feature_store_commands_group.add_command(backfill)
29
+ feature_store_commands_group.add_command(execution_status)
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