zrb 1.0.0a21__tar.gz → 1.0.0b5__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 (345) hide show
  1. {zrb-1.0.0a21 → zrb-1.0.0b5}/PKG-INFO +3 -2
  2. {zrb-1.0.0a21 → zrb-1.0.0b5}/pyproject.toml +5 -2
  3. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/__init__.py +2 -1
  4. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/__main__.py +3 -3
  5. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/__init__.py +3 -0
  6. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/group.py +1 -0
  7. zrb-1.0.0b5/src/zrb/builtin/llm/llm_chat.py +127 -0
  8. zrb-1.0.0b5/src/zrb/builtin/llm/previous-session.js +21 -0
  9. zrb-1.0.0b5/src/zrb/builtin/llm/tool/api.py +29 -0
  10. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/llm/tool/cli.py +1 -1
  11. zrb-1.0.0b5/src/zrb/builtin/llm/tool/rag.py +152 -0
  12. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/llm/tool/web.py +1 -1
  13. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +2 -0
  14. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +5 -2
  15. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +80 -20
  16. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +321 -0
  17. zrb-1.0.0b5/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
  18. zrb-1.0.0b5/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
  19. {zrb-1.0.0a21 → zrb-1.0.0b5}/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
  20. zrb-1.0.0b5/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
  21. zrb-1.0.0a21/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.0b5/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
  22. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +47 -0
  23. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +57 -0
  24. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +74 -0
  25. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +1 -1
  26. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +13 -0
  27. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +23 -0
  28. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +42 -0
  29. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +7 -0
  30. zrb-1.0.0b5/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
  31. zrb-1.0.0a21/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.0b5/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
  32. zrb-1.0.0b5/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
  33. zrb-1.0.0b5/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
  34. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +11 -11
  35. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +2 -2
  36. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +8 -8
  37. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +47 -20
  38. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +29 -0
  39. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +262 -0
  40. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +236 -0
  41. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine.py → zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +1 -1
  42. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +20 -0
  43. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +10 -0
  44. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +7 -0
  45. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +47 -0
  46. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +105 -0
  47. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +58 -0
  48. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +37 -0
  49. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +66 -0
  50. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +1 -1
  51. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +16 -0
  52. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +169 -0
  53. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +9 -0
  54. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +15 -0
  55. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +160 -0
  56. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +23 -0
  57. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +7 -3
  58. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +117 -0
  59. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +11 -0
  60. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +26 -0
  61. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +61 -0
  62. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +13 -0
  63. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +89 -0
  64. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +67 -0
  65. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +13 -0
  66. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +137 -0
  67. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +7 -0
  68. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +212 -0
  69. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +92 -0
  70. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +2 -2
  71. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +127 -0
  72. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +7 -0
  73. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +66 -0
  74. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +214 -0
  75. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +74 -0
  76. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +6 -0
  77. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +6 -0
  78. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  79. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  80. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  81. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +4 -0
  82. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +4 -0
  83. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +4 -0
  84. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +4 -0
  85. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +4 -0
  86. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +4 -0
  87. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +4 -0
  88. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +4 -0
  89. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +4 -0
  90. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +4 -0
  91. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +4 -0
  92. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +4 -0
  93. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +4 -0
  94. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +4 -0
  95. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +4 -0
  96. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +4 -0
  97. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +4 -0
  98. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +4 -0
  99. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +4 -0
  100. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +4 -0
  101. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +34 -0
  102. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +1 -0
  103. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +51 -0
  104. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +113 -0
  105. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/session.py +48 -0
  106. zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +103 -0
  107. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/python.py +1 -1
  108. zrb-1.0.0b5/src/zrb/builtin/random.py +61 -0
  109. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/todo.py +1 -0
  110. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/cmd/cmd_val.py +6 -5
  111. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/config.py +15 -4
  112. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/content_transformer/any_content_transformer.py +7 -0
  113. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/content_transformer/content_transformer.py +6 -0
  114. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/input/any_input.py +5 -0
  115. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/input/base_input.py +6 -0
  116. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/input/bool_input.py +2 -0
  117. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/input/float_input.py +2 -0
  118. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/input/int_input.py +2 -0
  119. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/input/option_input.py +2 -0
  120. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/input/password_input.py +2 -0
  121. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/input/text_input.py +2 -0
  122. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/runner/cli.py +14 -7
  123. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/runner/common_util.py +1 -1
  124. zrb-1.0.0b5/src/zrb/runner/web_app.py +69 -0
  125. zrb-1.0.0b5/src/zrb/runner/web_config/config.py +91 -0
  126. zrb-1.0.0b5/src/zrb/runner/web_config/config_factory.py +26 -0
  127. zrb-1.0.0b5/src/zrb/runner/web_route/docs_route.py +17 -0
  128. zrb-1.0.0b5/src/zrb/runner/web_route/error_page/serve_default_404.py +28 -0
  129. zrb-1.0.0a21/src/zrb/runner/web_controller/error_page/controller.py → zrb-1.0.0b5/src/zrb/runner/web_route/error_page/show_error_page.py +4 -3
  130. {zrb-1.0.0a21/src/zrb/runner/web_controller → zrb-1.0.0b5/src/zrb/runner/web_route}/error_page/view.html +5 -0
  131. zrb-1.0.0b5/src/zrb/runner/web_route/home_page/home_page_route.py +51 -0
  132. zrb-1.0.0b5/src/zrb/runner/web_route/login_api_route.py +31 -0
  133. zrb-1.0.0b5/src/zrb/runner/web_route/login_page/login_page_route.py +39 -0
  134. zrb-1.0.0b5/src/zrb/runner/web_route/logout_api_route.py +18 -0
  135. zrb-1.0.0b5/src/zrb/runner/web_route/logout_page/logout_page_route.py +40 -0
  136. zrb-1.0.0a21/src/zrb/runner/web_controller/group_info_page/controller.py → zrb-1.0.0b5/src/zrb/runner/web_route/node_page/group/show_group_page.py +3 -3
  137. zrb-1.0.0b5/src/zrb/runner/web_route/node_page/node_page_route.py +50 -0
  138. zrb-1.0.0a21/src/zrb/runner/web_controller/session_page/controller.py → zrb-1.0.0b5/src/zrb/runner/web_route/node_page/task/show_task_page.py +3 -3
  139. {zrb-1.0.0a21/src/zrb/runner/web_controller/session_page → zrb-1.0.0b5/src/zrb/runner/web_route/node_page/task}/view.html +1 -1
  140. zrb-1.0.0b5/src/zrb/runner/web_route/refresh_token_api_route.py +38 -0
  141. {zrb-1.0.0a21/src/zrb/runner/web_controller/static → zrb-1.0.0b5/src/zrb/runner/web_route/static/resources}/session/current-session.js +12 -6
  142. {zrb-1.0.0a21/src/zrb/runner/web_controller/static → zrb-1.0.0b5/src/zrb/runner/web_route/static/resources}/session/event.js +17 -2
  143. zrb-1.0.0b5/src/zrb/runner/web_route/static/static_route.py +44 -0
  144. zrb-1.0.0b5/src/zrb/runner/web_route/task_input_api_route.py +47 -0
  145. zrb-1.0.0b5/src/zrb/runner/web_route/task_session_api_route.py +147 -0
  146. zrb-1.0.0b5/src/zrb/runner/web_schema/session.py +5 -0
  147. zrb-1.0.0b5/src/zrb/runner/web_schema/token.py +11 -0
  148. zrb-1.0.0b5/src/zrb/runner/web_schema/user.py +32 -0
  149. zrb-1.0.0b5/src/zrb/runner/web_util/cookie.py +29 -0
  150. zrb-1.0.0a21/src/zrb/runner/web_util.py → zrb-1.0.0b5/src/zrb/runner/web_util/html.py +1 -23
  151. zrb-1.0.0b5/src/zrb/runner/web_util/token.py +72 -0
  152. zrb-1.0.0b5/src/zrb/runner/web_util/user.py +63 -0
  153. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/session/session.py +6 -4
  154. zrb-1.0.0a21/src/zrb/session_state_logger/default_session_state_logger.py → zrb-1.0.0b5/src/zrb/session_state_logger/session_state_logger_factory.py +1 -1
  155. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/base_task.py +56 -8
  156. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/base_trigger.py +2 -0
  157. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/cmd_task.py +9 -5
  158. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/http_check.py +2 -0
  159. zrb-1.0.0b5/src/zrb/task/llm_task.py +201 -0
  160. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/make_task.py +2 -0
  161. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/rsync_task.py +2 -0
  162. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/scaffolder.py +8 -5
  163. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/scheduler.py +2 -0
  164. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/tcp_check.py +2 -0
  165. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task_status/task_status.py +4 -3
  166. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/cmd/command.py +1 -0
  167. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/file.py +7 -1
  168. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/llm/tool.py +36 -12
  169. zrb-1.0.0a21/src/zrb/builtin/llm/llm_chat.py +0 -47
  170. zrb-1.0.0a21/src/zrb/builtin/llm/tool/rag.py +0 -189
  171. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -213
  172. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/any_client_method.py +0 -27
  173. zrb-1.0.0a21/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
  174. zrb-1.0.0a21/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
  175. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -37
  176. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  177. zrb-1.0.0a21/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
  178. zrb-1.0.0a21/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
  179. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/factory.py +0 -9
  180. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app.py +0 -20
  181. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -134
  182. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_usecase.py +0 -245
  183. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -8
  184. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -30
  185. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/any_client.py +0 -33
  186. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/api_client.py +0 -7
  187. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/direct_client.py +0 -6
  188. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/factory.py +0 -9
  189. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_user_table.py +0 -37
  190. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -6
  191. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -45
  192. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -42
  193. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_usecase.py +0 -53
  194. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_usecase_factory.py +0 -6
  195. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -37
  196. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -44
  197. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -39
  198. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -39
  199. zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -39
  200. zrb-1.0.0a21/src/zrb/runner/web_app.py +0 -321
  201. zrb-1.0.0a21/src/zrb/runner/web_config.py +0 -274
  202. zrb-1.0.0a21/src/zrb/runner/web_controller/home_page/controller.py +0 -33
  203. zrb-1.0.0a21/src/zrb/runner/web_controller/login_page/controller.py +0 -25
  204. zrb-1.0.0a21/src/zrb/runner/web_controller/logout_page/controller.py +0 -26
  205. zrb-1.0.0a21/src/zrb/task/llm_task.py +0 -218
  206. {zrb-1.0.0a21 → zrb-1.0.0b5}/README.md +0 -0
  207. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/attr/__init__.py +0 -0
  208. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/attr/type.py +0 -0
  209. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/base64.py +0 -0
  210. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/git.py +0 -0
  211. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/git_subtree.py +0 -0
  212. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/md5.py +0 -0
  213. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/__init__.py +0 -0
  214. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  215. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  216. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  217. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  218. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  219. /zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/create_column_task.py → /zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  220. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  221. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  222. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  223. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  224. {zrb-1.0.0a21 → zrb-1.0.0b5}/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
  225. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  226. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  227. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  228. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  229. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  230. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  231. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/migrate.py +0 -0
  232. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  233. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  234. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  235. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  236. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  237. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  238. {zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user → zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission}/__init__.py +0 -0
  239. {zrb-1.0.0a21/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema → zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role}/__init__.py +0 -0
  240. {zrb-1.0.0a21/src/zrb/builtin/project/create → zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user}/__init__.py +0 -0
  241. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  242. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  243. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  244. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  245. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  246. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  247. {zrb-1.0.0a21/src/zrb/builtin/shell → zrb-1.0.0b5/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema}/__init__.py +0 -0
  248. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  249. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  250. {zrb-1.0.0a21/src/zrb/builtin/shell/autocomplete → zrb-1.0.0b5/src/zrb/builtin/project/create}/__init__.py +0 -0
  251. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  252. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  253. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/project/create/project_task.py +0 -0
  254. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  255. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  256. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/setup/common_input.py +0 -0
  257. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  258. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  259. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  260. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  261. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/setup/ubuntu.py +0 -0
  262. {zrb-1.0.0a21/src/zrb/callback → zrb-1.0.0b5/src/zrb/builtin/shell}/__init__.py +0 -0
  263. {zrb-1.0.0a21/src/zrb/cmd → zrb-1.0.0b5/src/zrb/builtin/shell/autocomplete}/__init__.py +0 -0
  264. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  265. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  266. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  267. {zrb-1.0.0a21/src/zrb/content_transformer → zrb-1.0.0b5/src/zrb/callback}/__init__.py +0 -0
  268. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/callback/any_callback.py +0 -0
  269. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/callback/callback.py +0 -0
  270. {zrb-1.0.0a21/src/zrb/context → zrb-1.0.0b5/src/zrb/cmd}/__init__.py +0 -0
  271. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/cmd/cmd_result.py +0 -0
  272. {zrb-1.0.0a21/src/zrb/dot_dict → zrb-1.0.0b5/src/zrb/content_transformer}/__init__.py +0 -0
  273. {zrb-1.0.0a21/src/zrb/env → zrb-1.0.0b5/src/zrb/context}/__init__.py +0 -0
  274. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/context/any_context.py +0 -0
  275. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/context/any_shared_context.py +0 -0
  276. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/context/context.py +0 -0
  277. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/context/shared_context.py +0 -0
  278. {zrb-1.0.0a21/src/zrb/group → zrb-1.0.0b5/src/zrb/dot_dict}/__init__.py +0 -0
  279. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/dot_dict/dot_dict.py +0 -0
  280. {zrb-1.0.0a21/src/zrb/input → zrb-1.0.0b5/src/zrb/env}/__init__.py +0 -0
  281. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/env/any_env.py +0 -0
  282. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/env/env.py +0 -0
  283. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/env/env_file.py +0 -0
  284. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/env/env_map.py +0 -0
  285. {zrb-1.0.0a21/src/zrb/runner → zrb-1.0.0b5/src/zrb/group}/__init__.py +0 -0
  286. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/group/any_group.py +0 -0
  287. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/group/group.py +0 -0
  288. {zrb-1.0.0a21/src/zrb/runner/web_controller → zrb-1.0.0b5/src/zrb/input}/__init__.py +0 -0
  289. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/input/str_input.py +0 -0
  290. {zrb-1.0.0a21/src/zrb/runner/web_controller/group_info_page → zrb-1.0.0b5/src/zrb/runner}/__init__.py +0 -0
  291. {zrb-1.0.0a21/src/zrb/runner/web_controller/home_page → zrb-1.0.0b5/src/zrb/runner/web_route}/__init__.py +0 -0
  292. {zrb-1.0.0a21/src/zrb/runner/web_controller/session_page → zrb-1.0.0b5/src/zrb/runner/web_route/home_page}/__init__.py +0 -0
  293. {zrb-1.0.0a21/src/zrb/runner/web_controller → zrb-1.0.0b5/src/zrb/runner/web_route}/home_page/view.html +0 -0
  294. {zrb-1.0.0a21/src/zrb/runner/web_controller → zrb-1.0.0b5/src/zrb/runner/web_route}/login_page/view.html +0 -0
  295. {zrb-1.0.0a21/src/zrb/runner/web_controller → zrb-1.0.0b5/src/zrb/runner/web_route}/logout_page/view.html +0 -0
  296. {zrb-1.0.0a21/src/zrb/runner/web_controller/group_info_page → zrb-1.0.0b5/src/zrb/runner/web_route/node_page/group}/view.html +0 -0
  297. {zrb-1.0.0a21/src/zrb/runner/web_controller/session_page → zrb-1.0.0b5/src/zrb/runner/web_route/node_page/task}/partial/input.html +0 -0
  298. {zrb-1.0.0a21/src/zrb/runner → zrb-1.0.0b5/src/zrb/runner/web_route/static}/refresh-token.template.js +0 -0
  299. {zrb-1.0.0a21/src/zrb/runner/web_controller/static → zrb-1.0.0b5/src/zrb/runner/web_route/static/resources}/common.css +0 -0
  300. {zrb-1.0.0a21/src/zrb/runner/web_controller/static → zrb-1.0.0b5/src/zrb/runner/web_route/static/resources}/favicon-32x32.png +0 -0
  301. {zrb-1.0.0a21/src/zrb/runner/web_controller/static → zrb-1.0.0b5/src/zrb/runner/web_route/static/resources}/login/event.js +0 -0
  302. {zrb-1.0.0a21/src/zrb/runner/web_controller/static → zrb-1.0.0b5/src/zrb/runner/web_route/static/resources}/logout/event.js +0 -0
  303. {zrb-1.0.0a21/src/zrb/runner/web_controller/static → zrb-1.0.0b5/src/zrb/runner/web_route/static/resources}/pico.min.css +0 -0
  304. {zrb-1.0.0a21/src/zrb/runner/web_controller/static → zrb-1.0.0b5/src/zrb/runner/web_route/static/resources}/session/common-util.js +0 -0
  305. {zrb-1.0.0a21/src/zrb/runner/web_controller/static → zrb-1.0.0b5/src/zrb/runner/web_route/static/resources}/session/past-session.js +0 -0
  306. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/session/__init__.py +0 -0
  307. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/session/any_session.py +0 -0
  308. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/session_state_log/__init__.py +0 -0
  309. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/session_state_log/session_state_log.py +0 -0
  310. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/session_state_logger/__init__.py +0 -0
  311. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  312. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  313. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/__init__.py +0 -0
  314. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/any_task.py +0 -0
  315. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task/task.py +0 -0
  316. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/task_status/__init__.py +0 -0
  317. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/__init__.py +0 -0
  318. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/attr.py +0 -0
  319. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/cli/__init__.py +0 -0
  320. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/cli/style.py +0 -0
  321. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/cli/subcommand.py +0 -0
  322. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/cmd/__init__.py +0 -0
  323. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/cmd/remote.py +0 -0
  324. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/codemod/__init__.py +0 -0
  325. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/codemod/append_code_to_class.py +0 -0
  326. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/codemod/append_code_to_function.py +0 -0
  327. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/codemod/append_code_to_method.py +0 -0
  328. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/codemod/append_key_to_dict.py +0 -0
  329. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/codemod/append_param_to_function_call.py +0 -0
  330. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/codemod/prepend_code_to_module.py +0 -0
  331. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/codemod/prepend_parent_to_class.py +0 -0
  332. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/codemod/prepend_property_to_class.py +0 -0
  333. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/cron.py +0 -0
  334. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/git.py +0 -0
  335. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/git_subtree.py +0 -0
  336. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/group.py +0 -0
  337. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/load.py +0 -0
  338. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/run.py +0 -0
  339. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/string/__init__.py +0 -0
  340. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/string/conversion.py +0 -0
  341. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/string/format.py +0 -0
  342. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/string/name.py +0 -0
  343. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/util/todo.py +0 -0
  344. {zrb-1.0.0a21 → zrb-1.0.0b5}/src/zrb/xcom/__init__.py +0 -0
  345. {zrb-1.0.0a21 → zrb-1.0.0b5}/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.0a21
