zrb 1.0.0a10__tar.gz → 1.0.0a12__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 (207) hide show
  1. {zrb-1.0.0a10 → zrb-1.0.0a12}/PKG-INFO +1 -2
  2. {zrb-1.0.0a10 → zrb-1.0.0a12}/pyproject.toml +1 -1
  3. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/__init__.py +15 -5
  4. {zrb-1.0.0a10/src/zrb/builtin/setup/dev → zrb-1.0.0a12/src/zrb/builtin/setup/asdf}/asdf.py +6 -6
  5. {zrb-1.0.0a10/src/zrb/builtin/setup/system → zrb-1.0.0a12/src/zrb/builtin/setup}/latex/ubuntu.py +1 -1
  6. {zrb-1.0.0a10/src/zrb/builtin/setup/dev → zrb-1.0.0a12/src/zrb/builtin/setup/tmux}/tmux.py +1 -1
  7. zrb-1.0.0a12/src/zrb/builtin/setup/tmux/tmux_config.sh +12 -0
  8. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/todo.py +84 -15
  9. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/config.py +1 -0
  10. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/base_input.py +1 -1
  11. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/bool_input.py +1 -1
  12. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/float_input.py +1 -1
  13. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/int_input.py +1 -1
  14. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/option_input.py +1 -1
  15. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/password_input.py +1 -1
  16. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/text_input.py +1 -1
  17. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_app.py +27 -15
  18. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/load.py +4 -1
  19. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/todo.py +152 -34
  20. zrb-1.0.0a10/src/zrb/builtin/setup/dev/tmux_config.sh +0 -0
  21. {zrb-1.0.0a10 → zrb-1.0.0a12}/README.md +0 -0
  22. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/__init__.py +0 -0
  23. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/__main__.py +0 -0
  24. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/attr/__init__.py +0 -0
  25. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/attr/type.py +0 -0
  26. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/base64.py +0 -0
  27. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/git.py +0 -0
  28. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/git_subtree.py +0 -0
  29. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/group.py +0 -0
  30. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/llm/llm_chat.py +0 -0
  31. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/llm/tool/cli.py +0 -0
  32. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/llm/tool/rag.py +0 -0
  33. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/llm/tool/web.py +0 -0
  34. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/md5.py +0 -0
  35. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/__init__.py +0 -0
  36. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/__init__.py +0 -0
  37. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp.py +0 -0
  38. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/.gitignore +0 -0
  39. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/README.md +0 -0
  40. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/__init__.py +0 -0
  41. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/_zrb/config.py +0 -0
  42. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/_zrb/group.py +0 -0
  43. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/_zrb/helper.py +0 -0
  44. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/_zrb/main.py +0 -0
  45. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/_zrb/venv_task.py +0 -0
  46. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/__init__.py +0 -0
  47. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/app.py +0 -0
  48. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/db_engine.py +0 -0
  49. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/db_repository.py +0 -0
  50. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/error.py +0 -0
  51. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/schema.py +0 -0
  52. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/common/usecase.py +0 -0
  53. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/config.py +0 -0
  54. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/main.py +0 -0
  55. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/migrate.py +0 -0
  56. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/__init__.py +0 -0
  57. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/alembic.ini +0 -0
  58. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/client/api_client.py +0 -0
  59. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/client/base_client.py +0 -0
  60. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/client/direct_client.py +0 -0
  61. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/client/factory.py +0 -0
  62. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/migration/README +0 -0
  63. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/migration/env.py +0 -0
  64. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/migration/script.py.mako +0 -0
  65. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/migration/versions/3093c7336477_add_user_table.py +0 -0
  66. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/migration_metadata.py +0 -0
  67. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/route.py +0 -0
  68. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/__init__.py +0 -0
  69. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/__init__.py +0 -0
  70. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/repository/__init__.py +0 -0
  71. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/repository/db_repository.py +0 -0
  72. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/repository/factory.py +0 -0
  73. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/repository/repository.py +0 -0
  74. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/auth/service/user/usecase.py +0 -0
  75. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/alembic.ini +0 -0
  76. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/migration/README +0 -0
  77. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/migration/env.py +0 -0
  78. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/migration/script.py.mako +0 -0
  79. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/migration/versions/.gitkeep +0 -0
  80. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/migration_metadata.py +0 -0
  81. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/module/gateway/route.py +0 -0
  82. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/requirements.txt +0 -0
  83. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/schema/__init__.py +0 -0
  84. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/schema/role.py +0 -0
  85. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/schema/user.py +0 -0
  86. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/add/fastapp_template/template.env +0 -0
  87. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/create/__init__.py +0 -0
  88. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/create/create.py +0 -0
  89. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  90. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  91. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/python.py +0 -0
  92. {zrb-1.0.0a10/src/zrb/builtin/setup/dev → zrb-1.0.0a12/src/zrb/builtin/setup/asdf}/asdf_helper.py +0 -0
  93. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/setup/common_input.py +0 -0
  94. {zrb-1.0.0a10/src/zrb/builtin/setup/dev → zrb-1.0.0a12/src/zrb/builtin/setup/tmux}/tmux_helper.py +0 -0
  95. {zrb-1.0.0a10/src/zrb/builtin/setup/system → zrb-1.0.0a12/src/zrb/builtin/setup}/ubuntu.py +0 -0
  96. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/shell/__init__.py +0 -0
  97. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  98. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  99. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  100. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  101. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/callback/__init__.py +0 -0
  102. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/callback/any_callback.py +0 -0
  103. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/callback/callback.py +0 -0
  104. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/cmd/__init__.py +0 -0
  105. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/cmd/cmd_result.py +0 -0
  106. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/cmd/cmd_val.py +0 -0
  107. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/content_transformer/__init__.py +0 -0
  108. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  109. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/content_transformer/content_transformer.py +0 -0
  110. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/context/__init__.py +0 -0
  111. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/context/any_context.py +0 -0
  112. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/context/any_shared_context.py +0 -0
  113. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/context/context.py +0 -0
  114. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/context/shared_context.py +0 -0
  115. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/dot_dict/__init__.py +0 -0
  116. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/dot_dict/dot_dict.py +0 -0
  117. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/env/__init__.py +0 -0
  118. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/env/any_env.py +0 -0
  119. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/env/env.py +0 -0
  120. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/env/env_file.py +0 -0
  121. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/env/env_map.py +0 -0
  122. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/group/__init__.py +0 -0
  123. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/group/any_group.py +0 -0
  124. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/group/group.py +0 -0
  125. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/__init__.py +0 -0
  126. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/any_input.py +0 -0
  127. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/input/str_input.py +0 -0
  128. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/__init__.py +0 -0
  129. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/cli.py +0 -0
  130. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/__init__.py +0 -0
  131. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/__init__.py +0 -0
  132. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/controller.py +0 -0
  133. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/partial/group_info.html +0 -0
  134. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/partial/group_li.html +0 -0
  135. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/partial/task_info.html +0 -0
  136. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/partial/task_li.html +0 -0
  137. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/group_info_ui/view.html +0 -0
  138. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/__init__.py +0 -0
  139. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/controller.py +0 -0
  140. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/partial/group_info.html +0 -0
  141. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/partial/group_li.html +0 -0
  142. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/partial/task_info.html +0 -0
  143. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/partial/task_li.html +0 -0
  144. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/home_page/view.html +0 -0
  145. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/static/favicon-32x32.png +0 -0
  146. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/static/pico.min.css +0 -0
  147. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/__init__.py +0 -0
  148. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/controller.py +0 -0
  149. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/partial/common-util.js +0 -0
  150. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/partial/input.html +0 -0
  151. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/partial/main.js +0 -0
  152. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/partial/show-existing-session.js +0 -0
  153. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/partial/visualize-history.js +0 -0
  154. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_controller/task_ui/view.html +0 -0
  155. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/runner/web_util.py +0 -0
  156. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session/__init__.py +0 -0
  157. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session/any_session.py +0 -0
  158. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session/session.py +0 -0
  159. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_log/__init__.py +0 -0
  160. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_log/session_state_log.py +0 -0
  161. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_logger/__init__.py +0 -0
  162. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  163. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_logger/default_session_state_logger.py +0 -0
  164. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  165. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/__init__.py +0 -0
  166. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/any_task.py +0 -0
  167. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/base_task.py +0 -0
  168. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/base_trigger.py +0 -0
  169. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/cmd_task.py +0 -0
  170. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/http_check.py +0 -0
  171. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/llm_task.py +0 -0
  172. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/make_task.py +0 -0
  173. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/rsync_task.py +0 -0
  174. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/scaffolder.py +0 -0
  175. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/scheduler.py +0 -0
  176. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/task.py +0 -0
  177. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task/tcp_check.py +0 -0
  178. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task_status/__init__.py +0 -0
  179. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/task_status/task_status.py +0 -0
  180. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/__init__.py +0 -0
  181. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/attr.py +0 -0
  182. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cli/__init__.py +0 -0
  183. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cli/style.py +0 -0
  184. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cli/subcommand.py +0 -0
  185. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cmd/__init__.py +0 -0
  186. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cmd/command.py +0 -0
  187. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cmd/remote.py +0 -0
  188. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/__init__.py +0 -0
  189. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_code_to_class.py +0 -0
  190. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_code_to_function.py +0 -0
  191. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_code_to_method.py +0 -0
  192. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_key_to_dict.py +0 -0
  193. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_param_to_function_call.py +0 -0
  194. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_parent_to_class.py +0 -0
  195. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/codemod/add_property_to_class.py +0 -0
  196. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/cron.py +0 -0
  197. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/git.py +0 -0
  198. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/git_subtree.py +0 -0
  199. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/group.py +0 -0
  200. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/llm/tool.py +0 -0
  201. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/run.py +0 -0
  202. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/string/__init__.py +0 -0
  203. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/string/conversion.py +0 -0
  204. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/string/format.py +0 -0
  205. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/util/string/name.py +0 -0
  206. {zrb-1.0.0a10 → zrb-1.0.0a12}/src/zrb/xcom/__init__.py +0 -0
  207. {zrb-1.0.0a10 → zrb-1.0.0a12}/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.0a10
