zrb 1.0.0a20__tar.gz → 1.0.0b1__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 (302) hide show
  1. {zrb-1.0.0a20 → zrb-1.0.0b1}/PKG-INFO +8 -52
  2. {zrb-1.0.0a20 → zrb-1.0.0b1}/README.md +7 -51
  3. {zrb-1.0.0a20 → zrb-1.0.0b1}/pyproject.toml +1 -1
  4. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/__init__.py +2 -1
  5. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/llm/llm_chat.py +2 -2
  6. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/llm/tool/web.py +1 -1
  7. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +2 -0
  8. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +4 -1
  9. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +16 -1
  10. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +91 -9
  11. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_usecase.py → zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_service.py +7 -13
  12. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_service_factory.py +8 -0
  13. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +37 -0
  14. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +1 -1
  15. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +13 -0
  16. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +22 -0
  17. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +42 -0
  18. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +7 -0
  19. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/api_client.py +1 -1
  20. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/direct_client.py +5 -0
  21. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/factory.py +9 -0
  22. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +10 -10
  23. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +4 -4
  24. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app.py +57 -0
  25. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_usecase.py → zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +3 -3
  26. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/view.py +37 -0
  27. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +24 -0
  28. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/api_client.py +7 -0
  29. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/direct_client.py +6 -0
  30. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +2 -2
  31. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_usecase.py → zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +7 -7
  32. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +6 -0
  33. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +66 -0
  34. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +74 -0
  35. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +6 -0
  36. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +6 -0
  37. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  38. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  39. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  40. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +4 -0
  41. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +4 -0
  42. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +4 -0
  43. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +4 -0
  44. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +4 -0
  45. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +4 -0
  46. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +4 -0
  47. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +4 -0
  48. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +4 -0
  49. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +4 -0
  50. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +4 -0
  51. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +4 -0
  52. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +4 -0
  53. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +4 -0
  54. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +4 -0
  55. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +4 -0
  56. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +4 -0
  57. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +4 -0
  58. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +4 -0
  59. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +4 -0
  60. zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +34 -0
  61. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +1 -0
  62. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/python.py +1 -1
  63. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/config.py +2 -2
  64. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/content_transformer/any_content_transformer.py +7 -0
  65. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/content_transformer/content_transformer.py +6 -0
  66. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/runner/cli.py +4 -6
  67. zrb-1.0.0b1/src/zrb/runner/web_app.py +69 -0
  68. zrb-1.0.0b1/src/zrb/runner/web_config/config.py +91 -0
  69. zrb-1.0.0b1/src/zrb/runner/web_config/config_factory.py +26 -0
  70. zrb-1.0.0b1/src/zrb/runner/web_route/docs_route.py +17 -0
  71. zrb-1.0.0b1/src/zrb/runner/web_route/error_page/serve_default_404.py +28 -0
  72. zrb-1.0.0a20/src/zrb/runner/web_controller/error_page/controller.py → zrb-1.0.0b1/src/zrb/runner/web_route/error_page/show_error_page.py +2 -2
  73. {zrb-1.0.0a20/src/zrb/runner/web_controller → zrb-1.0.0b1/src/zrb/runner/web_route}/error_page/view.html +6 -0
  74. zrb-1.0.0b1/src/zrb/runner/web_route/home_page/home_page_route.py +51 -0
  75. {zrb-1.0.0a20/src/zrb/runner/web_controller → zrb-1.0.0b1/src/zrb/runner/web_route}/home_page/view.html +1 -0
  76. zrb-1.0.0b1/src/zrb/runner/web_route/login_api_route.py +31 -0
  77. zrb-1.0.0b1/src/zrb/runner/web_route/login_page/login_page_route.py +39 -0
  78. {zrb-1.0.0a20/src/zrb/runner/web_controller → zrb-1.0.0b1/src/zrb/runner/web_route}/login_page/view.html +1 -0
  79. zrb-1.0.0b1/src/zrb/runner/web_route/logout_api_route.py +18 -0
  80. zrb-1.0.0b1/src/zrb/runner/web_route/logout_page/logout_page_route.py +40 -0
  81. {zrb-1.0.0a20/src/zrb/runner/web_controller → zrb-1.0.0b1/src/zrb/runner/web_route}/logout_page/view.html +1 -0
  82. zrb-1.0.0a20/src/zrb/runner/web_controller/group_info_page/controller.py → zrb-1.0.0b1/src/zrb/runner/web_route/node_page/group/show_group_page.py +3 -3
  83. {zrb-1.0.0a20/src/zrb/runner/web_controller/group_info_page → zrb-1.0.0b1/src/zrb/runner/web_route/node_page/group}/view.html +1 -0
  84. zrb-1.0.0b1/src/zrb/runner/web_route/node_page/node_page_route.py +50 -0
  85. zrb-1.0.0a20/src/zrb/runner/web_controller/session_page/controller.py → zrb-1.0.0b1/src/zrb/runner/web_route/node_page/task/show_task_page.py +5 -5
  86. {zrb-1.0.0a20/src/zrb/runner/web_controller/session_page → zrb-1.0.0b1/src/zrb/runner/web_route/node_page/task}/view.html +1 -0
  87. zrb-1.0.0b1/src/zrb/runner/web_route/refresh_token_api_route.py +38 -0
  88. zrb-1.0.0b1/src/zrb/runner/web_route/static/refresh-token.template.js +22 -0
  89. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b1/src/zrb/runner/web_route/static/resources}/session/current-session.js +1 -1
  90. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b1/src/zrb/runner/web_route/static/resources}/session/event.js +5 -6
  91. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b1/src/zrb/runner/web_route/static/resources}/session/past-session.js +9 -3
  92. zrb-1.0.0b1/src/zrb/runner/web_route/static/static_route.py +44 -0
  93. zrb-1.0.0b1/src/zrb/runner/web_route/task_input_api_route.py +47 -0
  94. zrb-1.0.0b1/src/zrb/runner/web_route/task_session_api_route.py +102 -0
  95. zrb-1.0.0b1/src/zrb/runner/web_schema/session.py +5 -0
  96. zrb-1.0.0b1/src/zrb/runner/web_schema/token.py +11 -0
  97. zrb-1.0.0b1/src/zrb/runner/web_schema/user.py +32 -0
  98. zrb-1.0.0b1/src/zrb/runner/web_util/cookie.py +29 -0
  99. zrb-1.0.0a20/src/zrb/runner/web_util.py → zrb-1.0.0b1/src/zrb/runner/web_util/html.py +1 -18
  100. zrb-1.0.0b1/src/zrb/runner/web_util/token.py +68 -0
  101. zrb-1.0.0b1/src/zrb/runner/web_util/user.py +63 -0
  102. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/session/session.py +6 -4
  103. zrb-1.0.0a20/src/zrb/session_state_logger/default_session_state_logger.py → zrb-1.0.0b1/src/zrb/session_state_logger/session_state_logger_factory.py +1 -1
  104. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/base_task.py +29 -4
  105. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/base_trigger.py +2 -0
  106. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/cmd_task.py +2 -0
  107. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/http_check.py +2 -0
  108. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/llm_task.py +2 -0
  109. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/make_task.py +2 -0
  110. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/rsync_task.py +2 -0
  111. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/scaffolder.py +8 -5
  112. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/scheduler.py +2 -0
  113. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/tcp_check.py +2 -0
  114. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task_status/task_status.py +4 -3
  115. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  116. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/direct_client.py +0 -6
  117. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/factory.py +0 -9
  118. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app.py +0 -20
  119. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/api_client.py +0 -7
  120. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/direct_client.py +0 -6
  121. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_usecase_factory.py +0 -6
  122. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -37
  123. zrb-1.0.0a20/src/zrb/runner/web_app.py +0 -279
  124. zrb-1.0.0a20/src/zrb/runner/web_config.py +0 -288
  125. zrb-1.0.0a20/src/zrb/runner/web_controller/home_page/controller.py +0 -33
  126. zrb-1.0.0a20/src/zrb/runner/web_controller/login_page/controller.py +0 -25
  127. zrb-1.0.0a20/src/zrb/runner/web_controller/logout_page/controller.py +0 -26
  128. zrb-1.0.0a20/src/zrb/util/string/__init__.py +0 -0
  129. zrb-1.0.0a20/src/zrb/xcom/__init__.py +0 -0
  130. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/__main__.py +0 -0
  131. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/attr/__init__.py +0 -0
  132. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/attr/type.py +0 -0
  133. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/__init__.py +0 -0
  134. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/base64.py +0 -0
  135. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/git.py +0 -0
  136. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/git_subtree.py +0 -0
  137. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/group.py +0 -0
  138. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/llm/tool/cli.py +0 -0
  139. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/llm/tool/rag.py +0 -0
  140. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/md5.py +0 -0
  141. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/__init__.py +0 -0
  142. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  143. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  144. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  145. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  146. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  147. /zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/create_column_task.py → /zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  148. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/any_client_method.py +0 -0
  149. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_db_repository.py +0 -0
  150. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository.py +0 -0
  151. /zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/factory.py → /zrb-1.0.0b1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository_factory.py +0 -0
  152. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  153. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  154. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  155. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/any_client.py +0 -0
  156. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  157. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  158. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/script.py.mako +0 -0
  159. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  160. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  161. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  162. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  163. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  164. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  165. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  166. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  167. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine.py +0 -0
  168. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  169. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  170. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  171. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/migrate.py +0 -0
  172. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  173. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  174. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/any_client.py +0 -0
  175. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/factory.py +0 -0
  176. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  177. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  178. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  179. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_user_table.py +0 -0
  180. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  181. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  182. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  183. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  184. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  185. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  186. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  187. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  188. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  189. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  190. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  191. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  192. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  193. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  194. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  195. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  196. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  197. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  198. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  199. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/create/__init__.py +0 -0
  200. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  201. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  202. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/project/create/project_task.py +0 -0
  203. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  204. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  205. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/setup/common_input.py +0 -0
  206. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  207. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  208. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  209. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  210. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/setup/ubuntu.py +0 -0
  211. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/shell/__init__.py +0 -0
  212. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  213. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  214. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  215. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  216. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/builtin/todo.py +0 -0
  217. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/callback/__init__.py +0 -0
  218. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/callback/any_callback.py +0 -0
  219. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/callback/callback.py +0 -0
  220. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/cmd/__init__.py +0 -0
  221. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/cmd/cmd_result.py +0 -0
  222. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/cmd/cmd_val.py +0 -0
  223. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/content_transformer/__init__.py +0 -0
  224. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/context/__init__.py +0 -0
  225. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/context/any_context.py +0 -0
  226. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/context/any_shared_context.py +0 -0
  227. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/context/context.py +0 -0
  228. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/context/shared_context.py +0 -0
  229. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/dot_dict/__init__.py +0 -0
  230. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/dot_dict/dot_dict.py +0 -0
  231. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/env/__init__.py +0 -0
  232. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/env/any_env.py +0 -0
  233. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/env/env.py +0 -0
  234. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/env/env_file.py +0 -0
  235. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/env/env_map.py +0 -0
  236. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/group/__init__.py +0 -0
  237. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/group/any_group.py +0 -0
  238. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/group/group.py +0 -0
  239. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/input/__init__.py +0 -0
  240. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/input/any_input.py +0 -0
  241. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/input/base_input.py +0 -0
  242. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/input/bool_input.py +0 -0
  243. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/input/float_input.py +0 -0
  244. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/input/int_input.py +0 -0
  245. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/input/option_input.py +0 -0
  246. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/input/password_input.py +0 -0
  247. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/input/str_input.py +0 -0
  248. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/input/text_input.py +0 -0
  249. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/runner/__init__.py +0 -0
  250. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/runner/common_util.py +0 -0
  251. {zrb-1.0.0a20/src/zrb/runner/web_controller → zrb-1.0.0b1/src/zrb/runner/web_route}/__init__.py +0 -0
  252. {zrb-1.0.0a20/src/zrb/runner/web_controller/group_info_page → zrb-1.0.0b1/src/zrb/runner/web_route/home_page}/__init__.py +0 -0
  253. {zrb-1.0.0a20/src/zrb/runner/web_controller/session_page → zrb-1.0.0b1/src/zrb/runner/web_route/node_page/task}/partial/input.html +0 -0
  254. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b1/src/zrb/runner/web_route/static/resources}/common.css +0 -0
  255. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b1/src/zrb/runner/web_route/static/resources}/favicon-32x32.png +0 -0
  256. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b1/src/zrb/runner/web_route/static/resources}/login/event.js +0 -0
  257. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b1/src/zrb/runner/web_route/static/resources}/logout/event.js +0 -0
  258. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b1/src/zrb/runner/web_route/static/resources}/pico.min.css +0 -0
  259. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b1/src/zrb/runner/web_route/static/resources}/session/common-util.js +0 -0
  260. {zrb-1.0.0a20/src/zrb/runner/web_controller/home_page → zrb-1.0.0b1/src/zrb/session}/__init__.py +0 -0
  261. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/session/any_session.py +0 -0
  262. {zrb-1.0.0a20/src/zrb/runner/web_controller/session_page → zrb-1.0.0b1/src/zrb/session_state_log}/__init__.py +0 -0
  263. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/session_state_log/session_state_log.py +0 -0
  264. {zrb-1.0.0a20/src/zrb/session → zrb-1.0.0b1/src/zrb/session_state_logger}/__init__.py +0 -0
  265. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  266. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  267. {zrb-1.0.0a20/src/zrb/session_state_log → zrb-1.0.0b1/src/zrb/task}/__init__.py +0 -0
  268. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/any_task.py +0 -0
  269. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/task/task.py +0 -0
  270. {zrb-1.0.0a20/src/zrb/session_state_logger → zrb-1.0.0b1/src/zrb/task_status}/__init__.py +0 -0
  271. {zrb-1.0.0a20/src/zrb/task → zrb-1.0.0b1/src/zrb/util}/__init__.py +0 -0
  272. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/attr.py +0 -0
  273. {zrb-1.0.0a20/src/zrb/task_status → zrb-1.0.0b1/src/zrb/util/cli}/__init__.py +0 -0
  274. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/cli/style.py +0 -0
  275. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/cli/subcommand.py +0 -0
  276. {zrb-1.0.0a20/src/zrb/util → zrb-1.0.0b1/src/zrb/util/cmd}/__init__.py +0 -0
  277. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/cmd/command.py +0 -0
  278. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/cmd/remote.py +0 -0
  279. {zrb-1.0.0a20/src/zrb/util/cli → zrb-1.0.0b1/src/zrb/util/codemod}/__init__.py +0 -0
  280. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/codemod/append_code_to_class.py +0 -0
  281. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/codemod/append_code_to_function.py +0 -0
  282. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/codemod/append_code_to_method.py +0 -0
  283. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/codemod/append_key_to_dict.py +0 -0
  284. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/codemod/append_param_to_function_call.py +0 -0
  285. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/codemod/prepend_code_to_module.py +0 -0
  286. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/codemod/prepend_parent_to_class.py +0 -0
  287. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/codemod/prepend_property_to_class.py +0 -0
  288. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/cron.py +0 -0
  289. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/file.py +0 -0
  290. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/git.py +0 -0
  291. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/git_subtree.py +0 -0
  292. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/group.py +0 -0
  293. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/llm/tool.py +0 -0
  294. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/load.py +0 -0
  295. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/run.py +0 -0
  296. {zrb-1.0.0a20/src/zrb/util/cmd → zrb-1.0.0b1/src/zrb/util/string}/__init__.py +0 -0
  297. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/string/conversion.py +0 -0
  298. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/string/format.py +0 -0
  299. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/string/name.py +0 -0
  300. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/util/todo.py +0 -0
  301. {zrb-1.0.0a20/src/zrb/util/codemod → zrb-1.0.0b1/src/zrb/xcom}/__init__.py +0 -0
  302. {zrb-1.0.0a20 → zrb-1.0.0b1}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 1.0.0a20
