qwak-sdk 0.5.30__tar.gz → 0.5.32__tar.gz

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

Potentially problematic release.


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

Files changed (369) hide show
  1. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/PKG-INFO +3 -2
  2. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/pyproject.toml +15 -14
  3. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/__init__.py +1 -1
  4. qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/backfill/_logic.py +140 -0
  5. qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/backfill/ui.py +129 -0
  6. qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/execution/ui.py +19 -0
  7. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/feature_store/feature_store_command_group.py +4 -0
  8. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/client_logs/logger.py +2 -1
  9. qwak_sdk-0.5.32/qwak_sdk/commands/models/builds/status/_logic.py +6 -0
  10. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/_logic/get_latest_successful_build.py +5 -8
  11. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/undeploy/_logic/request_undeploy.py +103 -1
  12. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/undeploy/ui.py +8 -5
  13. qwak_sdk-0.5.32/qwak_sdk/commands/models/describe/_logic.py +169 -0
  14. qwak_sdk-0.5.32/qwak_sdk/inner/tools/__init__.py +0 -0
  15. qwak_sdk-0.5.32/qwak_sdk/tools/__init__.py +0 -0
  16. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/tools/log_handling.py +8 -6
  17. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/setup.py +5 -2
  18. qwak_sdk-0.5.30/qwak_sdk/commands/models/builds/status/_logic.py +0 -6
  19. qwak_sdk-0.5.30/qwak_sdk/commands/models/describe/_logic.py +0 -154
  20. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/README.md +0 -0
  21. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/cli.py +0 -0
  22. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/__init__.py +0 -0
  23. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/_logic/__init__.py +0 -0
  24. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/_logic/instance_template.py +0 -0
  25. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/_logic/tools.py +0 -0
  26. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/admin/__init__.py +0 -0
  27. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/admin/admin_commands_group.py +0 -0
  28. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/admin/apikeys/__init__.py +0 -0
  29. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/admin/apikeys/api_keys_commands_group.py +0 -0
  30. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/admin/apikeys/generate/__init__.py +0 -0
  31. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/admin/apikeys/generate/_logic.py +0 -0
  32. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/admin/apikeys/generate/ui.py +0 -0
  33. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/admin/apikeys/revoke/__init__.py +0 -0
  34. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/admin/apikeys/revoke/_logic.py +0 -0
  35. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/admin/apikeys/revoke/ui.py +0 -0
  36. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/__init__.py +0 -0
  37. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/alerts_commnad_group.py +0 -0
  38. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/delete/__init__.py +0 -0
  39. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/delete/_logic.py +0 -0
  40. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/delete/ui.py +0 -0
  41. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/list/__init__.py +0 -0
  42. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/list/_logic.py +0 -0
  43. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/list/ui.py +0 -0
  44. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/register/__init__.py +0 -0
  45. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/register/_logic.py +0 -0
  46. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/alerts/register/ui.py +0 -0
  47. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/__init__.py +0 -0
  48. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/_logic/__init__.py +0 -0
  49. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/_logic/config/__init__.py +0 -0
  50. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/_logic/config/config_base.py +0 -0
  51. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/_logic/config/parser.py +0 -0
  52. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/_logic/config/v1/__init__.py +0 -0
  53. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/_logic/config/v1/audience_config.py +0 -0
  54. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/_logic/config/v1/conditions_config.py +0 -0
  55. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/_logic/config/v1/config_v1.py +0 -0
  56. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/_logic/config/v1/route_config.py +0 -0
  57. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/_logic/config/v1/spec.py +0 -0
  58. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/audience_api_dump.py +0 -0
  59. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/audience_commands_group.py +0 -0
  60. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/create/__init__.py +0 -0
  61. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/create/logic.py +0 -0
  62. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/create/ui.py +0 -0
  63. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/delete/__init__.py +0 -0
  64. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/delete/logic.py +0 -0
  65. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/delete/ui.py +0 -0
  66. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/get/__init__.py +0 -0
  67. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/get/logic.py +0 -0
  68. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/get/ui.py +0 -0
  69. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/list/__init__.py +0 -0
  70. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/list/logic.py +0 -0
  71. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/list/ui.py +0 -0
  72. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/update/__init__.py +0 -0
  73. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/update/logic.py +0 -0
  74. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/audience/update/ui.py +0 -0
  75. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/auto_scalling/__init__.py +0 -0
  76. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/auto_scalling/_logic/__init__.py +0 -0
  77. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/auto_scalling/_logic/config/__init__.py +0 -0
  78. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/auto_scalling/_logic/config/config.py +0 -0
  79. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/auto_scalling/_logic/config/parser.py +0 -0
  80. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/auto_scalling/attach/__init__.py +0 -0
  81. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/auto_scalling/attach/_logic.py +0 -0
  82. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/auto_scalling/attach/ui.py +0 -0
  83. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/auto_scalling/autoscaling_commands_group.py +0 -0
  84. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/__init__.py +0 -0
  85. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/automations_commands_group.py +0 -0
  86. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/delete/__init__.py +0 -0
  87. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/delete/_logic.py +0 -0
  88. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/delete/ui.py +0 -0
  89. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/executions/__init__.py +0 -0
  90. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/executions/executions_commands_group.py +0 -0
  91. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/executions/list/__init__.py +0 -0
  92. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/executions/list/_logic.py +0 -0
  93. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/executions/list/ui.py +0 -0
  94. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/list/__init__.py +0 -0
  95. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/list/_logic.py +0 -0
  96. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/list/ui.py +0 -0
  97. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/register/__init__.py +0 -0
  98. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/register/_logic.py +0 -0
  99. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/automations/register/ui.py +0 -0
  100. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/feature_store/__init__.py +0 -0
  101. {qwak_sdk-0.5.30/qwak_sdk/commands/feature_store/delete → qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/backfill}/__init__.py +0 -0
  102. {qwak_sdk-0.5.30/qwak_sdk/commands/feature_store/list → qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/delete}/__init__.py +0 -0
  103. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/feature_store/delete/_logic.py +0 -0
  104. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/feature_store/delete/ui.py +0 -0
  105. {qwak_sdk-0.5.30/qwak_sdk/commands/feature_store/pause → qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/execution}/__init__.py +0 -0
  106. {qwak_sdk-0.5.30/qwak_sdk/commands/feature_store/register → qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/list}/__init__.py +0 -0
  107. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/feature_store/list/ui.py +0 -0
  108. {qwak_sdk-0.5.30/qwak_sdk/commands/feature_store/resume → qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/pause}/__init__.py +0 -0
  109. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/feature_store/pause/ui.py +0 -0
  110. {qwak_sdk-0.5.30/qwak_sdk/commands/feature_store/trigger → qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/register}/__init__.py +0 -0
  111. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/feature_store/register/_logic.py +0 -0
  112. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/feature_store/register/ui.py +0 -0
  113. {qwak_sdk-0.5.30/qwak_sdk/commands/models → qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/resume}/__init__.py +0 -0
  114. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/feature_store/resume/ui.py +0 -0
  115. {qwak_sdk-0.5.30/qwak_sdk/commands/models/_logic → qwak_sdk-0.5.32/qwak_sdk/commands/feature_store/trigger}/__init__.py +0 -0
  116. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/feature_store/trigger/ui.py +0 -0
  117. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build → qwak_sdk-0.5.32/qwak_sdk/commands/models}/__init__.py +0 -0
  118. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build → qwak_sdk-0.5.32/qwak_sdk/commands/models}/_logic/__init__.py +0 -0
  119. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/_logic/variations.py +0 -0
  120. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build/_logic/client_logs → qwak_sdk-0.5.32/qwak_sdk/commands/models/build}/__init__.py +0 -0
  121. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build/_logic/interface → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic}/__init__.py +0 -0
  122. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/build_steps.py +0 -0
  123. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build/_logic/phase → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic/client_logs}/__init__.py +0 -0
  124. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/client_logs/build_run_handlers.py +0 -0
  125. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/client_logs/cli_ui.py +0 -0
  126. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/client_logs/messages.py +0 -0
  127. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/client_logs/notifier_impl.py +0 -0
  128. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/client_logs/spinner.py +0 -0
  129. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/client_logs/time_source.py +0 -0
  130. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/client_logs/utils.py +0 -0
  131. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/config/config_v1.py +0 -0
  132. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/constant/host_resource.py +0 -0
  133. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/constant/step_description.py +0 -0
  134. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/constant/temp_dir.py +0 -0
  135. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/constant/upload_tag.py +0 -0
  136. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/context.py +0 -0
  137. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic/interface}/__init__.py +0 -0
  138. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/interface/notifier_interface.py +0 -0
  139. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/interface/step_inteface.py +0 -0
  140. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic/phase}/__init__.py +0 -0
  141. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/__init__.py +0 -0
  142. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step}/__init__.py +0 -0
  143. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_model_step.py +0 -0
  144. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/folder → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager}/__init__.py +0 -0
  145. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/common.py +0 -0
  146. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/fetch_strategy_manager.py +0 -0
  147. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/git → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy}/__init__.py +0 -0
  148. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/zip → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/folder}/__init__.py +0 -0
  149. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/folder/folder_strategy.py +0 -0
  150. {qwak_sdk-0.5.30/qwak_sdk/commands/models/build/_logic/util → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/git}/__init__.py +0 -0
  151. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/git/git_strategy.py +0 -0
  152. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/strategy.py +0 -0
  153. {qwak_sdk-0.5.30/qwak_sdk/commands/models/builds → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/zip}/__init__.py +0 -0
  154. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/fetch_model_step/fetch_strategy_manager/strategy/zip/zip_strategy.py +0 -0
  155. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/post_fetch_validation_step.py +0 -0
  156. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/a_fetch_model_code/pre_fetch_validation_step.py +0 -0
  157. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/b_remote_register_qwak_build/__init__.py +0 -0
  158. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/b_remote_register_qwak_build/cleanup_step.py +0 -0
  159. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/b_remote_register_qwak_build/start_remote_build_step.py +0 -0
  160. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/b_remote_register_qwak_build/upload_step.py +0 -0
  161. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/c_deploy/__init__.py +0 -0
  162. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/c_deploy/build_polling_status.py +0 -0
  163. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/phase/c_deploy/deploy_build.py +0 -0
  164. {qwak_sdk-0.5.30/qwak_sdk/commands/models/builds/cancel → qwak_sdk-0.5.32/qwak_sdk/commands/models/build/_logic/util}/__init__.py +0 -0
  165. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/util/protobuf_factory.py +0 -0
  166. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/util/step_decorator.py +0 -0
  167. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/_logic/util/text.py +0 -0
  168. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/build/ui.py +0 -0
  169. {qwak_sdk-0.5.30/qwak_sdk/commands/models/builds/logs → qwak_sdk-0.5.32/qwak_sdk/commands/models/builds}/__init__.py +0 -0
  170. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/builds/builds_commands_group.py +0 -0
  171. {qwak_sdk-0.5.30/qwak_sdk/commands/models/builds/status → qwak_sdk-0.5.32/qwak_sdk/commands/models/builds/cancel}/__init__.py +0 -0
  172. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/builds/cancel/_logic.py +0 -0
  173. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/builds/cancel/ui.py +0 -0
  174. {qwak_sdk-0.5.30/qwak_sdk/commands/models/create → qwak_sdk-0.5.32/qwak_sdk/commands/models/builds/logs}/__init__.py +0 -0
  175. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/builds/logs/ui.py +0 -0
  176. {qwak_sdk-0.5.30/qwak_sdk/commands/models/delete → qwak_sdk-0.5.32/qwak_sdk/commands/models/builds/status}/__init__.py +0 -0
  177. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/builds/status/ui.py +0 -0
  178. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments → qwak_sdk-0.5.32/qwak_sdk/commands/models/create}/__init__.py +0 -0
  179. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/create/_logic.py +0 -0
  180. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/create/ui.py +0 -0
  181. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments/deploy → qwak_sdk-0.5.32/qwak_sdk/commands/models/delete}/__init__.py +0 -0
  182. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/delete/_logic.py +0 -0
  183. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/delete/ui.py +0 -0
  184. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments/deploy/_logic → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments}/__init__.py +0 -0
  185. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments/deploy/batch → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments/deploy}/__init__.py +0 -0
  186. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments/deploy/batch → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments/deploy}/_logic/__init__.py +0 -0
  187. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/_logic/advance_deployment_options_handler.py +0 -0
  188. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/_logic/base_deploy_executor.py +0 -0
  189. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/_logic/deploy_config.py +0 -0
  190. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/_logic/deployment.py +0 -0
  191. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/_logic/deployment_message_helpers.py +0 -0
  192. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/_logic/deployment_response_handler.py +0 -0
  193. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/_logic/deployment_size_mapper.py +0 -0
  194. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/_logic/variations.py +0 -0
  195. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments/deploy/realtime → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments/deploy/batch}/__init__.py +0 -0
  196. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments/deploy/realtime → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments/deploy/batch}/_logic/__init__.py +0 -0
  197. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/batch/_logic/advanced_deployment_mapper.py +0 -0
  198. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/batch/_logic/deploy_executor.py +0 -0
  199. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/batch/ui.py +0 -0
  200. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/deploy_commands_group.py +0 -0
  201. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments/deploy/streaming → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments/deploy/realtime}/__init__.py +0 -0
  202. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments/deploy/streaming → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments/deploy/realtime}/_logic/__init__.py +0 -0
  203. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/realtime/_logic/advanced_deployment_mapper.py +0 -0
  204. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/realtime/_logic/deploy_executor.py +0 -0
  205. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/realtime/_logic/serving_strategy_mapper.py +0 -0
  206. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/realtime/ui.py +0 -0
  207. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments/undeploy → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments/deploy/streaming}/__init__.py +0 -0
  208. {qwak_sdk-0.5.30/qwak_sdk/commands/models/deployments/undeploy → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments/deploy/streaming}/_logic/__init__.py +0 -0
  209. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/streaming/_logic/deploy_executor.py +0 -0
  210. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/streaming/_logic/serving_strategy_mapper.py +0 -0
  211. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/deploy/streaming/ui.py +0 -0
  212. {qwak_sdk-0.5.30/qwak_sdk/commands/models/describe → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments/undeploy}/__init__.py +0 -0
  213. {qwak_sdk-0.5.30/qwak_sdk/commands/models/executions → qwak_sdk-0.5.32/qwak_sdk/commands/models/deployments/undeploy/_logic}/__init__.py +0 -0
  214. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/deployments/undeploy/_logic/variations.py +0 -0
  215. {qwak_sdk-0.5.30/qwak_sdk/commands/models/executions/cancel → qwak_sdk-0.5.32/qwak_sdk/commands/models/describe}/__init__.py +0 -0
  216. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/describe/ui.py +0 -0
  217. {qwak_sdk-0.5.30/qwak_sdk/commands/models/executions/report → qwak_sdk-0.5.32/qwak_sdk/commands/models/executions}/__init__.py +0 -0
  218. {qwak_sdk-0.5.30/qwak_sdk/commands/models/executions/start → qwak_sdk-0.5.32/qwak_sdk/commands/models/executions/cancel}/__init__.py +0 -0
  219. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/executions/cancel/_logic.py +0 -0
  220. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/executions/cancel/ui.py +0 -0
  221. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/executions/execution_commands_group.py +0 -0
  222. {qwak_sdk-0.5.30/qwak_sdk/commands/models/executions/status → qwak_sdk-0.5.32/qwak_sdk/commands/models/executions/report}/__init__.py +0 -0
  223. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/executions/report/_logic.py +0 -0
  224. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/executions/report/ui.py +0 -0
  225. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init → qwak_sdk-0.5.32/qwak_sdk/commands/models/executions/start}/__init__.py +0 -0
  226. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/executions/start/_logic.py +0 -0
  227. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/executions/start/ui.py +0 -0
  228. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic → qwak_sdk-0.5.32/qwak_sdk/commands/models/executions/status}/__init__.py +0 -0
  229. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/executions/status/_logic.py +0 -0
  230. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/executions/status/ui.py +0 -0
  231. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template → qwak_sdk-0.5.32/qwak_sdk/commands/models/init}/__init__.py +0 -0
  232. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/churn → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic}/__init__.py +0 -0
  233. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/initialize_model_structure.py +0 -0
  234. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}} → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template}/__init__.py +0 -0
  235. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/churn}/__init__.py +0 -0
  236. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/churn/cookiecutter.json +0 -0
  237. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/it → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}}/__init__.py +0 -0
  238. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/__init__.py +0 -0
  239. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/conda.yml +0 -0
  240. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/data.csv +0 -0
  241. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/main/model.py +0 -0
  242. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/credit_risk → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests}/__init__.py +0 -0
  243. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}} → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/it}/__init__.py +0 -0
  244. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/churn/{{cookiecutter.model_directory}}/tests/it/test_churn.py +0 -0
  245. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/general → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/credit_risk}/__init__.py +0 -0
  246. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/credit_risk/cookiecutter.json +0 -0
  247. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/general → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/credit_risk}/{{cookiecutter.model_directory}}/__init__.py +0 -0
  248. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/__init__.py +0 -0
  249. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/conda.yml +0 -0
  250. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/data.csv +0 -0
  251. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/credit_risk/{{cookiecutter.model_directory}}/main/model.py +0 -0
  252. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.test_directory}} → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/general}/__init__.py +0 -0
  253. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/general/cookiecutter.json +0 -0
  254. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/titanic → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}}/__init__.py +0 -0
  255. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/__init__.py +0 -0
  256. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/conda.yml +0 -0
  257. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.main_directory}}/model.py +0 -0
  258. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}} → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.test_directory}}}/__init__.py +0 -0
  259. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/general/{{cookiecutter.model_directory}}/{{cookiecutter.test_directory}}/test_qwak_model.py +0 -0
  260. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/titanic}/__init__.py +0 -0
  261. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/titanic/cookiecutter.json +0 -0
  262. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/it → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}}/__init__.py +0 -0
  263. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/__init__.py +0 -0
  264. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/conda.yml +0 -0
  265. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/main/model.py +0 -0
  266. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/titanic_poetry → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests}/__init__.py +0 -0
  267. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}} → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/it}/__init__.py +0 -0
  268. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/titanic/{{cookiecutter.model_directory}}/tests/it/test_titanic.py +0 -0
  269. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/titanic_poetry}/__init__.py +0 -0
  270. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/cookiecutter.json +0 -0
  271. {qwak_sdk-0.5.30/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}}/__init__.py +0 -0
  272. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/__init__.py +0 -0
  273. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/model.py +0 -0
  274. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/main/pyproject.toml +0 -0
  275. {qwak_sdk-0.5.30/qwak_sdk/commands/models/list → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests}/__init__.py +0 -0
  276. {qwak_sdk-0.5.30/qwak_sdk/commands/models/list_models → qwak_sdk-0.5.32/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it}/__init__.py +0 -0
  277. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/_logic/template/titanic_poetry/{{cookiecutter.model_directory}}/tests/it/test_titanic.py +0 -0
  278. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/init/ui.py +0 -0
  279. {qwak_sdk-0.5.30/qwak_sdk/commands/models/metadata → qwak_sdk-0.5.32/qwak_sdk/commands/models/list}/__init__.py +0 -0
  280. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/list/_logic.py +0 -0
  281. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/list/ui.py +0 -0
  282. {qwak_sdk-0.5.30/qwak_sdk/commands/models/runtime → qwak_sdk-0.5.32/qwak_sdk/commands/models/list_models}/__init__.py +0 -0
  283. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/list_models/_logic.py +0 -0
  284. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/list_models/ui.py +0 -0
  285. {qwak_sdk-0.5.30/qwak_sdk/commands/models/runtime/logs → qwak_sdk-0.5.32/qwak_sdk/commands/models/metadata}/__init__.py +0 -0
  286. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/metadata/_logic.py +0 -0
  287. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/metadata/ui.py +0 -0
  288. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/models_command_group.py +0 -0
  289. {qwak_sdk-0.5.30/qwak_sdk/commands/models/runtime/traffic_update → qwak_sdk-0.5.32/qwak_sdk/commands/models/runtime}/__init__.py +0 -0
  290. {qwak_sdk-0.5.30/qwak_sdk/commands/models/runtime/traffic_update/_logic → qwak_sdk-0.5.32/qwak_sdk/commands/models/runtime/logs}/__init__.py +0 -0
  291. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/runtime/logs/ui.py +0 -0
  292. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/runtime/runtime_commands_group.py +0 -0
  293. {qwak_sdk-0.5.30/qwak_sdk/commands/models/runtime/update → qwak_sdk-0.5.32/qwak_sdk/commands/models/runtime/traffic_update}/__init__.py +0 -0
  294. {qwak_sdk-0.5.30/qwak_sdk/commands/projects → qwak_sdk-0.5.32/qwak_sdk/commands/models/runtime/traffic_update/_logic}/__init__.py +0 -0
  295. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/runtime/traffic_update/_logic/execute_runtime_update_traffic.py +0 -0
  296. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/runtime/traffic_update/_logic/variations.py +0 -0
  297. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/runtime/traffic_update/ui.py +0 -0
  298. {qwak_sdk-0.5.30/qwak_sdk/commands/projects/create → qwak_sdk-0.5.32/qwak_sdk/commands/models/runtime/update}/__init__.py +0 -0
  299. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/runtime/update/_logic.py +0 -0
  300. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/models/runtime/update/ui.py +0 -0
  301. {qwak_sdk-0.5.30/qwak_sdk/commands/projects/delete → qwak_sdk-0.5.32/qwak_sdk/commands/projects}/__init__.py +0 -0
  302. {qwak_sdk-0.5.30/qwak_sdk/commands/projects/list → qwak_sdk-0.5.32/qwak_sdk/commands/projects/create}/__init__.py +0 -0
  303. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/projects/create/_logic.py +0 -0
  304. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/projects/create/ui.py +0 -0
  305. {qwak_sdk-0.5.30/qwak_sdk/commands/secrets → qwak_sdk-0.5.32/qwak_sdk/commands/projects/delete}/__init__.py +0 -0
  306. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/projects/delete/_logic.py +0 -0
  307. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/projects/delete/ui.py +0 -0
  308. {qwak_sdk-0.5.30/qwak_sdk/commands/secrets/delete → qwak_sdk-0.5.32/qwak_sdk/commands/projects/list}/__init__.py +0 -0
  309. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/projects/list/_logic.py +0 -0
  310. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/projects/list/ui.py +0 -0
  311. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/projects/projects_command_group.py +0 -0
  312. {qwak_sdk-0.5.30/qwak_sdk/commands/secrets/get → qwak_sdk-0.5.32/qwak_sdk/commands/secrets}/__init__.py +0 -0
  313. {qwak_sdk-0.5.30/qwak_sdk/commands/secrets/set → qwak_sdk-0.5.32/qwak_sdk/commands/secrets/delete}/__init__.py +0 -0
  314. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/secrets/delete/_logic.py +0 -0
  315. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/secrets/delete/ui.py +0 -0
  316. {qwak_sdk-0.5.30/qwak_sdk/commands/workspaces → qwak_sdk-0.5.32/qwak_sdk/commands/secrets/get}/__init__.py +0 -0
  317. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/secrets/get/_logic.py +0 -0
  318. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/secrets/get/ui.py +0 -0
  319. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/secrets/secrets_commands_group.py +0 -0
  320. {qwak_sdk-0.5.30/qwak_sdk/commands/workspaces/_logic → qwak_sdk-0.5.32/qwak_sdk/commands/secrets/set}/__init__.py +0 -0
  321. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/secrets/set/_logic.py +0 -0
  322. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/secrets/set/ui.py +0 -0
  323. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/ui_tools.py +0 -0
  324. {qwak_sdk-0.5.30/qwak_sdk/commands/workspaces/config → qwak_sdk-0.5.32/qwak_sdk/commands/workspaces}/__init__.py +0 -0
  325. {qwak_sdk-0.5.30/qwak_sdk/commands/workspaces/create → qwak_sdk-0.5.32/qwak_sdk/commands/workspaces/_logic}/__init__.py +0 -0
  326. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/_logic/tools.py +0 -0
  327. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/_logic/workspace_validations.py +0 -0
  328. {qwak_sdk-0.5.30/qwak_sdk/commands/workspaces/delete → qwak_sdk-0.5.32/qwak_sdk/commands/workspaces/config}/__init__.py +0 -0
  329. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/config/workspace_config.py +0 -0
  330. {qwak_sdk-0.5.30/qwak_sdk/commands/workspaces/start → qwak_sdk-0.5.32/qwak_sdk/commands/workspaces/create}/__init__.py +0 -0
  331. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/create/_logic.py +0 -0
  332. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/create/ui.py +0 -0
  333. {qwak_sdk-0.5.30/qwak_sdk/commands/workspaces/stop → qwak_sdk-0.5.32/qwak_sdk/commands/workspaces/delete}/__init__.py +0 -0
  334. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/delete/_logic.py +0 -0
  335. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/delete/ui.py +0 -0
  336. {qwak_sdk-0.5.30/qwak_sdk/commands/workspaces/update → qwak_sdk-0.5.32/qwak_sdk/commands/workspaces/start}/__init__.py +0 -0
  337. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/start/_logic.py +0 -0
  338. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/start/ui.py +0 -0
  339. {qwak_sdk-0.5.30/qwak_sdk/common → qwak_sdk-0.5.32/qwak_sdk/commands/workspaces/stop}/__init__.py +0 -0
  340. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/stop/_logic.py +0 -0
  341. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/stop/ui.py +0 -0
  342. {qwak_sdk-0.5.30/qwak_sdk/inner → qwak_sdk-0.5.32/qwak_sdk/commands/workspaces/update}/__init__.py +0 -0
  343. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/update/_logic.py +0 -0
  344. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/update/ui.py +0 -0
  345. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/commands/workspaces/workspaces_commands_group.py +0 -0
  346. {qwak_sdk-0.5.30/qwak_sdk/inner/tools → qwak_sdk-0.5.32/qwak_sdk/common}/__init__.py +0 -0
  347. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/common/run_config/__init__.py +0 -0
  348. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/common/run_config/base.py +0 -0
  349. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/common/run_config/utils.py +0 -0
  350. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/exceptions/__init__.py +0 -0
  351. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/exceptions/qwak_command_exception.py +0 -0
  352. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/exceptions/qwak_deploy_new_build_failed.py +0 -0
  353. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/exceptions/qwak_general_build_exception.py +0 -0
  354. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/exceptions/qwak_remote_build_failed.py +0 -0
  355. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/exceptions/qwak_resource_not_found.py +0 -0
  356. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/exceptions/qwak_suggestion_exception.py +0 -0
  357. {qwak_sdk-0.5.30/qwak_sdk/tools → qwak_sdk-0.5.32/qwak_sdk/inner}/__init__.py +0 -0
  358. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/inner/file_registry.py +0 -0
  359. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/inner/tools/cli_tools.py +0 -0
  360. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/inner/tools/config_handler.py +0 -0
  361. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/inner/tools/dataclasses_utils.py +0 -0
  362. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/inner/tools/logger/__init__.py +0 -0
  363. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/inner/tools/logger/logger.py +0 -0
  364. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/inner/tools/logger/logging.yml +0 -0
  365. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/inner/tools/tracking.py +0 -0
  366. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/main.py +0 -0
  367. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/tools/colors.py +0 -0
  368. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/tools/files.py +0 -0
  369. {qwak_sdk-0.5.30 → qwak_sdk-0.5.32}/qwak_sdk/tools/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qwak-sdk
