zrb 1.0.0a20__tar.gz → 1.0.0b3__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 (342) hide show
  1. {zrb-1.0.0a20 → zrb-1.0.0b3}/PKG-INFO +9 -52
  2. {zrb-1.0.0a20 → zrb-1.0.0b3}/README.md +7 -51
  3. {zrb-1.0.0a20 → zrb-1.0.0b3}/pyproject.toml +4 -1
  4. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/__init__.py +2 -1
  5. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/__main__.py +3 -3
  6. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/__init__.py +3 -0
  7. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/group.py +1 -0
  8. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/llm/llm_chat.py +5 -3
  9. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/llm/tool/cli.py +1 -1
  10. zrb-1.0.0b3/src/zrb/builtin/llm/tool/rag.py +152 -0
  11. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/llm/tool/web.py +1 -1
  12. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +2 -0
  13. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +5 -2
  14. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +80 -20
  15. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +321 -0
  16. zrb-1.0.0b3/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 +113 -0
  17. zrb-1.0.0b3/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 +9 -0
  18. {zrb-1.0.0a20 → zrb-1.0.0b3}/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 -10
  19. zrb-1.0.0b3/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 +59 -0
  20. 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.0b3/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 +2 -2
  21. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +47 -0
  22. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +57 -0
  23. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +74 -0
  24. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +1 -1
  25. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +13 -0
  26. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +23 -0
  27. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +42 -0
  28. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +7 -0
  29. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_api_client.py +6 -0
  30. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/any_client.py → zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client.py +1 -1
  31. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client_factory.py +11 -0
  32. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_direct_client.py +5 -0
  33. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +11 -11
  34. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +2 -2
  35. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +8 -8
  36. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +47 -20
  37. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +29 -0
  38. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +262 -0
  39. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +236 -0
  40. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine.py → zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +1 -1
  41. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +20 -0
  42. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +10 -0
  43. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +7 -0
  44. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +47 -0
  45. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +105 -0
  46. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +58 -0
  47. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +37 -0
  48. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +66 -0
  49. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +1 -1
  50. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +16 -0
  51. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +169 -0
  52. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +9 -0
  53. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +15 -0
  54. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +160 -0
  55. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +23 -0
  56. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +7 -3
  57. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +117 -0
  58. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +11 -0
  59. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +26 -0
  60. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +61 -0
  61. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +13 -0
  62. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +89 -0
  63. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +67 -0
  64. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +13 -0
  65. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +137 -0
  66. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +7 -0
  67. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +212 -0
  68. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +92 -0
  69. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +2 -2
  70. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +127 -0
  71. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +7 -0
  72. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +66 -0
  73. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +214 -0
  74. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +74 -0
  75. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +6 -0
  76. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +6 -0
  77. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  78. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  79. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  80. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +4 -0
  81. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +4 -0
  82. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +4 -0
  83. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +4 -0
  84. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +4 -0
  85. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +4 -0
  86. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +4 -0
  87. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +4 -0
  88. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +4 -0
  89. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +4 -0
  90. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +4 -0
  91. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +4 -0
  92. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +4 -0
  93. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +4 -0
  94. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +4 -0
  95. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +4 -0
  96. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +4 -0
  97. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +4 -0
  98. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +4 -0
  99. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +4 -0
  100. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +34 -0
  101. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +1 -0
  102. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +51 -0
  103. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +113 -0
  104. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/session.py +48 -0
  105. zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +103 -0
  106. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/python.py +1 -1
  107. zrb-1.0.0b3/src/zrb/builtin/random.py +61 -0
  108. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/cmd/cmd_val.py +6 -5
  109. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/config.py +16 -3
  110. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/content_transformer/any_content_transformer.py +7 -0
  111. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/content_transformer/content_transformer.py +6 -0
  112. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/runner/cli.py +14 -7
  113. zrb-1.0.0b3/src/zrb/runner/web_app.py +69 -0
  114. zrb-1.0.0b3/src/zrb/runner/web_config/config.py +91 -0
  115. zrb-1.0.0b3/src/zrb/runner/web_config/config_factory.py +26 -0
  116. zrb-1.0.0b3/src/zrb/runner/web_route/docs_route.py +17 -0
  117. zrb-1.0.0b3/src/zrb/runner/web_route/error_page/serve_default_404.py +28 -0
  118. zrb-1.0.0a20/src/zrb/runner/web_controller/error_page/controller.py → zrb-1.0.0b3/src/zrb/runner/web_route/error_page/show_error_page.py +4 -3
  119. {zrb-1.0.0a20/src/zrb/runner/web_controller → zrb-1.0.0b3/src/zrb/runner/web_route}/error_page/view.html +6 -0
  120. zrb-1.0.0b3/src/zrb/runner/web_route/home_page/home_page_route.py +51 -0
  121. {zrb-1.0.0a20/src/zrb/runner/web_controller → zrb-1.0.0b3/src/zrb/runner/web_route}/home_page/view.html +1 -0
  122. zrb-1.0.0b3/src/zrb/runner/web_route/login_api_route.py +31 -0
  123. zrb-1.0.0b3/src/zrb/runner/web_route/login_page/login_page_route.py +39 -0
  124. {zrb-1.0.0a20/src/zrb/runner/web_controller → zrb-1.0.0b3/src/zrb/runner/web_route}/login_page/view.html +1 -0
  125. zrb-1.0.0b3/src/zrb/runner/web_route/logout_api_route.py +18 -0
  126. zrb-1.0.0b3/src/zrb/runner/web_route/logout_page/logout_page_route.py +40 -0
  127. {zrb-1.0.0a20/src/zrb/runner/web_controller → zrb-1.0.0b3/src/zrb/runner/web_route}/logout_page/view.html +1 -0
  128. zrb-1.0.0a20/src/zrb/runner/web_controller/group_info_page/controller.py → zrb-1.0.0b3/src/zrb/runner/web_route/node_page/group/show_group_page.py +3 -3
  129. {zrb-1.0.0a20/src/zrb/runner/web_controller/group_info_page → zrb-1.0.0b3/src/zrb/runner/web_route/node_page/group}/view.html +1 -0
  130. zrb-1.0.0b3/src/zrb/runner/web_route/node_page/node_page_route.py +50 -0
  131. zrb-1.0.0a20/src/zrb/runner/web_controller/session_page/controller.py → zrb-1.0.0b3/src/zrb/runner/web_route/node_page/task/show_task_page.py +5 -5
  132. {zrb-1.0.0a20/src/zrb/runner/web_controller/session_page → zrb-1.0.0b3/src/zrb/runner/web_route/node_page/task}/view.html +1 -0
  133. zrb-1.0.0b3/src/zrb/runner/web_route/refresh_token_api_route.py +38 -0
  134. zrb-1.0.0b3/src/zrb/runner/web_route/static/refresh-token.template.js +22 -0
  135. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b3/src/zrb/runner/web_route/static/resources}/session/current-session.js +6 -3
  136. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b3/src/zrb/runner/web_route/static/resources}/session/event.js +10 -8
  137. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b3/src/zrb/runner/web_route/static/resources}/session/past-session.js +9 -3
  138. zrb-1.0.0b3/src/zrb/runner/web_route/static/static_route.py +44 -0
  139. zrb-1.0.0b3/src/zrb/runner/web_route/task_input_api_route.py +47 -0
  140. zrb-1.0.0b3/src/zrb/runner/web_route/task_session_api_route.py +147 -0
  141. zrb-1.0.0b3/src/zrb/runner/web_schema/session.py +5 -0
  142. zrb-1.0.0b3/src/zrb/runner/web_schema/token.py +11 -0
  143. zrb-1.0.0b3/src/zrb/runner/web_schema/user.py +32 -0
  144. zrb-1.0.0b3/src/zrb/runner/web_util/cookie.py +29 -0
  145. zrb-1.0.0a20/src/zrb/runner/web_util.py → zrb-1.0.0b3/src/zrb/runner/web_util/html.py +1 -18
  146. zrb-1.0.0b3/src/zrb/runner/web_util/token.py +72 -0
  147. zrb-1.0.0b3/src/zrb/runner/web_util/user.py +63 -0
  148. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/session/session.py +6 -4
  149. zrb-1.0.0a20/src/zrb/session_state_logger/default_session_state_logger.py → zrb-1.0.0b3/src/zrb/session_state_logger/session_state_logger_factory.py +1 -1
  150. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/base_task.py +56 -8
  151. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/base_trigger.py +2 -0
  152. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/cmd_task.py +9 -5
  153. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/http_check.py +2 -0
  154. zrb-1.0.0b3/src/zrb/task/llm_task.py +331 -0
  155. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/make_task.py +2 -0
  156. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/rsync_task.py +2 -0
  157. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/scaffolder.py +8 -5
  158. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/scheduler.py +2 -0
  159. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/tcp_check.py +2 -0
  160. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task_status/task_status.py +4 -3
  161. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/cmd/command.py +1 -0
  162. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/file.py +7 -1
  163. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/llm/tool.py +3 -7
  164. zrb-1.0.0a20/src/zrb/builtin/llm/tool/rag.py +0 -189
  165. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -213
  166. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/any_client_method.py +0 -27
  167. 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 +0 -65
  168. 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/my_entity_repository.py +0 -38
  169. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -37
  170. 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
  171. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/api_client.py +0 -6
  172. 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
  173. 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
  174. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app.py +0 -20
  175. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -134
  176. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_usecase.py +0 -245
  177. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -8
  178. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -30
  179. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/any_client.py +0 -33
  180. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/api_client.py +0 -7
  181. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/direct_client.py +0 -6
  182. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/factory.py +0 -9
  183. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_user_table.py +0 -37
  184. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -6
  185. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -45
  186. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -42
  187. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_usecase.py +0 -53
  188. 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
  189. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -37
  190. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -44
  191. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -39
  192. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -39
  193. zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -39
  194. zrb-1.0.0a20/src/zrb/runner/web_app.py +0 -279
  195. zrb-1.0.0a20/src/zrb/runner/web_config.py +0 -288
  196. zrb-1.0.0a20/src/zrb/runner/web_controller/home_page/controller.py +0 -33
  197. zrb-1.0.0a20/src/zrb/runner/web_controller/login_page/controller.py +0 -25
  198. zrb-1.0.0a20/src/zrb/runner/web_controller/logout_page/controller.py +0 -26
  199. zrb-1.0.0a20/src/zrb/task/llm_task.py +0 -218
  200. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/attr/__init__.py +0 -0
  201. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/attr/type.py +0 -0
  202. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/base64.py +0 -0
  203. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/git.py +0 -0
  204. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/git_subtree.py +0 -0
  205. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/md5.py +0 -0
  206. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/__init__.py +0 -0
  207. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  208. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  209. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  210. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  211. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  212. /zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/create_column_task.py → /zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  213. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  214. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  215. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  216. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  217. {zrb-1.0.0a20 → zrb-1.0.0b3}/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
  218. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  219. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  220. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  221. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  222. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  223. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  224. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/migrate.py +0 -0
  225. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  226. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  227. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  228. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  229. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  230. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  231. {zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user → zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission}/__init__.py +0 -0
  232. {zrb-1.0.0a20/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema → zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role}/__init__.py +0 -0
  233. {zrb-1.0.0a20/src/zrb/builtin/project/create → zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user}/__init__.py +0 -0
  234. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  235. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  236. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  237. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  238. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  239. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  240. {zrb-1.0.0a20/src/zrb/builtin/shell → zrb-1.0.0b3/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema}/__init__.py +0 -0
  241. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  242. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  243. {zrb-1.0.0a20/src/zrb/builtin/shell/autocomplete → zrb-1.0.0b3/src/zrb/builtin/project/create}/__init__.py +0 -0
  244. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  245. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  246. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/project/create/project_task.py +0 -0
  247. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  248. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  249. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/setup/common_input.py +0 -0
  250. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  251. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  252. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  253. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  254. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/setup/ubuntu.py +0 -0
  255. {zrb-1.0.0a20/src/zrb/callback → zrb-1.0.0b3/src/zrb/builtin/shell}/__init__.py +0 -0
  256. {zrb-1.0.0a20/src/zrb/cmd → zrb-1.0.0b3/src/zrb/builtin/shell/autocomplete}/__init__.py +0 -0
  257. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  258. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  259. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  260. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/builtin/todo.py +0 -0
  261. {zrb-1.0.0a20/src/zrb/content_transformer → zrb-1.0.0b3/src/zrb/callback}/__init__.py +0 -0
  262. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/callback/any_callback.py +0 -0
  263. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/callback/callback.py +0 -0
  264. {zrb-1.0.0a20/src/zrb/context → zrb-1.0.0b3/src/zrb/cmd}/__init__.py +0 -0
  265. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/cmd/cmd_result.py +0 -0
  266. {zrb-1.0.0a20/src/zrb/dot_dict → zrb-1.0.0b3/src/zrb/content_transformer}/__init__.py +0 -0
  267. {zrb-1.0.0a20/src/zrb/env → zrb-1.0.0b3/src/zrb/context}/__init__.py +0 -0
  268. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/context/any_context.py +0 -0
  269. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/context/any_shared_context.py +0 -0
  270. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/context/context.py +0 -0
  271. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/context/shared_context.py +0 -0
  272. {zrb-1.0.0a20/src/zrb/group → zrb-1.0.0b3/src/zrb/dot_dict}/__init__.py +0 -0
  273. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/dot_dict/dot_dict.py +0 -0
  274. {zrb-1.0.0a20/src/zrb/input → zrb-1.0.0b3/src/zrb/env}/__init__.py +0 -0
  275. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/env/any_env.py +0 -0
  276. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/env/env.py +0 -0
  277. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/env/env_file.py +0 -0
  278. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/env/env_map.py +0 -0
  279. {zrb-1.0.0a20/src/zrb/runner → zrb-1.0.0b3/src/zrb/group}/__init__.py +0 -0
  280. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/group/any_group.py +0 -0
  281. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/group/group.py +0 -0
  282. {zrb-1.0.0a20/src/zrb/runner/web_controller → zrb-1.0.0b3/src/zrb/input}/__init__.py +0 -0
  283. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/input/any_input.py +0 -0
  284. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/input/base_input.py +0 -0
  285. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/input/bool_input.py +0 -0
  286. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/input/float_input.py +0 -0
  287. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/input/int_input.py +0 -0
  288. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/input/option_input.py +0 -0
  289. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/input/password_input.py +0 -0
  290. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/input/str_input.py +0 -0
  291. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/input/text_input.py +0 -0
  292. {zrb-1.0.0a20/src/zrb/runner/web_controller/group_info_page → zrb-1.0.0b3/src/zrb/runner}/__init__.py +0 -0
  293. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/runner/common_util.py +0 -0
  294. {zrb-1.0.0a20/src/zrb/runner/web_controller/home_page → zrb-1.0.0b3/src/zrb/runner/web_route}/__init__.py +0 -0
  295. {zrb-1.0.0a20/src/zrb/runner/web_controller/session_page → zrb-1.0.0b3/src/zrb/runner/web_route/home_page}/__init__.py +0 -0
  296. {zrb-1.0.0a20/src/zrb/runner/web_controller/session_page → zrb-1.0.0b3/src/zrb/runner/web_route/node_page/task}/partial/input.html +0 -0
  297. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b3/src/zrb/runner/web_route/static/resources}/common.css +0 -0
  298. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b3/src/zrb/runner/web_route/static/resources}/favicon-32x32.png +0 -0
  299. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b3/src/zrb/runner/web_route/static/resources}/login/event.js +0 -0
  300. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b3/src/zrb/runner/web_route/static/resources}/logout/event.js +0 -0
  301. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b3/src/zrb/runner/web_route/static/resources}/pico.min.css +0 -0
  302. {zrb-1.0.0a20/src/zrb/runner/web_controller/static → zrb-1.0.0b3/src/zrb/runner/web_route/static/resources}/session/common-util.js +0 -0
  303. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/session/__init__.py +0 -0
  304. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/session/any_session.py +0 -0
  305. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/session_state_log/__init__.py +0 -0
  306. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/session_state_log/session_state_log.py +0 -0
  307. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/session_state_logger/__init__.py +0 -0
  308. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  309. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  310. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/__init__.py +0 -0
  311. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/any_task.py +0 -0
  312. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task/task.py +0 -0
  313. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/task_status/__init__.py +0 -0
  314. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/__init__.py +0 -0
  315. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/attr.py +0 -0
  316. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/cli/__init__.py +0 -0
  317. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/cli/style.py +0 -0
  318. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/cli/subcommand.py +0 -0
  319. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/cmd/__init__.py +0 -0
  320. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/cmd/remote.py +0 -0
  321. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/codemod/__init__.py +0 -0
  322. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/codemod/append_code_to_class.py +0 -0
  323. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/codemod/append_code_to_function.py +0 -0
  324. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/codemod/append_code_to_method.py +0 -0
  325. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/codemod/append_key_to_dict.py +0 -0
  326. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/codemod/append_param_to_function_call.py +0 -0
  327. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/codemod/prepend_code_to_module.py +0 -0
  328. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/codemod/prepend_parent_to_class.py +0 -0
  329. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/codemod/prepend_property_to_class.py +0 -0
  330. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/cron.py +0 -0
  331. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/git.py +0 -0
  332. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/git_subtree.py +0 -0
  333. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/group.py +0 -0
  334. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/load.py +0 -0
  335. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/run.py +0 -0
  336. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/string/__init__.py +0 -0
  337. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/string/conversion.py +0 -0
  338. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/string/format.py +0 -0
  339. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/string/name.py +0 -0
  340. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/util/todo.py +0 -0
  341. {zrb-1.0.0a20 → zrb-1.0.0b3}/src/zrb/xcom/__init__.py +0 -0
  342. {zrb-1.0.0a20 → zrb-1.0.0b3}/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.0b3
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -26,15 +26,18 @@ Requires-Dist: pdfplumber (>=0.11.4,<0.12.0) ; extra == "rag"
26
26
  Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