3
+ Version: 1.0.0b5
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -21,11 +21,12 @@ Requires-Dist: chromadb (>=0.5.20,<0.6.0) ; extra == "rag"
21
21
  Requires-Dist: fastapi[standard] (>=0.115.6,<0.116.0)
22
22
  Requires-Dist: isort (>=5.13.2,<5.14.0)
23
23
  Requires-Dist: libcst (>=1.5.0,<2.0.0)
24
- Requires-Dist: litellm (>=1.52.12,<2.0.0)
25
24
  Requires-Dist: pdfplumber (>=0.11.4,<0.12.0) ; extra == "rag"
25
+ Requires-Dist: pydantic-ai (>=0.0.19,<0.0.20)
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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.0.0a21"
3
+ version = "1.0.0b5"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -44,22 +44,25 @@ black = "~24.10.0"
44
44
  isort = "~5.13.2"
45
45
  requests = "^2.32.3"
46
46
  libcst = "^1.5.0"
47
- litellm = "^1.52.12"
48
47
  chromadb = {version = "^0.5.20", optional = true}
49
48
  pdfplumber = {version = "^0.11.4", optional = true}
50
49
  beautifulsoup4 = "^4.12.3"
51
50
  fastapi = {extras = ["standard"], version = "^0.115.6"}
