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,14 +1,15 @@
1
- from zrb.helper.typecheck import typechecked
2
- from zrb.helper.typing import Optional, Union, Tuple
3
1
  import libcst as cst
4
2
 
3
+ from zrb.helper.typecheck import typechecked
4
+ from zrb.helper.typing import Optional, Tuple, Union
5
+
5
6
 
6
7
  @typechecked
7
8
  def add_import_module(
8
9
  code: str,
9
10
  module_path: str,
10
11
  resource: Optional[str] = None,
11
- alias: Optional[str] = None
12
+ alias: Optional[str] = None,
12
13
  ) -> str:
13
14
  """
14
15
  Parses the given code as a module using `libcst.parse_module()`,
@@ -29,16 +30,14 @@ def add_import_module(
29
30
  """
30
31
  module = cst.parse_module(code)
31
32
  new_import = _get_new_import(
32
- module_path=module_path,
33
- resource=resource,
34
- alias=alias
33
+ module_path=module_path, resource=resource, alias=alias
35
34
  )
36
35
 
37
36
  last_import_index = None
38
37
  for i, node in enumerate(module.body):
39
38
  if isinstance(node, cst.SimpleStatementLine) and (
40
- isinstance(node.body[0], cst.Import) or
41
- isinstance(node.body[0], cst.ImportFrom)
39
+ isinstance(node.body[0], cst.Import)
40
+ or isinstance(node.body[0], cst.ImportFrom)
42
41
  ):
43
42
  last_import_index = i
44
43
 
@@ -58,44 +57,34 @@ def add_import_module(
58
57
 
59
58
 
60
59
  def _get_new_import(
61
- module_path: str,
62
- resource: Optional[str] = None,
63
- alias: Optional[str] = None
60
+ module_path: str, resource: Optional[str] = None, alias: Optional[str] = None
64
61
  ) -> Union[cst.ImportFrom, cst.Import]:
65
62
  dots, module_path = _split_module_path(module_path)
66
63
  relative = [cst.Dot()] * len(dots)
67
64
  if resource is None:
68
65
  if len(relative) > 0:
69
- raise Exception(
70
- 'Relative import is not allowed, please specify resource'
71
- )
66
+ raise Exception("Relative import is not allowed, please specify resource")
72
67
  return cst.Import(
73
68
  names=[
74
69
  cst.ImportAlias(
75
- name=cst.parse_expression(module_path),
76
- asname=_get_as_name(alias)
70
+ name=cst.parse_expression(module_path), asname=_get_as_name(alias)
77
71
  )
78
72
  ],
79
73
  )
80
74
  return cst.ImportFrom(
81
75
  module=cst.parse_expression(module_path),
82
- names=[
83
- cst.ImportAlias(
84
- name=cst.Name(resource),
85
- asname=_get_as_name(alias)
86
- )
87
- ],
88
- relative=relative
76
+ names=[cst.ImportAlias(name=cst.Name(resource), asname=_get_as_name(alias))],
77
+ relative=relative,
89
78
  )
90
79
 
91
80
 
92
81
  @typechecked
93
82
  def _split_module_path(module_path) -> Tuple[str, str]:
94
- prefix = ''
95
- suffix = ''
83
+ prefix = ""
84
+ suffix = ""
96
85
  is_prefix = True
97
86
  for char in module_path:
98
- if char != '.':
87
+ if char != ".":
99
88
  is_prefix = False
100
89
  if is_prefix:
101
90
  prefix += char
@@ -1,13 +1,15 @@
1
- from zrb.helper.typecheck import typechecked
2
1
  import libcst as cst
3
2
 
3
+ from zrb.helper.typecheck import typechecked
4
+
4
5
 
5
6
  @typechecked
6
7
  class AddKeyValuePairTransformer(cst.CSTTransformer):
7
8
  def __init__(
8
- self, dict_name: str,
9
+ self,
10
+ dict_name: str,
9
11
  key_node: cst.BaseExpression,
10
- value_node: cst.BaseExpression
12
+ value_node: cst.BaseExpression,
11
13
  ):
12
14
  self.dict_name = dict_name
13
15
  self.key_node = key_node
@@ -24,10 +26,7 @@ class AddKeyValuePairTransformer(cst.CSTTransformer):
24
26
  ):
25
27
  for element in updated_node.value.elements:
26
28
  key = element.key
27
- if (
28
- isinstance(key, cst.BaseExpression)
29
- and key.value == self.key_node
30
- ):
29
+ if isinstance(key, cst.BaseExpression) and key.value == self.key_node:
31
30
  return updated_node