3
- Version: 0.5.30
3
+ Version: 0.5.32
4
4
  Summary: Qwak SDK and CLI for qwak models
5
5
  License: Apache-2.0
6
6
  Keywords: mlops,ml,deployment,serving,model
@@ -21,13 +21,14 @@ Provides-Extra: batch
21
21
  Provides-Extra: feedback
22
22
  Requires-Dist: boto3 (>=1.24.116,<2.0.0) ; extra == "batch" or extra == "feedback"
23
23
  Requires-Dist: cookiecutter
24
+ Requires-Dist: croniter (==1.4.1)
24
25
  Requires-Dist: gitpython (>=2.1.0)
25
26
  Requires-Dist: joblib (>=1.1.0,<2.0.0) ; extra == "batch" or extra == "feedback"
26
27
  Requires-Dist: pandas (<1.4) ; (python_full_version >= "3.7.1" and python_version < "3.8") and (extra == "batch" or extra == "feedback")
27
28
  Requires-Dist: pandas (>=1.4.3,<2.0.0) ; (python_version >= "3.8" and python_version < "3.10") and (extra == "batch" or extra == "feedback")
28
29
  Requires-Dist: pyarrow (>=6.0.0,<11.0.0) ; extra == "batch"
29
30
  Requires-Dist: python-json-logger (>=2.0.2)