52
51
  python-jose = {extras = ["cryptography"], version = "^3.3.0"}
52
+ ulid-py = "^1.1.0"
53
+ pydantic-ai = "^0.0.19"
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")
@@ -0,0 +1,127 @@
1
+ import json
2
+ import os
3
+ from typing import Any
4
+
5
+ from zrb.builtin.group import llm_group
6
+ from zrb.builtin.llm.tool.api import get_current_location, get_current_weather
7
+ from zrb.builtin.llm.tool.cli import run_shell_command
8
+ from zrb.builtin.llm.tool.web import open_web_route, query_internet
9
+ from zrb.config import (
10
+ LLM_ALLOW_ACCESS_INTERNET,
11
+ LLM_ALLOW_ACCESS_SHELL,
12
+ LLM_HISTORY_DIR,
13
+ LLM_MODEL,
14
+ LLM_SYSTEM_PROMPT,
15
+ )
16
+ from zrb.context.any_shared_context import AnySharedContext
17
+ from zrb.input.bool_input import BoolInput
18
+ from zrb.input.str_input import StrInput
19
+ from zrb.input.text_input import TextInput
20
+ from zrb.task.llm_task import LLMTask
21
+ from zrb.util.file import read_file, write_file
22
+ from zrb.util.string.conversion import to_pascal_case
23
+
24
+
25
+ class PreviousSessionInput(StrInput):
26
+
27
+ def to_html(self, ctx: AnySharedContext) -> str:
28
+ name = self.name
29
+ description = self.description
30
+ default = self.get_default_str(ctx)
31
+ script = read_file(
32
+ file_path=os.path.join(os.path.dirname(__file__), "previous-session.js"),
33
+ replace_map={
34
+ "CURRENT_INPUT_NAME": name,
35
+ "CurrentPascalInputName": to_pascal_case(name),
36
+ },
37
+ )
38
+ return "\n".join(
39
+ [
40
+ f'<input name="{name}" placeholder="{description}" value="{default}" />',
41
+ f"<script>{script}</script>",
42
+ ]
43
+ )
44
+
45
+
46
+ def _read_chat_conversation(ctx: AnySharedContext) -> list[dict[str, Any]]:
47
+ if ctx.input.start_new:
48
+ return []
49
+ previous_session_name = ctx.input.previous_session
50
+ if previous_session_name == "" or previous_session_name is None:
51
+ last_session_file_path = os.path.join(LLM_HISTORY_DIR, "last-session")
52
+ if os.path.isfile(last_session_file_path):
53
+ previous_session_name = read_file(last_session_file_path).strip()
54
+ conversation_file_path = os.path.join(
55
+ LLM_HISTORY_DIR, f"{previous_session_name}.json"
56
+ )
57
+ if not os.path.isfile(conversation_file_path):
58
+ return []
59
+ return json.loads(read_file(conversation_file_path))
60
+
61
+
62
+ def _write_chat_conversation(
63
+ ctx: AnySharedContext, conversations: list[dict[str, Any]]
64
+ ):
65
+ os.makedirs(LLM_HISTORY_DIR, exist_ok=True)
66
+ current_session_name = ctx.session.name
67
+ conversation_file_path = os.path.join(
68
+ LLM_HISTORY_DIR, f"{current_session_name}.json"
69
+ )
70
+ write_file(conversation_file_path, json.dumps(conversations, indent=2))
71
+ last_session_file_path = os.path.join(LLM_HISTORY_DIR, "last-session")
72
+ write_file(last_session_file_path, current_session_name)
73
+
74
+
75
+ llm_chat: LLMTask = llm_group.add_task(
76
+ LLMTask(
77
+ name="llm-chat",
78
+ input=[
79
+ StrInput(
80
+ "model",
81
+ description="LLM Model",
82
+ prompt="LLM Model",
83
+ default_str=LLM_MODEL,
84
+ allow_positional_parsing=False,
85
+ ),
86
+ TextInput(
87
+ "system-prompt",
88
+ description="System prompt",
89
+ prompt="System prompt",
90
+ default_str=LLM_SYSTEM_PROMPT,
91
+ allow_positional_parsing=False,
92
+ ),
93
+ BoolInput(
94
+ "start-new",
95
+ description="Start new conversation (LLM will forget everything)",
96
+ prompt="Start new conversation (LLM will forget everything)",
97
+ default_str="false",
98
+ allow_positional_parsing=False,
99
+ ),
100
+ TextInput("message", description="User message", prompt="Your message"),
101
+ PreviousSessionInput(
102
+ "previous-session",
103
+ description="Previous conversation session",
104
+ prompt="Previous conversation session (can be empty)",
105
+ allow_positional_parsing=False,
106
+ allow_empty=True,
107
+ ),
108
+ ],
109
+ conversation_history_reader=_read_chat_conversation,
110
+ conversation_history_writer=_write_chat_conversation,
111
+ description="Chat with LLM",
112
+ model="{ctx.input.model}",
113
+ system_prompt="{ctx.input['system-prompt']}",
114
+ message="{ctx.input.message}",
115
+ retries=0,
116
+ ),
117
+ alias="chat",
118
+ )
119
+
120
+ if LLM_ALLOW_ACCESS_SHELL:
121
+ llm_chat.add_tool(run_shell_command)
122
+
123
+ if LLM_ALLOW_ACCESS_INTERNET:
124
+ llm_chat.add_tool(open_web_route)
125
+ llm_chat.add_tool(query_internet)
126
+ llm_chat.add_tool(get_current_location)
127
+ llm_chat.add_tool(get_current_weather)
@@ -0,0 +1,21 @@
1
+ async function updatePreviousSession(event) {
2
+ const currentInput = event.target;
3
+ if (currentInput.name === "CURRENT_INPUT_NAME") {
4
+ return
5
+ }
6
+ const previousSessionInput = submitTaskForm.querySelector('[name="CURRENT_INPUT_NAME"]');
7
+ if (previousSessionInput) {
8
+ const currentSessionName = cfg.SESSION_NAME
9
+ previousSessionInput.value = currentSessionName;
10
+ }
11
+ }
12
+
13
+ document.getElementById("submit-task-form").querySelectorAll("input[name], textarea[name]").forEach((element) => {
14
+ element.addEventListener("input", updatePreviousSession);
15
+ element.addEventListener("keyup", updatePreviousSession);
16
+ });
17
+
18
+ document.getElementById("submit-task-form").querySelectorAll("select[name]").forEach((element) => {
19
+ element.addEventListener("change", updatePreviousSession);
20
+ });
21
+
@@ -0,0 +1,29 @@
1
+ import json
2
+ from typing import Annotated, Literal
3
+
4
+ import requests
5
+
6
+
7
+ def get_current_location() -> (
8
+ Annotated[str, "JSON string representing latitude and longitude"]
9
+ ): # noqa
10
+ """Get the user's current location."""
11
+ return json.dumps(requests.get("http://ip-api.com/json?fields=lat,lon").json())
12
+
13
+
14
+ def get_current_weather(
15
+ latitude: float,
16
+ longitude: float,
17
+ temperature_unit: Literal["celsius", "fahrenheit"],
18
+ ) -> str:
19
+ """Get the current weather in a given location."""
20
+ resp = requests.get(
21
+ "https://api.open-meteo.com/v1/forecast",
22
+ params={
23
+ "latitude": latitude,
24
+ "longitude": longitude,
25
+ "temperature_unit": temperature_unit,
26
+ "current_weather": True,
27
+ },
28
+ )
29
+ return json.dumps(resp.json())
@@ -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
  ),