zrb 0.0.38__tar.gz → 0.0.40__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. {zrb-0.0.38 → zrb-0.0.40}/PKG-INFO +1 -1
  2. {zrb-0.0.38 → zrb-0.0.40}/playground-template/generate-project.sh +8 -5
  3. {zrb-0.0.38 → zrb-0.0.40}/pyproject.toml +1 -1
  4. {zrb-0.0.38 → zrb-0.0.40}/requirements.txt +1 -0
  5. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/__init__.py +2 -0
  6. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/docker_compose_task/template/_automate/snake_task_name.py +4 -1
  7. zrb-0.0.40/src/zrb/builtin/generator/fastapp/add.py +131 -0
  8. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/_automate/snake_app_name/app/app_env.py +16 -0
  9. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/_automate/snake_app_name/cmd/start.sh +15 -0
  10. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/_automate/snake_app_name/compose/compose_checker.py +49 -0
  11. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/_automate/snake_app_name/compose/compose_env.py +52 -0
  12. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/_automate/snake_app_name/container.py +91 -0
  13. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/_automate/snake_app_name/local.py +92 -0
  14. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/docker-compose.yml +82 -0
  15. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src}/__init__.py +0 -0
  16. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component}/__init__.py +0 -0
  17. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/app.py +51 -0
  18. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/app_state.py +26 -0
  19. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/log.py +20 -0
  20. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_consumer.py +42 -0
  21. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_mocker.py +6 -0
  22. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_publisher.py +42 -0
  23. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_serializer.py +9 -0
  24. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/config.py +43 -0
  25. {zrb-0.0.38/src/zrb/config → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core}/__init__.py +0 -0
  26. {zrb-0.0.38/src/zrb/helper → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus}/__init__.py +0 -0
  27. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/kafka/consumer.py +198 -0
  28. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/kafka/publisher.py +144 -0
  29. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/messagebus.py +52 -0
  30. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/mock.py +51 -0
  31. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/rabbitmq/consumer.py +92 -0
  32. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/rabbitmq/publisher.py +61 -0
  33. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/serializer/serializer.py +35 -0
  34. {zrb-0.0.38/src/zrb/helper/file → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/helper}/__init__.py +0 -0
  35. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/helper/async_task.py +17 -0
  36. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/helper/conversion.py +27 -0
  37. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/main.py +38 -0
  38. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/requirements.txt +8 -0
  39. zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/template.env +17 -0
  40. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/cmd/pulumi-destroy.sh +2 -0
  41. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/cmd/pulumi-up.sh +2 -0
  42. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/cmd/start.sh +3 -1
  43. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/common.py +81 -0
  44. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/container.py +1 -0
  45. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/deployment.py +55 -0
  46. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/image.py +44 -0
  47. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/local.py +1 -0
  48. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/deployment/.gitignore +2 -0
  49. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/deployment/Pulumi.yaml +6 -0
  50. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/deployment/__main__.py +79 -0
  51. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/deployment/requirements.txt +3 -0
  52. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/src/.dockerignore +3 -0
  53. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/src/.gitignore +3 -0
  54. zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/src/Dockerfile +5 -0
  55. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/src/template.env +1 -0
  56. zrb-0.0.40/src/zrb/helper/__init__.py +0 -0
  57. zrb-0.0.40/src/zrb/helper/accessories/__init__.py +0 -0
  58. zrb-0.0.40/src/zrb/helper/codemod/__init__.py +0 -0
  59. zrb-0.0.40/src/zrb/helper/file/__init__.py +0 -0
  60. zrb-0.0.40/src/zrb/helper/keyval/__init__.py +0 -0
  61. zrb-0.0.40/src/zrb/helper/list/__init__.py +0 -0
  62. zrb-0.0.40/src/zrb/helper/list/ensure_uniqueness.py +22 -0
  63. zrb-0.0.40/src/zrb/helper/loader/__init__.py +0 -0
  64. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/render_data.py +3 -2
  65. zrb-0.0.40/src/zrb/helper/string/__init__.py +0 -0
  66. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/string/conversion.py +8 -8
  67. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/util.py +5 -0
  68. zrb-0.0.40/src/zrb/task/__init__.py +0 -0
  69. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/base_model.py +35 -14
  70. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/base_task.py +30 -20
  71. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/docker_compose_task.py +3 -3
  72. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/http_checker.py +29 -5
  73. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/port_checker.py +35 -10
  74. zrb-0.0.40/src/zrb/task_group/__init__.py +0 -0
  75. zrb-0.0.40/src/zrb/task_input/__init__.py +0 -0
  76. zrb-0.0.40/test/.gitignore +0 -0
  77. {zrb-0.0.38 → zrb-0.0.40}/zrb_init.py +14 -30
  78. zrb-0.0.38/src/zrb/helper/list/append_unique.py +0 -9
  79. {zrb-0.0.38 → zrb-0.0.40}/.gitignore +0 -0
  80. {zrb-0.0.38 → zrb-0.0.40}/LICENSE +0 -0
  81. {zrb-0.0.38 → zrb-0.0.40}/README.md +0 -0
  82. {zrb-0.0.38 → zrb-0.0.40}/playground-template/__init__.py +0 -0
  83. {zrb-0.0.38 → zrb-0.0.40}/playground-template/programmatic.py +0 -0
  84. {zrb-0.0.38 → zrb-0.0.40}/playground-template/zrb_init.py +0 -0
  85. {zrb-0.0.38 → zrb-0.0.40}/project.sh +0 -0
  86. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/__init__.py +0 -0
  87. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/__main__.py +0 -0
  88. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/action/__init__.py +0 -0
  89. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/action/base_action.py +0 -0
  90. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/action/runner.py +0 -0
  91. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/advertisement.py +0 -0
  92. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/_group.py +0 -0
  93. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/base64.py +0 -0
  94. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/__init__.py +0 -0
  95. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/aws/download.sh +0 -0
  96. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/aws/setup.sh +0 -0
  97. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/devtool_install.py +0 -0
  98. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/docker/setup.sh +0 -0
  99. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/gcloud/setup.sh +0 -0
  100. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/gvm/config.sh +0 -0
  101. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/gvm/download.sh +0 -0
  102. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/gvm/finalize.sh +0 -0
  103. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/helm/download.sh +0 -0
  104. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/helm/setup.sh +0 -0
  105. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/kubectl/download.sh +0 -0
  106. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/kubectl/setup.sh +0 -0
  107. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/nvm/config.sh +0 -0
  108. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/nvm/download.sh +0 -0
  109. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/nvm/finalize.sh +0 -0
  110. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/pulumi/config.sh +0 -0
  111. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/pulumi/download.sh +0 -0
  112. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/pyenv/config.sh +0 -0
  113. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/pyenv/download.sh +0 -0
  114. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/pyenv/finalize.sh +0 -0
  115. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/sdkman/config.sh +0 -0
  116. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/sdkman/download.sh +0 -0
  117. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/sdkman/finalize.sh +0 -0
  118. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/terraform/config.sh +0 -0
  119. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/terraform/download.sh +0 -0
  120. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/terraform/setup.sh +0 -0
  121. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/tmux/config.sh +0 -0
  122. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/tmux/setup.sh +0 -0
  123. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/zsh/config.sh +0 -0
  124. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/devtool/zsh/setup.sh +0 -0
  125. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/env.py +0 -0
  126. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/eval.py +0 -0
  127. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/__init__.py +0 -0
  128. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/_common.py +0 -0
  129. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/cmd_task/__init__.py +0 -0
  130. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/cmd_task/add.py +0 -0
  131. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/cmd_task/template/_automate/snake_task_name.py +0 -0
  132. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/docker_compose_task/__init__.py +0 -0
  133. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/docker_compose_task/add.py +0 -0
  134. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/docker_compose_task/template/src/kebab-task-name/docker-compose.yml +0 -0
  135. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/docker_compose_task/template/src/kebab-task-name/image/Dockerfile +0 -0
  136. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/docker_compose_task/template/src/kebab-task-name/image/main.py +0 -0
  137. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/docker_compose_task/template/src/kebab-task-name/image/requirements.txt +0 -0
  138. {zrb-0.0.38/src/zrb/builtin/generator/project → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/__init__.py +0 -0
  139. {zrb-0.0.38/src/zrb/builtin/generator/project/template/_automate → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/_automate/snake_app_name}/__init__.py +0 -0
  140. {zrb-0.0.38/src/zrb/builtin/generator/project_task → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/_automate/snake_app_name/app}/__init__.py +0 -0
  141. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/_automate/snake_app_name/cmd/pulumi-destroy.sh +0 -0
  142. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/_automate/snake_app_name/cmd/pulumi-up.sh +0 -0
  143. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/_automate/snake_app_name/common.py +0 -0
  144. {zrb-0.0.38/src/zrb/builtin/generator/python_task → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/_automate/snake_app_name/compose}/__init__.py +0 -0
  145. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/_automate/snake_app_name/deployment.py +0 -0
  146. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/_automate/snake_app_name/image.py +0 -0
  147. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/src/kebab-app-name/deployment/.gitignore +0 -0
  148. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/src/kebab-app-name/deployment/Pulumi.yaml +0 -0
  149. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/src/kebab-app-name/deployment/__main__.py +0 -0
  150. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/src/kebab-app-name/deployment/requirements.txt +0 -0
  151. {zrb-0.0.38/src/zrb/builtin/generator/project/template/src → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/state}/.gitkeep +0 -0
  152. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/src/kebab-app-name/src/.dockerignore +0 -0
  153. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/src/kebab-app-name/src/.gitignore +0 -0
  154. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app → zrb-0.0.40/src/zrb/builtin/generator/fastapp}/template/src/kebab-app-name/src/Dockerfile +0 -0
  155. {zrb-0.0.38/src/zrb/helper/accessories → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/kafka}/__init__.py +0 -0
  156. {zrb-0.0.38/src/zrb/helper/codemod → zrb-0.0.40/src/zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/rabbitmq}/__init__.py +0 -0
  157. {zrb-0.0.38/src/zrb/helper/keyval → zrb-0.0.40/src/zrb/builtin/generator/project}/__init__.py +0 -0
  158. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project/create.py +0 -0
  159. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project/template/.gitignore +0 -0
  160. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project/template/README.md +0 -0
  161. {zrb-0.0.38/src/zrb/helper/list → zrb-0.0.40/src/zrb/builtin/generator/project/template/_automate}/__init__.py +0 -0
  162. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project/template/project.sh +0 -0
  163. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project/template/requirements.txt +0 -0
  164. {zrb-0.0.38/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/deployment/state → zrb-0.0.40/src/zrb/builtin/generator/project/template/src}/.gitkeep +0 -0
  165. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project/template/template.env +0 -0
  166. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project/template/zrb_init.py +0 -0
  167. {zrb-0.0.38/src/zrb/helper/loader → zrb-0.0.40/src/zrb/builtin/generator/project_task}/__init__.py +0 -0
  168. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/add.py +0 -0
  169. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/task_factory.py +0 -0
  170. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/task_factory_helper.py +0 -0
  171. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/template/_automate/_project/__init__.py +0 -0
  172. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/template/_automate/_project/build_project_images.py +0 -0
  173. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/template/_automate/_project/deploy_project.py +0 -0
  174. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/template/_automate/_project/destroy_project.py +0 -0
  175. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/template/_automate/_project/push_project_images.py +0 -0
  176. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/template/_automate/_project/remove_project_containers.py +0 -0
  177. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/template/_automate/_project/start_project.py +0 -0
  178. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/template/_automate/_project/start_project_containers.py +0 -0
  179. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/project_task/template/_automate/_project/stop_project_containers.py +0 -0
  180. {zrb-0.0.38/src/zrb/helper/string → zrb-0.0.40/src/zrb/builtin/generator/python_task}/__init__.py +0 -0
  181. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/python_task/add.py +0 -0
  182. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/python_task/template/_automate/snake_task_name.py +0 -0
  183. {zrb-0.0.38/src/zrb/task → zrb-0.0.40/src/zrb/builtin/generator/simple_python_app}/__init__.py +0 -0
  184. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/simple_python_app/add.py +0 -0
  185. {zrb-0.0.38/src/zrb/task_group → zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name}/__init__.py +0 -0
  186. /zrb-0.0.38/src/zrb/config.toml → /zrb-0.0.40/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/deployment/state/.gitkeep +0 -0
  187. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/docker-compose.yml +0 -0
  188. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/src/main.py +0 -0
  189. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/src/requirements.txt +0 -0
  190. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/md5.py +0 -0
  191. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/principle.py +0 -0
  192. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/ubuntu.py +0 -0
  193. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/update.py +0 -0
  194. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/builtin/version.py +0 -0
  195. /zrb-0.0.38/test/.gitignore → /zrb-0.0.40/src/zrb/config/__init__.py +0 -0
  196. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/config/config.py +0 -0
  197. /zrb-0.0.38/src/zrb/task_input/__init__.py → /zrb-0.0.40/src/zrb/config.toml +0 -0
  198. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/accessories/color.py +0 -0
  199. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/accessories/icon.py +0 -0
  200. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/accessories/name.py +0 -0
  201. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/advertisement.py +0 -0
  202. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/cli.py +0 -0
  203. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/codemod/add_assert_resource.py +0 -0
  204. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/codemod/add_import_module.py +0 -0
  205. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/codemod/add_upstream_to_task.py +0 -0
  206. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/codemod/format_code.py +0 -0
  207. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/default_env.py +0 -0
  208. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/dockercompose/fetch_external_env.py +0 -0
  209. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/dockercompose/read.py +0 -0
  210. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/file/copy_tree.py +0 -0
  211. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/loader/load_module.py +0 -0
  212. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/log.py +0 -0
  213. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/middlewares/replacement.py +0 -0
  214. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/string/double_quote.py +0 -0
  215. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/helper/string/parse_replacement.py +0 -0
  216. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/runner.py +0 -0
  217. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/cmd_task.py +0 -0
  218. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/decorator.py +0 -0
  219. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/installer/_default/backup-config.sh +0 -0
  220. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/installer/_default/check.sh +0 -0
  221. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/installer/_default/download.sh +0 -0
  222. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/installer/_default/finalize.sh +0 -0
  223. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/installer/_default/remove-config.sh +0 -0
  224. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/installer/_default/setup.sh +0 -0
  225. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/installer/factory.py +0 -0
  226. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/resource_maker.py +0 -0
  227. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task/task.py +0 -0
  228. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_env/env.py +0 -0
  229. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_env/env_file.py +0 -0
  230. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_group/group.py +0 -0
  231. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_input/_constant.py +0 -0
  232. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_input/base_input.py +0 -0
  233. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_input/bool_input.py +0 -0
  234. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_input/choice_input.py +0 -0
  235. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_input/float_input.py +0 -0
  236. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_input/input.py +0 -0
  237. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_input/int_input.py +0 -0
  238. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_input/password_input.py +0 -0
  239. {zrb-0.0.38 → zrb-0.0.40}/src/zrb/task_input/str_input.py +0 -0
  240. {zrb-0.0.38 → zrb-0.0.40}/template.env +0 -0
  241. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/generator/cmd_task/.gitignore +0 -0
  242. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/generator/cmd_task/test_add_cmd_task.py +0 -0
  243. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/generator/docker_compose_task/.gitignore +0 -0
  244. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/generator/docker_compose_task/test_add_docker_compose_task.py +0 -0
  245. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/generator/project/.gitignore +0 -0
  246. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/generator/project/test_create_project.py +0 -0
  247. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/generator/python_task/.gitignore +0 -0
  248. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/generator/python_task/test_add_python_task.py +0 -0
  249. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/generator/simple-python-app/.gitignore +0 -0
  250. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/generator/simple-python-app/test_add_simple_python_app.py +0 -0
  251. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/md5_test_sum.txt +0 -0
  252. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/test_base64.py +0 -0
  253. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/test_env.py +0 -0
  254. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/test_eval.py +0 -0
  255. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/test_md5.py +0 -0
  256. {zrb-0.0.38 → zrb-0.0.40}/test/builtin/test_principle.py +0 -0
  257. {zrb-0.0.38 → zrb-0.0.40}/test/helper/codemod/test_add_assert_resource.py +0 -0
  258. {zrb-0.0.38 → zrb-0.0.40}/test/helper/codemod/test_add_import_module.py +0 -0
  259. {zrb-0.0.38 → zrb-0.0.40}/test/helper/codemod/test_add_upstream_to_task.py +0 -0
  260. {zrb-0.0.38 → zrb-0.0.40}/test/helper/test_fetch_external_env.py +0 -0
  261. {zrb-0.0.38 → zrb-0.0.40}/test/helper/test_util.py +0 -0
  262. {zrb-0.0.38 → zrb-0.0.40}/test/task/cmd_task/templates/hello.sh +0 -0
  263. {zrb-0.0.38 → zrb-0.0.40}/test/task/cmd_task/templates/macros.jinja +0 -0
  264. {zrb-0.0.38 → zrb-0.0.40}/test/task/cmd_task/test_cmd_task.py +0 -0
  265. {zrb-0.0.38 → zrb-0.0.40}/test/task/docker_compose_task/resource/docker-compose-simple-list-env.yml +0 -0
  266. {zrb-0.0.38 → zrb-0.0.40}/test/task/docker_compose_task/resource/docker-compose-simple-map-env.yml +0 -0
  267. {zrb-0.0.38 → zrb-0.0.40}/test/task/docker_compose_task/resource/docker-compose-simple-no-default-env.yml +0 -0
  268. {zrb-0.0.38 → zrb-0.0.40}/test/task/docker_compose_task/resource/docker-compose-simple.yml +0 -0
  269. {zrb-0.0.38 → zrb-0.0.40}/test/task/docker_compose_task/resource/docker-compose.yml +0 -0
  270. {zrb-0.0.38 → zrb-0.0.40}/test/task/docker_compose_task/resource/image/Dockerfile +0 -0
  271. {zrb-0.0.38 → zrb-0.0.40}/test/task/docker_compose_task/resource/image/my_program.py +0 -0
  272. {zrb-0.0.38 → zrb-0.0.40}/test/task/docker_compose_task/test_docker_compose_task.py +0 -0
  273. {zrb-0.0.38 → zrb-0.0.40}/test/task/resource_maker/.gitignore +0 -0
  274. {zrb-0.0.38 → zrb-0.0.40}/test/task/resource_maker/template/excluded +0 -0
  275. {zrb-0.0.38 → zrb-0.0.40}/test/task/resource_maker/template/src/app_name.py +0 -0
  276. {zrb-0.0.38 → zrb-0.0.40}/test/task/resource_maker/template/src/config_app_name.py +0 -0
  277. {zrb-0.0.38 → zrb-0.0.40}/test/task/resource_maker/test_resource_maker.py +0 -0
  278. {zrb-0.0.38 → zrb-0.0.40}/test/task/test_decorator.py +0 -0
  279. {zrb-0.0.38 → zrb-0.0.40}/test/task/test_task.env +0 -0
  280. {zrb-0.0.38 → zrb-0.0.40}/test/task/test_task.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 0.0.38
