zrb 0.23.4__py3-none-any.whl → 0.26.0__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 (250) hide show
  1. zrb/__init__.py +2 -0
  2. zrb/action/runner.py +8 -5
  3. zrb/advertisement.py +1 -2
  4. zrb/builtin/__init__.py +4 -0
  5. zrb/builtin/base64/decode.py +1 -1
  6. zrb/builtin/base64/encode.py +1 -1
  7. zrb/builtin/devtool/install/_helper.py +2 -1
  8. zrb/builtin/devtool/install/_input.py +2 -2
  9. zrb/builtin/docker/prune.py +11 -3
  10. zrb/builtin/env/get.py +3 -2
  11. zrb/builtin/eval.py +2 -1
  12. zrb/builtin/git/get_file_changes.py +2 -1
  13. zrb/builtin/md5/hash.py +1 -1
  14. zrb/builtin/md5/sum.py +1 -1
  15. zrb/builtin/monorepo/__init__.py +7 -0
  16. zrb/builtin/monorepo/_config.py +11 -0
  17. zrb/builtin/monorepo/_group.py +3 -0
  18. zrb/builtin/monorepo/_task.py +99 -0
  19. zrb/builtin/monorepo/add.py +40 -0
  20. zrb/builtin/monorepo/pull.py +23 -0
  21. zrb/builtin/monorepo/push.py +35 -0
  22. zrb/builtin/project/_helper.py +3 -3
  23. zrb/builtin/project/_input.py +2 -2
  24. zrb/builtin/project/add/app/generator/generator.py +1 -1
  25. zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/snake_zrb_generator_name.py +1 -1
  26. zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/remove.py +1 -1
  27. zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/start.py +6 -7
  28. zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/stop.py +1 -1
  29. zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/src/kebab-zrb-app-name/docker-compose.yml +0 -2
  30. zrb/builtin/project/add/app/python/python.py +1 -1
  31. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/remove.py +1 -1
  32. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/start.py +6 -7
  33. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/stop.py +1 -1
  34. zrb/builtin/project/add/app/python/template/src/kebab-zrb-app-name/docker-compose.yml +0 -2
  35. zrb/builtin/project/add/fastapp/app/app.py +3 -1
  36. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_helper.py +2 -53
  37. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_service_config.py +1 -1
  38. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/_helper.py +2 -2
  39. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/start.py +5 -6
  40. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/_helper.py +2 -2
  41. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/start.py +5 -6
  42. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/stop.py +2 -0
  43. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/_helper.py +5 -3
  44. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/start.py +4 -6
  45. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build-once.sh +1 -1
  46. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build.sh +1 -1
  47. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/_helper.py +3 -5
  48. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/start.py +3 -3
  49. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/{start_microservices.py → start_services.py} +2 -3
  50. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/.generator-version +1 -0
  51. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/_common.py +5 -5
  52. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/app_helper.py +5 -5
  53. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/docker-compose.yml +2 -2
  54. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/loadtest/locustfile.py +1 -3
  55. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/loadtest/template.env +1 -1
  56. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/error.py +2 -1
  57. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/admin.py +4 -3
  58. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/consumer.py +2 -1
  59. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/messagebus.py +4 -3
  60. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/mock.py +4 -3
  61. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/admin.py +4 -3
  62. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/consumer.py +3 -2
  63. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/model/repo_model.py +3 -3
  64. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/db_repo.py +7 -6
  65. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/repo.py +2 -2
  66. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/search_filter.py +2 -1
  67. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/caller.py +2 -1
  68. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/server.py +2 -1
  69. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/rpc.py +3 -2
  70. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/serializer/serializer.py +2 -1
  71. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/config.py +59 -62
  72. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/package-lock.json +4443 -0
  73. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/async_task.py +1 -1
  74. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app.py +28 -28
  75. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app_lifespan.py +15 -15
  76. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/app/app_state.py +2 -2
  77. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/db_connection.py +14 -2
  78. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/frontend_index.py +2 -2
  79. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/log.py +6 -6
  80. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/messagebus.py +33 -33
  81. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/integration/rpc.py +9 -9
  82. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/scheme.py +2 -1
  83. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/util.py +2 -1
  84. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +2 -1
  85. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +2 -1
  86. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +2 -1
  87. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +2 -1
  88. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +3 -2
  89. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +3 -2
  90. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +3 -2
  91. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/access_token_scheme.py +2 -2
  92. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/access_token_util.py +7 -7
  93. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/model/user_model.py +6 -6
  94. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/refresh_token_util.py +7 -7
  95. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/integration/user.py +18 -18
  96. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/migrate.py +2 -2
  97. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_module.py +8 -8
  98. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +2 -2
  99. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +3 -5
  100. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +1 -3
  101. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/request.py +1 -3
  102. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +5 -7
  103. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +2 -1
  104. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +2 -1
  105. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/migrate.py +2 -2
  106. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/register_module.py +8 -8
  107. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +1 -3
  108. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/template.env +5 -2
  109. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +8 -8
  110. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +8 -8
  111. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +8 -8
  112. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +15 -15
  113. zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +4 -4
  114. zrb/builtin/project/add/fastapp/crud/_helper/__init__.py +7 -0
  115. zrb/builtin/project/add/fastapp/crud/_helper/_common.py +8 -0
  116. zrb/builtin/project/add/fastapp/crud/_helper/register_api.py +45 -0
  117. zrb/builtin/project/add/fastapp/crud/_helper/register_permission.py +40 -0
  118. zrb/builtin/project/add/fastapp/crud/_helper/register_rpc.py +45 -0
  119. zrb/builtin/project/add/fastapp/crud/_task_factory.py +1 -2
  120. zrb/builtin/project/add/fastapp/crud/crud.py +4 -25
  121. zrb/builtin/project/add/fastapp/crud/nodejs/codemod/package-lock.json +3 -3
  122. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/repo.py +12 -1
  123. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/rpc.py +2 -1
  124. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/snake_zrb_entity_name.py +3 -2
  125. zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/test/snake_zrb_module_name/test_snake_zrb_entity_name.py +9 -8
  126. zrb/builtin/project/add/fastapp/field/_helper/__init__.py +17 -0
  127. zrb/builtin/project/add/fastapp/field/_helper/_common.py +102 -0
  128. zrb/builtin/project/add/fastapp/field/_helper/inject_delete_page.py +49 -0
  129. zrb/builtin/project/add/fastapp/field/_helper/inject_detail_page.py +49 -0
  130. zrb/builtin/project/add/fastapp/field/_helper/inject_insert_page.py +62 -0
  131. zrb/builtin/project/add/fastapp/field/_helper/inject_list_page.py +47 -0
  132. zrb/builtin/project/add/fastapp/field/_helper/inject_repo.py +47 -0
  133. zrb/builtin/project/add/fastapp/field/_helper/inject_schema.py +45 -0
  134. zrb/builtin/project/add/fastapp/field/_helper/inject_test.py +49 -0
  135. zrb/builtin/project/add/fastapp/field/_helper/inject_update_page.py +50 -0
  136. zrb/builtin/project/add/fastapp/field/_input.py +14 -2
  137. zrb/builtin/project/add/fastapp/field/field.py +52 -70
  138. zrb/builtin/project/add/fastapp/module/_helper/__init__.py +17 -0
  139. zrb/builtin/project/add/fastapp/module/_helper/append_all_disabled_env.py +22 -0
  140. zrb/builtin/project/add/fastapp/module/_helper/append_all_enabled_env.py +22 -0
  141. zrb/builtin/project/add/fastapp/module/_helper/append_deployment_template_env.py +25 -0
  142. zrb/builtin/project/add/fastapp/module/_helper/append_src_template_env.py +25 -0
  143. zrb/builtin/project/add/fastapp/module/_helper/create_app_config.py +29 -0
  144. zrb/builtin/project/add/fastapp/module/_helper/create_microservice_config.py +157 -0
  145. zrb/builtin/project/add/fastapp/module/_helper/register_migration.py +35 -0
  146. zrb/builtin/project/add/fastapp/module/_helper/register_module.py +33 -0
  147. zrb/builtin/project/add/fastapp/module/module.py +9 -38
  148. zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/migrate.py +2 -2
  149. zrb/builtin/project/add/fastapp/module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py +8 -8
  150. zrb/builtin/project/add/plugin/plugin.py +3 -3
  151. zrb/builtin/project/add/project_task/add.py +1 -1
  152. zrb/builtin/project/add/project_task/template/_automate/_project/build.py +2 -1
  153. zrb/builtin/project/add/project_task/template/_automate/_project/container/remove.py +2 -1
  154. zrb/builtin/project/add/project_task/template/_automate/_project/container/start.py +2 -1
  155. zrb/builtin/project/add/project_task/template/_automate/_project/container/stop.py +2 -1
  156. zrb/builtin/project/add/project_task/template/_automate/_project/deploy.py +2 -1
  157. zrb/builtin/project/add/project_task/template/_automate/_project/destroy.py +2 -1
  158. zrb/builtin/project/add/project_task/template/_automate/_project/get_env.py +2 -1
  159. zrb/builtin/project/add/project_task/template/_automate/_project/image/build.py +2 -1
  160. zrb/builtin/project/add/project_task/template/_automate/_project/image/push.py +2 -1
  161. zrb/builtin/project/add/project_task/template/_automate/_project/publish.py +2 -1
  162. zrb/builtin/project/add/project_task/template/_automate/_project/start.py +2 -1
  163. zrb/builtin/project/add/task/cmd/add.py +1 -1
  164. zrb/builtin/project/add/task/docker_compose/add.py +1 -1
  165. zrb/builtin/project/add/task/docker_compose/template/src/kebab-zrb-task-name/docker-compose.yml +0 -2
  166. zrb/builtin/project/add/task/python/add.py +1 -1
  167. zrb/builtin/project/add/task/python/template/_automate/snake_zrb_task_name.py +1 -1
  168. zrb/builtin/project/create/_helper.py +1 -1
  169. zrb/builtin/project/create/create.py +3 -3
  170. zrb/builtin/say.py +3 -3
  171. zrb/builtin/version.py +5 -4
  172. zrb/config/config.py +24 -14
  173. zrb/helper/accessories/color.py +2 -1
  174. zrb/helper/advertisement.py +2 -1
  175. zrb/helper/asyncio_task.py +23 -0
  176. zrb/helper/callable.py +4 -1
  177. zrb/helper/cli.py +20 -6
  178. zrb/helper/codemod/add_import_module.py +3 -2
  179. zrb/helper/codemod/add_property_to_class.py +2 -1
  180. zrb/helper/default_env.py +2 -1
  181. zrb/helper/docker_compose/fetch_external_env.py +4 -2
  182. zrb/helper/docker_compose/file.py +3 -1
  183. zrb/helper/env_map/fetch.py +3 -2
  184. zrb/helper/file/copy_tree.py +2 -1
  185. zrb/helper/file/match.py +2 -2
  186. zrb/helper/git/detect_changes.py +1 -1
  187. zrb/helper/loader/load_module.py +7 -46
  188. zrb/helper/loader/load_script.py +57 -0
  189. zrb/helper/log.py +3 -3
  190. zrb/helper/map/conversion.py +3 -1
  191. zrb/helper/string/jinja.py +2 -1
  192. zrb/helper/string/parse_replacement.py +1 -1
  193. zrb/helper/typecheck.py +2 -2
  194. zrb/helper/typing.py +5 -27
  195. zrb/helper/util.py +13 -1
  196. zrb/runner.py +2 -2
  197. zrb/task/any_task.py +9 -17
  198. zrb/task/any_task_event_handler.py +3 -1
  199. zrb/task/base_remote_cmd_task.py +3 -10
  200. zrb/task/base_task/base_task.py +15 -11
  201. zrb/task/base_task/component/base_task_model.py +15 -22
  202. zrb/task/base_task/component/common_task_model.py +15 -22
  203. zrb/task/base_task/component/renderer.py +3 -1
  204. zrb/task/base_task/component/trackers.py +1 -1
  205. zrb/task/checker.py +2 -1
  206. zrb/task/cmd_task.py +10 -22
  207. zrb/task/decorator.py +3 -1
  208. zrb/task/docker_compose_start_task.py +146 -0
  209. zrb/task/docker_compose_task.py +43 -34
  210. zrb/task/flow_task.py +19 -17
  211. zrb/task/http_checker.py +3 -9
  212. zrb/task/looper.py +4 -2
  213. zrb/task/notifier.py +3 -1
  214. zrb/task/parallel.py +4 -4
  215. zrb/task/path_checker.py +6 -12
  216. zrb/task/path_watcher.py +5 -13
  217. zrb/task/port_checker.py +3 -9
  218. zrb/task/recurring_task.py +5 -4
  219. zrb/task/remote_cmd_task.py +2 -1
  220. zrb/task/resource_maker.py +6 -13
  221. zrb/task/rsync_task.py +3 -1
  222. zrb/task/server.py +13 -12
  223. zrb/task/time_watcher.py +3 -10
  224. zrb/task/watcher.py +2 -1
  225. zrb/task/wiki_task.py +4 -3
  226. zrb/task_env/env.py +2 -1
  227. zrb/task_env/env_file.py +7 -6
  228. zrb/task_group/group.py +8 -7
  229. zrb/task_input/any_input.py +4 -3
  230. zrb/task_input/base_input.py +7 -5
  231. zrb/task_input/bool_input.py +2 -1
  232. zrb/task_input/choice_input.py +3 -1
  233. zrb/task_input/float_input.py +2 -1
  234. zrb/task_input/int_input.py +2 -1
  235. zrb/task_input/multiline_input.py +5 -3
  236. zrb/task_input/password_input.py +2 -1
  237. zrb/task_input/str_input.py +2 -1
  238. {zrb-0.23.4.dist-info → zrb-0.26.0.dist-info}/METADATA +2 -2
  239. {zrb-0.23.4.dist-info → zrb-0.26.0.dist-info}/RECORD +242 -214
  240. zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/init.py +0 -34
  241. zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/init.py +0 -34
  242. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/init.py +0 -36
  243. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/init.py +0 -36
  244. zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/init.py +0 -26
  245. zrb/builtin/project/add/fastapp/crud/_helper.py +0 -118
  246. zrb/builtin/project/add/fastapp/field/_helper.py +0 -328
  247. zrb/builtin/project/add/fastapp/module/_helper.py +0 -313
  248. {zrb-0.23.4.dist-info → zrb-0.26.0.dist-info}/LICENSE +0 -0
  249. {zrb-0.23.4.dist-info → zrb-0.26.0.dist-info}/WHEEL +0 -0
  250. {zrb-0.23.4.dist-info → zrb-0.26.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,45 @@
1
+ import os
2
+
3
+ from zrb.helper.codemod.add_property_to_class import add_property_to_class
4
+ from zrb.helper.file.text import read_text_file_async, write_text_file_async
5
+ from zrb.helper.typecheck import typechecked
6
+ from zrb.helper.util import to_pascal_case, to_snake_case
7
+ from zrb.task.task import Task
8
+
9
+ from ._common import get_app_dir, get_python_column_type
10
+
11
+
12
+ @typechecked
13
+ async def inject_schema(
14
+ task: Task,
15
+ project_dir: str,
16
+ app_name: str,
17
+ module_name: str,
18
+ entity_name: str,
19
+ column_name: str,
20
+ column_type: str,
21
+ ):
22
+ snake_module_name = to_snake_case(module_name)
23
+ snake_entity_name = to_snake_case(entity_name)
24
+ pascal_entity_name = to_pascal_case(entity_name)
25
+ snake_column_name = to_snake_case(column_name)
26
+ schema_file_path = os.path.join(
27
+ get_app_dir(project_dir, app_name),
28
+ "src",
29
+ "module",
30
+ snake_module_name,
31
+ "schema",
32
+ f"{snake_entity_name}.py",
33
+ )
34
+ task.print_out(f"Read code from: {schema_file_path}")
35
+ code = await read_text_file_async(schema_file_path)
36
+ task.print_out(f'Add column "{snake_column_name}" to the schema')
37
+ python_column_type = get_python_column_type(column_type)
38
+ code = add_property_to_class(
39
+ code=code,
40
+ class_name=f"{pascal_entity_name}Data",
41
+ property_name=snake_column_name,
42
+ property_type=f"Optional[{python_column_type}]",
43
+ )
44
+ task.print_out(f"Write modified code to: {schema_file_path}")
45
+ await write_text_file_async(schema_file_path, code)
@@ -0,0 +1,49 @@
1
+ import os
2
+
3
+ from zrb.helper.codemod.add_key_value_to_dict import add_key_value_to_dict
4
+ from zrb.helper.file.text import read_text_file_async, write_text_file_async
5
+ from zrb.helper.typecheck import typechecked
6
+ from zrb.helper.util import to_snake_case
7
+ from zrb.task.task import Task
8
+
9
+ from ._common import get_app_dir, get_python_value_for_testing
10
+
11
+
12
+ @typechecked
13
+ async def inject_test(
14
+ task: Task,
15
+ project_dir: str,
16
+ app_name: str,
17
+ module_name: str,
18
+ entity_name: str,
19
+ column_name: str,
20
+ column_type: str,
21
+ ):
22
+ snake_module_name = to_snake_case(module_name)
23
+ snake_entity_name = to_snake_case(entity_name)
24
+ snake_column_name = to_snake_case(column_name)
25
+ test_file_path = os.path.join(
26
+ get_app_dir(project_dir, app_name),
27
+ "test",
28
+ snake_module_name,
29
+ f"test_{snake_entity_name}.py",
30
+ )
31
+ task.print_out(f"Read code from: {test_file_path}")
32
+ code = await read_text_file_async(test_file_path)
33
+ task.print_out(f'Add column "{snake_column_name}" to the test')
34
+ dict_names = [
35
+ "inserted_success_data",
36
+ "to_be_updated_success_data",
37
+ "updated_success_data",
38
+ "to_be_deleted_success_data",
39
+ ]
40
+ default_python_value = get_python_value_for_testing(column_type)
41
+ for dict_name in dict_names:
42
+ code = add_key_value_to_dict(
43
+ code=code,
44
+ dict_name=dict_name,
45
+ key=f"'{snake_column_name}'",
46
+ value=default_python_value,
47
+ )
48
+ task.print_out(f"Write modified code to: {test_file_path}")
49
+ await write_text_file_async(test_file_path, code)
@@ -0,0 +1,50 @@
1
+ import os
2
+
3
+ from zrb.helper.file.text import read_text_file_async, write_text_file_async
4
+ from zrb.helper.typecheck import typechecked
5
+ from zrb.helper.util import to_capitalized_human_readable, to_kebab_case
6
+ from zrb.task.task import Task
7
+
8
+ from ._common import get_app_frontend_routes_dir, get_html_input, replace_marker
9
+
10
+
11
+ @typechecked
12
+ async def inject_update_page(
13
+ task: Task,
14
+ project_dir: str,
15
+ app_name: str,
16
+ module_name: str,
17
+ entity_name: str,
18
+ column_name: str,
19
+ column_type: str,
20
+ ):
21
+ kebab_module_name = to_kebab_case(module_name)
22
+ kebab_entity_name = to_kebab_case(entity_name)
23
+ kebab_column_name = to_kebab_case(column_name)
24
+ column_caption = to_capitalized_human_readable(column_name)
25
+ list_page_file_path = os.path.join(
26
+ get_app_frontend_routes_dir(project_dir, app_name),
27
+ kebab_module_name,
28
+ kebab_entity_name,
29
+ "update",
30
+ "[id]",
31
+ "+page.svelte",
32
+ )
33
+ task.print_out(f"Read HTML from: {list_page_file_path}")
34
+ html_content = await read_text_file_async(list_page_file_path)
35
+ task.print_out("Add field to update page")
36
+ html_input = get_html_input(column_type, column_name, column_caption)
37
+ html_content = replace_marker(
38
+ html_content,
39
+ marker="<!-- DON'T DELETE: insert new field here-->",
40
+ code="\n".join(
41
+ [
42
+ '<div class="mb-4">',
43
+ f' <label class="block text-gray-700 font-bold mb-2" for="{kebab_column_name}">{column_caption}</label>', # noqa
44
+ f" {html_input}",
45
+ "</div>",
46
+ ]
47
+ ),
48
+ )
49
+ task.print_out(f"Write modified HTML to: {list_page_file_path}")
50
+ await write_text_file_async(list_page_file_path, html_content)
@@ -1,3 +1,4 @@
1
+ from zrb.task_input.choice_input import ChoiceInput
1
2
  from zrb.task_input.str_input import StrInput
2
3
 
3
4
  column_name_input = StrInput(
@@ -8,10 +9,21 @@ column_name_input = StrInput(
8
9
  default="title",
9
10
  )
10
11
 
11
- column_type_input = StrInput(
12
+ column_type_input = ChoiceInput(
12
13
  name="column-type",
13
14
  shortcut="t",
14
15
  description="Column type",
15
16
  prompt="Column type",
16
- default="str",
17
+ choices=[
18
+ "string",
19
+ "text",
20
+ "boolean",
21
+ "integer",
22
+ "float",
23
+ "double",
24
+ "date",
25
+ "datetime",
26
+ "time",
27
+ ],
28
+ default="string",
17
29
  )
@@ -1,5 +1,6 @@
1
1
  import asyncio
2
2
  import os
3
+ from typing import Any
3
4
 
4
5
  from zrb.builtin.project._helper import validate_existing_project_dir
5
6
  from zrb.builtin.project._input import project_dir_input
@@ -7,14 +8,14 @@ from zrb.builtin.project.add.fastapp._group import project_add_fastapp_group
7
8
  from zrb.builtin.project.add.fastapp.app._input import app_name_input
8
9
  from zrb.builtin.project.add.fastapp.crud._input import entity_name_input
9
10
  from zrb.builtin.project.add.fastapp.field._helper import (
10
- add_column_to_delete_page,
11
- add_column_to_detail_page,
12
- add_column_to_insert_page,
13
- add_column_to_list_page,
14
- add_column_to_repo,
15
- add_column_to_schema,
16
- add_column_to_test,
17
- add_column_to_update_page,
11
+ inject_delete_page,
12
+ inject_detail_page,
13
+ inject_insert_page,
14
+ inject_list_page,
15
+ inject_repo,
16
+ inject_schema,
17
+ inject_test,
18
+ inject_update_page,
18
19
  )
19
20
  from zrb.builtin.project.add.fastapp.field._input import (
20
21
  column_name_input,
@@ -23,7 +24,6 @@ from zrb.builtin.project.add.fastapp.field._input import (
23
24
  from zrb.builtin.project.add.fastapp.module._input import module_name_input
24
25
  from zrb.helper import util
25
26
  from zrb.helper.accessories.color import colored
26
- from zrb.helper.typing import Any
27
27
  from zrb.runner import runner
28
28
  from zrb.task.decorator import python_task
29
29
  from zrb.task.task import Task
@@ -80,109 +80,91 @@ async def add_fastapp_field(*args: Any, **kwargs: Any):
80
80
  module_name = kwargs.get("module_name")
81
81
  entity_name = kwargs.get("entity_name")
82
82
  column_name = kwargs.get("column_name")
83
- column_type = kwargs.get("column_name")
84
- kebab_app_name = util.to_kebab_case(app_name)
85
- kebab_module_name = util.to_kebab_case(module_name)
86
- snake_module_name = util.to_snake_case(module_name)
87
- kebab_entity_name = util.to_kebab_case(entity_name)
88
- snake_entity_name = util.to_snake_case(entity_name)
89
- pascal_entity_name = util.to_pascal_case(entity_name)
90
- snake_column_name = util.to_snake_case(column_name)
91
- kebab_column_name = util.to_kebab_case(column_name)
92
- column_caption = util.to_capitalized_human_readable(column_name)
83
+ column_type = kwargs.get("column_type")
93
84
  await asyncio.gather(
94
85
  asyncio.create_task(
95
- add_column_to_test(
86
+ inject_test(
96
87
  task=task,
97
88
  project_dir=project_dir,
98
- kebab_app_name=kebab_app_name,
99
- snake_module_name=snake_module_name,
100
- snake_entity_name=snake_entity_name,
101
- snake_column_name=snake_column_name,
89
+ app_name=app_name,
90
+ module_name=module_name,
91
+ entity_name=entity_name,
92
+ column_name=column_name,
102
93
  column_type=column_type,
103
94
  )
104
95
  ),
105
96
  asyncio.create_task(
106
- add_column_to_schema(
97
+ inject_schema(
107
98
  task=task,
108
99
  project_dir=project_dir,
109
- kebab_app_name=kebab_app_name,
110
- snake_module_name=snake_module_name,
111
- snake_entity_name=snake_entity_name,
112
- pascal_entity_name=pascal_entity_name,
113
- snake_column_name=snake_column_name,
100
+ app_name=app_name,
101
+ module_name=module_name,
102
+ entity_name=entity_name,
103
+ column_name=column_name,
114
104
  column_type=column_type,
115
105
  )
116
106
  ),
117
107
  asyncio.create_task(
118
- add_column_to_repo(
108
+ inject_repo(
119
109
  task=task,
120
110
  project_dir=project_dir,
121
- kebab_app_name=kebab_app_name,
122
- snake_module_name=snake_module_name,
123
- snake_entity_name=snake_entity_name,
124
- pascal_entity_name=pascal_entity_name,
125
- snake_column_name=snake_column_name,
111
+ app_name=app_name,
112
+ module_name=module_name,
113
+ entity_name=entity_name,
114
+ column_name=column_name,
126
115
  column_type=column_type,
127
116
  )
128
117
  ),
129
118
  asyncio.create_task(
130
- add_column_to_list_page(
119
+ inject_list_page(
131
120
  task=task,
132
121
  project_dir=project_dir,
133
- kebab_app_name=kebab_app_name,
134
- kebab_module_name=kebab_module_name,
135
- kebab_entity_name=kebab_entity_name,
136
- snake_column_name=snake_column_name,
137
- column_caption=column_caption,
122
+ app_name=app_name,
123
+ module_name=module_name,
124
+ entity_name=entity_name,
125
+ column_name=column_name,
138
126
  )
139
127
  ),
140
128
  asyncio.create_task(
141
- add_column_to_detail_page(
129
+ inject_detail_page(
142
130
  task=task,
143
131
  project_dir=project_dir,
144
- kebab_app_name=kebab_app_name,
145
- kebab_module_name=kebab_module_name,
146
- kebab_entity_name=kebab_entity_name,
147
- kebab_column_name=kebab_column_name,
148
- snake_column_name=snake_column_name,
149
- column_caption=column_caption,
132
+ app_name=app_name,
133
+ module_name=module_name,
134
+ entity_name=entity_name,
135
+ column_name=column_name,
150
136
  )
151
137
  ),
152
138
  asyncio.create_task(
153
- add_column_to_delete_page(
139
+ inject_delete_page(
154
140
  task=task,
155
141
  project_dir=project_dir,
156
- kebab_app_name=kebab_app_name,
157
- kebab_module_name=kebab_module_name,
158
- kebab_entity_name=kebab_entity_name,
159
- kebab_column_name=kebab_column_name,
160
- snake_column_name=snake_column_name,
161
- column_caption=column_caption,
142
+ app_name=app_name,
143
+ module_name=module_name,
144
+ entity_name=entity_name,
145
+ column_name=column_name,
162
146
  )
163
147
  ),
164
148
  asyncio.create_task(
165
- add_column_to_update_page(
149
+ inject_update_page(
166
150
  task=task,
167
151
  project_dir=project_dir,
168
- kebab_app_name=kebab_app_name,
169
- kebab_module_name=kebab_module_name,
170
- kebab_entity_name=kebab_entity_name,
171
- kebab_column_name=kebab_column_name,
172
- snake_column_name=snake_column_name,
173
- column_caption=column_caption,
152
+ app_name=app_name,
153
+ module_name=module_name,
154
+ entity_name=entity_name,
155
+ column_name=column_name,
156
+ column_type=column_type,
174
157
  )
175
158
  ),
176
159
  asyncio.create_task(
177
- add_column_to_insert_page(
160
+ inject_insert_page(
178
161
  task=task,
179
162
  project_dir=project_dir,
180
- kebab_app_name=kebab_app_name,
181
- kebab_module_name=kebab_module_name,
182
- kebab_entity_name=kebab_entity_name,
183
- kebab_column_name=kebab_column_name,
184
- snake_column_name=snake_column_name,
185
- column_caption=column_caption,
163
+ app_name=app_name,
164
+ module_name=module_name,
165
+ entity_name=entity_name,
166
+ column_name=column_name,
167
+ column_type=column_type,
186
168
  )
187
169
  ),
188
170
  )
@@ -0,0 +1,17 @@
1
+ from .append_all_disabled_env import append_all_disabled_env
2
+ from .append_all_enabled_env import append_all_enabled_env
3
+ from .append_deployment_template_env import append_deployment_template_env
4
+ from .append_src_template_env import append_src_template_env
5
+ from .create_app_config import create_app_config
6
+ from .create_microservice_config import create_microservice_config
7
+ from .register_migration import register_migration
8
+ from .register_module import register_module
9
+
10
+ assert append_all_disabled_env
11
+ assert append_all_enabled_env
12
+ assert append_deployment_template_env
13
+ assert append_src_template_env
14
+ assert create_app_config
15
+ assert create_microservice_config
16
+ assert register_migration
17
+ assert register_module
@@ -0,0 +1,22 @@
1
+ import os
2
+
3
+ from zrb.helper.file.text import append_text_file_async
4
+ from zrb.helper.typecheck import typechecked
5
+ from zrb.helper.util import to_kebab_case, to_snake_case
6
+ from zrb.task.task import Task
7
+
8
+
9
+ @typechecked
10
+ async def append_all_disabled_env(
11
+ task: Task, project_dir: str, app_name: str, module_name: str
12
+ ):
13
+ kebab_app_name = to_kebab_case(app_name)
14
+ snake_module_name = to_snake_case(module_name)
15
+ upper_snake_module_name = snake_module_name.upper()
16
+ all_disabled_env_path = os.path.join(
17
+ project_dir, "src", kebab_app_name, "all-module-disabled.env"
18
+ )
19
+ task.print_out(f"Add new environment to: {all_disabled_env_path}")
20
+ await append_text_file_async(
21
+ all_disabled_env_path, f"APP_ENABLE_{upper_snake_module_name}_MODULE=false"
22
+ )
@@ -0,0 +1,22 @@
1
+ import os
2
+
3
+ from zrb.helper.file.text import append_text_file_async
4
+ from zrb.helper.typecheck import typechecked
5
+ from zrb.helper.util import to_kebab_case, to_snake_case
6
+ from zrb.task.task import Task
7
+
8
+
9
+ @typechecked
10
+ async def append_all_enabled_env(
11
+ task: Task, project_dir: str, app_name: str, module_name: str
12
+ ):
13
+ kebab_app_name = to_kebab_case(app_name)
14
+ snake_module_name = to_snake_case(module_name)
15
+ upper_snake_module_name = snake_module_name.upper()
16
+ all_enabled_env_path = os.path.join(
17
+ project_dir, "src", kebab_app_name, "all-module-enabled.env"
18
+ )
19
+ task.print_out(f"Add new environment to: {all_enabled_env_path}")
20
+ await append_text_file_async(
21
+ all_enabled_env_path, f"APP_ENABLE_{upper_snake_module_name}_MODULE=true"
22
+ )
@@ -0,0 +1,25 @@
1
+ import os
2
+
3
+ from zrb.helper.file.text import append_text_file_async
4
+ from zrb.helper.typecheck import typechecked
5
+ from zrb.helper.util import to_kebab_case, to_snake_case
6
+ from zrb.task.task import Task
7
+
8
+
9
+ @typechecked
10
+ async def append_deployment_template_env(
11
+ task: Task, project_dir: str, app_name: str, module_name: str
12
+ ):
13
+ kebab_app_name = to_kebab_case(app_name)
14
+ snake_module_name = to_snake_case(module_name)
15
+ upper_snake_module_name = snake_module_name.upper()
16
+ deployment_template_env_path = os.path.join(
17
+ project_dir, "src", kebab_app_name, "deployment", "template.env"
18
+ )
19
+ new_env_str = "\n".join(
20
+ [
21
+ f"REPLICA_{upper_snake_module_name}_SERVICE=1",
22
+ ]
23
+ )
24
+ task.print_out(f"Add new environment to: {deployment_template_env_path}")
25
+ await append_text_file_async(deployment_template_env_path, new_env_str)
@@ -0,0 +1,25 @@
1
+ import os
2
+
3
+ from zrb.helper.file.text import append_text_file_async
4
+ from zrb.helper.typecheck import typechecked
5
+ from zrb.helper.util import to_kebab_case, to_snake_case
6
+ from zrb.task.task import Task
7
+
8
+
9
+ @typechecked
10
+ async def append_src_template_env(
11
+ task: Task, project_dir: str, app_name: str, module_name: str
12
+ ):
13
+ kebab_app_name = to_kebab_case(app_name)
14
+ snake_module_name = to_snake_case(module_name)
15
+ upper_snake_module_name = snake_module_name.upper()
16
+ src_template_env_path = os.path.join(
17
+ project_dir, "src", kebab_app_name, "src", "template.env"
18
+ )
19
+ new_env_str = "\n".join(
20
+ [
21
+ f"APP_ENABLE_{upper_snake_module_name}_MODULE=true",
22
+ ]
23
+ )
24
+ task.print_out(f"Add new environment to: {src_template_env_path}")
25
+ await append_text_file_async(src_template_env_path, new_env_str)
@@ -0,0 +1,29 @@
1
+ import os
2
+
3
+ from zrb.helper.file.text import read_text_file_async, write_text_file_async
4
+ from zrb.helper.typecheck import typechecked
5
+ from zrb.helper.util import to_kebab_case, to_snake_case
6
+ from zrb.task.task import Task
7
+
8
+
9
+ @typechecked
10
+ async def create_app_config(
11
+ task: Task, project_dir: str, app_name: str, module_name: str
12
+ ):
13
+ kebab_app_name = to_kebab_case(app_name)
14
+ snake_module_name = to_snake_case(module_name)
15
+ upper_snake_module_name = snake_module_name.upper()
16
+ config_file_path = os.path.join(
17
+ project_dir, "src", kebab_app_name, "src", "config.py"
18
+ )
19
+ config_code = "\n".join(
20
+ [
21
+ f"APP_ENABLE_{upper_snake_module_name}_MODULE = str_to_boolean(os.environ.get(", # noqa
22
+ f" 'APP_ENABLE_{upper_snake_module_name}_MODULE', 'true'" "))",
23
+ ]
24
+ )
25
+ task.print_out(f"Read config from: {config_file_path}")
26
+ code = await read_text_file_async(config_file_path)
27
+ code += "\n" + config_code
28
+ task.print_out(f"Write config to: {config_file_path}")
29
+ await write_text_file_async(config_file_path, code)
@@ -0,0 +1,157 @@
1
+ import asyncio
2
+ import os
3
+ from collections.abc import Mapping
4
+ from typing import Any
5
+
6
+ import jsons
7
+ from dotenv import dotenv_values
8
+
9
+ from zrb.helper.docker_compose.file import add_services
10
+ from zrb.helper.file.text import (
11
+ append_text_file_async,
12
+ read_text_file_async,
13
+ write_text_file_async,
14
+ )
15
+ from zrb.helper.typecheck import typechecked
16
+ from zrb.helper.util import to_kebab_case, to_snake_case
17
+ from zrb.task.task import Task
18
+
19
+
20
+ @typechecked
21
+ async def create_microservice_config(
22
+ task: Task, project_dir: str, app_name: str, module_name: str
23
+ ):
24
+ modules = await _create_automation_json_config(
25
+ task, project_dir, app_name, module_name
26
+ )
27
+ return await asyncio.gather(
28
+ asyncio.create_task(
29
+ _add_docker_compose_service(
30
+ task, modules, project_dir, app_name, module_name
31
+ )
32
+ ),
33
+ asyncio.create_task(
34
+ _append_compose_env(task, modules, project_dir, app_name, module_name)
35
+ ),
36
+ )
37
+
38
+
39
+ @typechecked
40
+ async def _add_docker_compose_service(
41
+ task: Task, modules: list[str], project_dir: str, app_name: str, module_name: str
42
+ ):
43
+ kebab_app_name = to_kebab_case(app_name)
44
+ snake_module_name = to_snake_case(module_name)
45
+ upper_snake_module_name = snake_module_name.upper()
46
+ module_app_port = 8080 + len(modules)
47
+ module_app_port_str = str(module_app_port)
48
+ docker_compose_file_path = os.path.join(
49
+ project_dir, "src", kebab_app_name, "docker-compose.yml"
50
+ )
51
+ app_container_port_env_name = f"APP_{upper_snake_module_name}_MODULE_PORT"
52
+ app_container_port_env = (
53
+ "${" + app_container_port_env_name + ":-" + module_app_port_str + "}"
54
+ )
55
+ app_host_port_env_name = f"APP_{upper_snake_module_name}_HOST_MODULE_PORT"
56
+ app_host_port_env = "${" + app_host_port_env_name + ":-" + module_app_port_str + "}"
57
+ service_definition = _get_new_docker_compose_service_definition(
58
+ app_name=app_name,
59
+ module_name=module_name,
60
+ app_host_port_env=app_host_port_env,
61
+ app_container_port_env=app_container_port_env,
62
+ )
63
+ task.print_out(f"Add service at: {docker_compose_file_path}")
64
+ add_services(
65
+ file_name=docker_compose_file_path,
66
+ new_services=service_definition,
67
+ )
68
+
69
+
70
+ @typechecked
71
+ def _get_new_docker_compose_service_definition(
72
+ app_name: str, module_name: str, app_host_port_env: str, app_container_port_env: str
73
+ ) -> Mapping[str, Any]:
74
+ kebab_app_name = to_kebab_case(app_name)
75
+ kebab_module_name = to_kebab_case(module_name)
76
+ snake_module_name = to_snake_case(module_name)
77
+ upper_snake_module_name = snake_module_name.upper()
78
+ return {
79
+ f"{kebab_app_name}-{kebab_module_name}-service": {
80
+ "build": {"dockerfile": "Dockerfile", "context": "./src"},
81
+ "image": "${IMAGE:-" + kebab_app_name + "}",
82
+ "container_name": "${CONTAINER_PREFIX:-my}-"
83
+ + f"{kebab_app_name}-{kebab_module_name}-service", # noqa
84
+ "hostname": f"{kebab_app_name}-{kebab_module_name}-service",
85
+ "env_file": ["src/template.env", "all-module-disabled.env"],
86
+ "environment": {
87
+ "APP_NAME": "${APP_NAME:-"
88
+ + kebab_app_name
89
+ + "}-"
90
+ + f"{kebab_module_name}-service", # noqa
91
+ "APP_ENABLE_OTEL": "${APP_ENABLE_OTEL:-0}",
92
+ "APP_PORT": app_container_port_env,
93
+ "APP_ENABLE_EVENT_HANDLER": "true",
94
+ "APP_ENABLE_RPC_SERVER": "true",
95
+ "APP_ENABLE_API": "false",
96
+ "APP_ENABLE_FRONTEND": "false",
97
+ f"APP_ENABLE_{upper_snake_module_name}_MODULE": "true",
98
+ },
99
+ "ports": [f"{app_host_port_env}:{app_container_port_env}"],
100
+ "restart": "unless-stopped",
101
+ "profiles": ["microservices"],
102
+ "healthcheck": {
103
+ "test": f"curl --fail http://localhost:{app_container_port_env}/readiness || killall uvicorn", # noqa
104
+ "interval": "20s",
105
+ "timeout": "3s",
106
+ "retries": 10,
107
+ "start_period": "20s",
108
+ },
109
+ "networks": ["zrb"],
110
+ }
111
+ }
112
+
113
+
114
+ @typechecked
115
+ async def _create_automation_json_config(
116
+ task: Task,
117
+ project_dir: str,
118
+ app_name: str,
119
+ module_name: str,
120
+ ):
121
+ snake_app_name = to_snake_case(app_name)
122
+ snake_module_name = to_snake_case(module_name)
123
+ json_modules_file_path = os.path.join(
124
+ project_dir, "_automate", snake_app_name, "config", "modules.json"
125
+ )
126
+ task.print_out(f"Read json config from: {json_modules_file_path}")
127
+ json_str = await read_text_file_async(json_modules_file_path)
128
+ task.print_out(f'Add "{snake_module_name}" to json config')
129
+ modules: list[str] = jsons.loads(json_str)
130
+ modules.append(snake_module_name)
131
+ json_str = jsons.dumps(modules)
132
+ task.print_out(f"Write new json config to: {json_modules_file_path}")
133
+ await write_text_file_async(json_modules_file_path, json_str)
134
+ return modules
135
+
136
+
137
+ @typechecked
138
+ async def _append_compose_env(
139
+ task: Task, modules: list[str], project_dir: str, app_name: str, module_name: str
140
+ ):
141
+ kebab_app_name = to_kebab_case(app_name)
142
+ snake_module_name = to_snake_case(module_name)
143
+ upper_snake_module_name = snake_module_name.upper()
144
+ compose_template_env_path = os.path.join(
145
+ project_dir, "src", kebab_app_name, "docker-compose.env"
146
+ )
147
+ compose_env_map = dotenv_values(compose_template_env_path)
148
+ host_port = int(compose_env_map.get("APP_GATEWAY_HOST_PORT", "8080"))
149
+ module_app_port = host_port + len(modules)
150
+ new_env_str = "\n".join(
151
+ [
152
+ f"APP_{upper_snake_module_name}_HOST_MODULE_PORT={module_app_port}",
153
+ f"APP_{upper_snake_module_name}_MODULE_PORT={module_app_port}",
154
+ ]
155
+ )
156
+ task.print_out(f"Add new environment to: {compose_template_env_path}")
157
+ await append_text_file_async(compose_template_env_path, new_env_str)