27
27
  Requires-Dist: python-jose[cryptography] (>=3.3.0,<4.0.0)
28
28
  Requires-Dist: requests (>=2.32.3,<3.0.0)
29
+ Requires-Dist: ulid-py (>=1.1.0,<2.0.0)
29
30
  Project-URL: Documentation, https://github.com/state-alchemists/zrb
30
31
  Project-URL: Repository, https://github.com/state-alchemists/zrb
31
32
  Description-Content-Type: text/markdown
32
33
 
33
34
  ![](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/zrb/android-chrome-192x192.png)
34
35
 
36
+ [Documentation](https://github.com/state-alchemists/zrb/blob/main/docs/README.md)
37
+
35
38
  # 🤖 Zrb: Your Automation Powerhouse
36
39
 
37
- With Zrb, you can write your automation tasks like this:
40
+ Zrb allows you to write your automation tasks in Python and declaratively:
38
41
 
39
42
 
40
43
  ```python
@@ -52,59 +55,13 @@ math.add_task(Task(
52
55
  ))
53
56
  ```
54
57
 
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
- ```
58
+ Once defined, you will be able to access your automation tasks from the CLI, Web Interface, or via HTTP API.
102
59
 
103
- Result (you need to access `http://localhost:21213`)
60
+ 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
61
 
105
- ![](https://raw.githubusercontent.com/state-alchemists/zrb/refs/heads/1.0.0/_images/web.png)
62
+ Furthermore, Zrb has some builtin tasks to manage monorepo, generate FastAPI application, or play around with LLM.
106
63
 
107
- __More:__
64
+ 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
65
 
109
66
  [![Video Title](https://img.youtube.com/vi/W7dgk96l__o/0.jpg)](https://www.youtube.com/watch?v=W7dgk96l__o)
110
67
 
@@ -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.0b3"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -50,16 +50,19 @@ pdfplumber = {version = "^0.11.4", optional = true}
50
50
  beautifulsoup4 = "^4.12.3"
51
51
  fastapi = {extras = ["standard"], version = "^0.115.6"}
52
52
  python-jose = {extras = ["cryptography"], version = "^3.3.0"}
53
+ ulid-py = "^1.1.0"
53
54
 
54
55
  [tool.poetry.extras]
55
56
  # poetry install -E rag
56
57
  rag = ["chromadb", "pdfplumber"]
57
58
 
58
59
  [tool.poetry.dev-dependencies]
60
+ alembic = "^1.14.0" # FastApp dependencies
59
61
  flake8 = "~7.1.1"
60
62
  pytest = "~8.3.3"
61
63
  pytest-cov = "~6.0.0"
62
64
  pytest-asyncio = "~0.24.0"
65
+ sqlmodel = "^0.0.22" # FastApp dependencies
63
66
  tomlkit = "^0.13.2"
64
67
 
65
68
  [tool.pytest.ini_options]
@@ -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
@@ -14,10 +14,10 @@ def serve_cli():
14
14
  for init_script in INIT_SCRIPTS:
15
15
  load_file(init_script, -1)
16
16
  cli.run(sys.argv[1:])
17
- except RuntimeError as e:
18
- if "Event loop is closed" not in f"{e}":
19
- raise e
20
17
  except KeyboardInterrupt:
21
18
  print(stylize_warning("\nStopped"), file=sys.stderr)
19
+ except RuntimeError as e:
20
+ if f"{e}".lower() != "event loop is closed":
21
+ raise e
22
22
  except NodeNotFoundError as e:
23
23
  print(stylize_error(f"{e}"), file=sys.stderr)
@@ -12,6 +12,7 @@ from zrb.builtin.md5 import hash_md5, sum_md5
12
12
  from zrb.builtin.project.add.fastapp.fastapp_task import add_fastapp_to_project
13
13
  from zrb.builtin.project.create.project_task import create_project
14
14
  from zrb.builtin.python import format_python_code
15
+ from zrb.builtin.random import shuffle_values, throw_dice
15
16
  from zrb.builtin.setup.asdf.asdf import setup_asdf
16
17
  from zrb.builtin.setup.latex.ubuntu import setup_latex_on_ubuntu
17
18
  from zrb.builtin.setup.tmux.tmux import setup_tmux
@@ -55,6 +56,8 @@ assert edit_todo
55
56
  assert complete_todo
56
57
  assert log_todo
57
58
  assert show_todo
59
+ assert throw_dice
60
+ assert shuffle_values
58
61
  assert setup_ubuntu
59
62
  assert setup_latex_on_ubuntu
60
63
  assert setup_asdf
@@ -2,6 +2,7 @@ from zrb.group.group import Group
2
2
  from zrb.runner.cli import cli
3
3
 
4
4
  base64_group = cli.add_group(Group(name="base64", description="📄 Base64 operations"))
5
+ random_group = cli.add_group(Group(name="random", description="🔀 Random operation"))
5
6
  git_group = cli.add_group(Group(name="git", description="🌱 Git related commands"))
6
7
  git_branch_group = git_group.add_group(
7
8
  Group(name="branch", description="🌿 Git branch related commands")
@@ -1,6 +1,7 @@
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.rag import create_rag_from_directory
4
+ from zrb.builtin.llm.tool.web import open_web_route, query_internet
4
5
  from zrb.config import (
5
6
  LLM_ALLOW_ACCESS_SHELL,
6
7
  LLM_ALLOW_ACCESS_WEB,
@@ -22,7 +23,7 @@ llm_chat: LLMTask = llm_group.add_task(
22
23
  prompt="LLM Model",
23
24
  default_str=LLM_MODEL,
24
25
  ),
25
- StrInput(
26
+ TextInput(
26
27
  "system-prompt",
27
28
  description="System prompt",
28
29
  prompt="System prompt",
@@ -35,6 +36,7 @@ llm_chat: LLMTask = llm_group.add_task(
35
36
  model="{ctx.input.model}",
36
37
  system_prompt="{ctx.input['system-prompt']}",
37
38
  message="{ctx.input.message}",
39
+ retries=0,
38
40
  ),
39
41
  alias="chat",
40
42
  )
@@ -43,5 +45,5 @@ if LLM_ALLOW_ACCESS_SHELL:
43
45
  llm_chat.add_tool(run_shell_command)
44
46
 
45
47
  if LLM_ALLOW_ACCESS_WEB:
46
- llm_chat.add_tool(open_web_page)
48
+ llm_chat.add_tool(open_web_route)
47
49
  llm_chat.add_tool(query_internet)
@@ -2,7 +2,7 @@ import subprocess
2
2
 
3
3
 
4
4
  def run_shell_command(command: str) -> str:
5
- """Running a shell command"""
5
+ """Running an actual shell command on user's computer."""
6
6
  output = subprocess.check_output(
7
7
  command, shell=True, stderr=subprocess.STDOUT, text=True
8
8
  )
@@ -0,0 +1,152 @@
1
+ import hashlib
2
+ import json
3
+ import os
4
+ import sys
5
+
6
+ import litellm
7
+ import ulid
8
+
9
+ from zrb.config import (
10
+ RAG_CHUNK_SIZE,
11
+ RAG_EMBEDDING_MODEL,
12
+ RAG_MAX_RESULT_COUNT,
13
+ RAG_OVERLAP,
14
+ )
15
+ from zrb.util.cli.style import stylize_error, stylize_faint
16
+ from zrb.util.file import read_file
17
+
18
+
19
+ def create_rag_from_directory(
20
+ tool_name: str,
21
+ tool_description: str,
22
+ document_dir_path: str = "./documents",
23
+ model: str = RAG_EMBEDDING_MODEL,
24
+ vector_db_path: str = "./chroma",
25
+ vector_db_collection: str = "documents",
26
+ chunk_size: int = RAG_CHUNK_SIZE,
27
+ overlap: int = RAG_OVERLAP,
28
+ max_result_count: int = RAG_MAX_RESULT_COUNT,
29
+ ):
30
+ async def retrieve(query: str) -> str:
31
+ from chromadb import PersistentClient
32
+ from chromadb.config import Settings
33
+
34
+ client = PersistentClient(
35
+ path=vector_db_path, settings=Settings(allow_reset=True)
36
+ )
37
+ collection = client.get_or_create_collection(vector_db_collection)
38
+
39
+ # Track file changes using a hash-based approach
40
+ hash_file_path = os.path.join(vector_db_path, "file_hashes.json")
41
+ previous_hashes = _load_hashes(hash_file_path)
42
+ current_hashes = {}
43
+
44
+ updated_files = []
45
+
46
+ for root, _, files in os.walk(document_dir_path):
47
+ for file in files:
48
+ file_path = os.path.join(root, file)
49
+ file_hash = _compute_file_hash(file_path)
50
+ relative_path = os.path.relpath(file_path, document_dir_path)
51
+ current_hashes[relative_path] = file_hash
52
+
53
+ if previous_hashes.get(relative_path) != file_hash:
54
+ updated_files.append(file_path)
55
+
56
+ if updated_files:
57
+ print(
58
+ stylize_faint(f"Updating {len(updated_files)} changed files"),
59
+ file=sys.stderr,
60
+ )
61
+
62
+ for file_path in updated_files:
63
+ try:
64
+ relative_path = os.path.relpath(file_path, document_dir_path)
65
+ collection.delete(where={"file_path": relative_path})
66
+ content = _read_file_content(file_path)
67
+ file_id = ulid.new().str
68
+ for i in range(0, len(content), chunk_size - overlap):
69
+ chunk = content[i : i + chunk_size]
70
+ if chunk:
71
+ chunk_id = ulid.new().str
72
+ print(
73
+ stylize_faint(
74
+ f"Vectorizing {relative_path} chunk {chunk_id}"
75
+ ),
76
+ file=sys.stderr,
77
+ )
78
+ response = await litellm.aembedding(
79
+ model=model, input=[chunk]
80
+ )
81
+ vector = response["data"][0]["embedding"]
82
+ collection.upsert(
83
+ ids=[chunk_id],
84
+ embeddings=[vector],
85
+ documents=[chunk],
86
+ metadatas={
87
+ "file_path": relative_path,
88
+ "file_id": file_id,
89
+ },
90
+ )
91
+ except Exception as e:
92
+ print(
93
+ stylize_error(f"Error processing {file_path}: {e}"),
94
+ file=sys.stderr,
95
+ )
96
+
97
+ _save_hashes(hash_file_path, current_hashes)
98
+ else:
99
+ print(
100
+ stylize_faint("No changes detected. Skipping database update."),
101
+ file=sys.stderr,
102
+ )
103
+
104
+ print(stylize_faint("Vectorizing query"), file=sys.stderr)
105
+ query_response = await litellm.aembedding(model=model, input=[query])
106
+ query_vector = query_response["data"][0]["embedding"]
107
+
108
+ print(stylize_faint("Searching documents"), file=sys.stderr)
109
+ results = collection.query(
110
+ query_embeddings=query_vector,
111
+ n_results=max_result_count,
112
+ )
113
+ return json.dumps(results)
114
+
115
+ retrieve.__name__ = tool_name
116
+ retrieve.__doc__ = tool_description
117
+ return retrieve
118
+
119
+
120
+ def _compute_file_hash(file_path: str) -> str:
121
+ hash_md5 = hashlib.md5()
122
+ with open(file_path, "rb") as f:
123
+ for chunk in iter(lambda: f.read(4096), b""):
124
+ hash_md5.update(chunk)
125
+ return hash_md5.hexdigest()
126
+
127
+
128
+ def _read_file_content(file_path: str) -> str:
129
+ if file_path.lower().endswith(".pdf"):
130
+ return _read_pdf(file_path)
131
+ return read_file(file_path)
132
+
133
+
134
+ def _read_pdf(file_path: str) -> str:
135
+ import pdfplumber
136
+
137
+ with pdfplumber.open(file_path) as pdf:
138
+ return "\n".join(
139
+ page.extract_text() for page in pdf.pages if page.extract_text()
140
+ )
141
+
142
+
143
+ def _load_hashes(file_path: str) -> dict:
144
+ if os.path.exists(file_path):
145
+ with open(file_path, "r") as f:
146
+ return json.load(f)
147
+ return {}
148
+
149
+
150
+ def _save_hashes(file_path: str, hashes: dict):
151
+ with open(file_path, "w") as f:
152
+ json.dump(hashes, f)
@@ -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,9 +9,12 @@ 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
16
19
  else:
17
- ACTIVATE_VENV_SCRIPT = "source .venv/bin/activate"
20
+ ACTIVATE_VENV_SCRIPT = ". .venv/bin/activate"
@@ -1,19 +1,21 @@
1
1
  import os
2
2
 
3
- from my_app_name._zrb.config import APP_DIR
3
+ from my_app_name._zrb.config import ACTIVATE_VENV_SCRIPT, APP_DIR
4
4
  from my_app_name._zrb.entity.add_entity_util import (
5
5
  is_in_app_schema_dir,
6
6
  is_in_module_entity_dir,
7
- is_module_any_client_file,
8
7
  is_module_api_client_file,
8
+ is_module_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
- update_any_client,
13
- update_api_client,
14
- update_direct_client,
15
- update_migration_metadata,
16
- update_route,
13
+ update_api_client_file,
14
+ update_client_file,
15
+ update_direct_client_file,
16
+ update_gateway_subroute_file,
17
+ update_migration_metadata_file,
18
+ update_route_file,
17
19
  )
18
20
  from my_app_name._zrb.format_task import format_my_app_name_code
19
21
  from my_app_name._zrb.group import app_create_group
@@ -23,9 +25,25 @@ from my_app_name._zrb.input import (
23
25
  new_entity_input,
24
26
  plural_entity_input,
25
27
  )
26
- from my_app_name._zrb.util import get_existing_module_names, get_existing_schema_names
28
+ from my_app_name._zrb.util import (
29
+ cd_module_script,
30
+ get_existing_module_names,
31
+ get_existing_schema_names,
32
+ set_create_migration_db_url_env,
33
+ set_env,
34
+ )
35
+ from my_app_name._zrb.venv_task import prepare_venv
27
36
 
28
- from zrb import AnyContext, ContentTransformer, Scaffolder, Task, make_task
37
+ from zrb import (
38
+ AnyContext,
39
+ Cmd,
40
+ CmdTask,
41
+ ContentTransformer,
42
+ EnvFile,
43
+ Scaffolder,
44
+ Task,
45
+ make_task,
46
+ )
29
47
  from zrb.util.string.conversion import to_snake_case
30
48
 
31
49
 
@@ -66,6 +84,7 @@ scaffold_my_app_name_entity = Scaffolder(
66
84
  transform_content=[
67
85
  # Schema tranformation (my_app_name/schema/snake_entity_name)
68
86
  ContentTransformer(
87
+ name="transform-schema-file",
69
88
  match=is_in_app_schema_dir,
70
89
  transform={
71
90
  "MyEntity": "{to_pascal_case(ctx.input.entity)}",
@@ -75,6 +94,7 @@ scaffold_my_app_name_entity = Scaffolder(
75
94
  # Common module's entity transformation
76
95
  # (my_app_name/module/snake_module_name/service/snake_entity_name)
77
96
  ContentTransformer(
97
+ name="transform-module-entity-dir",
78
98
  match=is_in_module_entity_dir,
79
99
  transform={
80
100
  "my_module": "{to_snake_case(ctx.input.module)}",
@@ -87,40 +107,80 @@ scaffold_my_app_name_entity = Scaffolder(
87
107
  # Add entity to migration metadata
88
108
  # (my_app_name/module/snake_module_name/migration_metadata.py)
89
109
  ContentTransformer(
110
+ name="transform-module-migration-metadata",
90
111
  match=is_module_migration_metadata_file,
91
- transform=update_migration_metadata,
112
+ transform=update_migration_metadata_file,
92
113
  ),
93
- # Update API Client (my_app_name/module/snake_module_name/client/api_client.py)
114
+ # Update API Client
115
+ # (my_app_name/module/snake_module_name/client/snake_module_name_api_client.py)
94
116
  ContentTransformer(
117
+ name="transform-module-api-client",
95
118
  match=is_module_api_client_file,
96
- transform=update_api_client,
119
+ transform=update_api_client_file,
97
120
  ),
98
- # Update Direct Client (my_app_name/module/snake_module_name/client/direct_client.py)
121
+ # Update Direct Client
122
+ # (my_app_name/module/snake_module_name/client/snake_module_name_direct_client.py)
99
123
  ContentTransformer(
124
+ name="transform-module-direct-client",
100
125
  match=is_module_direct_client_file,
101
- transform=update_direct_client,
126
+ transform=update_direct_client_file,
102
127
  ),
103
- # Update Any Client (my_app_name/module/snake_module_name/client/any_client.py)
128
+ # Update Client
129
+ # (my_app_name/module/snake_module_name/client/snake_module_name_client.py)
104
130
  ContentTransformer(
105
- match=is_module_any_client_file,
106
- transform=update_any_client,
131
+ name="transform-module-any-client",
132
+ match=is_module_client_file,
133
+ transform=update_client_file,
107
134
  ),
108
135
  # Update module route (my_app_name/module/route.py)
109
136
  ContentTransformer(
137
+ name="transform-module-route",
110
138
  match=is_module_route_file,
111
- transform=update_route,
139
+ transform=update_route_file,
140
+ ),
141
+ # Update module gateway subroute
142
+ # (my_app_name/module/gateway/subroute/snake_module_name.py)
143
+ ContentTransformer(
144
+ name="transform-module-gateway-subroute",
145
+ match=is_module_gateway_subroute_file,
146
+ transform=update_gateway_subroute_file,
112
147
  ),
113
- # TODO: Register gateway route
114
148
  ],
115
149
  retries=0,
116
150
  upstream=validate_create_my_app_name_entity,
117
151
  )
118
152
 
153
+ create_my_app_name_entity_migration = CmdTask(
154
+ name="create-my-app-name-entity-migration",
155
+ input=[
156
+ existing_module_input,
157
+ new_entity_input,
158
+ ],
159
+ env=EnvFile(path=os.path.join(APP_DIR, "template.env")),
160
+ cwd=APP_DIR,
161
+ cmd=[
162
+ ACTIVATE_VENV_SCRIPT,
163
+ Cmd(lambda ctx: set_create_migration_db_url_env(ctx.input.module)),
164
+ Cmd(lambda ctx: set_env("MY_APP_NAME_MODULES", ctx.input.module)),
165
+ Cmd(lambda ctx: cd_module_script(ctx.input.module)),
166
+ "alembic upgrade head",
167
+ Cmd(
168
+ 'alembic revision --autogenerate -m "create_{to_snake_case(ctx.input.entity)}_table"', # noqa
169
+ ),
170
+ ],
171
+ render_cmd=False,
172
+ retries=0,
173
+ upstream=[
174
+ prepare_venv,
175
+ scaffold_my_app_name_entity,
176
+ ],
177
+ )
178
+
119
179
  add_my_app_name_entity = app_create_group.add_task(
120
180
  Task(
121
181
  name="add-my-app-name-entity",
122
182
  description="🏗️ Create new entity on a module",
123
- upstream=scaffold_my_app_name_entity,
183
+ upstream=create_my_app_name_entity_migration,
124
184
  successor=format_my_app_name_code,
125
185
  retries=0,
126
186
  ),