3
+ Version: 0.0.40
4
4
  Summary: Your faithful companion
5
5
  Author-email: Go Frendi Gunawan <gofrendiasgard@gmail.com>
6
6
  Requires-Python: >=3.8
@@ -32,6 +32,12 @@ zrb project add simple-python-app \
32
32
  --app-name "simple" \
33
33
  --http-port 3001
34
34
 
35
+ echo '🤖 Add fastapp'
36
+ zrb project add fastapp \
37
+ --project-dir . \
38
+ --app-name "fastapp" \
39
+ --http-port 3002
40
+
35
41
 
36
42
  echo '🤖 Add test-project task'
37
43
  echo '' >> zrb_init.py
@@ -43,11 +49,8 @@ echo ' run_cmd.run_cmd,' >> zrb_init.py
43
49
  echo ' run_container.run_container,' >> zrb_init.py
44
50
  echo ' run_python.run_python,' >> zrb_init.py
45
51
  echo ' simple_local.start_simple,' >> zrb_init.py
52
+ echo ' fastapp_local.start_fastapp,' >> zrb_init.py
46
53
  echo ' ]' >> zrb_init.py
47
54
  echo ')' >> zrb_init.py
48
55
  echo 'runner.register(test_project)' >> zrb_init.py
49
- echo '' >> zrb_init.py
50
-
51
-
52
- echo '🤖 Test project'
53
- zrb test-project
56
+ echo '' >> zrb_init.py
@@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"
4
4
 