32
31
  new_elements = updated_node.value.elements + (
33
32
  cst.DictElement(self.key_node, self.value_node),
@@ -37,9 +36,7 @@ class AddKeyValuePairTransformer(cst.CSTTransformer):
37
36
  return updated_node
38
37
 
39
38
 
40
- def add_key_value_to_dict(
41
- code: str, dict_name: str, key: str, value: str
42
- ) -> str:
39
+ def add_key_value_to_dict(code: str, dict_name: str, key: str, value: str) -> str:
43
40
  module = cst.parse_module(code)
44
41
  key_node = cst.parse_expression(key)
45
42
  value_node = cst.parse_expression(value)
@@ -1,6 +1,7 @@
1
+ import libcst as cst
2
+
1
3
  from zrb.helper.typecheck import typechecked
2
4
  from zrb.helper.typing import Optional
3
- import libcst as cst
4
5
 
5
6
 
6
7
  @typechecked
@@ -10,7 +11,7 @@ class AddPropertyTransformer(cst.CSTTransformer):
10
11
  class_name: str,
11
12
  property_name_node: cst.Name,
12
13
  property_type_node: cst.Annotation,
13
- property_value_node: Optional[cst.BaseExpression]
14
+ property_value_node: Optional[cst.BaseExpression],
14
15
  ):
15
16
  self.class_name = class_name
16
17
  self.property_name_node = property_name_node
@@ -27,9 +28,10 @@ class AddPropertyTransformer(cst.CSTTransformer):
27
28
  if not isinstance(original_node.body, cst.EmptyLine):
28
29
  for stmt in original_node.body.body:
29
30
  if (
30
- hasattr(stmt, 'body') and
31
- len(stmt.body) > 0 and
32
- isinstance(stmt.body[0], cst.Pass)
31
+ hasattr(stmt, "body")
32
+ and not isinstance(stmt.body, cst.IndentedBlock)
33
+ and len(stmt.body) > 0
34
+ and isinstance(stmt.body[0], cst.Pass)
33
35
  ):
34
36
  continue
35
37
  # Add all old class body except any `pass` statement
@@ -59,7 +61,7 @@ def add_property_to_class(
59
61
  class_name: str,
60
62
  property_name: str,
61
63
  property_type: str,
62
- property_value: Optional[str] = None
64
+ property_value: Optional[str] = None,
63
65
  ) -> str:
64
66
  module = cst.parse_module(code)
65
67
  property_name_node = cst.Name(value=property_name)
@@ -70,14 +72,14 @@ def add_property_to_class(
70
72
  class_name=class_name,
71
73
  property_name_node=property_name_node,
72
74
  property_type_node=property_type_node,
73
- property_value_node=property_value_node
75
+ property_value_node=property_value_node,
74
76
  )
75
77
  )
76
78
  return transformed_module.code
77
79
 
78
80
 
79
81
  def _get_property_value_node(
80
- property_value: Optional[str]
82
+ property_value: Optional[str],
81
83
  ) -> Optional[cst.BaseExpression]:
82
84
  if property_value is None:
83
85
  return None
@@ -1,6 +1,7 @@
1
- from zrb.helper.typecheck import typechecked
2
1
  import libcst as cst
3
2
 
3
+ from zrb.helper.typecheck import typechecked
4
+
4
5
 
5
6
  @typechecked
6
7
  class TaskTransformer(cst.CSTTransformer):
@@ -12,10 +13,7 @@ class TaskTransformer(cst.CSTTransformer):
12
13
  self._upstream_added = False
13
14
 
14
15
  def _is_task(self, node: cst.Call) -> bool:
15
- if (
16
- not isinstance(node.func, cst.Name)
17
- or node.func.value != "Task"
18
- ):
16
+ if not isinstance(node.func, cst.Name) or node.func.value != "Task":
19
17
  return False
20
18
  # Look for name keyword
21
19
  for name_arg in node.args:
@@ -33,9 +31,7 @@ class TaskTransformer(cst.CSTTransformer):
33
31
  if self._is_task(node):
34
32
  self._on_task_call = True
35
33
 
36
- def leave_Call(
37
- self, original_node: cst.Call, updated_node: cst.Call
38
- ) -> cst.Call:
34
+ def leave_Call(self, original_node: cst.Call, updated_node: cst.Call) -> cst.Call:
39
35
  # Remove flags.