3
+ Version: 1.0.0b1
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -32,9 +32,11 @@ Description-Content-Type: text/markdown
32
32
 
33
33
  ![](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/zrb/android-chrome-192x192.png)
34
34
 
35
+ [Documentation](https://github.com/state-alchemists/zrb/blob/main/docs/README.md)
36
+
35
37
  # 🤖 Zrb: Your Automation Powerhouse
36
38
 
37
- With Zrb, you can write your automation tasks like this:
39
+ Zrb allows you to write your automation tasks in Python and declaratively:
38
40
 
39
41
 
40
42
  ```python
@@ -52,59 +54,13 @@ math.add_task(Task(
52
54
  ))
53
55
  ```
54
56
 
55
- You can then access the task in various ways.
56
-
57
- __Using CLI with arguments__
58
-
59
- ```bash
60
- zrb math add 4 5
61
- ```
62
-
63
- Result:
64
-
65
- ```
66
- 9
67
- To run again: zrb math add --a=4 --b=5
68
- ```
69
-
70
- __Using CLI with keyword arguments__
71
-
72
- ```bash
73
- zrb math add --a 4 --b 5
74
- ```
75
-
76
- Result:
77
-
78
- ```
79
- 9
80
- To run again: zrb math add --a=4 --b=5
81
- ```
82
-
83
- __Using CLI with incomplete arguments__
84
-
85
- ```bash
86
- zrb math add 4
87
- ```
88
-
89
- Result:
90
-
91
- ```
92
- b [0]: 5
93
- 9
94
- To run again: zrb math add 4
95
- ```
96
-
97
- __Using Web Interface__
98
-
99
- ```bash
100
- zrb server start
101
- ```
57
+ Once defined, you will be able to access your automation tasks from the CLI, Web Interface, or via HTTP API.
102
58
 
103
- Result (you need to access `http://localhost:21213`)
59
+ For more complex scenario, you can also defined Task dependencies (upstreams) and retry mechanisms. You can also make a scheduled tasks, just like in Apache Airflow.
104
60
 
105
- ![](https://raw.githubusercontent.com/state-alchemists/zrb/refs/heads/1.0.0/_images/web.png)
61
+ Furthermore, Zrb has some builtin tasks to manage monorepo, generate FastAPI application, or play around with LLM.
106
62
 
107
- __More:__
63
+ See the [getting started guide](https://github.com/state-alchemists/zrb/blob/main/docs/recipes/getting-started/README.md) for more information. Or just watch the demo:
108
64
 
109
65
  [![Video Title](https://img.youtube.com/vi/W7dgk96l__o/0.jpg)](https://www.youtube.com/watch?v=W7dgk96l__o)
110
66
 
@@ -1,8 +1,10 @@
1
1
  ![](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/zrb/android-chrome-192x192.png)
2
2
 
3
+ [Documentation](https://github.com/state-alchemists/zrb/blob/main/docs/README.md)
4
+
3
5
  # 🤖 Zrb: Your Automation Powerhouse
4
6
 
5
- With Zrb, you can write your automation tasks like this:
7
+ Zrb allows you to write your automation tasks in Python and declaratively:
6
8
 
7
9
 
8
10
  ```python
@@ -20,59 +22,13 @@ math.add_task(Task(
20
22
  ))
21
23
  ```
22
24
 
23
- You can then access the task in various ways.
24
-
25
- __Using CLI with arguments__
26
-
27
- ```bash
28
- zrb math add 4 5
29
- ```
30
-
31
- Result:
32
-
33
- ```
34
- 9
35
- To run again: zrb math add --a=4 --b=5
36
- ```
37
-
38
- __Using CLI with keyword arguments__
39
-
40
- ```bash
41
- zrb math add --a 4 --b 5
42
- ```
43
-
44
- Result:
45
-
46
- ```
47
- 9
48
- To run again: zrb math add --a=4 --b=5
49
- ```
50
-
51
- __Using CLI with incomplete arguments__
52
-
53
- ```bash
54
- zrb math add 4
55
- ```
56
-
57
- Result:
58
-
59
- ```
60
- b [0]: 5
61
- 9
62
- To run again: zrb math add 4
63
- ```
64
-
65
- __Using Web Interface__
66
-
67
- ```bash
68
- zrb server start
69
- ```
25
+ Once defined, you will be able to access your automation tasks from the CLI, Web Interface, or via HTTP API.
70
26
 
71
- Result (you need to access `http://localhost:21213`)
27
+ For more complex scenario, you can also defined Task dependencies (upstreams) and retry mechanisms. You can also make a scheduled tasks, just like in Apache Airflow.
72
28
 
73
- ![](https://raw.githubusercontent.com/state-alchemists/zrb/refs/heads/1.0.0/_images/web.png)
29
+ Furthermore, Zrb has some builtin tasks to manage monorepo, generate FastAPI application, or play around with LLM.
74
30
 
75
- __More:__
31
+ See the [getting started guide](https://github.com/state-alchemists/zrb/blob/main/docs/recipes/getting-started/README.md) for more information. Or just watch the demo:
76
32
 
77
33
  [![Video Title](https://img.youtube.com/vi/W7dgk96l__o/0.jpg)](https://www.youtube.com/watch?v=W7dgk96l__o)
78
34
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.0.0a20"
3
+ version = "1.0.0b1"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -34,7 +34,8 @@ from zrb.input.password_input import PasswordInput
34
34
  from zrb.input.str_input import StrInput
35
35
  from zrb.input.text_input import TextInput
36
36
  from zrb.runner.cli import cli
37
- from zrb.runner.web_config import User, web_config
37
+ from zrb.runner.web_config.config_factory import web_config
38
+ from zrb.runner.web_schema.user import User
38
39
  from zrb.session.session import Session
39
40
  from zrb.task.any_task import AnyTask
40
41
  from zrb.task.base_task import BaseTask
@@ -1,6 +1,6 @@
1
1
  from zrb.builtin.group import llm_group
2
2
  from zrb.builtin.llm.tool.cli import run_shell_command
3
- from zrb.builtin.llm.tool.web import open_web_page, query_internet
3
+ from zrb.builtin.llm.tool.web import open_web_route, query_internet
4
4
  from zrb.config import (
5
5
  LLM_ALLOW_ACCESS_SHELL,
6
6
  LLM_ALLOW_ACCESS_WEB,
@@ -43,5 +43,5 @@ if LLM_ALLOW_ACCESS_SHELL:
43
43
  llm_chat.add_tool(run_shell_command)
44
44
 
45
45
  if LLM_ALLOW_ACCESS_WEB:
46
- llm_chat.add_tool(open_web_page)
46
+ llm_chat.add_tool(open_web_route)
47
47
  llm_chat.add_tool(query_internet)
@@ -2,7 +2,7 @@ import json
2
2
  from typing import Annotated
3
3
 
4
4
 
5
- def open_web_page(url: str) -> str:
5
+ def open_web_route(url: str) -> str:
6
6
  """Get content from a web page."""
7
7
  import requests
8
8
 
@@ -49,6 +49,7 @@ scaffold_fastapp = Scaffolder(
49
49
  transform_content=[
50
50
  # Common transformation (project_dir/app_dir/**/*)
51
51
  ContentTransformer(
52
+ name="transform-app-dir",
52
53
  match=is_in_project_app_dir,
53
54
  transform={
54
55
  "My App Name": "{ctx.input.app.title()}",
@@ -60,6 +61,7 @@ scaffold_fastapp = Scaffolder(
60
61
  ),
61
62
  # Register fastapp's tasks to project's zrb_init (project_dir/zrb_init.py)
62
63
  ContentTransformer(
64
+ name="trasnform-zrb-init",
63
65
  match=is_project_zrb_init_file,
64
66
  transform=update_project_zrb_init_file,
65
67
  ),
@@ -9,7 +9,10 @@ MICROSERVICES_ENV_VARS = {
9
9
  "MY_APP_NAME_MODE": "microservices",
10
10
  "MY_APP_NAME_AUTH_BASE_URL": "http://localhost:3002",
11
11
  }
12
- MONOLITH_ENV_VARS = {"MY_APP_NAME_MODE": "monolith"}
12
+ MONOLITH_ENV_VARS = {
13
+ "MY_APP_NAME_MODE": "monolith",
14
+ "MY_APP_NAME_MODULES": "",
15
+ }
13
16
 
14
17
  if platform.system() == "Windows":
15
18
  ACTIVATE_VENV_SCRIPT = "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser; . .venv\\Scripts\\Activate" # noqa
@@ -7,11 +7,13 @@ from my_app_name._zrb.entity.add_entity_util import (
7
7
  is_module_any_client_file,
8
8
  is_module_api_client_file,
9
9
  is_module_direct_client_file,
10
+ is_module_gateway_subroute_file,
10
11
  is_module_migration_metadata_file,
11
12
  is_module_route_file,
12
13
  update_any_client,
13
14
  update_api_client,
14
15
  update_direct_client,
16
+ update_gateway_subroute,
15
17
  update_migration_metadata,
16
18
  update_route,
17
19
  )
@@ -66,6 +68,7 @@ scaffold_my_app_name_entity = Scaffolder(
66
68
  transform_content=[
67
69
  # Schema tranformation (my_app_name/schema/snake_entity_name)
68
70
  ContentTransformer(
71
+ name="transform-schema-file",
69
72
  match=is_in_app_schema_dir,
70
73
  transform={
71
74
  "MyEntity": "{to_pascal_case(ctx.input.entity)}",
@@ -75,6 +78,7 @@ scaffold_my_app_name_entity = Scaffolder(
75
78
  # Common module's entity transformation
76
79
  # (my_app_name/module/snake_module_name/service/snake_entity_name)
77
80
  ContentTransformer(
81
+ name="transform-module-entity-dir",
78
82
  match=is_in_module_entity_dir,
79
83
  transform={
80
84
  "my_module": "{to_snake_case(ctx.input.module)}",
@@ -87,30 +91,41 @@ scaffold_my_app_name_entity = Scaffolder(
87
91
  # Add entity to migration metadata
88
92
  # (my_app_name/module/snake_module_name/migration_metadata.py)
89
93
  ContentTransformer(
94
+ name="transform-module-migration-metadata",
90
95
  match=is_module_migration_metadata_file,
91
96
  transform=update_migration_metadata,
92
97
  ),
93
98
  # Update API Client (my_app_name/module/snake_module_name/client/api_client.py)
94
99
  ContentTransformer(
100
+ name="transform-module-api-client",
95
101
  match=is_module_api_client_file,
96
102
  transform=update_api_client,
97
103
  ),
98
104
  # Update Direct Client (my_app_name/module/snake_module_name/client/direct_client.py)
99
105
  ContentTransformer(
106
+ name="transform-module-direct-client",
100
107
  match=is_module_direct_client_file,
101
108
  transform=update_direct_client,
102
109
  ),
103
110
  # Update Any Client (my_app_name/module/snake_module_name/client/any_client.py)
104
111
  ContentTransformer(
112
+ name="transform-module-any-client",
105
113
  match=is_module_any_client_file,
106
114
  transform=update_any_client,
107
115
  ),
108
116
  # Update module route (my_app_name/module/route.py)
109
117
  ContentTransformer(
118
+ name="transform-module-route",
110
119
  match=is_module_route_file,
111
120
  transform=update_route,
112
121
  ),
113
- # TODO: Register gateway route
122
+ # Update module gateway subroute
123
+ # (my_app_name/module/gateway/subroute/snake_module_name.py)
124
+ ContentTransformer(
125
+ name="transform-module-gateway-subroute",
126
+ match=is_module_gateway_subroute_file,
127
+ transform=update_gateway_subroute,
128
+ ),
114
129
  ],
115
130
  retries=0,
116
131
  upstream=validate_create_my_app_name_entity,
@@ -82,6 +82,17 @@ def is_module_direct_client_file(ctx: AnyContext, file_path: str) -> bool:
82
82
  return file_path == module_direct_client_file
83
83
 
84
84
 
85
+ def is_module_gateway_subroute_file(ctx: AnyContext, file_path: str) -> bool:
86
+ module_gateway_subroute_file = os.path.join(
87
+ APP_DIR,
88
+ "module",
89
+ "gateway",
90
+ "subroute",
91
+ f"{to_snake_case(ctx.input.module)}.py",
92
+ )
93
+ return file_path == module_gateway_subroute_file
94
+
95
+
85
96
  def update_migration_metadata(ctx: AnyContext, migration_metadata_file_path: str):
86
97
  app_name = os.path.basename(APP_DIR)
87
98
  existing_migration_metadata_code = read_file(migration_metadata_file_path)
@@ -148,7 +159,7 @@ def update_any_client(ctx: AnyContext, any_client_file_path: str):
148
159
  write_file(
149
160
  file_path=any_client_file_path,
150
161
  content=[
151
- f"from {app_name}.schema.{snake_entity_name}.{snake_entity_name} import (",
162
+ f"from {app_name}.schema.{snake_entity_name} import (",
152
163
  f" {pascal_entity_name}CreateWithAudit, {pascal_entity_name}Response, {pascal_entity_name}UpdateWithAudit", # noqa
153
164
  ")",
154
165
  new_code.strip(),
@@ -165,12 +176,14 @@ def update_api_client(ctx: AnyContext, api_client_file_path: str):
165
176
  write_file(
166
177
  file_path=api_client_file_path,
167
178
  content=[
168
- f"from {app_name}.module.{snake_module_name}.service.{snake_entity_name}.{snake_entity_name}_usecase import {snake_entity_name}_usecase", # noqa
179
+ f"from {app_name}.module.{snake_module_name}.service.{snake_entity_name}.{snake_entity_name}_service_factory import {snake_entity_name}_service", # noqa
169
180
  prepend_code_to_module(
170
181
  prepend_parent_class(
171
- existing_api_client_code, "APIClient", "user_api_client"
182
+ original_code=existing_api_client_code,
183
+ class_name="APIClient",
184
+ parent_class_name=f"{snake_entity_name}_api_client",
172
185
  ),
173
- f"user_api_client = user_usecase.as_api_client(base_url=APP_{upper_snake_module_name}_BASE_URL)", # noqa
186
+ f"{snake_entity_name}_api_client = {snake_entity_name}_service.as_api_client(base_url=APP_{upper_snake_module_name}_BASE_URL)", # noqa
174
187
  ),
175
188
  ],
176
189
  )
@@ -184,12 +197,14 @@ def update_direct_client(ctx: AnyContext, direct_client_file_path: str):
184
197
  write_file(
185
198
  file_path=direct_client_file_path,
186
199
  content=[
187
- f"from {app_name}.module.{snake_module_name}.service.{snake_entity_name}.{snake_entity_name}_usecase import {snake_entity_name}_usecase", # noqa
200
+ f"from {app_name}.module.{snake_module_name}.service.{snake_entity_name}.{snake_entity_name}_service_factory import {snake_entity_name}_service", # noqa
188
201
  prepend_code_to_module(
189
202
  prepend_parent_class(
190
- existing_direct_client_code, "DirectClient", "user_direct_client"
203
+ original_code=existing_direct_client_code,
204
+ class_name="DirectClient",
205
+ parent_class_name=f"{snake_entity_name}_direct_client",
191
206
  ),
192
- "user_direct_client = user_usecase.as_direct_client()",
207
+ f"{snake_entity_name}_direct_client = {snake_entity_name}_service.as_direct_client()", # noqa
193
208
  ).strip(),
194
209
  ],
195
210
  )
@@ -203,11 +218,78 @@ def update_route(ctx: AnyContext, route_file_path: str):
203
218
  write_file(
204
219
  file_path=route_file_path,
205
220
  content=[
206
- f"from {app_name}.module.{module_name}.service.{entity_name}.{entity_name}_usecase import {entity_name}_usecase", # noqa
221
+ f"from {app_name}.module.{module_name}.service.{entity_name}.{entity_name}_service_factory import {entity_name}_service", # noqa
207
222
  append_code_to_function(
208
223
  existing_route_code,
209
224
  "serve_route",
210
- f"{entity_name}_usecase.serve_route(app)",
225
+ f"{entity_name}_service.serve_route(app)",
211
226
  ),
212
227
  ],
213
228
  )
229
+
230
+
231
+ def update_gateway_subroute(ctx: AnyContext, module_gateway_subroute_path: str):
232
+ snake_module_name = to_snake_case(ctx.input.module)
233
+ snake_entity_name = to_snake_case(ctx.input.entity)
234
+ snake_plural_entity_name = to_snake_case(ctx.input.plural)
235
+ pascal_entity_name = to_pascal_case(ctx.input.entity)
236
+ existing_gateway_subroute_code = read_file(module_gateway_subroute_path)
237
+ write_file(
238
+ file_path=module_gateway_subroute_path,
239
+ content=[
240
+ _get_import_client_for_gateway_subroute_code(
241
+ existing_gateway_subroute_code, module_name=ctx.input.module
242
+ ),
243
+ _get_import_schema_for_gateway_subroute_code(
244
+ existing_gateway_subroute_code, entity_name=ctx.input.entity
245
+ ),
246
+ append_code_to_function(
247
+ original_code=existing_gateway_subroute_code,
248
+ function_name=f"serve_{snake_module_name}_route",
249
+ new_code=read_file(
250
+ file_path=os.path.join(
251
+ os.path.dirname(__file__), "template", "gateway_subroute.py"
252
+ ),
253
+ replace_map={
254
+ "my_module": snake_module_name,
255
+ "my_entity": snake_entity_name,
256
+ "my_entities": snake_plural_entity_name,
257
+ "MyEntity": pascal_entity_name,
258
+ },
259
+ ),
260
+ ),
261
+ ],
262
+ )
263
+
264
+
265
+ def _get_import_client_for_gateway_subroute_code(
266
+ existing_code: str, module_name: str
267
+ ) -> str | None:
268
+ snake_module_name = to_snake_case(module_name)
269
+ client_import_path = f"my_app_name.module.{snake_module_name}.client.factory"
270
+ new_code = f"from {client_import_path} import client as {snake_module_name}_client"
271
+ if new_code in existing_code:
272
+ return None
273
+ return new_code
274
+
275
+
276
+ def _get_import_schema_for_gateway_subroute_code(
277
+ existing_code: str, entity_name: str
278
+ ) -> str | None:
279
+ snake_entity_name = to_snake_case(entity_name)
280
+ pascal_entity_name = to_pascal_case(entity_name)
281
+ schema_import_path = f"my_app_name.schema.{snake_entity_name}"
282
+ new_code = "\n".join(
283
+ [
284
+ f"from {schema_import_path} import (",
285
+ f" {pascal_entity_name}Create,",
286
+ f" {pascal_entity_name}CreateWithAudit,",
287
+ f" {pascal_entity_name}Response,",
288
+ f" {pascal_entity_name}Update,",
289
+ f" {pascal_entity_name}UpdateWithAudit,",
290
+ ")",
291
+ ]
292
+ )
293
+ if new_code in existing_code:
294
+ return None
295
+ return new_code
@@ -1,7 +1,4 @@
1
- from my_app_name.common.base_usecase import BaseUsecase
2
- from my_app_name.module.my_module.service.my_entity.repository.factory import (
3
- my_entity_repository,
4
- )
1
+ from my_app_name.common.base_service import BaseService
5
2
  from my_app_name.module.my_module.service.my_entity.repository.my_entity_repository import (
6
3
  MyEntityRepository,
7
4
  )
@@ -12,12 +9,12 @@ from my_app_name.schema.my_entity import (
12
9
  )
13
10
 
14
11
 
15
- class MyEntityUsecase(BaseUsecase):
12
+ class MyEntityService(BaseService):
16
13
  def __init__(self, my_entity_repository: MyEntityRepository):
17
14
  super().__init__()
18
15
  self.my_entity_repository = my_entity_repository
19
16
 
20
- @BaseUsecase.route(
17
+ @BaseService.route(
21
18
  "/api/v1/my-entities/{my_entity_id}",
22
19
  methods=["get"],
23
20
  response_model=MyEntityResponse,
@@ -25,13 +22,13 @@ class MyEntityUsecase(BaseUsecase):
25
22
  async def get_my_entity_by_id(self, my_entity_id: str) -> MyEntityResponse:
26
23
  return await self.my_entity_repository.get_by_id(my_entity_id)
27
24
 
28
- @BaseUsecase.route(
25
+ @BaseService.route(
29
26
  "/api/v1/my-entities", methods=["get"], response_model=list[MyEntityResponse]
30
27
  )
31
28
  async def get_all_my_entities(self) -> list[MyEntityResponse]:
32
29
  return await self.my_entity_repository.get_all()
33
30
 
34
- @BaseUsecase.route(
31
+ @BaseService.route(
35
32
  "/api/v1/my-entities",
36
33
  methods=["post"],
37
34
  response_model=MyEntityResponse | list[MyEntityResponse],
@@ -43,7 +40,7 @@ class MyEntityUsecase(BaseUsecase):
43
40
  return await self.my_entity_repository.create(data)
44
41
  return await self.my_entity_repository.create_bulk(data)
45
42
 
46
- @BaseUsecase.route(
43
+ @BaseService.route(
47
44
  "/api/v1/my-entities/{my_entity_id}",
48
45
  methods=["put"],
49
46
  response_model=MyEntityResponse,
@@ -53,13 +50,10 @@ class MyEntityUsecase(BaseUsecase):
53
50
  ) -> MyEntityResponse:
54
51
  return await self.my_entity_repository.update(my_entity_id, data)
55
52
 
56
- @BaseUsecase.route(
53
+ @BaseService.route(
57
54
  "/api/v1/my-entities/{my_entity_id}",
58
55
  methods=["delete"],
59
56
  response_model=MyEntityResponse,
60
57
  )
61
58
  async def delete_my_entity(self, my_entity_id: str) -> MyEntityResponse:
62
59
  return await self.my_entity_repository.delete(my_entity_id)
63
-
64
-
65
- my_entity_usecase = MyEntityUsecase(my_entity_repository=my_entity_repository)
@@ -0,0 +1,8 @@
1
+ from my_app_name.module.my_module.service.my_entity.my_entity_service import (
2
+ MyEntityService,
3
+ )
4
+ from my_app_name.module.my_module.service.my_entity.repository.my_entity_repository_factory import (
5
+ my_entity_repository,
6
+ )
7
+
8
+ my_entity_service = MyEntityService(my_entity_repository=my_entity_repository)
@@ -0,0 +1,37 @@
1
+ @app.get("/api/v1/my_entities", response_model=list[MyEntityResponse])
2
+ async def get_all_my_entities() -> MyEntityResponse:
3
+ return await my_module_client.get_all_my_entities()
4
+
5
+
6
+ @app.get("/api/v1/my_entities/{my_entity_id}", response_model=MyEntityResponse)
7
+ async def get_my_entity_by_id(my_entity_id: str) -> MyEntityResponse:
8
+ return await my_module_client.get_my_entity_by_id(my_entity_id)
9
+
10
+
11
+ @app.post(
12
+ "/api/v1/my_entities", response_model=MyEntityResponse | list[MyEntityResponse]
13
+ )
14
+ async def create_my_entity(data: MyEntityCreate | list[MyEntityCreate]):
15
+ if isinstance(data, MyEntityCreate):
16
+ data_dict = data.model_dump(exclude_unset=True)
17
+ audited_data = MyEntityCreateWithAudit(**data_dict, created_by="system")
18
+ return await my_module_client.create_my_entity(audited_data)
19
+ audited_data = [
20
+ MyEntityCreateWithAudit(
21
+ **row.model_dump(exclude_unset=True), created_by="system"
22
+ )
23
+ for row in data
24
+ ]
25
+ return await my_module_client.create_my_entity(audited_data)
26
+
27
+
28
+ @app.put("/api/v1/my_entities/{my_entity_id}", response_model=MyEntityResponse)
29
+ async def update_my_entity(my_entity_id: str, data: MyEntityUpdate) -> MyEntityResponse:
30
+ data_dict = data.model_dump(exclude_unset=True)
31
+ audited_data = MyEntityUpdateWithAudit(**data_dict, updated_by="system")
32
+ return await my_module_client.update_my_entity(my_entity_id, audited_data)
33
+
34
+
35
+ @app.delete("/api/v1/my_entities/{my_entity_id}", response_model=MyEntityResponse)
36
+ async def delete_my_entity(my_entity_id: str) -> MyEntityResponse:
37
+ return await my_module_client.delete_my_entity(my_entity_id, deleted_by="system")
@@ -6,7 +6,7 @@ from zrb.task.cmd_task import CmdTask
6
6
  format_my_app_name_code = app_group.add_task(
7
7
  CmdTask(
8
8
  name="format-my-app-name-code",
9
- description="✏️ Format Python code",
9
+ description=" Format Python code",
10
10
  cmd=[
11
11
  "isort . --profile black --force-grid-wrap 0",
12
12
  "black .",
@@ -38,3 +38,16 @@ new_entity_column_input = StrInput(
38
38
  prompt="New entity's column name",
39
39
  default_str="name",
40
40
  )
41
+
42
+ new_column_input = StrInput(
43
+ name="column",
44
+ description="Column name",
45
+ prompt="New column name",
46
+ )
47
+
48
+ new_column_type_input = OptionInput(
49
+ name="type",
50
+ description="Column type",
51
+ prompt="Column type",
52
+ options=["str", "int", "float", "bool", "datetime", "date"],
53
+ )
@@ -9,11 +9,14 @@ from my_app_name._zrb.module.add_module_util import (
9
9
  is_app_main_file,
10
10
  is_app_zrb_config_file,
11
11
  is_app_zrb_task_file,
12
+ is_gateway_module_subroute_file,
13
+ is_gateway_route_file,
12
14
  is_in_module_dir,
13
15
  update_app_config_file,
14
16
  update_app_main_file,
15
17
  update_app_zrb_config_file,
16
18
  update_app_zrb_task_file,
19
+ update_gateway_route_file,
17
20
  )
18
21
  from my_app_name._zrb.util import get_existing_module_names
19
22
 
@@ -42,32 +45,51 @@ scaffold_my_app_name_module = Scaffolder(
42
45
  transform_content=[
43
46
  # Common transformation (my_app_name/module/snake_module_name)
44
47
  ContentTransformer(
48
+ name="transform-module-dir",
45
49
  match=is_in_module_dir,
46
50
  transform={
47
51
  "MY_MODULE": "{to_snake_case(ctx.input.module).upper()}",
48
52
  "my_module": "{to_snake_case(ctx.input.module)}",
49
53
  },
50
54
  ),
55
+ # Gateway's module subroute (my_app_name/module/gateway/subroute/snake_module_name.py)
56
+ ContentTransformer(
57
+ name="transform-gateway-subroute",
58
+ match=is_gateway_module_subroute_file,
59
+ transform={
60
+ "my_module": "{to_snake_case(ctx.input.module)}",
61
+ },
62
+ ),
51
63
  # Register module config to my_app_name/config.py
52
64
  ContentTransformer(
65
+ name="transform-app-config",
53
66
  match=is_app_config_file,
54
67
  transform=update_app_config_file,
55
68
  ),
56
69
  # Register module route to my_app_name/main.py
57
70
  ContentTransformer(
71
+ name="transform-app-main",
58
72
  match=is_app_main_file,
59
73
  transform=update_app_main_file,
60
74
  ),
61
75
  # Register module's tasks to my_app_name/_zrb/task.py
62
76
  ContentTransformer(
77
+ name="transform-zrb-task",
63
78
  match=is_app_zrb_task_file,
64
79
  transform=update_app_zrb_task_file,
65
80
  ),
66
81
  # Register module's base url to my_app_name/_zrb/config.py
67
82
  ContentTransformer(
83
+ name="transform-zrb-config",
68
84
  match=is_app_zrb_config_file,
69
85
  transform=update_app_zrb_config_file,
70
86
  ),
87
+ # Register module's subroute to my_app_name/gateway/route.py
88
+ ContentTransformer(
89
+ name="transform-gateway-route",
90
+ match=is_gateway_route_file,
91
+ transform=update_gateway_route_file,
92
+ ),
71
93
  ],
72
94
  retries=0,
73
95
  upstream=validate_create_my_app_name_module,