5
5
  [project]
6
6
  name = "zrb"
7
- version = "0.0.38"
7
+ version = "0.0.40"
8
8
  authors = [
9
9
  { name="Go Frendi Gunawan", email="gofrendiasgard@gmail.com" },
10
10
  ]
@@ -23,3 +23,4 @@ pytest-xdist==3.2.0
23
23
  # Other dependencies (just for auto-completion)
24
24
  pulumi==3.56.0
25
25
  pulumi-kubernetes==3.24.1
26
+ fastapi==0.93.0
@@ -12,6 +12,7 @@ from .generator.cmd_task import add as generate_cmd_task
12
12
  from .generator.docker_compose_task import add as generate_docker_compose_task
13
13
  from .generator.python_task import add as generate_python_task
14
14
  from .generator.simple_python_app import add as generate_simple_python_app
15
+ from .generator.fastapp import add as generate_fastapp
15
16
 
16
17
  assert base64
17
18
  assert env
@@ -27,3 +28,4 @@ assert generate_cmd_task
27
28
  assert generate_docker_compose_task
28
29
  assert generate_python_task
29
30
  assert generate_simple_python_app
31
+ assert generate_fastapp
@@ -31,7 +31,10 @@ snake_task_name = DockerComposeTask(
31
31
  ),