40
36
  # If upstreams argument not found (see: self.leave_Arg), add it
41
37
  if not self._is_task(updated_node):
@@ -44,16 +40,16 @@ class TaskTransformer(cst.CSTTransformer):
44
40
  if self._upstream_added:
45
41
  return updated_node
46
42
  new_args = [arg for arg in updated_node.args]
47
- new_args.append(cst.Arg(
48
- keyword=cst.parse_expression('upstreams'),
49
- value=cst.List([
50
- cst.Element(cst.parse_expression(self.upstream_task_name))
51
- ])
52
- ))
53
- self._upstream_added = True
54
- return updated_node.with_changes(
55
- args=new_args
43
+ new_args.append(
44
+ cst.Arg(
45
+ keyword=cst.parse_expression("upstreams"),
46
+ value=cst.List(
47
+ [cst.Element(cst.parse_expression(self.upstream_task_name))]
48
+ ),
49
+ )
56
50
  )
51
+ self._upstream_added = True
52
+ return updated_node.with_changes(args=new_args)
57
53
 
58
54
  def leave_Arg(self, orginnal_node: cst.Arg, updated_node: cst.Arg):
59
55
  # Once the flag was set (see: self.visit_Call), look for
@@ -61,25 +57,19 @@ class TaskTransformer(cst.CSTTransformer):
61
57
  if (
62
58
  not self._on_task_call
63
59
  or updated_node.keyword is None
64
- or updated_node.keyword.value != 'upstreams'
60
+ or updated_node.keyword.value != "upstreams"
65
61
  ):
66
62
  return updated_node
67
- new_elements = [
68
- old_element for old_element in updated_node.value.elements
69
- ]
70
- new_elements.append(cst.Element(
71
- value=cst.parse_expression(self.upstream_task_name)
72
- ))
73
- self._upstream_added = True
74
- return updated_node.with_changes(
75
- value=cst.List(new_elements)
63
+ new_elements = [old_element for old_element in updated_node.value.elements]
64
+ new_elements.append(
65
+ cst.Element(value=cst.parse_expression(self.upstream_task_name))
76
66
  )
67
+ self._upstream_added = True
68
+ return updated_node.with_changes(value=cst.List(new_elements))
77
69
 
78
70
 
79
71
  @typechecked
80
- def add_upstream_to_task(
81
- code: str, task_name: str, upstream_task_name: str
82
- ) -> str:
72
+ def add_upstream_to_task(code: str, task_name: str, upstream_task_name: str) -> str:
83
73
  """
84
74
  Transformer to add an upstream task to a Task object.
85
75
 
@@ -91,9 +81,7 @@ def add_upstream_to_task(
91
81
  Returns:
92
82
  A modified version of the input code with the upstream task added.
93
83
  """
94
- transformer: TaskTransformer = TaskTransformer(
95
- task_name, upstream_task_name
96
- )
84
+ transformer: TaskTransformer = TaskTransformer(task_name, upstream_task_name)
97
85
  original_tree: cst.Module = cst.parse_module(code)
98
86
  modified_tree: cst.Module = original_tree.visit(transformer)
99
87
  return modified_tree.code
@@ -1,6 +1,7 @@
1
- from zrb.helper.typecheck import typechecked
2
1
  import libcst as cst
3
2
 
3
+ from zrb.helper.typecheck import typechecked
4
+
4
5
 
5
6
  @typechecked
6
7
  class AppendCodeTransformer(cst.CSTTransformer):
@@ -13,21 +14,13 @@ class AppendCodeTransformer(cst.CSTTransformer):
13
14
  self, original_node: cst.FunctionDef, updated_node: cst.FunctionDef
14
15
  ) -> cst.FunctionDef:
15
16
  if updated_node.name.value == self.function_name:
16
- new_body = updated_node.body.body + (
17
- cst.parse_statement(self.new_code),
18
- )
19
- return updated_node.with_changes(
20
- body=cst.IndentedBlock(body=new_body)
21
- )
17
+ new_body = updated_node.body.body + (cst.parse_statement(self.new_code),)
18
+ return updated_node.with_changes(body=cst.IndentedBlock(body=new_body))
22
19
  return updated_node
23
20
 
24
21
 
25
22
  @typechecked
26
- def append_code_to_function(
27
- code: str, function_name: str, new_code: str
28
- ) -> str:
23
+ def append_code_to_function(code: str, function_name: str, new_code: str) -> str:
29
24
  module = cst.parse_module(code)
30
- transformed_module = module.visit(
31
- AppendCodeTransformer(function_name, new_code)
32
- )
25
+ transformed_module = module.visit(AppendCodeTransformer(function_name, new_code))
33
26
  return transformed_module.code
@@ -1,6 +1,7 @@
1
- from zrb.helper.typecheck import typechecked
2
1
  import autopep8
3
2
 
3
+ from zrb.helper.typecheck import typechecked
4
+
4
5
 
5
6
  @typechecked
6
7
  def format_code(code: str) -> str:
zrb/helper/default_env.py CHANGED
@@ -1,58 +1,58 @@
1
+ import logging
2
+ import os
3
+ from functools import lru_cache
4
+
1
5
  from zrb.config.config import logging_level
2
- from zrb.helper.typecheck import typechecked
3
- from zrb.helper.typing import Mapping, Optional
4
6
  from zrb.helper.accessories.color import colored
5
7
  from zrb.helper.log import logger
6
- from functools import lru_cache
7
-
8
- import logging
9
- import os
8
+ from zrb.helper.typecheck import typechecked
9
+ from zrb.helper.typing import Mapping, Optional
10
10
 
11
11
  _PROJECT_DIR_MAP: Mapping[str, str] = {}
12
12
 
13
13
 
14
14
  def inject_default_env():
15
15
  # Inject PYTHONUNBUFFERED
16
- if 'PYTHONUNBUFFERED' not in os.environ:
16
+ if "PYTHONUNBUFFERED" not in os.environ:
17
17
  if logging_level <= logging.INFO:
18
- logger.info(colored('Set PYTHONUNBUFFERED to 1', attrs=['dark']))
19
- os.environ['PYTHONUNBUFFERED'] = '1'
18
+ logger.info(colored("Set PYTHONUNBUFFERED to 1", attrs=["dark"]))
19
+ os.environ["PYTHONUNBUFFERED"] = "1"
20
20
  # Inject ZRB_HOME_DIR
21
- if 'ZRB_HOME_DIR' not in os.environ:
21
+ if "ZRB_HOME_DIR" not in os.environ:
22
22
  default_home_dir = os.path.dirname(os.path.dirname(__file__))
23
23
  if logging_level <= logging.INFO:
24
- logger.info(colored(
25
- f'Set ZRB_HOME_DIR to {default_home_dir}', attrs=['dark']
26
- ))
27
- os.environ['ZRB_HOME_DIR'] = default_home_dir
24
+ logger.info(
25
+ colored(f"Set ZRB_HOME_DIR to {default_home_dir}", attrs=["dark"])
26
+ )
27
+ os.environ["ZRB_HOME_DIR"] = default_home_dir
28
28
  # Inject ZRB_PROJECT_DIR
29
29
  current_dir = os.getcwd()
30
30
  if current_dir not in _PROJECT_DIR_MAP:
31
31
  if logging_level <= logging.INFO:
32
- logger.info(colored('Getting project directory', attrs=['dark']))
32
+ logger.info(colored("Getting project directory", attrs=["dark"]))
33
33
  zrb_project_dir = _get_project_dir(current_dir)
34
34
  if zrb_project_dir is None:
35
35
  zrb_project_dir = current_dir
36
36
  _PROJECT_DIR_MAP[current_dir] = zrb_project_dir
37
37
  if logging_level <= logging.INFO:
38
- logger.info(colored(
39
- f'Set ZRB_PROJECT_DIR to {zrb_project_dir}', attrs=['dark']
40
- ))
41
- os.environ['ZRB_PROJECT_DIR'] = zrb_project_dir
38
+ logger.info(
39
+ colored(f"Set ZRB_PROJECT_DIR to {zrb_project_dir}", attrs=["dark"])
40
+ )
41
+ os.environ["ZRB_PROJECT_DIR"] = zrb_project_dir
42
42
  # Inject ZRB_PROJECT_NAME
43
- if 'ZRB_PROJECT_NAME' not in os.environ:
43
+ if "ZRB_PROJECT_NAME" not in os.environ:
44
44
  zrb_project_name = os.path.basename(zrb_project_dir)
45
45
  if logging_level <= logging.INFO:
46
- logger.info(colored(
47
- f'Set ZRB_PROJECT_NAME to {zrb_project_name}', attrs=['dark']
48
- ))
49
- os.environ['ZRB_PROJECT_NAME'] = zrb_project_name
46
+ logger.info(
47
+ colored(f"Set ZRB_PROJECT_NAME to {zrb_project_name}", attrs=["dark"])
48
+ )
49
+ os.environ["ZRB_PROJECT_NAME"] = zrb_project_name
50
50
 
51
51
 
52
52
  @lru_cache
53
53
  @typechecked
54
54
  def _get_project_dir(project_dir: str) -> Optional[str]:
55
- project_script = os.path.join(project_dir, 'zrb_init.py')
55
+ project_script = os.path.join(project_dir, "zrb_init.py")
56
56
  if os.path.isfile(project_script):
57
57
  return project_dir
58
58
  # zrb_init.py not found, look for it on the parent directory
@@ -5,15 +5,15 @@ from zrb.helper.typing import Any, List, Mapping
5
5
  @typechecked
6
6
  def fetch_compose_file_env_map(data: Any) -> Mapping[str, str]:
7
7
  global_env_dict = {}
8
- if 'services' not in data:
8
+ if "services" not in data:
9
9
  return global_env_dict
10
- for service in data['services']:
11
- if 'environment' not in data['services'][service]:
10
+ for service in data["services"]:
11
+ if "environment" not in data["services"][service]:
12
12
  continue
13
- environments = data['services'][service]['environment']
13
+ environments = data["services"][service]["environment"]
14
14
  if isinstance(environments, list):
15
15
  for environment in environments:
16
- parts: List[str] = environment.split('=')
16
+ parts: List[str] = environment.split("=")
17
17
  if len(parts) > 0:
18
18
  env_str = str(parts[1])
19
19
  env_dict = parse_compose_file_env_string(env_str)
@@ -30,29 +30,29 @@ def fetch_compose_file_env_map(data: Any) -> Mapping[str, str]:
30
30
  def parse_compose_file_env_string(env_str: str) -> Mapping[str, str]:
31
31
  env_dict = {}
32
32
  stack = []
33
- key = ''
34
- value = ''
33
+ key = ""
34
+ value = ""
35
35
  index = 0
36
36
  while index < len(env_str):
37
37
  char = env_str[index]
38
- if char == '{':
38
+ if char == "{":
39
39
  stack.append(index)
40
- elif char == '}':
40
+ elif char == "}":
41
41
  start = stack.pop()
42
42
  if not stack:
43
- segment = env_str[start+1:index]
44
- if ':-' in segment:
45
- key, value = segment.split(':-', 1)
46
- if value.startswith('${') and value.endswith('}'):
43
+ segment = env_str[start + 1 : index]
44
+ if ":-" in segment:
45
+ key, value = segment.split(":-", 1)
46
+ if value.startswith("${") and value.endswith("}"):
47
47
  sub_dict = parse_compose_file_env_string(value)
48
48
  env_dict.update(sub_dict)
49
49
  else:
50
50
  key = segment
51
- value = ''
52
- if '${' in value:
53
- value = ''
51
+ value = ""
52
+ if "${" in value:
53
+ value = ""
54
54
  env_dict[key] = value
55
- key = ''
56
- value = ''
55
+ key = ""
56
+ value = ""
57
57
  index += 1
58
58
  return env_dict
@@ -1,12 +1,13 @@
1
+ from ruamel.yaml import YAML, CommentedMap
2
+
1
3
  from zrb.helper.typecheck import typechecked
2
4
  from zrb.helper.typing import Any, Mapping
3
- from ruamel.yaml import YAML, CommentedMap
4
5
 
5
6
 
6
7
  @typechecked
7
8
  def read_compose_file(file_name: str) -> Any:
8
9
  yaml = YAML()
9
- with open(file_name, 'r') as f:
10
+ with open(file_name, "r") as f:
10
11
  data = yaml.load(f)
11
12
  return data
12
13
 
@@ -14,7 +15,7 @@ def read_compose_file(file_name: str) -> Any:
14
15
  @typechecked
15
16
  def write_compose_file(file_name: str, data: Any):
16
17
  yaml = YAML()
17
- with open(file_name, 'w') as f:
18
+ with open(file_name, "w") as f:
18
19
  yaml.dump(data, f)
19
20
 
20
21
 
@@ -22,5 +23,5 @@ def write_compose_file(file_name: str, data: Any):
22
23
  def add_services(file_name: str, new_services: Mapping[str, str]):
23
24
  data = read_compose_file(file_name)
24
25
  data = CommentedMap(data)
25
- data['services'].update(CommentedMap(new_services))
26
+ data["services"].update(CommentedMap(new_services))
26
27
  write_compose_file(file_name, data)