30
- Requires-Dist: qwak-core (==0.1.12)
31
+ Requires-Dist: qwak-core (==0.1.36)
31
32
  Requires-Dist: qwak-inference (==0.1.8)
32
33
  Requires-Dist: tabulate (>=0.8.0)
33
34
  Requires-Dist: yaspin (>=2.0.0)
@@ -1,12 +1,12 @@
1
1
  [tool.poetry]
2
2
  name = "qwak-sdk"
3
- version = "0.5.30"
3
+ version = "0.5.32"
4
4
  description = "Qwak SDK and CLI for qwak models"
5
5
  authors = ["Qwak <info@qwak.com>"]
6
6
  readme = "README.md"
7
7
  keywords = ["mlops", "ml", "deployment", "serving", "model"]
8
8
  packages = [
9
- {include = "qwak_sdk"},
9
+ { include = "qwak_sdk" },
10
10
  ]
11
11
  include = ["./qwak_sdk/**/*"]
12
12
  classifiers = [
@@ -27,20 +27,21 @@ qwak = "qwak_sdk.main:qwak_cli"
27
27
 
28
28
  [tool.poetry.dependencies]
29
29
  python = ">=3.7.1,<3.10"
30
- qwak-core = "==0.1.12"
30
+ qwak-core = "==0.1.36"
31
31
  qwak-inference = "==0.1.8"
32
+ croniter = "==1.4.1"
32
33
  tabulate = ">=0.8.0"
33
34
  python-json-logger = ">=2.0.2"
34
35
  yaspin = ">=2.0.0"
35
36
  cookiecutter = "*"
36
37
  gitpython = ">=2.1.0"
37
- boto3 = { version="^1.24.116", optional=true } # Inference dependencies
38
- pandas = [ # Inference dependencies
39
- {version="<1.4", python=">=3.7.1,<3.8", optional=true},
40
- {version=">=1.4.3,<2.0.0", python=">=3.8,<3.10", optional=true}
38
+ boto3 = { version = "^1.24.116", optional = true } # Inference dependencies
39
+ pandas = [# Inference dependencies
40
+ { version = "<1.4", python = ">=3.7.1,<3.8", optional = true },
41
+ { version = ">=1.4.3,<2.0.0", python = ">=3.8,<3.10", optional = true }
41
42
  ]
42
- joblib = { version="^1.1.0", optional=true } # Inference dependencies
43
- pyarrow = { version=">=6.0.0, <11.0.0", optional=true } # Inference dependencies
43
+ joblib = { version = "^1.1.0", optional = true } # Inference dependencies
44
+ pyarrow = { version = ">=6.0.0, <11.0.0", optional = true } # Inference dependencies
44
45
 
45
46
  [tool.poetry.group.dev.dependencies]
46
47
  pytest = "7.2.1"
@@ -48,9 +49,9 @@ pytest-lazy-fixture = "^0.6.3"
48
49
  assertpy = "^1.1"
49
50
  black = "23.1.0"
50
51
  flake8 = "5.0.0"
51
- bandit = {version = "^1.7.4", extras=["toml"]}
52
+ bandit = { version = "^1.7.4", extras = ["toml"] }
52
53
  coverage = "7.2.1"
53
- typing_extensions ="4.4.0"
54
+ typing_extensions = "4.4.0"
54
55
  bump2version = "1.0.1"
55
56
  typeguard = "^2"
56
57
  isort = "^5"
@@ -86,10 +87,10 @@ profile = "black"
86
87
  src_paths = ["qwak_sdk", "tests"]
87
88
 
88
89
  [tool.poe.tasks]
89
- clean = { cmd="rm -rf dist ./**/__pycache__", help="Clean build artifacts" }
90
+ clean = { cmd = "rm -rf dist ./**/__pycache__", help = "Clean build artifacts" }
90
91
  install = "poetry install"
91
- validate = { cmd="pre-commit run --all-files", help="Check lint on all files" }
92
- test = { cmd="pytest --disable-warnings tests", help="Run tests" }
92
+ validate = { cmd = "pre-commit run --all-files", help = "Check lint on all files" }
93
+ test = { cmd = "pytest --disable-warnings tests", help = "Run tests" }
93
94
 
94
95
  [build-system]
95
96
  requires = ["poetry-core>=1.0.0"]
@@ -1,6 +1,6 @@
1
1
  # fmt: off
2
2
  __author__ = '''Qwak.ai'''
3
- __version__ = '0.5.30'
3
+ __version__ = '0.5.32'
4
4
 
5
5
  from qwak.inner import wire_dependencies
6
6
 
@@ -0,0 +1,140 @@
1
+ from datetime import datetime, timezone
2
+ from typing import Optional
3
+
4
+ from _qwak_proto.qwak.feature_store.features.feature_set_pb2 import FeatureSet
5
+ from _qwak_proto.qwak.feature_store.features.feature_set_service_pb2 import (
6
+ GetFeatureSetByNameResponse,
7
+ )
8
+ from croniter import croniter
9
+ from qwak.clients.feature_store import FeatureRegistryClient
10
+ from qwak.feature_store.execution.backfill import Backfill
11
+ from qwak.feature_store.feature_sets.batch import BatchFeatureSetV1
12
+
13
+ from qwak_sdk.inner.tools.cli_tools import ask_yesno
14
+ from qwak_sdk.tools.colors import Color
15
+
16
+
17
+ class _BackfillLogic:
18
+ featureset: FeatureSet
19
+ batch_featureset: BatchFeatureSetV1
20
+
21
+ def configure_window_backfill(
22
+ self,
23
+ featureset_name: str,
24
+ start_time: Optional[datetime] = None,
25
+ stop_time: Optional[datetime] = None,
26
+ comment: str = None,
27
+ cluster_template: str = None,
28
+ ) -> Optional[Backfill]:
29
+ """
30
+ Configures a window back-fill object. This type of backfill will not reset the entire featureset, but will be
31
+ performed from the requested start time to the requested stop time in ticks calculated according to the
32
+ feature sets scheduling policy.
33
+ @param featureset_name: feature set name to perform the backfill job for
34
+ @type featureset_name: str
35
+ @param start_time: backfill requested start date
36
+ @type start_time: optional[datetime]
37
+ @param stop_time:
38
+ @type stop_time: optional[datetime]
39
+ @param comment:
40
+ @type comment: str
41
+ @param cluster_template:
42
+ @type cluster_template: str
43
+ @return:
44
+ @rtype:
45
+ """
46
+ print(
47
+ f"{Color.BLUE} Backfilling from {start_time} to {stop_time}, "
48
+ f"the following ticks are going to be performed {Color.END}"
49
+ )
50
+ zipped_tick_strs = Backfill.generate_expected_ticks_repr(
51
+ scheduling_policy=self.batch_featureset.scheduling_policy,
52
+ start_time=start_time,
53
+ stop_time=stop_time,
54
+ )
55
+ print("\n".join(zipped_tick_strs))
56
+ if ask_yesno("", force=False):
57
+ backfill_execution = Backfill(
58
+ featureset_name=featureset_name,
59
+ comment=comment,
60
+ cluster_template=cluster_template,
61
+ start_time=start_time,
62
+ stop_time=stop_time,
63
+ )
64
+ return backfill_execution
65
+ return None
66
+
67
+ @staticmethod
68
+ def _get_featureset_by_name(featureset_name: str) -> GetFeatureSetByNameResponse:
69
+ registry_client = FeatureRegistryClient()
70
+
71
+ return registry_client.get_feature_set_by_name(feature_set_name=featureset_name)
72
+
73
+ def get_start_stop_times(
74
+ self,
75
+ requested_start_time: Optional[datetime] = None,
76
+ requested_stop_time: Optional[datetime] = None,
77
+ ) -> tuple:
78
+ start_time: datetime = (
79
+ requested_start_time or self.batch_featureset.backfill.start_date
80
+ ).replace(tzinfo=timezone.utc)
81
+ stop_time: datetime
82
+
83
+ if start_time and start_time > datetime.now().replace(tzinfo=timezone.utc):
84
+ stop_time = datetime.utcnow().replace(tzinfo=timezone.utc)
85
+ else:
86
+ stop_time = (
87
+ requested_stop_time or datetime.utcnow().replace(tzinfo=timezone.utc)
88
+ ).replace(tzinfo=timezone.utc)
89
+
90
+ return start_time, stop_time
91
+
92
+ def is_valid_input(
93
+ self,
94
+ reset_backfill: bool,
95
+ start_time: Optional[datetime],
96
+ stop_time: Optional[datetime],
97
+ featureset_name: str,
98
+ ) -> bool:
99
+ # Validate reset_backfill or start and stop times
100
+ if (not reset_backfill and not start_time and not stop_time) or (
101
+ reset_backfill and (start_time or stop_time)
102
+ ):
103
+ print(
104
+ f"{Color.RED} please specify either --reset-backfill or one or more of --start-time/--stop-time"
105
+ )
106
+ return False
107
+
108
+ # Validate featureset exists
109
+ get_featureset_resp = self._get_featureset_by_name(
110
+ featureset_name=featureset_name
111
+ )
112
+ if not get_featureset_resp or not get_featureset_resp.feature_set:
113
+ print(f"{Color.RED} Failed to retrieve featureset {featureset_name}")
114
+ return False
115
+
116
+ self.featureset = get_featureset_resp.feature_set
117
+ fs_type_attr: str = self.featureset.feature_set_definition.feature_set_spec.feature_set_type.WhichOneof(
118
+ "set_type"
119
+ )
120
+ # Validate featureset is batch v1
121
+ if fs_type_attr != "batch_feature_set_v1":
122
+ print(
123
+ f"{Color.RED} Feature set {featureset_name} is of type {fs_type_attr}. Only BatchV1 is supported."
124
+ )
125
+ return False
126
+
127
+ self.batch_featureset = BatchFeatureSetV1.from_proto(
128
+ self.featureset.feature_set_definition.feature_set_spec
129
+ )
130
+
131
+ # Validate scheduling policy
132
+ if not self.batch_featureset.scheduling_policy or not croniter.is_valid(
133
+ self.batch_featureset.scheduling_policy
134
+ ):
135
+ print(
136
+ f"{Color.RED} Feature set {featureset_name} has an invalid scheduling policy {self.batch_featureset.scheduling_policy}."
137
+ )
138
+ return False
139
+
140
+ return True
@@ -0,0 +1,129 @@
1
+ from datetime import datetime
2
+ from typing import Optional
3
+
4
+ import click
5
+ from qwak.feature_store.execution.backfill import Backfill
6
+
7
+ from qwak_sdk.commands.feature_store.backfill._logic import _BackfillLogic
8
+ from qwak_sdk.inner.tools.cli_tools import QwakCommand, ask_yesno
9
+ from qwak_sdk.tools.colors import Color
10
+
11
+
12
+ @click.command(
13
+ "backfill", cls=QwakCommand, help="Trigger a backfill process for a Feature Set"
14
+ )
15
+ @click.option(
16
+ "--feature-set",
17
+ "--name",
18
+ help="Feature Set name to perform the backfill process for",
19
+ required=True,
20
+ type=click.STRING,
21
+ )
22
+ @click.option(
23
+ "--reset-backfill",
24
+ "--reset",
25
+ is_flag=True,
26
+ metavar="FLAG",
27
+ default=False,
28
+ help="Perform a complete reset of the featuresets data. "
29
+ "This will result in the deletion of the current existing data.",
30
+ )
31
+ @click.option(
32
+ "--start-time",
33
+ type=click.DateTime(),
34
+ default=None,
35
+ required=False,
36
+ help="The time from which the featuresets data should be backfilled in UTC. "
37
+ "Defaults to the featuresets configured backfill start time.",
38
+ )
39
+ @click.option(
40
+ "--stop-time",
41
+ type=click.DateTime(),
42
+ default=None,
43
+ required=False,
44
+ help="The time up until the featuresets data should be backfilled in UTC. Defaults to the current timestamp. "
45
+ "If the time provided is in the future, stop time will be rounded down to the current time. ",
46
+ )
47
+ @click.option(
48
+ "--cluster-template",
49
+ type=str,
50
+ default=None,
51
+ required=False,
52
+ help="Backfill resource configuration, expects a ClusterType size. "
53
+ "Defaults to the featureset resource configuration",
54
+ )
55
+ @click.option(
56
+ "--comment",
57
+ type=str,
58
+ default=None,
59
+ required=False,
60
+ help="Backfill job optional comment tag line",
61
+ )
62
+ def backfill(
63
+ feature_set: str,
64
+ reset_backfill: bool,
65
+ start_time: Optional[datetime],
66
+ stop_time: Optional[datetime],
67
+ cluster_template: Optional[str],
68
+ comment: Optional[str],
69
+ **kwargs,
70
+ ):
71
+ backill_logic = _BackfillLogic()
72
+ if not backill_logic.is_valid_input(
73
+ reset_backfill=reset_backfill,
74
+ start_time=start_time,
75
+ stop_time=stop_time,
76
+ featureset_name=feature_set,
77
+ ):
78
+ return
79
+
80
+ if reset_backfill:
81
+ backfill_execution = _configure_backfill_triggered(
82
+ featureset_name=feature_set,
83
+ comment=comment,
84
+ cluster_template=cluster_template,
85
+ )
86
+ else:
87
+ start, stop = backill_logic.get_start_stop_times(
88
+ requested_start_time=start_time, requested_stop_time=stop_time
89
+ )
90
+ if start >= stop:
91
+ print(
92
+ f"{Color.RED} Stop time {stop.isoformat()} must be after start time {start.isoformat()}"
93
+ )
94
+ return
95
+
96
+ backfill_execution = backill_logic.configure_window_backfill(
97
+ featureset_name=feature_set,
98
+ start_time=start,
99
+ stop_time=stop,
100
+ comment=comment,
101
+ cluster_template=cluster_template,
102
+ )
103
+
104
+ if backfill_execution:
105
+ execution_id: str = backfill_execution.trigger_batch_backfill()
106
+ print(
107
+ f"{Color.BLUE}✅ Triggered backfill execution for featureset {feature_set}, "
108
+ f"execution id for follow up on is {execution_id}."
109
+ )
110
+ print(
111
+ f"To inquire the status of the execution run "
112
+ f"'qwak features execution-status --execution-id {execution_id}'"
113
+ )
114
+
115
+
116
+ def _configure_backfill_triggered(
117
+ featureset_name: str, comment: str, cluster_template: str
118
+ ) -> Optional[Backfill]:
119
+ if ask_yesno(
120
+ f"You are about to remove and re-populate all data in {featureset_name}",
121
+ force=False,
122
+ ):
123
+ print(f"{Color.RED} - A backfill reset was triggered")
124
+ return Backfill(
125
+ featureset_name=featureset_name,
126
+ comment=comment,
127
+ cluster_template=cluster_template,
128
+ )
129
+ return None
@@ -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))
@@ -1,6 +1,8 @@
1
1
  import click
