zrb 0.6.0__py3-none-any.whl → 0.6.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. zrb/__init__.py +24 -20
  2. zrb/__main__.py +5 -5
  3. zrb/action/runner.py +22 -30
  4. zrb/advertisement.py +10 -9
  5. zrb/builtin/__init__.py +18 -16
  6. zrb/builtin/base64.py +13 -18
  7. zrb/builtin/devtool/__init__.py +14 -3
  8. zrb/builtin/devtool/devtool_install.py +207 -221
  9. zrb/builtin/env.py +9 -12
  10. zrb/builtin/eval.py +9 -9
  11. zrb/builtin/explain.py +73 -74
  12. zrb/builtin/generator/__init__.py +7 -11
  13. zrb/builtin/generator/app_generator/add.py +86 -87
  14. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/add.py +78 -77
  15. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_checker.py +6 -6
  16. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_common.py +14 -15
  17. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/container.py +32 -32
  18. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/deployment.py +29 -30
  19. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/image.py +1 -3
  20. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +5 -4
  21. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/__main__.py +24 -32
  22. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/add.py +89 -87
  23. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_common.py +14 -15
  24. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/container.py +42 -54
  25. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/deployment.py +34 -32
  26. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/image.py +19 -22
  27. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +18 -18
  28. zrb/builtin/generator/app_generator/template/http-port/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_checker.py +10 -10
  29. zrb/builtin/generator/app_generator/template/http-port-build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +19 -19
  30. zrb/builtin/generator/app_generator/template/use-helm/_automate/generate_snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/__main__.py +12 -14
  31. zrb/builtin/generator/cmd_task/add.py +23 -25
  32. zrb/builtin/generator/cmd_task/template/_automate/snake_zrb_task_name.py +3 -5
  33. zrb/builtin/generator/common/helper.py +15 -20
  34. zrb/builtin/generator/common/task_factory.py +29 -26
  35. zrb/builtin/generator/common/task_input.py +97 -91
  36. zrb/builtin/generator/docker_compose_task/add.py +38 -39
  37. zrb/builtin/generator/docker_compose_task/template/_automate/snake_zrb_task_name.py +13 -19
  38. zrb/builtin/generator/docker_compose_task/template/src/kebab-zrb-task-name/image/main.py +18 -14
  39. zrb/builtin/generator/fastapp/add.py +94 -90
  40. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_checker.py +28 -27
  41. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_config.py +68 -39
  42. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_env.py +24 -22
  43. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_env_file.py +12 -12
  44. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_get_start_microservices.py +43 -41
  45. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_helper.py +23 -24
  46. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_input.py +21 -20
  47. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-load-test.sh +1 -1
  48. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-start.sh +1 -1
  49. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-test.sh +2 -2
  50. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/container.py +46 -39
  51. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/deployment.py +28 -20
  52. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/frontend.py +21 -27
  53. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/image.py +23 -18
  54. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/load_test.py +35 -36
  55. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/local.py +68 -58
  56. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/test.py +24 -38
  57. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/__main__.py +23 -21
  58. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/_common.py +72 -75
  59. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/app_helper.py +70 -75
  60. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_postgresql_helper.py +18 -21
  61. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_rabbitmq_helper.py +11 -19
  62. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_redpanda_helper.py +18 -15
  63. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_signoz_helper.py +17 -21
  64. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/docker-compose.yml +12 -12
  65. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/loadtest/locustfile.py +10 -12
  66. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/Dockerfile +1 -0
  67. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/app.py +35 -30
  68. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/app_lifespan.py +21 -17
  69. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/app_state.py +3 -2
  70. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/db_connection.py +18 -20
  71. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/frontend_index.py +5 -6
  72. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/log.py +7 -15
  73. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/messagebus.py +38 -34
  74. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/rpc.py +19 -18
  75. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/config.py +68 -103
  76. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/error.py +11 -10
  77. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/__init__.py +2 -4
  78. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/kafka/admin.py +38 -35
  79. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/kafka/consumer.py +38 -45
  80. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/kafka/publisher.py +26 -29
  81. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/messagebus.py +8 -14
  82. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/mock.py +12 -8
  83. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/rabbitmq/admin.py +37 -44
  84. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/rabbitmq/consumer.py +42 -67
  85. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/rabbitmq/publisher.py +32 -55
  86. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/model/repo_model.py +11 -10
  87. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/__init__.py +2 -2
  88. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/db_entity_mixin.py +3 -6
  89. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/db_repo.py +76 -83
  90. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/repo.py +5 -5
  91. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/search_filter.py +1 -0
  92. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/__init__.py +1 -1
  93. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/messagebus/caller.py +17 -19
  94. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/messagebus/server.py +14 -18
  95. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/rpc.py +15 -28
  96. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/schema/__init__.py +1 -1
  97. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/schema/base_schema.py +6 -5
  98. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/serializer/__init__.py +1 -3
  99. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/serializer/serializer.py +3 -4
  100. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/helper/async_task.py +3 -5
  101. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/helper/conversion.py +10 -10
  102. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/helper/migration.py +6 -10
  103. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/migrate.py +3 -2
  104. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/api.py +7 -12
  105. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/__init__.py +4 -6
  106. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/access_token_scheme.py +9 -10
  107. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/access_token_util.py +6 -5
  108. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/authorizer.py +4 -4
  109. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/bearer_token_scheme.py +1 -1
  110. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/model/user_model.py +8 -10
  111. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/password_hasher.py +1 -1
  112. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/refresh_token_util.py +7 -6
  113. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/repo/group_repo.py +3 -8
  114. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/repo/permission_repo.py +3 -7
  115. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/repo/user_repo.py +3 -5
  116. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/user.py +12 -7
  117. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/__init__.py +7 -12
  118. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/access_token/scheme.py +7 -12
  119. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/access_token/util.py +20 -30
  120. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/authorizer/authorizer.py +1 -3
  121. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/authorizer/rpc_authorizer.py +5 -12
  122. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/password_hasher/bcrypt_password_hasher.py +3 -8
  123. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/password_hasher/password_hasher.py +0 -1
  124. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/refresh_token/util.py +15 -21
  125. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/api.py +42 -49
  126. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/model.py +3 -7
  127. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +18 -16
  128. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +26 -41
  129. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/api.py +46 -51
  130. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/model.py +5 -7
  131. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/repo.py +11 -8
  132. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +28 -45
  133. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/table.py +10 -10
  134. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +60 -72
  135. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +32 -61
  136. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +33 -36
  137. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +42 -61
  138. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/event.py +2 -4
  139. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/migrate.py +3 -5
  140. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/register_module.py +11 -12
  141. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +19 -26
  142. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/rpc.py +5 -13
  143. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +6 -4
  144. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +3 -1
  145. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/request.py +1 -0
  146. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/token.py +2 -2
  147. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +4 -3
  148. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/api.py +4 -5
  149. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/component/model/activity_model.py +3 -9
  150. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/component/repo/activity_repo.py +3 -7
  151. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/core/historical_repo_model.py +13 -13
  152. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/api.py +22 -23
  153. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +5 -7
  154. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/model.py +2 -6
  155. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/repo.py +8 -8
  156. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +28 -45
  157. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/table.py +3 -3
  158. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/event.py +4 -8
  159. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/migrate.py +2 -4
  160. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/register_module.py +10 -11
  161. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/rpc.py +3 -5
  162. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +3 -1
  163. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/requirements.txt +12 -12
  164. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +76 -106
  165. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +73 -103
  166. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +92 -122
  167. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +107 -134
  168. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/conftest.py +2 -2
  169. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +8 -15
  170. zrb/builtin/generator/fastapp_crud/add.py +74 -79
  171. zrb/builtin/generator/fastapp_crud/helper.py +51 -48
  172. zrb/builtin/generator/fastapp_crud/task_factory.py +17 -14
  173. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/component/model/snake_zrb_entity_name_model.py +2 -2
  174. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/component/repo/snake_zrb_entity_name_repo.py +3 -2
  175. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/api.py +58 -40
  176. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/model.py +7 -3
  177. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/repo.py +9 -4
  178. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/rpc.py +32 -39
  179. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/snake_zrb_entity_name.py +3 -1
  180. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/test/snake_zrb_module_name/test_snake_zrb_entity_name.py +68 -98
  181. zrb/builtin/generator/fastapp_field/add.py +143 -85
  182. zrb/builtin/generator/fastapp_field/helper.py +184 -125
  183. zrb/builtin/generator/fastapp_module/add.py +90 -67
  184. zrb/builtin/generator/fastapp_module/helper.py +141 -155
  185. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/api.py +3 -2
  186. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/table.py +3 -3
  187. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/event.py +3 -5
  188. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/migrate.py +2 -4
  189. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py +10 -11
  190. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/rpc.py +3 -5
  191. zrb/builtin/generator/pip_package/add.py +39 -40
  192. zrb/builtin/generator/pip_package/template/_automate/snake_zrb_package_name/local.py +30 -30
  193. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/__init__.py +1 -0
  194. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/__main__.py +1 -0
  195. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/util.py +2 -2
  196. zrb/builtin/generator/plugin/create.py +39 -36
  197. zrb/builtin/generator/plugin/template/src/snake_zrb_package_name/__init__.py +1 -1
  198. zrb/builtin/generator/plugin/template/src/snake_zrb_package_name/__main__.py +1 -0
  199. zrb/builtin/generator/plugin/template/src/snake_zrb_package_name/task/example_task.py +6 -4
  200. zrb/builtin/generator/plugin/template/zrb_init.py +27 -27
  201. zrb/builtin/generator/project/create.py +38 -46
  202. zrb/builtin/generator/project/template/.flake8 +3 -0
  203. zrb/builtin/generator/project/template/project.sh +19 -10
  204. zrb/builtin/generator/project_task/task_factory.py +60 -61
  205. zrb/builtin/generator/project_task/template/_automate/_project/__init__.py +2 -2
  206. zrb/builtin/generator/project_task/template/_automate/_project/build_project_images.py +4 -4
  207. zrb/builtin/generator/project_task/template/_automate/_project/deploy_project.py +4 -4
  208. zrb/builtin/generator/project_task/template/_automate/_project/destroy_project.py +4 -4
  209. zrb/builtin/generator/project_task/template/_automate/_project/push_project_images.py +4 -4
  210. zrb/builtin/generator/project_task/template/_automate/_project/remove_project_containers.py +4 -4
  211. zrb/builtin/generator/project_task/template/_automate/_project/start_project.py +4 -4
  212. zrb/builtin/generator/project_task/template/_automate/_project/start_project_containers.py +4 -4
  213. zrb/builtin/generator/project_task/template/_automate/_project/stop_project_containers.py +4 -4
  214. zrb/builtin/generator/python_task/add.py +25 -33
  215. zrb/builtin/generator/python_task/template/_automate/snake_zrb_task_name.py +8 -7
  216. zrb/builtin/generator/simple_python_app/add.py +81 -75
  217. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/_common.py +14 -15
  218. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/container.py +46 -61
  219. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/deployment.py +34 -32
  220. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/image.py +19 -22
  221. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/local.py +23 -25
  222. zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/deployment/__main__.py +24 -32
  223. zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/src/main.py +18 -14
  224. zrb/builtin/git.py +46 -46
  225. zrb/builtin/group.py +13 -34
  226. zrb/builtin/helper/reccuring_action.py +26 -29
  227. zrb/builtin/md5.py +17 -30
  228. zrb/builtin/process.py +19 -19
  229. zrb/builtin/project.py +13 -15
  230. zrb/builtin/say.py +69 -88
  231. zrb/builtin/schedule.py +15 -19
  232. zrb/builtin/ubuntu.py +44 -35
  233. zrb/builtin/update.py +5 -5
  234. zrb/builtin/version.py +3 -7
  235. zrb/builtin/watch_changes.py +24 -25
  236. zrb/config/config.py +19 -18
  237. zrb/helper/accessories/color.py +18 -6
  238. zrb/helper/accessories/icon.py +24 -3
  239. zrb/helper/accessories/name.py +120 -28
  240. zrb/helper/advertisement.py +9 -13
  241. zrb/helper/callable.py +2 -4
  242. zrb/helper/cli.py +27 -31
  243. zrb/helper/codemod/add_argument_to_function.py +3 -4
  244. zrb/helper/codemod/add_argument_to_function_call.py +4 -7
  245. zrb/helper/codemod/add_assert_resource.py +7 -7
  246. zrb/helper/codemod/add_function_call.py +3 -5
  247. zrb/helper/codemod/add_import_module.py +15 -26
  248. zrb/helper/codemod/add_key_value_to_dict.py +7 -10
  249. zrb/helper/codemod/add_property_to_class.py +10 -8
  250. zrb/helper/codemod/add_upstream_to_task.py +21 -33
  251. zrb/helper/codemod/append_code_to_function.py +6 -13
  252. zrb/helper/codemod/format_code.py +2 -1
  253. zrb/helper/default_env.py +25 -25
  254. zrb/helper/docker_compose/fetch_external_env.py +18 -18
  255. zrb/helper/docker_compose/file.py +5 -4
  256. zrb/helper/docstring.py +44 -47
  257. zrb/helper/env_map/fetch.py +7 -12
  258. zrb/helper/file/copy_tree.py +12 -17
  259. zrb/helper/file/match.py +6 -7
  260. zrb/helper/file/text.py +8 -6
  261. zrb/helper/git/detect_changes.py +9 -8
  262. zrb/helper/loader/load_module.py +14 -13
  263. zrb/helper/log.py +4 -3
  264. zrb/helper/map/conversion.py +4 -5
  265. zrb/helper/python_task.py +2 -4
  266. zrb/helper/render_data.py +25 -18
  267. zrb/helper/string/constant.py +2 -2
  268. zrb/helper/string/conversion.py +17 -16
  269. zrb/helper/string/jinja.py +2 -2
  270. zrb/helper/typecheck.py +6 -4
  271. zrb/helper/typing.py +10 -2
  272. zrb/helper/util.py +44 -40
  273. zrb/task/any_task.py +251 -251
  274. zrb/task/base_remote_cmd_task.py +76 -59
  275. zrb/task/base_task/base_task.py +95 -108
  276. zrb/task/base_task/component/base_task_model.py +73 -71
  277. zrb/task/base_task/component/common_task_model.py +42 -29
  278. zrb/task/base_task/component/pid_model.py +3 -5
  279. zrb/task/base_task/component/renderer.py +26 -36
  280. zrb/task/base_task/component/trackers.py +6 -9
  281. zrb/task/checker.py +14 -9
  282. zrb/task/cmd_task.py +102 -100
  283. zrb/task/decorator.py +19 -13
  284. zrb/task/docker_compose_task.py +127 -98
  285. zrb/task/flow_task.py +16 -19
  286. zrb/task/http_checker.py +40 -36
  287. zrb/task/notifier.py +50 -38
  288. zrb/task/parallel.py +3 -3
  289. zrb/task/path_checker.py +34 -27
  290. zrb/task/path_watcher.py +49 -40
  291. zrb/task/port_checker.py +33 -26
  292. zrb/task/recurring_task.py +36 -42
  293. zrb/task/remote_cmd_task.py +31 -28
  294. zrb/task/resource_maker.py +66 -52
  295. zrb/task/rsync_task.py +24 -21
  296. zrb/task/task.py +4 -3
  297. zrb/task/time_watcher.py +36 -31
  298. zrb/task_env/constant.py +1 -1
  299. zrb/task_env/env.py +33 -31
  300. zrb/task_env/env_file.py +24 -23
  301. zrb/task_group/group.py +27 -30
  302. zrb/task_input/any_input.py +18 -16
  303. zrb/task_input/base_input.py +26 -26
  304. zrb/task_input/bool_input.py +6 -6
  305. zrb/task_input/choice_input.py +11 -9
  306. zrb/task_input/constant.py +1 -1
  307. zrb/task_input/float_input.py +6 -5
  308. zrb/task_input/int_input.py +8 -8
  309. zrb/task_input/password_input.py +9 -9
  310. zrb/task_input/str_input.py +8 -8
  311. zrb/task_input/task_input.py +4 -2
  312. {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/METADATA +3 -1
  313. {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/RECORD +316 -315
  314. {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/LICENSE +0 -0
  315. {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/WHEEL +0 -0
  316. {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/entry_points.txt +0 -0
@@ -1,30 +1,42 @@
1
+ import datetime
2
+ import logging
3
+ import os
4
+ import sys
5
+ from functools import lru_cache
6
+
7
+ from zrb.config.config import env_prefix, logging_level, show_time
8
+ from zrb.helper.accessories.color import colored
9
+ from zrb.helper.log import logger
10
+ from zrb.helper.string.conversion import to_variable_name
11
+ from zrb.helper.string.modification import double_quote
12
+ from zrb.helper.typecheck import typechecked
1
13
  from zrb.helper.typing import (
2
- Any, Callable, Iterable, List, Mapping, Optional, Union, JinjaTemplate
14
+ Any,
15
+ Callable,
16
+ Iterable,
17
+ JinjaTemplate,
18
+ List,
19
+ Mapping,
20
+ Optional,
21
+ Union,
3
22
  )
4
- from zrb.helper.typecheck import typechecked
5
- from zrb.config.config import show_time, logging_level
6
23
  from zrb.task.any_task import AnyTask
7
24
  from zrb.task.any_task_event_handler import (
8
- OnTriggered, OnWaiting, OnSkipped, OnStarted, OnReady, OnRetry, OnFailed
25
+ OnFailed,
26
+ OnReady,
27
+ OnRetry,
28
+ OnSkipped,
29
+ OnStarted,
30
+ OnTriggered,
31
+ OnWaiting,
9
32
  )
10
- from zrb.helper.log import logger
11
- from zrb.helper.accessories.color import colored
12
- from zrb.task_input.any_input import AnyInput
13
- from zrb.task_group.group import Group
14
- from zrb.task_env.env import Env
15
- from zrb.task_env.env_file import EnvFile
16
33
  from zrb.task.base_task.component.common_task_model import CommonTaskModel
17
34
  from zrb.task.base_task.component.pid_model import PidModel
18
35
  from zrb.task.base_task.component.trackers import TimeTracker
19
- from zrb.config.config import env_prefix
20
- from zrb.helper.string.modification import double_quote
21
- from zrb.helper.string.conversion import to_variable_name
22
- from functools import lru_cache
23
-
24
- import datetime
25
- import logging
26
- import os
27
- import sys
36
+ from zrb.task_env.env import Env
37
+ from zrb.task_env.env_file import EnvFile
38
+ from zrb.task_group.group import Group
39
+ from zrb.task_input.any_input import AnyInput
28
40
 
29
41
  LOG_NAME_LENGTH = 20
30
42
 
@@ -35,7 +47,7 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
35
47
  self,
36
48
  name: str,
37
49
  group: Optional[Group] = None,
38
- description: str = '',
50
+ description: str = "",
39
51
  inputs: List[AnyInput] = [],
40
52
  envs: Iterable[Env] = [],
41
53
  env_files: Iterable[EnvFile] = [],
@@ -55,7 +67,7 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
55
67
  on_retry: Optional[OnRetry] = None,
56
68
  on_failed: Optional[OnFailed] = None,
57
69
  should_execute: Union[bool, JinjaTemplate, Callable[..., bool]] = True,
58
- return_upstream_result: bool = False
70
+ return_upstream_result: bool = False,
59
71
  ):
60
72
  self.__rjust_full_cli_name: Optional[str] = None
61
73
  self.__has_cli_interface = False
@@ -84,7 +96,7 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
84
96
  on_retry=on_retry,
85
97
  on_failed=on_failed,
86
98
  should_execute=should_execute,
87
- return_upstream_result=return_upstream_result
99
+ return_upstream_result=return_upstream_result,
88
100
  )
89
101
  PidModel.__init__(self)
90
102
  TimeTracker.__init__(self)
@@ -92,77 +104,67 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
92
104
  self.__kwargs: Mapping[str, Any] = {}
93
105
 
94
106
  def _set_args(self, args: Iterable[Any]):
95
- '''
107
+ """
96
108
  Set args that will be shown at the end of the execution
97
- '''
109
+ """
98
110
  self.__args = list(args)
99
111
 
100
112
  def _set_kwargs(self, kwargs: Mapping[str, Any]):
101
- '''
113
+ """
102
114
  Set kwargs that will be shown at the end of the execution
103
- '''
115
+ """
104
116
  self.__kwargs = kwargs
105
117
 
106
118
  def log_debug(self, message: Any):
107
119
  if logging_level > logging.DEBUG:
108
120
  return
109
121
  prefix = self.__get_log_prefix()
110
- colored_message = colored(
111
- f'{prefix} • {message}', attrs=['dark']
112
- )
122
+ colored_message = colored(f"{prefix} • {message}", attrs=["dark"])
113
123
  logger.debug(colored_message)
114
124
 
115
125
  def log_warn(self, message: Any):
116
126
  if logging_level > logging.WARNING:
117
127
  return
118
128
  prefix = self.__get_log_prefix()
119
- colored_message = colored(
120
- f'{prefix} • {message}', attrs=['dark']
121
- )
129
+ colored_message = colored(f"{prefix} • {message}", attrs=["dark"])
122
130
  logger.warning(colored_message)
123
131
 
124
132
  def log_info(self, message: Any):
125
133
  if logging_level > logging.INFO:
126
134
  return
127
135
  prefix = self.__get_log_prefix()
128
- colored_message = colored(
129
- f'{prefix} • {message}', attrs=['dark']
130
- )
136
+ colored_message = colored(f"{prefix} • {message}", attrs=["dark"])
131
137
  logger.info(colored_message)
132
138
 
133
139
  def log_error(self, message: Any):
134
140
  if logging_level > logging.ERROR:
135
141
  return
136
142
  prefix = self.__get_log_prefix()
137
- colored_message = colored(
138
- f'{prefix} • {message}', color='red', attrs=['bold']
139
- )
143
+ colored_message = colored(f"{prefix} • {message}", color="red", attrs=["bold"])
140
144
  logger.error(colored_message, exc_info=True)
141
145
 
142
146
  def log_critical(self, message: Any):
143
147
  if logging_level > logging.CRITICAL:
144
148
  return
145
149
  prefix = self.__get_log_prefix()
146
- colored_message = colored(
147
- f'{prefix} • {message}', color='red', attrs=['bold']
148
- )
150
+ colored_message = colored(f"{prefix} • {message}", color="red", attrs=["bold"])
149
151
  logger.critical(colored_message, exc_info=True)
150
152
 
151
153
  def print_out(self, message: Any, trim_message: bool = True):
152
154
  prefix = self.__get_colored_print_prefix()
153
- message_str = f'{message}'.rstrip() if trim_message else f'{message}'
154
- print(f'🤖 ○ {prefix} • {message_str}', file=sys.stderr)
155
+ message_str = f"{message}".rstrip() if trim_message else f"{message}"
156
+ print(f"🤖 ○ {prefix} • {message_str}", file=sys.stderr)
155
157
  sys.stderr.flush()
156
158
 
157
159
  def print_err(self, message: Any, trim_message: bool = True):
158
160
  prefix = self.__get_colored_print_prefix()
159
- message_str = f'{message}'.rstrip() if trim_message else f'{message}'
160
- print(f'🤖 △ {prefix} • {message_str}', file=sys.stderr)
161
+ message_str = f"{message}".rstrip() if trim_message else f"{message}"
162
+ print(f"🤖 △ {prefix} • {message_str}", file=sys.stderr)
161
163
  sys.stderr.flush()
162
164
 
163
165
  def print_out_dark(self, message: Any, trim_message: bool = True):
164
- message_str = f'{message}'
165
- self.print_out(colored(message_str, attrs=['dark']), trim_message)
166
+ message_str = f"{message}"
167
+ self.print_out(colored(message_str, attrs=["dark"]), trim_message)
166
168
 
167
169
  def _print_result(self, result: Any):
168
170
  if result is None:
@@ -180,19 +182,19 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
180
182
  print(result)
181
183
 
182
184
  def _play_bell(self):
183
- print('\a', end='', file=sys.stderr, flush=True)
185
+ print("\a", end="", file=sys.stderr, flush=True)
184
186
 
185
187
  def _show_done_info(self):
186
188
  elapsed_time = self._get_elapsed_time()
187
- self.print_out_dark(f'Completed in {elapsed_time} seconds')
189
+ self.print_out_dark(f"Completed in {elapsed_time} seconds")
188
190
  self._play_bell()
189
191
 
190
192
  def _show_env_prefix(self):
191
- if env_prefix == '':
193
+ if env_prefix == "":
192
194
  return
193
- colored_env_prefix = colored(env_prefix, color='yellow')
194
- colored_label = colored('Your current environment: ', attrs=['dark'])
195
- print(colored(f'{colored_label}{colored_env_prefix}'), file=sys.stderr)
195
+ colored_env_prefix = colored(env_prefix, color="yellow")
196
+ colored_label = colored("Your current environment: ", attrs=["dark"])
197
+ print(colored(f"{colored_label}{colored_env_prefix}"), file=sys.stderr)
196
198
 
197
199
  def _show_run_command(self):
198
200
  if not self.__has_cli_interface:
@@ -204,15 +206,15 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
204
206
  key = task_input.get_name()
205
207
  kwarg_key = to_variable_name(key)
206
208
  quoted_value = double_quote(str(self.__kwargs[kwarg_key]))
207
- params.append(f'--{key} {quoted_value}')
209
+ params.append(f"--{key} {quoted_value}")
208
210
  run_cmd = self._get_full_cli_name()
209
211
  run_cmd_with_param = run_cmd
210
212
  if len(params) > 0:
211
- param_str = ' '.join(params)
212
- run_cmd_with_param += ' ' + param_str
213
- colored_command = colored(run_cmd_with_param, color='yellow')
214
- colored_label = colored('To run again: ', attrs=['dark'])
215
- print(colored(f'{colored_label}{colored_command}'), file=sys.stderr)
213
+ param_str = " ".join(params)
214
+ run_cmd_with_param += " " + param_str
215
+ colored_command = colored(run_cmd_with_param, color="yellow")
216
+ colored_label = colored("To run again: ", attrs=["dark"])
217
+ print(colored(f"{colored_label}{colored_command}"), file=sys.stderr)
216
218
 
217
219
  def __get_colored_print_prefix(self) -> str:
218
220
  return self.__get_colored(self.__get_print_prefix())
@@ -225,51 +227,51 @@ class BaseTaskModel(CommonTaskModel, PidModel, TimeTracker):
225
227
  icon = self.get_icon()
226
228
  length = LOG_NAME_LENGTH - len(icon)
227
229
  rjust_cli_name = self.__get_rjust_full_cli_name(length)
228
- return f'{common_prefix} {icon} {rjust_cli_name}'
230
+ return f"{common_prefix} {icon} {rjust_cli_name}"
229
231
 
230
232
  def __get_log_prefix(self) -> str:
231
233
  common_prefix = self.__get_common_prefix(show_time=False)
232
234
  icon = self.get_icon()
233
235
  length = LOG_NAME_LENGTH - len(icon)
234
236
  filled_name = self.__get_rjust_full_cli_name(length)
235
- return f'{common_prefix} {icon} {filled_name}'
237
+ return f"{common_prefix} {icon} {filled_name}"
236
238
 
237
239
  def __get_common_prefix(self, show_time: bool) -> str:
238
240
  attempt = self._get_attempt()
239
241
  max_attempt = self._get_max_attempt()
240
242
  pid = str(self._get_task_pid()).rjust(6)
241
243
  if show_time:
242
- now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
243
- return f'◷ {now} ❁ {pid} → {attempt}/{max_attempt}'
244
- return f'❁ {pid} → {attempt}/{max_attempt}'
244
+ now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
245
+ return f"◷ {now} ❁ {pid} → {attempt}/{max_attempt}"
246
+ return f"❁ {pid} → {attempt}/{max_attempt}"
245
247
 
246
248
  @lru_cache
247
249
  def __get_rjust_full_cli_name(self, length: int) -> str:
248
250
  if self.__rjust_full_cli_name is not None:
249
251
  return self.__rjust_full_cli_name
250
252
  complete_name = self._get_full_cli_name()
251
- self.__rjust_full_cli_name = complete_name.rjust(length, ' ')
253
+ self.__rjust_full_cli_name = complete_name.rjust(length, " ")
252
254
  return self.__rjust_full_cli_name
253
255
 
254
256
  @lru_cache
255
257
  def __get_executable_name(self) -> str:
256
- if len(sys.argv) > 0 and sys.argv[0] != '':
258
+ if len(sys.argv) > 0 and sys.argv[0] != "":
257
259
  return os.path.basename(sys.argv[0])
258
- return 'zrb'
260
+ return "zrb"
259
261
 
260
262
  @lru_cache
261
263
  def _get_full_cli_name(self) -> str:
262
264
  if self.__complete_name is not None:
263
265
  return self.__complete_name
264
- executable_prefix = ''
266
+ executable_prefix = ""
265
267
  if self.__has_cli_interface:
266
- executable_prefix += self.__get_executable_name() + ' '
268
+ executable_prefix += self.__get_executable_name() + " "
267
269
  cli_name = self.get_cli_name()
268
270
  if self._group is None:
269
- self.__complete_name = f'{executable_prefix}{cli_name}'
271
+ self.__complete_name = f"{executable_prefix}{cli_name}"
270
272
  return self.__complete_name
271
273
  group_cli_name = self._group._get_full_cli_name()
272
- self.__complete_name = f'{executable_prefix}{group_cli_name} {cli_name}' # noqa
274
+ self.__complete_name = f"{executable_prefix}{group_cli_name} {cli_name}" # noqa
273
275
  return self.__complete_name
274
276
 
275
277
  def _set_has_cli_interface(self):
@@ -1,31 +1,44 @@
1
+ import os
2
+
3
+ from zrb.helper.accessories.color import get_random_color
4
+ from zrb.helper.accessories.icon import get_random_icon
5
+ from zrb.helper.string.conversion import to_cli_name
6
+ from zrb.helper.typecheck import typechecked
1
7
  from zrb.helper.typing import (
2
- Any, Callable, Iterable, List, Mapping, Optional, Union, JinjaTemplate
8
+ Any,
9
+ Callable,
10
+ Iterable,
11
+ JinjaTemplate,
12
+ List,
13
+ Mapping,
14
+ Optional,
15
+ Union,
3
16
  )
4
- from zrb.helper.typecheck import typechecked
17
+ from zrb.helper.util import coalesce_str
18
+ from zrb.task.any_task import AnyTask
5
19
  from zrb.task.any_task_event_handler import (
6
- OnTriggered, OnWaiting, OnSkipped, OnStarted, OnReady, OnRetry, OnFailed
20
+ OnFailed,
21
+ OnReady,
22
+ OnRetry,
23
+ OnSkipped,
24
+ OnStarted,
25
+ OnTriggered,
26
+ OnWaiting,
7
27
  )
8
- from zrb.task.any_task import AnyTask
9
- from zrb.helper.string.conversion import to_cli_name
10
- from zrb.helper.accessories.color import get_random_color
11
- from zrb.helper.accessories.icon import get_random_icon
12
- from zrb.helper.util import coalesce_str
13
- from zrb.task_input.any_input import AnyInput
14
- from zrb.task_group.group import Group
15
28
  from zrb.task_env.constant import RESERVED_ENV_NAMES
16
29
  from zrb.task_env.env import Env
17
30
  from zrb.task_env.env_file import EnvFile
18
-
19
- import os
31
+ from zrb.task_group.group import Group
32
+ from zrb.task_input.any_input import AnyInput
20
33
 
21
34
 
22
35
  @typechecked
23
- class CommonTaskModel():
36
+ class CommonTaskModel:
24
37
  def __init__(
25
38
  self,
26
39
  name: str,
27
40
  group: Optional[Group] = None,
28
- description: str = '',
41
+ description: str = "",
29
42
  inputs: List[AnyInput] = [],
30
43
  envs: Iterable[Env] = [],
31
44
  env_files: Iterable[EnvFile] = [],
@@ -45,7 +58,7 @@ class CommonTaskModel():
45
58
  on_retry: Optional[OnRetry] = None,
46
59
  on_failed: Optional[OnFailed] = None,
47
60
  should_execute: Union[bool, JinjaTemplate, Callable[..., bool]] = True,
48
- return_upstream_result: bool = False
61
+ return_upstream_result: bool = False,
49
62
  ):
50
63
  self._name = name
51
64
  self._group = group
@@ -72,7 +85,7 @@ class CommonTaskModel():
72
85
  self._on_failed = on_failed
73
86
  self._should_execute = should_execute
74
87
  self._return_upstream_result = return_upstream_result
75
- self.__execution_id = ''
88
+ self.__execution_id = ""
76
89
  self.__allow_add_envs = True
77
90
  self.__allow_add_env_files = True
78
91
  self.__allow_add_inputs = True
@@ -88,7 +101,7 @@ class CommonTaskModel():
88
101
  self.__allow_add_upstreams = False
89
102
 
90
103
  def _set_execution_id(self, execution_id: str):
91
- if self.__execution_id == '':
104
+ if self.__execution_id == "":
92
105
  self.__execution_id = execution_id
93
106
 
94
107
  def _propagate_execution_id(self):
@@ -142,12 +155,12 @@ class CommonTaskModel():
142
155
 
143
156
  def insert_input(self, *inputs: AnyInput):
144
157
  if not self.__allow_add_inputs:
145
- raise Exception(f'Cannot insert inputs for `{self.get_name()}`')
158
+ raise Exception(f"Cannot insert inputs for `{self.get_name()}`")
146
159
  self._inputs = list(inputs) + list(self._inputs)
147
160
 
148
161
  def add_input(self, *inputs: AnyInput):
149
162
  if not self.__allow_add_inputs:
150
- raise Exception(f'Cannot add inputs for `{self.get_name()}`')
163
+ raise Exception(f"Cannot add inputs for `{self.get_name()}`")
151
164
  self._inputs = list(self._inputs) + list(inputs)
152
165
 
153
166
  def inject_inputs(self):
@@ -160,9 +173,9 @@ class CommonTaskModel():
160
173
  return list(self._inputs)
161
174
 
162
175
  def _get_combined_inputs(self) -> Iterable[AnyInput]:
163
- ''''
176
+ """'
164
177
  Getting all inputs of this task and all its upstream, non-duplicated.
165
- '''
178
+ """
166
179
  if self.__all_inputs is not None:
167
180
  return self.__all_inputs
168
181
  self.__all_inputs: List[AnyInput] = []
@@ -197,12 +210,12 @@ class CommonTaskModel():
197
210
 
198
211
  def insert_env(self, *envs: Env):
199
212
  if not self.__allow_add_envs:
200
- raise Exception(f'Cannot insert envs to `{self.get_name()}`')
213
+ raise Exception(f"Cannot insert envs to `{self.get_name()}`")
201
214
  self._envs = list(envs) + list(self._envs)
202
215
 
203
216
  def add_env(self, *envs: Env):
204
217
  if not self.__allow_add_envs:
205
- raise Exception(f'Cannot add envs to `{self.get_name()}`')
218
+ raise Exception(f"Cannot add envs to `{self.get_name()}`")
206
219
  self._envs = list(self._envs) + list(envs)
207
220
 
208
221
  def inject_envs(self):
@@ -233,12 +246,12 @@ class CommonTaskModel():
233
246
 
234
247
  def insert_env_file(self, *env_files: EnvFile):
235
248
  if not self.__allow_add_env_files:
236
- raise Exception(f'Cannot insert env_files to `{self.get_name()}`')
249
+ raise Exception(f"Cannot insert env_files to `{self.get_name()}`")
237
250
  self._env_files = list(env_files) + list(self._env_files)
238
251
 
239
252
  def add_env_file(self, *env_files: EnvFile):
240
253
  if not self.__allow_add_env_files:
241
- raise Exception(f'Cannot add env_files to `{self.get_name()}`')
254
+ raise Exception(f"Cannot add env_files to `{self.get_name()}`")
242
255
  self._env_files = list(self._env_files) + list(env_files)
243
256
 
244
257
  def inject_env_files(self):
@@ -246,12 +259,12 @@ class CommonTaskModel():
246
259
 
247
260
  def insert_upstream(self, *upstreams: AnyTask):
248
261
  if not self.__allow_add_upstreams:
249
- raise Exception(f'Cannot insert upstreams to `{self.get_name()}`')
262
+ raise Exception(f"Cannot insert upstreams to `{self.get_name()}`")
250
263
  self._upstreams = list(upstreams) + list(self._upstreams)
251
264
 
252
265
  def add_upstream(self, *upstreams: AnyTask):
253
266
  if not self.__allow_add_upstreams:
254
- raise Exception(f'Cannot add upstreams to `{self.get_name()}`')
267
+ raise Exception(f"Cannot add upstreams to `{self.get_name()}`")
255
268
  self._upstreams = list(self._upstreams) + list(upstreams)
256
269
 
257
270
  def inject_upstreams(self):
@@ -277,13 +290,13 @@ class CommonTaskModel():
277
290
 
278
291
  def insert_checker(self, *checkers: AnyTask):
279
292
  if not self.__allow_add_checkers:
280
- raise Exception(f'Cannot insert checkers to `{self.get_name()}`')
293
+ raise Exception(f"Cannot insert checkers to `{self.get_name()}`")
281
294
  additional_checkers = [checker.copy() for checker in checkers]
282
295
  self._checkers = additional_checkers + self._checkers
283
296
 
284
297
  def add_checker(self, *checkers: AnyTask):
285
298
  if not self.__allow_add_checkers:
286
- raise Exception(f'Cannot add checkers to `{self.get_name()}`')
299
+ raise Exception(f"Cannot add checkers to `{self.get_name()}`")
287
300
  additional_checkers = [checker.copy() for checker in checkers]
288
301
  self._checkers = self._checkers + additional_checkers
289
302
 
@@ -1,11 +1,10 @@
1
- from zrb.helper.typecheck import typechecked
2
-
3
1
  import os
4
2
 
3
+ from zrb.helper.typecheck import typechecked
4
+
5
5
 
6
6
  @typechecked
7
- class PidModel():
8
-
7
+ class PidModel:
9
8
  def __init__(self):
10
9
  self.__task_pid: int = os.getpid()
11
10
 
@@ -14,4 +13,3 @@ class PidModel():
14
13
 
15
14
  def _get_task_pid(self) -> int:
16
15
  return self.__task_pid
17
-
@@ -1,28 +1,28 @@
1
- from zrb.task.any_task import AnyTask
2
- from zrb.helper.typing import Any, JinjaTemplate, Mapping, Optional, Union
3
- from zrb.helper.typecheck import typechecked
4
- from zrb.helper.string.conversion import to_boolean
5
- from zrb.helper.string.jinja import is_probably_jinja
6
- from zrb.helper.render_data import DEFAULT_RENDER_DATA
7
-
8
1
  import os
2
+
9
3
  import jinja2
10
4
 
5
+ from zrb.helper.render_data import DEFAULT_RENDER_DATA
6
+ from zrb.helper.string.conversion import to_boolean
7
+ from zrb.helper.string.jinja import is_probably_jinja
8
+ from zrb.helper.typecheck import typechecked
9
+ from zrb.helper.typing import Any, JinjaTemplate, Mapping, Optional, Union
10
+ from zrb.task.any_task import AnyTask
11
+
11
12
 
12
13
  class AnyExtensionFileSystemLoader(jinja2.FileSystemLoader):
13
14
  def get_source(self, environment, template):
14
15
  for search_dir in self.searchpath:
15
16
  file_path = os.path.join(search_dir, template)
16
17
  if os.path.exists(file_path):
17
- with open(file_path, 'r') as file:
18
+ with open(file_path, "r") as file:
18
19
  contents = file.read()
19
20
  return contents, file_path, lambda: False
20
21
  raise jinja2.TemplateNotFound(template)
21
22
 
22
23
 
23
24
  @typechecked
24
- class Renderer():
25
-
25
+ class Renderer:
26
26
  def __init__(self):
27
27
  self.__input_map: Mapping[str, Any] = {}
28
28
  self.__task: Optional[AnyTask] = None
@@ -47,9 +47,7 @@ class Renderer():
47
47
  def _set_env_map(self, key: str, val: str):
48
48
  self.__env_map[key] = val
49
49
 
50
- def render_any(
51
- self, value: Any, data: Optional[Mapping[str, Any]] = None
52
- ) -> Any:
50
+ def render_any(self, value: Any, data: Optional[Mapping[str, Any]] = None) -> Any:
53
51
  if isinstance(value, str):
54
52
  return self.render_str(value, data)
55
53
  return value
@@ -57,16 +55,14 @@ class Renderer():
57
55
  def render_float(
58
56
  self,
59
57
  value: Union[JinjaTemplate, float],
60
- data: Optional[Mapping[str, Any]] = None
58
+ data: Optional[Mapping[str, Any]] = None,
61
59
  ) -> float:
62
60
  if isinstance(value, str):
63
61
  return float(self.render_str(value, data))
64
62
  return value
65
63
 
66
64
  def render_int(
67
- self,
68
- value: Union[JinjaTemplate, int],
69
- data: Optional[Mapping[str, Any]] = None
65
+ self, value: Union[JinjaTemplate, int], data: Optional[Mapping[str, Any]] = None
70
66
  ) -> int:
71
67
  if isinstance(value, str):
72
68
  return int(self.render_str(value, data))
@@ -75,16 +71,14 @@ class Renderer():
75
71
  def render_bool(
76
72
  self,
77
73
  value: Union[JinjaTemplate, bool],
78
- data: Optional[Mapping[str, Any]] = None
74
+ data: Optional[Mapping[str, Any]] = None,
79
75
  ) -> bool:
80
76
  if isinstance(value, str):
81
77
  return to_boolean(self.render_str(value, data))
82
78
  return value
83
79
 
84
80
  def render_str(
85
- self,
86
- value: JinjaTemplate,
87
- data: Optional[Mapping[str, Any]] = None
81
+ self, value: JinjaTemplate, data: Optional[Mapping[str, Any]] = None
88
82
  ) -> str:
89
83
  if value in self.__rendered_str:
90
84
  return self.__rendered_str[value]
@@ -95,24 +89,18 @@ class Renderer():
95
89
  try:
96
90
  rendered_text = template.render(render_data)
97
91
  except Exception:
98
- raise Exception(
99
- f'Fail to render "{value}" with data: {render_data}'
100
- )
92
+ raise Exception(f'Fail to render "{value}" with data: {render_data}')
101
93
  self.__rendered_str[value] = rendered_text
102
94
  return rendered_text
103
95
 
104
96
  def render_file(
105
- self,
106
- path: JinjaTemplate,
107
- data: Optional[Mapping[str, Any]] = None
97
+ self, path: JinjaTemplate, data: Optional[Mapping[str, Any]] = None
108
98
  ) -> str:
109
99
  location_dir = os.path.dirname(path)
110
- env = jinja2.Environment(
111
- loader=AnyExtensionFileSystemLoader([location_dir])
112
- )
100
+ env = jinja2.Environment(loader=AnyExtensionFileSystemLoader([location_dir]))
113
101
  template = env.get_template(path)
114
102
  render_data = self.__get_render_data(additional_data=data)
115
- render_data['TEMPLATE_DIR'] = location_dir
103
+ render_data["TEMPLATE_DIR"] = location_dir
116
104
  rendered_text = template.render(render_data)
117
105
  return rendered_text
118
106
 
@@ -128,10 +116,12 @@ class Renderer():
128
116
  if self.__render_data is not None:
129
117
  return self.__render_data
130
118
  render_data = dict(DEFAULT_RENDER_DATA)
131
- render_data.update({
132
- 'env': self.__env_map,
133
- 'input': self.__input_map,
134
- 'task': self.__task,
135
- })
119
+ render_data.update(
120
+ {
121
+ "env": self.__env_map,
122
+ "input": self.__input_map,
123
+ "task": self.__task,
124
+ }
125
+ )
136
126
  self.__render_data = render_data
137
127
  return render_data
@@ -1,15 +1,14 @@
1
- from zrb.helper.typing import Optional
2
- from zrb.helper.typecheck import typechecked
3
-
4
1
  import asyncio
5
2
  import time
6
3
 
4
+ from zrb.helper.typecheck import typechecked
5
+ from zrb.helper.typing import Optional
6
+
7
7
  LOG_NAME_LENGTH = 20
8
8
 
9
9
 
10
10
  @typechecked
11
- class TimeTracker():
12
-
11
+ class TimeTracker:
13
12
  def __init__(self):
14
13
  self.__start_time: float = 0
15
14
  self.__end_time: float = 0
@@ -25,8 +24,7 @@ class TimeTracker():
25
24
 
26
25
 
27
26
  @typechecked
28
- class AttemptTracker():
29
-
27
+ class AttemptTracker:
30
28
  def __init__(self, retry: int = 2):
31
29
  self.__retry = retry
32
30
  self.__attempt: int = 1
@@ -52,8 +50,7 @@ class AttemptTracker():
52
50
 
53
51
 
54
52
  @typechecked
55
- class FinishTracker():
56
-
53
+ class FinishTracker:
57
54
  def __init__(self):
58
55
  self.__execution_queue: Optional[asyncio.Queue] = None
59
56
  self.__counter = 0