32
32
  ],
33
33
  checkers=[
34
- HTTPChecker(port='{{env.HOST_PORT}}')
34
+ HTTPChecker(
35
+ name='check-kebab-app-name',
36
+ port='{{env.HOST_PORT}}'
37
+ )
35
38
  ]
36
39
  )
37
40
  runner.register(snake_task_name)
@@ -0,0 +1,131 @@
1
+ from typing import Any
2
+ from ..._group import project_add_group
3
+ from ....task.task import Task
4
+ from ....task.decorator import python_task
5
+ from ....task.resource_maker import ResourceMaker
6
+ from ....runner import runner
7
+ from .._common import (
8
+ default_app_inputs, project_dir_input, app_name_input,
9
+ validate_project_dir, create_register_local_app_module,
10
+ create_register_container_app_module, create_register_image_app_module,
11
+ create_register_deployment_app_module, get_default_app_replacements,
12
+ get_default_app_replacement_middlewares, new_app_scaffold_lock
13
+ )
14
+ from ..project_task.task_factory import (
15
+ create_add_project_automation, create_register_app_start,
16
+ create_register_app_start_container, create_register_app_stop_container,
17
+ create_register_app_remove_container, create_register_app_build_image,
18
+ create_register_app_push_image, create_register_app_deploy,
19
+ create_register_app_destroy
20
+ )
21
+ from ....helper import util
22
+
23
+ import os
24
+
25
+ # Common definitions
26
+
27
+ current_dir = os.path.dirname(__file__)
28
+
29
+
30
+ @python_task(
31
+ name='task-validate-create',
32
+ inputs=[project_dir_input, app_name_input],
33
+ )
34
+ async def validate(*args: Any, **kwargs: Any):
35
+ project_dir = kwargs.get('project_dir')
36
+ validate_project_dir(project_dir)
37
+ app_name = kwargs.get('app_name')
38
+ automation_dir = os.path.join(
39
+ project_dir, '_automate', util.to_snake_case(app_name)
40
+ )
41
+ if os.path.isdir(automation_dir):
42
+ raise Exception(f'Directory already exists: {automation_dir}')
43
+
44
+
45
+ copy_resource = ResourceMaker(
46
+ name='copy-resource',
47
+ inputs=default_app_inputs,
48
+ upstreams=[validate],
49
+ replacements=get_default_app_replacements(),
50
+ replacement_middlewares=get_default_app_replacement_middlewares(),
51
+ template_path=os.path.join(current_dir, 'template'),
52
+ destination_path='{{ input.project_dir }}',
53
+ scaffold_locks=[new_app_scaffold_lock],
54
+ excludes=['*/deployment/venv']
55
+ )
56
+
57
+ register_local_app_module = create_register_local_app_module(
58
+ upstreams=[copy_resource]
59
+ )
60
+
61
+ register_container_app_module = create_register_container_app_module(
62
+ upstreams=[copy_resource]
63
+ )
64
+
65
+ register_image_app_module = create_register_image_app_module(
66
+ upstreams=[copy_resource]
67
+ )
68
+
69
+ register_deployment_app_module = create_register_deployment_app_module(
70
+ upstreams=[copy_resource]
71
+ )
72
+
73
+ add_project_task = create_add_project_automation(
74
+ upstreams=[copy_resource]
75
+ )
76
+
77
+ register_start = create_register_app_start(
78
+ upstreams=[add_project_task]
79
+ )
80
+
81
+ register_start_container = create_register_app_start_container(
82
+ upstreams=[add_project_task]
83
+ )
84
+
85
+ register_stop_container = create_register_app_stop_container(
86
+ upstreams=[add_project_task]
87
+ )
88
+
89
+ register_remove_container = create_register_app_remove_container(
90
+ upstreams=[add_project_task]
91
+ )
92
+
93
+ register_push_image = create_register_app_push_image(
94
+ upstreams=[add_project_task]
95
+ )
96
+
97
+ register_build_image = create_register_app_build_image(
98
+ upstreams=[add_project_task]
99
+ )
100
+
101
+ register_deploy = create_register_app_deploy(
102
+ upstreams=[add_project_task]
103
+ )
104
+
105
+ register_destroy = create_register_app_destroy(
106
+ upstreams=[add_project_task]
107
+ )
108
+
109
+
110
+ @python_task(
111
+ name='fastapp',
112
+ group=project_add_group,
113
+ upstreams=[
114
+ register_local_app_module,
115
+ register_container_app_module,
116
+ register_image_app_module,
117
+ register_deployment_app_module,
118
+ register_start,
119
+ register_start_container,
120
+ register_stop_container,
121
+ register_remove_container,
122
+ register_build_image,
123
+ register_push_image,
124
+ register_deploy,
125
+ register_destroy
126
+ ],
127
+ runner=runner
128
+ )
129
+ async def add_simple_python_app(*args: Any, **kwargs: Any):
130
+ task: Task = kwargs.get('_task')
131
+ task.print_out('Success')
@@ -0,0 +1,16 @@
1
+ from zrb import Env, EnvFile
2
+ from ..common import TEMPLATE_ENV_FILE_NAME
3
+
4
+ app_env_file = EnvFile(env_file=TEMPLATE_ENV_FILE_NAME, prefix='ENV_PREFIX')
5
+ app_envs = [
6
+ Env(
7
+ name='APP_PORT',
8
+ os_name='ENV_PREFIX_APP_PORT',
9
+ default='httpPort'
10
+ ),
11
+ Env(
12
+ name='APP_BROKER_TYPE',
13
+ os_name='ENV_PREFIX_APP_BROKER_TYPE',
14
+ default='rabbitmq'
15
+ )
16
+ ]
@@ -0,0 +1,15 @@
1
+ PYTHONUNBUFFERED=1
2
+
3
+ if [ ! -d venv ]
4
+ then
5
+ echo "Init venv"
6
+ python -m venv venv
7
+ fi
8
+ echo "Activate venv"
9
+ source venv/bin/activate
10
+
11
+ echo "Install packages"
12
+ pip install -r requirements.txt
13
+
14
+ echo "Start app"
15
+ uvicorn main:app --host {{env.get("APP_HOST", "0.0.0.0")}} --port {{env.get("APP_PORT", "8080")}} {{ "--reload" if util.to_boolean(env.get("APP_RELOAD", "true")) else "" }}
@@ -0,0 +1,49 @@
1
+ from zrb import HTTPChecker, PortChecker
2
+
3
+ rabbitmq_management_checker = HTTPChecker(
4
+ name='check-rabbitmq-management',
5
+ port='{{env.get("RABBITMQ_MANAGEMENT_HOST_PORT", "15672")}}',
6
+ is_https='{{input.snake_app_name_https}}',
7
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "rabbitmq"}}'
8
+ )
9
+
10
+ rabbitmq_checker = PortChecker(
11
+ name='check-rabbitmq',
12
+ port='{{env.get("RABBITMQ_HOST_PORT", "5672")}}',
13
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "rabbitmq"}}'
14
+ )
15
+
16
+ redpanda_console_checker = HTTPChecker(
17
+ name='check-redpanda-console',
18
+ port='{{env.get("REDPANDA_CONSOLE_HOST_PORT", "9000")}}',
19
+ is_https='{{input.snake_app_name_https}}',
20
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "kafka"}}'
21
+ )
22
+
23
+ kafka_plaintext_checker = HTTPChecker(
24
+ name='check-kafka-plaintext',
25
+ port='{{env.get("KAFKA_PLAINTEXT_HOST_PORT", "29092")}}',
26
+ is_https='{{input.snake_app_name_https}}',
27
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "kafka"}}'
28
+ )
29
+
30
+ kafka_outside_checker = HTTPChecker(
31
+ name='check-kafka-outside',
32
+ port='{{env.get("KAFKA_OUTSIDE_HOST_PORT", "9092")}}',
33
+ is_https='{{input.snake_app_name_https}}',
34
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "kafka"}}'
35
+ )
36
+
37
+ pandaproxy_plaintext_checker = HTTPChecker(
38
+ name='check-pandaproxy-plaintext',
39
+ port='{{env.get("PANDAPROXY_PLAINTEXT_HOST_PORT", "29092")}}',
40
+ is_https='{{input.snake_app_name_https}}',
41
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "kafka"}}'
42
+ )
43
+
44
+ pandaproxy_outside_checker = HTTPChecker(
45
+ name='check-pandaproxy-outside',
46
+ port='{{env.get("PANDAPROXY_OUTSIDE_HOST_PORT", "9092")}}',
47
+ is_https='{{input.snake_app_name_https}}',
48
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "kafka"}}'
49
+ )
@@ -0,0 +1,52 @@
1
+ from zrb import Env
2
+ from ..common import image_env
3
+
4
+ compose_env_prefix = 'CONTAINER_ENV_PREFIX'
5
+ compose_envs = [
6
+ image_env,
7
+ Env(
8
+ name='APP_BROKER_TYPE',
9
+ os_name='CONTAINER_ENV_PREFIX_APP_BROKER_TYPE',
10
+ default='rabbitmq'
11
+ ),
12
+ Env(
13
+ name='APP_HOST_PORT',
14
+ os_name='CONTAINER_ENV_PREFIX_APP_HOST_PORT',
15
+ default='httpPort'
16
+ ),
17
+ Env(
18
+ name='RABBITMQ_HOST_PORT',
19
+ os_name='CONTAINER_ENV_PREFIX_RABBITMQ_HOST_PORT',
20
+ default='5672'
21
+ ),
22
+ Env(
23
+ name='RABBITMQ_MANAGEMENT_HOST_PORT',
24
+ os_name='CONTAINER_ENV_PREFIX_RABBITMQ_MANAGEMENT_HOST_PORT',
25
+ default='15672'
26
+ ),
27
+ Env(
28
+ name='REDPANDA_CONSOLE_HOST_PORT',
29
+ os_name='CONTAINER_ENV_PREFIX_REDPANDA_CONSOLE_HOST_PORT',
30
+ default='9000'
31
+ ),
32
+ Env(
33
+ name='KAFKA_PLAINTEXT_HOST_PORT',
34
+ os_name='CONTAINER_ENV_PREFIX_KAFKA_PLAINTEXT_HOST_PORT',
35
+ default='29092'
36
+ ),
37
+ Env(
38
+ name='KAFKA_OUTSIDE_HOST_PORT',
39
+ os_name='CONTAINER_ENV_PREFIX_KAFKA_OUTSIDE_HOST_PORT',
40
+ default='9092'
41
+ ),
42
+ Env(
43
+ name='PANDAPROXY_PLAINTEXT_HOST_PORT',
44
+ os_name='CONTAINER_ENV_PREFIX_PANDAPROXY_PLAINTEXT_HOST_PORT',
45
+ default='29092'
46
+ ),
47
+ Env(
48
+ name='PANDAPROXY_OUTSIDE_HOST_PORT',
49
+ os_name='CONTAINER_ENV_PREFIX_PANDAPROXY_OUTSIDE_HOST_PORT',
50
+ default='9092'
51
+ ),
52
+ ]
@@ -0,0 +1,91 @@
1
+ from zrb import DockerComposeTask, Env, HTTPChecker, runner
2
+ from zrb.builtin._group import project_group
3
+ from .common import (
4
+ RESOURCE_DIR,
5
+ local_input, host_input, https_input, image_input
6
+ )
7
+ from .image import build_snake_app_name_image
8
+ from .compose.compose_env import compose_env_prefix, compose_envs
9
+ from .compose.compose_checker import (
10
+ rabbitmq_checker, rabbitmq_management_checker,
11
+ redpanda_console_checker, kafka_outside_checker,
12
+ kafka_plaintext_checker, pandaproxy_outside_checker,
13
+ pandaproxy_plaintext_checker
14
+ )
15
+
16
+
17
+ remove_snake_app_name_container = DockerComposeTask(
18
+ icon='💨',
19
+ name='remove-kebab-app-name-container',
20
+ description='Rumove human readable app name container',
21
+ group=project_group,
22
+ cwd=RESOURCE_DIR,
23
+ compose_cmd='down',
24
+ compose_env_prefix=compose_env_prefix,
25
+ envs=compose_envs,
26
+ )
27
+ runner.register(remove_snake_app_name_container)
28
+
29
+ start_snake_app_name_container = DockerComposeTask(
30
+ icon='🐳',
31
+ name='start-kebab-app-name-container',
32
+ description='Start human readable app name container',
33
+ group=project_group,
34
+ inputs=[
35
+ local_input,
36
+ host_input,
37
+ https_input,
38
+ image_input,
39
+ ],
40
+ skip_execution='{{not input.local_snake_app_name}}',
41
+ upstreams=[
42
+ build_snake_app_name_image,
43
+ remove_snake_app_name_container
44
+ ],
45
+ cwd=RESOURCE_DIR,
46
+ compose_cmd='up',
47
+ compose_env_prefix=compose_env_prefix,
48
+ envs=compose_envs + [
49
+ Env(
50
+ name='COMPOSE_PROFILES',
51
+ os_name='',
52
+ default=' '.join([
53
+ '{{',
54
+ '",".join([',
55
+ ' env.get("APP_BROKER_TYPE", "rabbitmq"),',
56
+ ' "monolith"',
57
+ '])',
58
+ '}}'
59
+ ])
60
+ )
61
+ ],
62
+ checkers=[
63
+ HTTPChecker(
64
+ name='check-kebab-app-name-monolith',
65
+ host='{{input.snake_app_name_host}}',
66
+ url='/readiness',
67
+ port='{{env.get("HOST_PORT", "httpPort")}}',
68
+ is_https='{{input.snake_app_name_https}}'
69
+ ),
70
+ rabbitmq_checker,
71
+ rabbitmq_management_checker,
72
+ kafka_outside_checker,
73
+ kafka_plaintext_checker,
74
+ redpanda_console_checker,
75
+ pandaproxy_outside_checker,
76
+ pandaproxy_plaintext_checker,
77
+ ]
78
+ )
79
+ runner.register(start_snake_app_name_container)
80
+
81
+ stop_snake_app_name_container = DockerComposeTask(
82
+ icon='⛔',
83
+ name='stop-kebab-app-name-container',
84
+ description='Stop human readable app name container',
85
+ group=project_group,
86
+ cwd=RESOURCE_DIR,
87
+ compose_cmd='stop',
88
+ compose_env_prefix=compose_env_prefix,
89
+ envs=compose_envs,
90
+ )
91
+ runner.register(stop_snake_app_name_container)
@@ -0,0 +1,92 @@
1
+ from zrb import CmdTask, DockerComposeTask, Env, HTTPChecker, runner
2
+ from zrb.builtin._group import project_group
3
+ from .common import (
4
+ CURRENT_DIR, APP_DIR, RESOURCE_DIR,
5
+ local_input, host_input, https_input, image_input
6
+ )
7
+ from .image import build_snake_app_name_image
8
+ from .app.app_env import app_env_file, app_envs
9
+ from .container import remove_snake_app_name_container
10
+ from .compose.compose_env import compose_env_prefix, compose_envs
11
+ from .compose.compose_checker import (
12
+ rabbitmq_checker, rabbitmq_management_checker,
13
+ redpanda_console_checker, kafka_outside_checker,
14
+ kafka_plaintext_checker, pandaproxy_outside_checker,
15
+ pandaproxy_plaintext_checker
16
+ )
17
+ import os
18
+
19
+ start_snake_app_name_support_container = DockerComposeTask(
20
+ icon='🐳',
21
+ name='start-kebab-app-name-support-container',
22
+ description='Start human readable app name container',
23
+ inputs=[
24
+ local_input,
25
+ host_input,
26
+ https_input,
27
+ image_input,
28
+ ],
29
+ skip_execution=' '.join([
30
+ '{{',
31
+ 'not input.local_snake_app_name',
32
+ 'or env.get("APP_BROKER_TYPE") == "mock"',
33
+ '}}',
34
+ ]),
35
+ upstreams=[
36
+ build_snake_app_name_image,
37
+ remove_snake_app_name_container
38
+ ],
39
+ cwd=RESOURCE_DIR,
40
+ compose_cmd='up',
41
+ compose_env_prefix=compose_env_prefix,
42
+ envs=compose_envs + app_envs + [
43
+ Env(
44
+ name='COMPOSE_PROFILES',
45
+ os_name='',
46
+ default=' '.join([
47
+ '{{',
48
+ '",".join([',
49
+ ' env.get("APP_BROKER_TYPE", "rabbitmq"),',
50
+ '])',
51
+ '}}'
52
+ ])
53
+ )
54
+ ],
55
+ checkers=[
56
+ rabbitmq_checker,
57
+ rabbitmq_management_checker,
58
+ kafka_outside_checker,
59
+ kafka_plaintext_checker,
60
+ redpanda_console_checker,
61
+ pandaproxy_outside_checker,
62
+ pandaproxy_plaintext_checker,
63
+ ]
64
+ )
65
+
66
+ start_snake_app_name = CmdTask(
67
+ icon='🚤',
68
+ name='start-kebab-app-name',
69
+ description='Start human readable app name',
70
+ group=project_group,
71
+ inputs=[
72
+ local_input,
73
+ host_input,
74
+ https_input
75
+ ],
76
+ skip_execution='{{not input.local_snake_app_name}}',
77
+ upstreams=[start_snake_app_name_support_container],
78
+ cwd=APP_DIR,
79
+ env_files=[app_env_file],
80
+ envs=app_envs,
81
+ cmd_path=os.path.join(CURRENT_DIR, 'cmd', 'start.sh'),
82
+ checkers=[
83
+ HTTPChecker(
84
+ name='check-kebab-app-name',
85
+ host='{{input.snake_app_name_host}}',
86
+ url='/readiness',
87
+ port='{{env.APP_PORT}}',
88
+ is_https='{{input.snake_app_name_https}}'
89
+ )
90
+ ]
91
+ )
92
+ runner.register(start_snake_app_name)
@@ -0,0 +1,82 @@
1
+ version: '3'
2
+ services:
3
+
4
+
5
+ redpanda:
6
+ image: docker.redpanda.com/redpandadata/redpanda:v22.3.11
7
+ hostname: redpanda
8
+ command:
9
+ - redpanda start
10
+ - --smp 1
11
+ - --reserve-memory 0M
12
+ - --overprovisioned
13
+ - --node-id 1
14
+ - --kafka-addr PLAINTEXT://0.0.0.0:29092,OUTSIDE://0.0.0.0:9092
15
+ - --advertise-kafka-addr PLAINTEXT://redpanda:29092,OUTSIDE://localhost:9092
16
+ - --pandaproxy-addr PLAINTEXT://0.0.0.0:28082,OUTSIDE://0.0.0.0:8082
17
+ - --advertise-pandaproxy-addr PLAINTEXT://redpanda:28082,OUTSIDE://localhost:8082
18
+ - --rpc-addr 0.0.0.0:33145
19
+ - --advertise-rpc-addr redpanda:33145
20
+ ports:
21
+ - 8082:8082
22
+ - ${KAFKA_OUTSIDE_HOST_PORT:-9092}:9092
23
+ - 28082:28082
24
+ - ${KAFKA_PLAINTEXT_HOST_PORT:-29092}:29092
25
+ restart: on-failure
26
+ profiles:
27
+ - kafka
28
+ healthcheck:
29
+ test: ["CMD", "redpanda", "admin", "check"]
30
+ interval: 5s
31
+ timeout: 1s
32
+ retries: 30
33
+
34
+
35
+ redpanda-console:
36
+ image: docker.redpanda.com/redpandadata/console:v2.2.2
37
+ hostname: redpanda-console
38
+ ports:
39
+ - ${REDPANDA_CONSOLE_HOST_PORT:-9000}:8080
40
+ environment:
41
+ - KAFKA_BROKERS=redpanda:29092
42
+ profiles:
43
+ - kafka
44
+ depends_on:
45
+ - redpanda
46
+ restart: on-failure
47
+
48
+
49
+ rabbitmq:
50
+ image: rabbitmq:3-management
51
+ hostname: rabbitmq
52
+ ports:
53
+ - "${RABBITMQ_HOST_PORT:-5672}:5672"
54
+ - "${RABBITMQ_MANAGEMENT_HOST_PORT:-15672}:15672"
55
+ # volumes:
56
+ # - rabbitmq:/var/lib/rabbitmq/mnesia
57
+ environment:
58
+ - RABBITMQ_DEFAULT_USER=guest
59
+ - RABBITMQ_DEFAULT_PASS=guest
60
+ restart: on-failure
61
+ profiles:
62
+ - rabbitmq
63
+ healthcheck:
64
+ test: ["CMD", "rabbitmqctl", "status"]
65
+ interval: 5s
66
+ timeout: 1s
67
+ retries: 30
68
+
69
+
70
+ snake_app_name:
71
+ build: src
72
+ image: ${IMAGE:-kebab-app-name}
73
+ container_name: snake_app_name
74
+ hostname: snake_app_name
75
+ env_file: 'src/template.env'
76
+ environment:
77
+ APP_PORT: ${APP_PORT:-8080}
78
+ ports:
79
+ - "${APP_HOST_PORT:-8080}:${APP_PORT:-8080}"
80
+ restart: on-failure
81
+ profiles:
82
+ - monolith
@@ -0,0 +1,51 @@
1
+ from fastapi import status
2
+ from fastapi.responses import JSONResponse
3
+ from fastapi.middleware.cors import CORSMiddleware
4
+ from fastapi import FastAPI
5
+ from config import (
6
+ cors_allow_credentials, cors_allow_headers, cors_allow_methods,
7
+ cors_allow_origin_regex, cors_allow_origins, cors_expose_headers,
8
+ cors_max_age
9
+ )
10
+ from component.app_state import app_state
11
+
12
+ app = FastAPI()
13
+
14
+ app.add_middleware(
15
+ CORSMiddleware,
16
+ allow_origins=cors_allow_origins,
17
+ allow_origin_regex=cors_allow_origin_regex,
18
+ allow_methods=cors_allow_methods,
19
+ allow_headers=cors_allow_headers,
20
+ allow_credentials=cors_allow_credentials,
21
+ expose_headers=cors_expose_headers,
22
+ max_age=cors_max_age,
23
+ )
24
+
25
+
26
+ @app.head('/liveness')
27
+ @app.get('/liveness')
28
+ def handle_liveness():
29
+ if app_state.get_liveness():
30
+ return JSONResponse(
31
+ content={'message': 'Service is alive'},
32
+ status_code=status.HTTP_200_OK
33
+ )
34
+ return JSONResponse(
35
+ content={'message': 'Service is not alive'},
36
+ status_code=status.HTTP_503_SERVICE_UNAVAILABLE
37
+ )
38
+
39
+
40
+ @app.head('/readiness')
41
+ @app.get('/readiness')
42
+ def handle_readiness():
43
+ if app_state.get_readiness():
44
+ return JSONResponse(
45
+ content={'message': 'Service is ready'},
46
+ status_code=status.HTTP_200_OK
47
+ )
48
+ return JSONResponse(
49
+ content={'message': 'Service is not ready'},
50
+ status_code=status.HTTP_503_SERVICE_UNAVAILABLE
51
+ )