3
+ Version: 1.0.0a12
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -13,7 +13,6 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.10
14
14
  Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
- Classifier: Programming Language :: Python :: 3.13
17
16
  Provides-Extra: rag
18
17
  Requires-Dist: autopep8 (>=2.0.4,<3.0.0)
19
18
  Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.0.0a10"
3
+ version = "1.0.0a12"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -12,14 +12,22 @@ from zrb.builtin.md5 import hash_md5, sum_md5
12
12
  from zrb.builtin.project.add.fastapp import add_fastapp_to_project
13
13
  from zrb.builtin.project.create.create import create_project
14
14
  from zrb.builtin.python import format_python_code
15
- from zrb.builtin.setup.dev.asdf import setup_asdf
16
- from zrb.builtin.setup.dev.tmux import setup_tmux
17
- from zrb.builtin.setup.system.latex.ubuntu import setup_latex_on_ubuntu
18
- from zrb.builtin.setup.system.ubuntu import setup_ubuntu
15
+ from zrb.builtin.setup.asdf.asdf import setup_asdf
16
+ from zrb.builtin.setup.latex.ubuntu import setup_latex_on_ubuntu
17
+ from zrb.builtin.setup.tmux.tmux import setup_tmux
18
+ from zrb.builtin.setup.ubuntu import setup_ubuntu
19
19
  from zrb.builtin.shell.autocomplete.bash import make_bash_autocomplete