2
2
 
3
+ from qwak_sdk.commands.feature_store.backfill.ui import backfill
3
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
4
6
  from qwak_sdk.commands.feature_store.list.ui import list_feature_sets
5
7
  from qwak_sdk.commands.feature_store.pause.ui import pause_feature_set
6
8
  from qwak_sdk.commands.feature_store.register.ui import register_fs_objects
@@ -23,3 +25,5 @@ feature_store_commands_group.add_command(pause_feature_set)
23
25
  feature_store_commands_group.add_command(resume_feature_set)
24
26
  feature_store_commands_group.add_command(trigger_feature_set)
25
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)
@@ -29,6 +29,7 @@ from qwak_sdk.inner.tools.logger.logger import (
29
29
  BUILDS_LOGS = HOST_QWAK_HIDDEN_FOLDER / "logs" / "build"
30
30
  BUILD_LOG_NAME = "build.log"
31
31
  MAX_LOGS_NUMBER = 15
32
+ DEBUG_LEVEL = 2
32
33
 
33
34
 
34
35
  @contextlib.contextmanager
@@ -76,7 +77,7 @@ def setup_logger(
76
77
  set_handler_verbosity(
77
78
  logger,
78
79
  REMOTE_CONSOLE_HANDLER_NAME,
79
- VERBOSITY_LEVEL_MAPPING[verbosity_level],
80
+ VERBOSITY_LEVEL_MAPPING[DEBUG_LEVEL],
80
81
  )
81
82
 
82
83
  return logger
@@ -0,0 +1,6 @@
1
+ from _qwak_proto.qwak.builds.builds_pb2 import BuildStatus
2
+ from qwak.clients.build_orchestrator import BuildOrchestratorClient
3
+
4
+
5
+ def execute_get_build_status(build_id) -> BuildStatus:
6
+ return BuildOrchestratorClient().get_build(build_id).build.build_status
@@ -1,7 +1,5 @@
1
- from copy import deepcopy
2
-
3
1
  from _qwak_proto.qwak.builds.builds_pb2 import SUCCESSFUL
4
- from qwak.clients.build_management.client import BuildsManagementClient
2
+ from qwak.clients.build_orchestrator import BuildOrchestratorClient
5
3
  from qwak.clients.model_management.client import ModelsManagementClient
6
4
  from qwak.exceptions import QwakException
7
5
 
@@ -20,12 +18,11 @@ def get_latest_successful_build_from_model(model_id: str) -> str:
20
18
  """
21
19
  model = ModelsManagementClient().get_model(model_id)
22
20
  model_uuid = model.uuid
23
- last_successful_build = BuildsManagementClient().list_builds(model_uuid)
24
- builds = deepcopy(last_successful_build.builds)
25
- builds = [build for build in builds if build.build_status == SUCCESSFUL]
26
- builds.sort(key=lambda r: r.created_at.seconds)
21
+ all_builds = BuildOrchestratorClient().list_builds(model_uuid).build
22
+ builds = [build for build in all_builds if build.build_status == SUCCESSFUL]
23
+ builds.sort(key=lambda r: r.audit.created_at.seconds)
27
24
 
28
25
  if not builds:
29
26
  raise QwakException(f"Unable to find successful build for model {model_id}")
30
27
 
31
- return builds[-1].build_spec.build_id
28
+ return builds[-1].buildId
@@ -1,3 +1,4 @@
1
+ from time import sleep
1
2
  from typing import Dict, List, Set
2
3
 
3
4
  from _qwak_proto.qwak.audience.v1.audience_pb2 import AudienceRoutesEntry
@@ -24,13 +25,19 @@ from qwak_sdk.commands.models.deployments.deploy._logic.deploy_config import (
24
25
  from qwak_sdk.commands.models.deployments.undeploy._logic.variations import (
25
26
  validate_variations_for_undeploy,
26
27
  )
28
+ from qwak_sdk.tools.utils import qwak_spinner
27
29
 
28
30
  NO_DEPLOYED_VARIATIONS_ERROR_MSG = (
29
31
  "There are currently no deployed variations for model {model_id} in {env_name}"
30
32
  )
31
-
33
+ UNDEPLOY_ERROR_MSG = "Environment {environment_id} failed with status: {status}"
32
34
  logger = get_qwak_logger()
33
35
 
36
+ FAILED_UNDEPLOYMENT_STATUS = ["FAILED_UNDEPLOYMENT"]
37
+ SUCCESSFUL_UNDEPLOYMENT_STATUS = ["SUCCESSFUL_UNDEPLOYMENT"]
38
+ END_UNDEPLOYMENT_STATUSES = SUCCESSFUL_UNDEPLOYMENT_STATUS + FAILED_UNDEPLOYMENT_STATUS
39
+ TIME_TO_WAIT_FOR_UNDEPLOYMENT_POLLING = 5
40
+
34
41
 
35
42
  def get_deployed_variation_name(existing_variations_names: Set[str]) -> str:
36
43
  return list(existing_variations_names)[0]
@@ -123,6 +130,7 @@ def undeploy(
123
130
  model_id: str,
124
131
  config: DeployConfig,
125
132
  model_uuid: str = "",
133
+ sync: bool = False,
126
134
  ):
127
135
  deployment_client = DeploymentManagementClient()
128
136
  ecosystem_client = EcosystemClient()
@@ -161,14 +169,108 @@ def undeploy(
161
169
  config.realtime.fallback_variation,
162
170
  )
163
171
 
172
+ environment_to_deployment_id = {}
173
+ if sync:
174
+ environment_to_deployment_id = __get_environment_to_deployment_id(
175
+ deployment_client, model_id, model_uuid, env_undeployment_requests
176
+ )
177
+
164
178
  undeployment_response = deployment_client.undeploy_model(
165
179
  model_id=model_id,
166
180
  model_uuid=model_uuid,
167
181
  env_undeployment_requests=env_undeployment_requests,
168
182
  )
169
183
 
184
+ if sync:
185
+ __sync_undeploy(
186
+ environment_to_deployment_id=environment_to_deployment_id,
187
+ model_id=model_id,
188
+ deployment_client=deployment_client,
189
+ )
170
190
  logger.info(
171
191
  f"Current status is {ModelDeploymentStatus.Name(undeployment_response.status)}."
172
192
  )
173
193
 
174
194
  return undeployment_response
195
+
196
+
197
+ def __get_environment_to_deployment_id(
198
+ deployment_client: DeploymentManagementClient,
199
+ model_id: str,
200
+ model_uuid: str,
201
+ env_undeployment_requests: Dict,
202
+ ) -> Dict:
203
+ deployment_details = deployment_client.get_deployment_details(
204
+ model_id, model_uuid
205
+ ).environment_to_deployment_details
206
+ result = {}
207
+ for env_id, env_deployment_details in env_undeployment_requests.items():
208
+ deployment_detail_by_env = deployment_details.get(env_id)
209
+ if deployment_detail_by_env:
210
+ for deployment_detail in deployment_detail_by_env.deployments_details:
211
+ if (
212
+ env_id == deployment_detail.environment_id
213
+ and deployment_detail.variation.name
214
+ == env_deployment_details.traffic_config.selected_variation_name
215
+ ):
216
+ result[env_id] = deployment_detail.deployment_id
217
+ return result
218
+
219
+
220
+ def __sync_undeploy(
221
+ environment_to_deployment_id: Dict,
222
+ model_id: str,
223
+ deployment_client: DeploymentManagementClient,
224
+ ):
225
+ with qwak_spinner(
226
+ begin_text=f"Undeploy - model: {model_id}",
227
+ end_text="Successful undeployment",
228
+ print_callback=print,
229
+ ):
230
+ for environment_id, deployment_id in environment_to_deployment_id.items():
231
+ status_result = _poll_undeployment_status(
232
+ deployment_id=deployment_id,
233
+ deployment_client=deployment_client,
234
+ check_every_n_seconds=TIME_TO_WAIT_FOR_UNDEPLOYMENT_POLLING,
235
+ )
236
+ failed_to_undeployment = []
237
+ for _, status in status_result.items():
238
+ if status in FAILED_UNDEPLOYMENT_STATUS:
239
+ failed_to_undeployment.append(
240
+ UNDEPLOY_ERROR_MSG.format(
241
+ environment_id=environment_id, status=status
242
+ )
243
+ )
244
+ if failed_to_undeployment:
245
+ raise QwakException("\n".join(failed_to_undeployment))
246
+
247
+
248
+ def _poll_undeployment_status(
249
+ deployment_id: str,
250
+ deployment_client: DeploymentManagementClient,
251
+ check_every_n_seconds: int,
252
+ ) -> Dict:
253
+ deployment_status = ""
254
+
255
+ while deployment_status not in END_UNDEPLOYMENT_STATUSES:
256
+ sleep(check_every_n_seconds)
257
+ deployment_status = __get_deployment_status(
258
+ deployment_id=deployment_id, deployment_client=deployment_client
259
+ )
260
+ return {deployment_id: deployment_status}
261
+
262
+
263
+ def __get_deployment_status(
264
+ deployment_id: str, deployment_client: DeploymentManagementClient
265
+ ):
266
+ try:
267
+ return ModelDeploymentStatus.Name(
268
+ deployment_client.get_deployment_status(
269
+ deployment_named_id=deployment_id,
270
+ ).status
271
+ )
272
+ except QwakException as e:
273
+ logger.error(
274
+ f"Got error while trying to get deployment id: {deployment_id} status. Error is: {e.message}"
275
+ )
276
+ return ""
@@ -42,11 +42,18 @@ logger = get_qwak_logger()
42
42
  required=False,
43
43
  type=click.Path(exists=True, resolve_path=True, dir_okay=False),
44
44
  )
45
+ @click.option(
46
+ "--sync",
47
+ is_flag=True,
48
+ default=False,
49
+ help="Waiting for deployments to be undeploy",
50
+ )
45
51
  def models_undeploy(
46
52
  model_id: str,
47
53
  variation_name: str,
48
54
  environment_name: List[str],
49
55
  from_file: str = None,
56
+ sync: bool = False,
50
57
  **kwargs,
51
58
  ):
52
59
  logger.info(f"Initiating undeployment for model '{model_id}'")
@@ -62,8 +69,4 @@ def models_undeploy(
62
69
  )
63
70
  model_uuid = models_management.get_model_uuid(model_id)
64
71
 
65
- undeploy(
66
- model_id=model_id,
67
- config=config,
68
- model_uuid=model_uuid,
69
- )
72
+ undeploy(model_id=model_id, config=config, model_uuid=model_uuid, sync=sync)