qwak-sdk 0.1.0__py3-none-any.whl → 0.2.20rc0__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.20rc0.dist-info/METADATA +42 -0
  299. qwak_sdk-0.2.20rc0.dist-info/RECORD +302 -0
  300. {qwak_sdk-0.1.0.dist-info → qwak_sdk-0.2.20rc0.dist-info}/WHEEL +1 -2
  301. qwak_sdk-0.2.20rc0.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,105 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Dict, List
4
+
5
+ from _qwak_proto.qwak.auto_scaling.v1.auto_scaling_pb2 import AutoScalingConfig
6
+ from _qwak_proto.qwak.deployment.deployment_pb2 import (
7
+ RealTimeConfig,
8
+ ServingStrategy,
9
+ TrafficConfig,
10
+ Variation,
11
+ )
12
+ from _qwak_proto.qwak.deployment.deployment_service_pb2 import (
13
+ GetDeploymentStatusResponse,
14
+ )
15
+ from _qwak_proto.qwak.ecosystem.v0.ecosystem_pb2 import UserContextEnvironmentDetails
16
+ from qwak.exceptions import QwakException
17
+
18
+ from qwak_sdk.commands.audience._logic.config.v1.audience_config import AudienceConfig
19
+ from qwak_sdk.commands.models._logic.variations import (
20
+ create_variation_from_variation_config,
21
+ )
22
+ from qwak_sdk.commands.models.deployments.deploy._logic.deploy_config import (
23
+ DeployConfig,
24
+ )
25
+ from qwak_sdk.commands.models.deployments.deploy._logic.variations import (
26
+ get_variations_for_deploy,
27
+ )
28
+
29
+
30
+ def create_realtime_serving_strategy(
31
+ auto_scaling: AutoScalingConfig,
32
+ audiences: List[AudienceConfig],
33
+ fallback_variation: str,
34
+ variation_name: str,
35
+ variations: List[Variation],
36
+ ) -> ServingStrategy:
37
+ return ServingStrategy(
38
+ realtime_config=(
39
+ RealTimeConfig(
40
+ auto_scaling_config=auto_scaling,
41
+ traffic_config=TrafficConfig(
42
+ selected_variation_name=variation_name,
43
+ variations=variations,
44
+ audience_routes_entries=[
45
+ audience.to_audience_route_entry(index)
46
+ for index, audience in enumerate(audiences)
47
+ ],
48
+ fallback_variation=fallback_variation,
49
+ ),
50
+ )
51
+ )
52
+ )
53
+
54
+
55
+ def create_realtime_serving_strategy_from_deploy_config(
56
+ deploy_config: DeployConfig,
57
+ model_traffic: GetDeploymentStatusResponse,
58
+ environment_name_to_config: Dict[str, UserContextEnvironmentDetails],
59
+ ) -> Dict[str, ServingStrategy]:
60
+ serving_strategies = {}
61
+ errors = []
62
+ variation_name = deploy_config.realtime.variation_name or "default"
63
+ fallback_variation = deploy_config.realtime.fallback_variation
64
+ auto_scaling = (
65
+ deploy_config.auto_scaling.to_autoscaling_api()
66
+ if deploy_config.auto_scaling
67
+ else None
68
+ )
69
+ for env_name, env_config in environment_name_to_config.items():
70
+ env_variations_response = model_traffic.environment_to_model_traffic.get(
71
+ env_config.id
72
+ )
73
+ existing_variation = (
74
+ env_variations_response.variations if env_variations_response else []
75
+ )
76
+ try:
77
+ variations = []
78
+ if not deploy_config.realtime.audiences:
79
+ variations = get_variations_for_deploy(
80
+ variation_name=variation_name,
81
+ existing_variations=existing_variation,
82
+ requested_variations=list(
83
+ map(
84
+ create_variation_from_variation_config,
85
+ deploy_config.realtime.variations,
86
+ )
87
+ ),
88
+ environment_name=env_name,
89
+ )
90
+
91
+ serving_strategies[env_config.id] = create_realtime_serving_strategy(
92
+ auto_scaling,
93
+ deploy_config.realtime.audiences,
94
+ fallback_variation,
95
+ variation_name,
96
+ variations,
97
+ )
98
+
99
+ except QwakException as e:
100
+ errors.append(e.message)
101
+
102
+ if errors:
103
+ raise QwakException("\n".join(errors))
104
+
105
+ return serving_strategies
@@ -0,0 +1,179 @@
1
+ from typing import Optional
2
+
3
+ import click
4
+ from qwak.inner.const import QwakConstants
5
+
6
+ from qwak_sdk.commands.models.deployments.deploy._logic.deploy_config import (
7
+ DeployConfig,
8
+ PurchaseOption,
9
+ )
10
+ from qwak_sdk.commands.models.deployments.deploy._logic.deployment_response_handler import (
11
+ client_deployment,
12
+ )
13
+ from qwak_sdk.commands.models.deployments.deploy.realtime._logic.deploy_executor import (
14
+ RealtimeDeployExecutor,
15
+ )
16
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
17
+ from qwak_sdk.inner.tools.config_handler import config_handler
18
+ from qwak_sdk.inner.tools.logger.logger import (
19
+ get_qwak_logger,
20
+ set_qwak_logger_stdout_verbosity_level,
21
+ )
22
+
23
+ logger = get_qwak_logger()
24
+ PENDING_STATUSES = [
25
+ "INITIATING_DEPLOYMENT",
26
+ "PENDING_DEPLOYMENT",
27
+ "INITIATING_UNDEPLOYMENT",
28
+ "PENDING_UNDEPLOYMENT",
29
+ ]
30
+ DEPLOYED_STATUSES = ["SUCCESSFUL_DEPLOYMENT"]
31
+ UNDEPLOYED_STATUSES = ["SUCCESSFUL_UNDEPLOYMENT"]
32
+ FAILED_STATUSES = [
33
+ "INVALID_DEPLOYMENT",
34
+ "FAILED_INITIATING_DEPLOYMENT",
35
+ "FAILED_DEPLOYMENT",
36
+ "FAILED_UNDEPLOYMENT",
37
+ ]
38
+
39
+
40
+ @click.command("realtime", help="Deploy realtime model.", cls=QwakCommand)
41
+ @click.option(
42
+ "--build-id",
43
+ help="Build ID, If not specified latest successful build will deployed.",
44
+ type=str,
45
+ )
46
+ @click.option("--model-id", help="Model ID", type=str, required=True)
47
+ @click.option(
48
+ "--timeout",
49
+ type=int,
50
+ help="Inference request timeout in MS, (e.g. 2000).",
51
+ )
52
+ @click.option(
53
+ "--server-workers",
54
+ type=int,
55
+ help="Number of workers of http server. (e.g. 4).",
56
+ )
57
+ @click.option(
58
+ "--daemon-mode/--no-daemon-mode",
59
+ type=bool,
60
+ default=True,
61
+ help="Configure Gunicorn daemon mode. Default is True",
62
+ )
63
+ @click.option(
64
+ "--pods",
65
+ type=int,
66
+ help="Number of pods to deploy.",
67
+ )
68
+ @click.option(
69
+ "--cpus",
70
+ type=float,
71
+ help="Number of CPU cores, can be fraction of a core (e.g. 0.4).",
72
+ )
73
+ @click.option(
74
+ "--memory",
75
+ type=int,
76
+ help="Memory amount in Mib (e.g. 256).",
77
+ )
78
+ @click.option(
79
+ "--gpu-type",
80
+ metavar="NAME",
81
+ required=False,
82
+ help=f"Type of GPU to use on the deployments ({', '.join([x for x in QwakConstants.GPU_TYPES])}).",
83
+ type=click.STRING,
84
+ )
85
+ @click.option(
86
+ "--gpu-amount",
87
+ metavar="NAME",
88
+ required=False,
89
+ type=int,
90
+ help="Amount of GPU to use on the deployments.",
91
+ )
92
+ @click.option(
93
+ "--iam-role-arn",
94
+ type=str,
95
+ help="Custom IAM Role ARN.",
96
+ )
97
+ @click.option(
98
+ "--max-batch-size",
99
+ type=int,
100
+ help="Max batch size in prediction. (defaults to 0 which is dynamic)",
101
+ )
102
+ @click.option(
103
+ "--variation-name",
104
+ required=False,
105
+ type=str,
106
+ help="The variation name",
107
+ )
108
+ @click.option(
109
+ "--environment-name",
110
+ required=False,
111
+ type=str,
112
+ help="Environment to deploy on (if not specified uses your default environment",
113
+ multiple=True,
114
+ )
115
+ @click.option(
116
+ "--sync",
117
+ is_flag=True,
118
+ default=False,
119
+ help="Waiting for deployments to be ready",
120
+ )
121
+ @click.option(
122
+ "-v",
123
+ "--verbose",
124
+ count=True,
125
+ help="Log verbosity level - v: INFO, vv: DEBUG [default: WARNING]",
126
+ )
127
+ @click.option(
128
+ "-f",
129
+ "--from-file",
130
+ help="Deploy by run_config file, Command arguments will overwrite any run_config.",
131
+ required=False,
132
+ type=click.Path(exists=True, resolve_path=True, dir_okay=False),
133
+ )
134
+ @click.option(
135
+ "--out-conf",
136
+ help="Extract deploy conf from commands arguments, the commands will not run it wil only output valid yaml "
137
+ "structure",
138
+ default=False,
139
+ is_flag=True,
140
+ )
141
+ @click.option(
142
+ "--purchase-option",
143
+ required=False,
144
+ type=click.Choice([i.value for i in PurchaseOption], case_sensitive=False),
145
+ help="Indicate the instance deployments type, whether it is spot/ondemand. Default is spot",
146
+ )
147
+ @click.option(
148
+ "--deployments-timeout",
149
+ type=int,
150
+ help="The number of seconds the deployments can be in progress before it is considered as failed. This is useful "
151
+ "in cases where a deployments has a high number of pods to replace, scarce resources (gpu), or large build "
152
+ "size. Default is 600 seconds (10 minutes).",
153
+ )
154
+ @click.option(
155
+ "-E",
156
+ "--env-vars",
157
+ required=False,
158
+ metavar="NAME=VALUE",
159
+ multiple=True,
160
+ help="A parameter for the deployments, of the form -E name=value",
161
+ )
162
+ def realtime(
163
+ verbose: bool, from_file: Optional[str], out_conf: bool, sync: bool, **kwargs
164
+ ):
165
+ set_qwak_logger_stdout_verbosity_level(verbose + 1)
166
+ deploy_realtime(from_file, out_conf, sync, **kwargs)
167
+
168
+
169
+ def deploy_realtime(from_file: Optional[str], out_conf: bool, sync: bool, **kwargs):
170
+ config: DeployConfig = config_handler(
171
+ config=DeployConfig,
172
+ from_file=from_file,
173
+ out_conf=out_conf,
174
+ sections=("realtime", "autoscaling"),
175
+ **kwargs,
176
+ )
177
+ if not out_conf:
178
+ deploy_executor = RealtimeDeployExecutor(config)
179
+ client_deployment(deploy=deploy_executor, sync=sync)
@@ -0,0 +1,24 @@
1
+ from _qwak_proto.qwak.deployment.deployment_pb2 import KubeDeploymentType
2
+ from _qwak_proto.qwak.deployment.deployment_service_pb2 import DeployModelResponse
3
+
4
+ from qwak_sdk.commands.models.deployments.deploy._logic.base_deploy_executor import (
5
+ BaseDeployExecutor,
6
+ )
7
+ from qwak_sdk.commands.models.deployments.deploy._logic.deployment_message_helpers import (
8
+ get_env_to_deployment_message,
9
+ )
10
+
11
+
12
+ class StreamDeployExecutor(BaseDeployExecutor):
13
+ def deploy(self) -> DeployModelResponse:
14
+ env_deployment_messages = get_env_to_deployment_message(
15
+ self.config,
16
+ KubeDeploymentType.STREAM,
17
+ self.deploy_client,
18
+ self.ecosystem_client,
19
+ )
20
+ return self.deploy_client.deploy_model(
21
+ model_id=self.config.model_id,
22
+ build_id=self.config.build_id,
23
+ env_deployment_messages=env_deployment_messages,
24
+ )
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+
3
+ from _qwak_proto.qwak.deployment.deployment_pb2 import (
4
+ KafkaConfig,
5
+ ServingStrategy,
6
+ StreamConfig,
7
+ )
8
+
9
+ from qwak_sdk.commands.models.deployments.deploy._logic.deploy_config import (
10
+ DeployConfig,
11
+ )
12
+
13
+ DEFAULT_VARIATION_NAME = "default"
14
+
15
+
16
+ def create_streaming_serving_strategy_from_deploy_config(
17
+ deploy_config: DeployConfig,
18
+ ) -> ServingStrategy:
19
+ return ServingStrategy(
20
+ stream_config=StreamConfig(
21
+ kafka=KafkaConfig(
22
+ consumer=KafkaConfig.Consumer(
23
+ bootstrap_server=deploy_config.stream.kafka.consumer.bootstrap_servers,
24
+ topic=deploy_config.stream.kafka.consumer.topic,
25
+ group=deploy_config.stream.kafka.consumer.group,
26
+ timeout=deploy_config.stream.kafka.consumer.timeout,
27
+ auto_offset_type=deploy_config.stream.kafka.consumer.auto_offset_reset.upper(),
28
+ max_batch_size=deploy_config.stream.kafka.consumer.max_batch_size,
29
+ max_poll_latency=deploy_config.stream.kafka.consumer.max_poll_latency,
30
+ ),
31
+ producer=KafkaConfig.Producer(
32
+ bootstrap_server=deploy_config.stream.kafka.producer.bootstrap_servers,
33
+ topic=deploy_config.stream.kafka.producer.topic,
34
+ compression_type=deploy_config.stream.kafka.producer.compression_type.upper(),
35
+ ),
36
+ )
37
+ )
38
+ )
@@ -0,0 +1,196 @@
1
+ import click
2
+
3
+ from qwak_sdk.commands.models.deployments.deploy._logic.deploy_config import (
4
+ AutoOffsetReset,
5
+ CompressionTypes,
6
+ DeployConfig,
7
+ PurchaseOption,
8
+ )
9
+ from qwak_sdk.commands.models.deployments.deploy._logic.deployment_response_handler import (
10
+ client_deployment,
11
+ )
12
+ from qwak_sdk.commands.models.deployments.deploy.streaming._logic.deploy_executor import (
13
+ StreamDeployExecutor,
14
+ )
15
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand
16
+ from qwak_sdk.inner.tools.config_handler import config_handler
17
+ from qwak_sdk.inner.tools.logger.logger import (
18
+ get_qwak_logger,
19
+ set_qwak_logger_stdout_verbosity_level,
20
+ )
21
+
22
+ logger = get_qwak_logger()
23
+ PENDING_STATUSES = [
24
+ "INITIATING_DEPLOYMENT",
25
+ "PENDING_DEPLOYMENT",
26
+ "INITIATING_UNDEPLOYMENT",
27
+ "PENDING_UNDEPLOYMENT",
28
+ ]
29
+ DEPLOYED_STATUSES = ["SUCCESSFUL_DEPLOYMENT"]
30
+ UNDEPLOYED_STATUSES = ["SUCCESSFUL_UNDEPLOYMENT"]
31
+ FAILED_STATUSES = [
32
+ "INVALID_DEPLOYMENT",
33
+ "FAILED_INITIATING_DEPLOYMENT",
34
+ "FAILED_DEPLOYMENT",
35
+ "FAILED_UNDEPLOYMENT",
36
+ ]
37
+
38
+
39
+ @click.command("stream", help="Deploy stream model.", cls=QwakCommand)
40
+ @click.option(
41
+ "--build-id",
42
+ help="Build ID, If not specified latest successful build will deployed.",
43
+ type=str,
44
+ )
45
+ @click.option("--model-id", help="Model ID", type=str, required=True)
46
+ @click.option("--branch", help="Branch ID", type=str)
47
+ @click.option(
48
+ "--bootstrap-server",
49
+ envvar="BOOTSTRAP_SERVERS",
50
+ help="Kafka consumer/producer bootstrap server.",
51
+ multiple=True,
52
+ type=str,
53
+ )
54
+ @click.option(
55
+ "--consumer-bootstrap-server",
56
+ envvar="CONSUMER_BOOTSTRAP_SERVER",
57
+ help="Kafka consumer bootstrap server.",
58
+ multiple=True,
59
+ type=str,
60
+ )
61
+ @click.option(
62
+ "--consumer-topic",
63
+ envvar="CONSUMER_TOPIC",
64
+ help="Kafka consumer topic.",
65
+ type=str,
66
+ )
67
+ @click.option(
68
+ "--consumer-group",
69
+ envvar="CONSUMER_GROUP",
70
+ help="Kafka consumer group.",
71
+ type=str,
72
+ )
73
+ @click.option(
74
+ "--consumer-auto-offset-reset",
75
+ envvar="CONSUMER_AUTO_OFFSET_RESET",
76
+ type=click.Choice([i.value for i in AutoOffsetReset], case_sensitive=False),
77
+ help="Kafka consumer auto offset reset (Latest/Earliest).",
78
+ )
79
+ @click.option(
80
+ "--consumer-timeout",
81
+ envvar="CONSUMER_TIMEOUT",
82
+ help="Kafka consumer polling timeout. (The timeout should be in range of kafka admin configuration "
83
+ "'group.min.session.timeout.ms' and 'group.max.session.timeout.ms'.)",
84
+ type=int,
85
+ )
86
+ @click.option(
87
+ "--consumer-max-batch-size",
88
+ envvar="CONSUMER_MAX_BATCH_SIZE",
89
+ help="The maximum number of records returned in a single call to poll().",
90
+ type=int,
91
+ )
92
+ @click.option(
93
+ "--consumer-max-poll-latency",
94
+ envvar="CONSUMER_MAX_POLL_LATENCY",
95
+ help="The maximum delay between invocations of poll() when using consumer group management.",
96
+ type=float,
97
+ )
98
+ @click.option(
99
+ "--producer-bootstrap-server",
100
+ envvar="PRODUCER_BOOTSTRAP_SERVER",
101
+ help="Kafka producer bootstrap server.",
102
+ multiple=True,
103
+ type=str,
104
+ )
105
+ @click.option(
106
+ "--producer-topic",
107
+ envvar="PRODUCER_TOPIC",
108
+ help="Kafka producer topic.",
109
+ type=str,
110
+ )
111
+ @click.option(
112
+ "--producer-compression-type",
113
+ envvar="PRODUCER_COMPRESSION_TYPE",
114
+ type=click.Choice([i.value for i in CompressionTypes], case_sensitive=False),
115
+ help="Kafka producer compression type.",
116
+ )
117
+ @click.option(
118
+ "--pods",
119
+ type=int,
120
+ help="Number of pods to deploy.",
121
+ )
122
+ @click.option(
123
+ "--cpus",
124
+ type=float,
125
+ help="Number of CPU cores, can be fraction of a core (e.g. 0.4).",
126
+ )
127
+ @click.option(
128
+ "--memory",
129
+ type=int,
130
+ help="Memory amount in Mib (e.g. 256).",
131
+ )
132
+ @click.option(
133
+ "--iam-role-arn",
134
+ type=str,
135
+ help="Custom IAM Role ARN.",
136
+ )
137
+ @click.option(
138
+ "--sync",
139
+ is_flag=True,
140
+ default=False,
141
+ help="Waiting for deployments to be ready",
142
+ )
143
+ @click.option(
144
+ "--local",
145
+ is_flag=True,
146
+ default=False,
147
+ help="Run deployments locally.",
148
+ )
149
+ @click.option(
150
+ "-v",
151
+ "--verbose",
152
+ count=True,
153
+ help="Log verbosity level - v: INFO, vv: DEBUG [default: WARNING]",
154
+ )
155
+ @click.option(
156
+ "-f",
157
+ "--from-file",
158
+ help="Deploy by run_config file, Command arguments will overwrite any run_config.",
159
+ required=False,
160
+ type=click.Path(exists=True, resolve_path=True, dir_okay=False),
161
+ )
162
+ @click.option(
163
+ "--out-conf",
164
+ help="Extract deploy conf from commands arguments, the commands will not run it wil only output valid yaml "
165
+ "structure",
166
+ default=False,
167
+ is_flag=True,
168
+ )
169
+ @click.option(
170
+ "--purchase-option",
171
+ required=False,
172
+ type=click.Choice([i.value for i in PurchaseOption], case_sensitive=False),
173
+ help="Indicate the instance deployments type, whether it is spot/ondemand. Default is spot",
174
+ )
175
+ @click.option(
176
+ "-E",
177
+ "--env-vars",
178
+ required=False,
179
+ metavar="NAME=VALUE",
180
+ multiple=True,
181
+ help="A parameter for the deployments, of the form -E name=value",
182
+ )
183
+ def stream(
184
+ verbose: bool, from_file: str, out_conf: bool, local: bool, sync: bool, **kwargs
185
+ ):
186
+ set_qwak_logger_stdout_verbosity_level(verbose + 1)
187
+ config: DeployConfig = config_handler(
188
+ config=DeployConfig,
189
+ from_file=from_file,
190
+ out_conf=out_conf,
191
+ sections=("stream",),
192
+ **kwargs,
193
+ )
194
+ if not out_conf:
195
+ deploy_executor = StreamDeployExecutor(config)
196
+ client_deployment(deploy=deploy_executor, sync=sync)