20
20
  from zrb.builtin.shell.autocomplete.subcmd import get_shell_subcommands
21
21
  from zrb.builtin.shell.autocomplete.zsh import make_zsh_autocomplete
22
- from zrb.builtin.todo import add_todo, complete_todo, edit_todo, list_todo, log_todo
22
+ from zrb.builtin.todo import (
23
+ add_todo,
24
+ archive_todo,
25
+ complete_todo,
26
+ edit_todo,
27
+ list_todo,
28
+ log_todo,
29
+ show_todo,
30
+ )
23
31
 
24
32
  assert create_project
25
33
  assert add_fastapp_to_project
@@ -42,9 +50,11 @@ assert git_pull_subtree
42
50
  assert git_push_subtree
43
51
  assert list_todo
44
52
  assert add_todo
53
+ assert archive_todo
45
54
  assert edit_todo
46
55
  assert complete_todo
47
56
  assert log_todo
57
+ assert show_todo
48
58
  assert setup_ubuntu
49
59
  assert setup_latex_on_ubuntu
50
60
  assert setup_asdf
@@ -1,6 +1,12 @@
1
1
  import os
2
2
 
3
3
  from zrb.builtin.group import setup_group
4
+ from zrb.builtin.setup.asdf.asdf_helper import (
5
+ check_inexist_asdf_dir,
6
+ get_install_prerequisites_cmd,
7
+ setup_asdf_ps_config,
8
+ setup_asdf_sh_config,
9
+ )
4
10
  from zrb.builtin.setup.common_input import (
5
11
  package_manager_input,
6
12
  setup_bash_input,
@@ -8,12 +14,6 @@ from zrb.builtin.setup.common_input import (
8
14
  setup_zsh_input,
9
15
  use_sudo_input,
10
16
  )
11
- from zrb.builtin.setup.dev.asdf_helper import (
12
- check_inexist_asdf_dir,
13
- get_install_prerequisites_cmd,
14
- setup_asdf_ps_config,
15
- setup_asdf_sh_config,
16
- )
17
17
  from zrb.context.any_context import AnyContext
18
18
  from zrb.task.cmd_task import CmdTask
19
19
  from zrb.task.make_task import make_task
@@ -1,5 +1,5 @@
1
1
  from zrb.builtin.group import setup_latex_group
2
- from zrb.builtin.setup.system.ubuntu import setup_ubuntu
2
+ from zrb.builtin.setup.ubuntu import setup_ubuntu
3
3
  from zrb.task.cmd_task import CmdTask
4
4
 
5
5
  setup_latex_on_ubuntu = setup_latex_group.add_task(
@@ -2,7 +2,7 @@ import os
2
2
 
3
3
  from zrb.builtin.group import setup_group
4
4
  from zrb.builtin.setup.common_input import package_manager_input, use_sudo_input
5
- from zrb.builtin.setup.dev.tmux_helper import get_install_tmux_cmd
5
+ from zrb.builtin.setup.tmux.tmux_helper import get_install_tmux_cmd
6
6
  from zrb.context.any_context import AnyContext
7
7
  from zrb.input.str_input import StrInput
8
8
  from zrb.task.cmd_task import CmdTask
@@ -0,0 +1,12 @@
1
+ set -g @plugin 'tmux-plugins/tpm'
2
+ set -g @plugin 'tmux-plugins/tmux-sensible'
3
+ run '~/.tmux/plugins/tpm/tpm'
4
+
5
+ set-option -sg escape-time 10
6
+ set-option -g focus-events On
7
+ set-option -g default-terminal "screen-256color"
8
+ set-option -sa terminal-overrides ',xterm-256color:RGB'
9
+
10
+ bind c new-window -c "#{pane_current_path}"
11
+ bind '"' split-window -c "#{pane_current_path}"
12
+ bind % split-window -h -c "#{pane_current_path}"
@@ -4,7 +4,7 @@ import os
4
4
  from typing import Any
5
5
 
6
6
  from zrb.builtin.group import todo_group
7
- from zrb.config import TODO_DIR
7
+ from zrb.config import TODO_DIR, TODO_VISUAL_FILTER
8
8
  from zrb.context.any_context import AnyContext
9
9
  from zrb.input.str_input import StrInput
10
10
  from zrb.input.text_input import TextInput
@@ -13,6 +13,7 @@ from zrb.util.todo import (
13
13
  TodoTaskModel,
14
14
  add_durations,
15
15
  cascade_todo_task,
16
+ get_visual_todo_card,
16
17
  get_visual_todo_list,
17
18
  line_to_todo_task,
18
19
  load_todo_list,
@@ -23,7 +24,7 @@ from zrb.util.todo import (
23
24
 
24
25
 
25
26
  @make_task(
26
- name="todo-add",
27
+ name="add-todo",
27
28
  input=[
28
29
  StrInput(
29
30
  name="description",
@@ -77,20 +78,52 @@ def add_todo(ctx: AnyContext):
77
78
  )
78
79
  )
79
80
  save_todo_list(todo_file_path, todo_list)
80
- return get_visual_todo_list(todo_list)
81
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
81
82
 
82
83
 
83
- @make_task(name="todo-list", description="📋 List todo", group=todo_group, alias="list")
84
+ @make_task(name="list-todo", description="📋 List todo", group=todo_group, alias="list")
84
85
  def list_todo(ctx: AnyContext):
85
86
  todo_file_path = os.path.join(TODO_DIR, "todo.txt")
86
- todo_tasks: list[TodoTaskModel] = []
87
+ todo_list: list[TodoTaskModel] = []
87
88
  if os.path.isfile(todo_file_path):
88
- todo_tasks = load_todo_list(todo_file_path)
89
- return get_visual_todo_list(todo_tasks)
89
+ todo_list = load_todo_list(todo_file_path)
90
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
90
91
 
91
92
 
92
93
  @make_task(
93
- name="todo-complete",
94
+ name="show-todo",
95
+ input=StrInput(name="keyword", prompt="Task keyword", description="Task Keyword"),
96
+ description="🔍 Show todo",
97
+ group=todo_group,
98
+ alias="show",
99
+ )
100
+ def show_todo(ctx: AnyContext):
101
+ todo_file_path = os.path.join(TODO_DIR, "todo.txt")
102
+ todo_list: list[TodoTaskModel] = []
103
+ todo_list: list[TodoTaskModel] = []
104
+ if os.path.isfile(todo_file_path):
105
+ todo_list = load_todo_list(todo_file_path)
106
+ # Get todo task
107
+ todo_task = select_todo_task(todo_list, ctx.input.keyword)
108
+ if todo_task is None:
109
+ ctx.log_error("Task not found")
110
+ return
111
+ if todo_task.completed:
112
+ ctx.log_error("Task already completed")
113
+ return
114
+ # Update todo task
115
+ todo_task = cascade_todo_task(todo_task)
116
+ task_id = todo_task.keyval.get("id", "")
117
+ log_work_path = os.path.join(TODO_DIR, "log-work", f"{task_id}.json")
118
+ log_work_list = []
119
+ if os.path.isfile(log_work_path):
120
+ with open(log_work_path, "r") as f:
121
+ log_work_list = json.loads(f.read())
122
+ return get_visual_todo_card(todo_task, log_work_list)
123
+
124
+
125
+ @make_task(
126
+ name="complete-todo",
94
127
  input=StrInput(name="keyword", prompt="Task keyword", description="Task Keyword"),
95
128
  description="✅ Complete todo",
96
129
  group=todo_group,
@@ -105,7 +138,10 @@ def complete_todo(ctx: AnyContext):
105
138
  todo_task = select_todo_task(todo_list, ctx.input.keyword)
106
139
  if todo_task is None:
107
140
  ctx.log_error("Task not found")
108
- return get_visual_todo_list(todo_list)
141
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
142
+ if todo_task.completed:
143
+ ctx.log_error("Task already completed")
144
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
109
145
  # Update todo task
110
146
  todo_task = cascade_todo_task(todo_task)
111
147
  if todo_task.creation_date is not None:
@@ -113,11 +149,43 @@ def complete_todo(ctx: AnyContext):
113
149
  todo_task.completed = True
114
150
  # Save todo list
115
151
  save_todo_list(todo_file_path, todo_list)
116
- return get_visual_todo_list(todo_list)
152
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
117
153
 
118
154
 
119
155
  @make_task(
120
- name="todo-log",
156
+ name="archive-todo",
157
+ description="📚 Archive todo",
158
+ group=todo_group,
159
+ alias="archive",
160
+ )
161
+ def archive_todo(ctx: AnyContext):
162
+ todo_file_path = os.path.join(TODO_DIR, "todo.txt")
163
+ todo_list: list[TodoTaskModel] = []
164
+ if os.path.isfile(todo_file_path):
165
+ todo_list = load_todo_list(todo_file_path)
166
+ working_todo_list = [
167
+ todo_task for todo_task in todo_list if not todo_task.completed
168
+ ]
169
+ new_archived_todo_list = [
170
+ todo_task for todo_task in todo_list if todo_task.completed
171
+ ]
172
+ if len(new_archived_todo_list) == 0:
173
+ ctx.print("No completed task to archive")
174
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
175
+ archive_file_path = os.path.join(TODO_DIR, "archive.txt")
176
+ if not os.path.isdir(TODO_DIR):
177
+ os.make_dirs(TODO_DIR, exist_ok=True)
178
+ archived_todo_list = []
179
+ if os.path.isfile(archive_file_path):
180
+ archived_todo_list = load_todo_list(archive_file_path)
181
+ archived_todo_list += new_archived_todo_list
182
+ save_todo_list(archive_file_path, archived_todo_list)
183
+ save_todo_list(todo_file_path, working_todo_list)
184
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
185
+
186
+
187
+ @make_task(
188
+ name="log-todo",
121
189
  input=[
122
190
  StrInput(name="keyword", prompt="Task keyword", description="Task Keyword"),
123
191
  StrInput(
@@ -151,7 +219,7 @@ def log_todo(ctx: AnyContext):
151
219
  todo_task = select_todo_task(todo_list, ctx.input.keyword)
152
220
  if todo_task is None:
153
221
  ctx.log_error("Task not found")
154
- return get_visual_todo_list(todo_list)
222
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
155
223
  # Update todo task
156
224
  todo_task = cascade_todo_task(todo_task)
157
225
  current_duration = todo_task.keyval.get("duration", "0")
@@ -175,7 +243,7 @@ def log_todo(ctx: AnyContext):
175
243
  )
176
244
  with open(log_work_file_path, "w") as f:
177
245
  f.write(json.dumps(log_work, indent=2))
178
- return get_visual_todo_list(todo_list)
246
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
179
247
 
180
248
 
181
249
  def _get_default_start() -> str:
@@ -183,7 +251,7 @@ def _get_default_start() -> str:
183
251
 
184
252
 
185
253
  @make_task(
186
- name="todo-edit",
254
+ name="edit-todo",
187
255
  input=[
188
256
  TextInput(
189
257
  name="text",
@@ -207,7 +275,7 @@ def edit_todo(ctx: AnyContext):
207
275
  with open(todo_file_path, "w") as f:
208
276
  f.write(new_content)
209
277
  todo_list = load_todo_list(todo_file_path)
210
- return get_visual_todo_list(todo_list)
278
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
211
279
 
212
280
 
213
281
  def _get_todo_txt_content() -> str:
@@ -216,3 +284,4 @@ def _get_todo_txt_content() -> str:
216
284
  return ""
217
285
  with open(todo_file_path, "r") as f:
218
286
  return f.read()
287
+ return f.read()
@@ -56,6 +56,7 @@ SESSION_LOG_DIR = os.getenv(
56
56
  "ZRB_SESSION_LOG_DIR", os.path.expanduser(os.path.join("~", ".zrb-session"))
57
57
  )
58
58
  TODO_DIR = os.getenv("ZRB_TODO_DIR", os.path.expanduser(os.path.join("~", "todo")))
59
+ TODO_VISUAL_FILTER = os.getenv("ZRB_TODO_FILTER", "")
59
60
  VERSION = metadata.version("zrb")
60
61
  WEB_HTTP_PORT = int(os.getenv("ZRB_WEB_HTTP_PORT", "21213"))
61
62
  LLM_MODEL = os.getenv("ZRB_LLM_MODEL", "ollama_chat/llama3.1")
@@ -14,7 +14,7 @@ class BaseInput(AnyInput):
14
14
  prompt: str | None = None,
15
15
  default_str: StrAttr = "",
16
16
  auto_render: bool = True,
17
- allow_empty: bool = True,
17
+ allow_empty: bool = False,
18
18
  ):
19
19
  self._name = name
20
20
  self._description = description
@@ -12,7 +12,7 @@ class BoolInput(BaseInput):
12
12
  prompt: str | None = None,
13
13
  default_str: StrAttr = "False",
14
14
  auto_render: bool = True,
15
- allow_empty: bool = True,
15
+ allow_empty: bool = False,
16
16
  ):
17
17
  super().__init__(
18
18
  name=name,
@@ -11,7 +11,7 @@ class FloatInput(BaseInput):
11
11
  prompt: str | None = None,
12
12
  default_str: StrAttr = "0.0",
13
13
  auto_render: bool = True,
14
- allow_empty: bool = True,
14
+ allow_empty: bool = False,
15
15
  ):
16
16
  super().__init__(
17
17
  name=name,
@@ -11,7 +11,7 @@ class IntInput(BaseInput):
11
11
  prompt: str | None = None,
12
12
  default_str: StrAttr = "0",
13
13
  auto_render: bool = True,
14
- allow_empty: bool = True,
14
+ allow_empty: bool = False,
15
15
  ):
16
16
  super().__init__(
17
17
  name=name,
@@ -13,7 +13,7 @@ class OptionInput(BaseInput):
13
13
  options: StrListAttr = [],
14
14
  default_str: StrAttr = "",
15
15
  auto_render: bool = True,
16
- allow_empty: bool = True,
16
+ allow_empty: bool = False,
17
17
  ):
18
18
  super().__init__(
19
19
  name=name,
@@ -13,7 +13,7 @@ class PasswordInput(BaseInput):
13
13
  prompt: str | None = None,
14
14
  default_str: str | Callable[[AnySharedContext], str] = "",
15
15
  auto_render: bool = True,
16
- allow_empty: bool = True,
16
+ allow_empty: bool = False,
17
17
  ):
18
18
  super().__init__(
19
19
  name=name,
@@ -16,7 +16,7 @@ class TextInput(BaseInput):
16
16
  prompt: str | None = None,
17
17
  default_str: str | Callable[[AnySharedContext], str] = "",
18
18
  auto_render: bool = True,
19
- allow_empty: bool = True,
19
+ allow_empty: bool = False,
20
20
  editor: str = DEFAULT_EDITOR,
21
21
  extension: str = ".txt",
22
22
  comment_start: str | None = None,
@@ -2,7 +2,7 @@ import asyncio
2
2
  import os
3
3
  import sys
4
4
  from datetime import datetime, timedelta
5
- from typing import Any, Dict, List
5
+ from typing import Any
6
6
 
7
7
  from zrb.config import BANNER, WEB_HTTP_PORT
8
8
  from zrb.context.shared_context import SharedContext
@@ -23,7 +23,7 @@ from zrb.util.group import extract_node_from_args, get_node_path
23
23
  def create_app(root_group: AnyGroup, port: int = WEB_HTTP_PORT):
24
24
  from contextlib import asynccontextmanager
25
25
 
26
- from fastapi import FastAPI, HTTPException, Request
26
+ from fastapi import FastAPI, HTTPException, Query, Request
27
27
  from fastapi.responses import FileResponse, HTMLResponse
28
28
  from fastapi.staticfiles import StaticFiles
29
29
 
@@ -97,7 +97,13 @@ def create_app(root_group: AnyGroup, port: int = WEB_HTTP_PORT):
97
97
  raise HTTPException(status_code=404, detail="Not Found")
98
98
 
99
99
  @app.get("/api/{path:path}", response_model=SessionStateLog | SessionStateLogList)
100
- async def get_session(path: str, query_params: Dict[str, Any] = {}):
100
+ async def get_session(
101
+ path: str,
102
+ min_start_query: str = Query(default=None, alias="from"),
103
+ max_start_query: str = Query(default=None, alias="to"),
104
+ page: int = Query(default=0, alias="page"),
105
+ limit: int = Query(default=10, alias="limit"),
106
+ ):
101
107
  """
102
108
  Getting existing session or sessions
103
109
  """
@@ -106,24 +112,30 @@ def create_app(root_group: AnyGroup, port: int = WEB_HTTP_PORT):
106
112
  if isinstance(node, AnyTask) and residual_args:
107
113
  if residual_args[0] == "list":
108
114
  task_path = get_node_path(root_group, node)
109
- return list_sessions(task_path, query_params)
115
+ max_start_time = (
116
+ datetime.now()
117
+ if max_start_query is None
118
+ else datetime.strptime(max_start_query, "%Y-%m-%d %H:%M:%S")
119
+ )
120
+ min_start_time = (
121
+ max_start_time - timedelta(hours=1)
122
+ if min_start_query is None
123
+ else datetime.strptime(min_start_query, "%Y-%m-%d %H:%M:%S")
124
+ )
125
+ return list_sessions(
126
+ task_path, min_start_time, max_start_time, page, limit
127
+ )
110
128
  else:
111
129
  return read_session(residual_args[0])
112
130
  raise HTTPException(status_code=404, detail="Not Found")
113
131
 
114
132
  def list_sessions(
115
- task_path: List[str], query_params: Dict[str, Any]
133
+ task_path: list[str],
134
+ min_start_time: datetime,
135
+ max_start_time: datetime,
136
+ page: int,
137
+ limit: int,
116
138
  ) -> SessionStateLogList:
117
- max_start_time = datetime.now()
118
- if "to" in query_params:
119
- max_start_time = datetime.strptime(query_params["to"], "%Y-%m-%d %H:%M:%S")
120
- min_start_time = max_start_time - timedelta(hours=1)
121
- if "from" in query_params:
122
- min_start_time = datetime.strptime(
123
- query_params["from"], "%Y-%m-%d %H:%M:%S"
124
- )
125
- page = int(query_params.get("page", 0))
126
- limit = int(query_params.get("limit", 10))
127
139
  try:
128
140
  return default_session_state_logger.list(
129
141
  task_path,
@@ -3,6 +3,7 @@ import importlib.util
3
3
  import os
4
4
  import re
5
5
  import sys
6
+ from functools import lru_cache
6
7
  from typing import Any
7
8
 
8
9
  pattern = re.compile("[^a-zA-Z0-9]")
@@ -13,7 +14,7 @@ def load_zrb_init(dir_path: str | None = None):
13
14
  dir_path = os.getcwd()
14
15
  script_path = os.path.join(dir_path, "zrb_init.py")
15
16
  if os.path.isfile(script_path):
16
- load_file(script_path)
17
+ load_file(script_path, -1)
17
18
  return
18
19
  new_dir_path = os.path.dirname(dir_path)
19
20
  if new_dir_path == dir_path:
@@ -21,6 +22,7 @@ def load_zrb_init(dir_path: str | None = None):
21
22
  load_zrb_init(new_dir_path)
22
23
 
23
24
 
25
+ @lru_cache()
24
26
  def load_file(script_path: str, sys_path_index: int = 0):
25
27
  if not os.path.isfile(script_path):
26
28
  return
@@ -45,6 +47,7 @@ def _get_new_python_path(dir_path: str) -> str:
45
47
  return ":".join([current_python_path, dir_path])
46
48
 
47
49
 
50
+ @lru_cache()
48
51
  def load_module(module_name: str) -> Any:
49
52
  module = importlib.import_module(module_name)
50
53
  return module