zrb 1.0.0b6__tar.gz → 1.0.0b8__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 (312) hide show
  1. {zrb-1.0.0b6 → zrb-1.0.0b8}/PKG-INFO +1 -1
  2. {zrb-1.0.0b6 → zrb-1.0.0b8}/pyproject.toml +1 -1
  3. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/__init__.py +2 -0
  4. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/git.py +15 -15
  5. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/git_subtree.py +6 -6
  6. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +3 -3
  7. zrb-1.0.0b8/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +93 -0
  8. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +3 -3
  9. {zrb-1.0.0b6 → zrb-1.0.0b8}/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 +11 -13
  10. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +3 -3
  11. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +11 -13
  12. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +20 -18
  13. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +24 -14
  14. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/setup/tmux/tmux.py +1 -1
  15. zrb-1.0.0b8/src/zrb/builtin/setup/zsh/zsh.py +55 -0
  16. zrb-1.0.0b8/src/zrb/builtin/setup/zsh/zsh_config.sh +133 -0
  17. zrb-1.0.0b8/src/zrb/builtin/setup/zsh/zsh_helper.py +13 -0
  18. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/config.py +0 -1
  19. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/context/any_context.py +2 -0
  20. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/context/context.py +7 -5
  21. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/resources/session/current-session.js +19 -12
  22. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/cmd_task.py +11 -1
  23. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/rsync_task.py +6 -4
  24. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/cmd/command.py +27 -5
  25. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/git.py +18 -18
  26. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/git_subtree.py +6 -6
  27. zrb-1.0.0b6/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -14
  28. {zrb-1.0.0b6 → zrb-1.0.0b8}/README.md +0 -0
  29. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/__init__.py +0 -0
  30. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/__main__.py +0 -0
  31. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/attr/__init__.py +0 -0
  32. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/attr/type.py +0 -0
  33. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/base64.py +0 -0
  34. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/group.py +0 -0
  35. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/llm/llm_chat.py +0 -0
  36. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/llm/previous-session.js +0 -0
  37. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/llm/tool/api.py +0 -0
  38. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/llm/tool/cli.py +0 -0
  39. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/llm/tool/rag.py +0 -0
  40. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/llm/tool/web.py +0 -0
  41. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/md5.py +0 -0
  42. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/__init__.py +0 -0
  43. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  44. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  45. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  46. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  47. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  48. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  49. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  50. {zrb-1.0.0b6 → zrb-1.0.0b8}/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 +0 -0
  51. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_db_repository.py +0 -0
  52. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository.py +0 -0
  53. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository_factory.py +0 -0
  54. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  55. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  56. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  57. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  58. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  59. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  60. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  61. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  62. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  63. {zrb-1.0.0b6 → zrb-1.0.0b8}/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 +0 -0
  64. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client.py +0 -0
  65. {zrb-1.0.0b6 → zrb-1.0.0b8}/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 +0 -0
  66. {zrb-1.0.0b6 → zrb-1.0.0b8}/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 +0 -0
  67. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  68. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  69. {zrb-1.0.0b6 → zrb-1.0.0b8}/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
  70. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  71. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  72. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  73. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  74. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  75. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  76. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  77. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  78. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  79. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  80. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  81. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  82. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  83. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  84. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  85. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  86. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  87. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  88. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  89. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  90. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  91. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  92. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  93. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/migrate.py +0 -0
  94. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  95. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  96. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  97. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  98. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  99. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  100. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  101. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  102. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  103. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  104. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  105. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  106. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  107. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  108. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  109. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  110. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  111. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  112. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  113. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
  114. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
  115. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  116. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  117. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  118. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  119. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  120. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  121. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  122. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  123. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  124. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  125. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  126. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  127. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  128. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  129. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  130. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  131. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  132. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  133. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  134. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  135. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  136. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  137. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  138. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  139. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  140. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  141. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  142. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  143. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  144. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  145. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  146. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  147. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  148. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  149. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  150. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  151. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  152. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  153. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  154. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  155. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  156. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  157. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  158. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  159. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  160. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  161. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/session.py +0 -0
  162. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  163. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  164. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  165. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/create/__init__.py +0 -0
  166. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  167. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  168. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/project/create/project_task.py +0 -0
  169. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/python.py +0 -0
  170. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/random.py +0 -0
  171. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  172. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  173. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/setup/common_input.py +0 -0
  174. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  175. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  176. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  177. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/setup/ubuntu.py +0 -0
  178. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/shell/__init__.py +0 -0
  179. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  180. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  181. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  182. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  183. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/builtin/todo.py +0 -0
  184. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/callback/__init__.py +0 -0
  185. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/callback/any_callback.py +0 -0
  186. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/callback/callback.py +0 -0
  187. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/cmd/__init__.py +0 -0
  188. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/cmd/cmd_result.py +0 -0
  189. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/cmd/cmd_val.py +0 -0
  190. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/content_transformer/__init__.py +0 -0
  191. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  192. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/content_transformer/content_transformer.py +0 -0
  193. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/context/__init__.py +0 -0
  194. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/context/any_shared_context.py +0 -0
  195. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/context/shared_context.py +0 -0
  196. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/dot_dict/__init__.py +0 -0
  197. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/dot_dict/dot_dict.py +0 -0
  198. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/env/__init__.py +0 -0
  199. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/env/any_env.py +0 -0
  200. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/env/env.py +0 -0
  201. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/env/env_file.py +0 -0
  202. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/env/env_map.py +0 -0
  203. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/group/__init__.py +0 -0
  204. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/group/any_group.py +0 -0
  205. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/group/group.py +0 -0
  206. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/input/__init__.py +0 -0
  207. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/input/any_input.py +0 -0
  208. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/input/base_input.py +0 -0
  209. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/input/bool_input.py +0 -0
  210. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/input/float_input.py +0 -0
  211. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/input/int_input.py +0 -0
  212. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/input/option_input.py +0 -0
  213. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/input/password_input.py +0 -0
  214. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/input/str_input.py +0 -0
  215. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/input/text_input.py +0 -0
  216. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/__init__.py +0 -0
  217. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/cli.py +0 -0
  218. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/common_util.py +0 -0
  219. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_app.py +0 -0
  220. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_config/config.py +0 -0
  221. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_config/config_factory.py +0 -0
  222. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/__init__.py +0 -0
  223. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/docs_route.py +0 -0
  224. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  225. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  226. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/error_page/view.html +0 -0
  227. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  228. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  229. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/home_page/view.html +0 -0
  230. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/login_api_route.py +0 -0
  231. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  232. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/login_page/view.html +0 -0
  233. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  234. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  235. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  236. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  237. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  238. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  239. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  240. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  241. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  242. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  243. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  244. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  245. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  246. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  247. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  248. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/resources/pico.min.css +0 -0
  249. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  250. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  251. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  252. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/static/static_route.py +0 -0
  253. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
  254. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  255. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_schema/session.py +0 -0
  256. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_schema/token.py +0 -0
  257. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_schema/user.py +0 -0
  258. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_util/cookie.py +0 -0
  259. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_util/html.py +0 -0
  260. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_util/token.py +0 -0
  261. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/runner/web_util/user.py +0 -0
  262. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/session/__init__.py +0 -0
  263. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/session/any_session.py +0 -0
  264. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/session/session.py +0 -0
  265. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/session_state_log/__init__.py +0 -0
  266. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/session_state_log/session_state_log.py +0 -0
  267. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/session_state_logger/__init__.py +0 -0
  268. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  269. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  270. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  271. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/__init__.py +0 -0
  272. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/any_task.py +0 -0
  273. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/base_task.py +0 -0
  274. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/base_trigger.py +0 -0
  275. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/http_check.py +0 -0
  276. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/llm_task.py +0 -0
  277. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/make_task.py +0 -0
  278. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/scaffolder.py +0 -0
  279. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/scheduler.py +0 -0
  280. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/task.py +0 -0
  281. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task/tcp_check.py +0 -0
  282. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task_status/__init__.py +0 -0
  283. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/task_status/task_status.py +0 -0
  284. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/__init__.py +0 -0
  285. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/attr.py +0 -0
  286. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/cli/__init__.py +0 -0
  287. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/cli/style.py +0 -0
  288. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/cli/subcommand.py +0 -0
  289. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/cmd/__init__.py +0 -0
  290. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/cmd/remote.py +0 -0
  291. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/codemod/__init__.py +0 -0
  292. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/codemod/append_code_to_class.py +0 -0
  293. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/codemod/append_code_to_function.py +0 -0
  294. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/codemod/append_code_to_method.py +0 -0
  295. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/codemod/append_key_to_dict.py +0 -0
  296. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/codemod/append_param_to_function_call.py +0 -0
  297. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/codemod/prepend_code_to_module.py +0 -0
  298. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/codemod/prepend_parent_to_class.py +0 -0
  299. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/codemod/prepend_property_to_class.py +0 -0
  300. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/cron.py +0 -0
  301. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/file.py +0 -0
  302. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/group.py +0 -0
  303. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/llm/tool.py +0 -0
  304. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/load.py +0 -0
  305. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/run.py +0 -0
  306. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/string/__init__.py +0 -0
  307. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/string/conversion.py +0 -0
  308. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/string/format.py +0 -0
  309. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/string/name.py +0 -0
  310. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/util/todo.py +0 -0
  311. {zrb-1.0.0b6 → zrb-1.0.0b8}/src/zrb/xcom/__init__.py +0 -0
  312. {zrb-1.0.0b6 → zrb-1.0.0b8}/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.0b6
3
+ Version: 1.0.0b8
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.0.0b6"
3
+ version = "1.0.0b8"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -17,6 +17,7 @@ from zrb.builtin.setup.asdf.asdf import setup_asdf
17
17
  from zrb.builtin.setup.latex.ubuntu import setup_latex_on_ubuntu
18
18
  from zrb.builtin.setup.tmux.tmux import setup_tmux
19
19
  from zrb.builtin.setup.ubuntu import setup_ubuntu
20
+ from zrb.builtin.setup.zsh.zsh import setup_zsh
20
21
  from zrb.builtin.shell.autocomplete.bash import make_bash_autocomplete
21
22
  from zrb.builtin.shell.autocomplete.subcmd import get_shell_subcommands
22
23
  from zrb.builtin.shell.autocomplete.zsh import make_zsh_autocomplete
@@ -62,3 +63,4 @@ assert setup_ubuntu
62
63
  assert setup_latex_on_ubuntu
63
64
  assert setup_asdf
64
65
  assert setup_tmux
66
+ assert setup_zsh
@@ -57,9 +57,9 @@ from zrb.util.git import (
57
57
  )
58
58
  async def get_git_diff(ctx: AnyContext):
59
59
  ctx.print(stylize_faint("Get directory"))
60
- repo_dir = await get_repo_dir(log_method=ctx.print)
60
+ repo_dir = await get_repo_dir(print_method=ctx.print)
61
61
  diff = await get_diff(
62
- repo_dir, ctx.input.source, ctx.input.current, log_method=ctx.print
62
+ repo_dir, ctx.input.source, ctx.input.current, print_method=ctx.print
63
63
  )
64
64
  result = []
65
65
  decorated = []
@@ -88,17 +88,17 @@ async def get_git_diff(ctx: AnyContext):
88
88
  )
89
89
  async def prune_local_branches(ctx: AnyContext):
90
90
  ctx.print(stylize_faint("Get directory"))
91
- repo_dir = await get_repo_dir(log_method=ctx.print)
91
+ repo_dir = await get_repo_dir(print_method=ctx.print)
92
92
  ctx.print(stylize_faint("Get existing branches"))
93
- branches = await get_branches(repo_dir, log_method=ctx.print)
93
+ branches = await get_branches(repo_dir, print_method=ctx.print)
94
94
  ctx.print(stylize_faint("Get current branch"))
95
- current_branch = await get_current_branch(repo_dir, log_method=ctx.print)
95
+ current_branch = await get_current_branch(repo_dir, print_method=ctx.print)
96
96
  for branch in branches:
97
97
  if branch == current_branch or branch == "main" or branch == "master":
98
98
  continue
99
99
  ctx.print(stylize_faint(f"Removing local branch: {branch}"))
100
100
  try:
101
- await delete_branch(repo_dir, branch, log_method=ctx.print)
101
+ await delete_branch(repo_dir, branch, print_method=ctx.print)
102
102
  except Exception as e:
103
103
  ctx.log_error(e)
104
104
 
@@ -117,11 +117,11 @@ async def prune_local_branches(ctx: AnyContext):
117
117
  )
118
118
  async def git_commit(ctx: AnyContext):
119
119
  ctx.print(stylize_faint("Get directory"))
120
- repo_dir = await get_repo_dir(log_method=ctx.print)
120
+ repo_dir = await get_repo_dir(print_method=ctx.print)
121
121
  ctx.print(stylize_faint("Add changes to staging"))
122
- await add(repo_dir, log_method=ctx.print)
122
+ await add(repo_dir, print_method=ctx.print)
123
123
  ctx.print(stylize_faint("Commit changes"))
124
- await commit(repo_dir, ctx.input.message, log_method=ctx.print)
124
+ await commit(repo_dir, ctx.input.message, print_method=ctx.print)
125
125
 
126
126
 
127
127
  @make_task(
@@ -139,12 +139,12 @@ async def git_commit(ctx: AnyContext):
139
139
  )
140
140
  async def git_pull(ctx: AnyContext):
141
141
  ctx.print(stylize_faint("Get directory"))
142
- repo_dir = await get_repo_dir(log_method=ctx.print)
142
+ repo_dir = await get_repo_dir(print_method=ctx.print)
143
143
  ctx.print(stylize_faint("Get current branch"))
144
- current_branch = await get_current_branch(repo_dir, log_method=ctx.print)
144
+ current_branch = await get_current_branch(repo_dir, print_method=ctx.print)
145
145
  remote = ctx.input.remote
146
146
  ctx.print(stylize_faint(f"Pulling from {remote}/{current_branch}"))
147
- await pull(repo_dir, remote, current_branch, log_method=ctx.print)
147
+ await pull(repo_dir, remote, current_branch, print_method=ctx.print)
148
148
 
149
149
 
150
150
  @make_task(
@@ -161,9 +161,9 @@ async def git_pull(ctx: AnyContext):
161
161
  alias="push",
162
162
  )
163
163
  async def git_push(ctx: AnyContext):
164
- repo_dir = await get_repo_dir(log_method=ctx.print)
164
+ repo_dir = await get_repo_dir(print_method=ctx.print)
165
165
  ctx.print(stylize_faint("Get current branch"))
166
- current_branch = await get_current_branch(repo_dir, log_method=ctx.print)
166
+ current_branch = await get_current_branch(repo_dir, print_method=ctx.print)
167
167
  remote = ctx.input.remote
168
168
  ctx.print(stylize_faint(f"Pushing to {remote}/{current_branch}"))
169
- await push(repo_dir, remote, current_branch, log_method=ctx.print)
169
+ await push(repo_dir, remote, current_branch, print_method=ctx.print)
@@ -35,7 +35,7 @@ from zrb.util.git_subtree import add_subtree, load_config, pull_subtree, push_su
35
35
  )
36
36
  async def git_add_subtree(ctx: AnyContext):
37
37
  ctx.print(stylize_faint("Get directory"))
38
- repo_dir = await get_repo_dir(log_method=ctx.print)
38
+ repo_dir = await get_repo_dir(print_method=ctx.print)
39
39
  ctx.print(stylize_faint("Add subtree"))
40
40
  await add_subtree(
41
41
  repo_dir=repo_dir,
@@ -43,7 +43,7 @@ async def git_add_subtree(ctx: AnyContext):
43
43
  repo_url=ctx.input["repo-url"],
44
44
  branch=ctx.input["repo-branch"],
45
45
  prefix=ctx.input["repo-prefix"],
46
- log_method=ctx.print,
46
+ print_method=ctx.print,
47
47
  )
48
48
 
49
49
 
@@ -56,7 +56,7 @@ async def git_add_subtree(ctx: AnyContext):
56
56
  )
57
57
  async def git_pull_subtree(ctx: AnyContext):
58
58
  ctx.print(stylize_faint("Get directory"))
59
- repo_dir = await get_repo_dir(log_method=ctx.print)
59
+ repo_dir = await get_repo_dir(print_method=ctx.print)
60
60
  config = load_config(repo_dir)
61
61
  if not config.data:
62
62
  raise ValueError("No subtree config found")
@@ -69,7 +69,7 @@ async def git_pull_subtree(ctx: AnyContext):
69
69
  prefix=detail.prefix,
70
70
  repo_url=detail.repo_url,
71
71
  branch=detail.branch,
72
- log_method=ctx.print,
72
+ print_method=ctx.print,
73
73
  )
74
74
  except Exception as e:
75
75
  if first_err is None:
@@ -88,7 +88,7 @@ async def git_pull_subtree(ctx: AnyContext):
88
88
  )
89
89
  async def git_push_subtree(ctx: AnyContext):
90
90
  ctx.print(stylize_faint("Get directory"))
91
- repo_dir = await get_repo_dir(log_method=ctx.print)
91
+ repo_dir = await get_repo_dir(print_method=ctx.print)
92
92
  config = load_config(repo_dir)
93
93
  if not config.data:
94
94
  raise ValueError("No subtree config found")
@@ -101,7 +101,7 @@ async def git_push_subtree(ctx: AnyContext):
101
101
  prefix=detail.prefix,
102
102
  repo_url=detail.repo_url,
103
103
  branch=detail.branch,
104
- log_method=ctx.print,
104
+ print_method=ctx.print,
105
105
  )
106
106
  except Exception as e:
107
107
  if first_err is None:
@@ -20,11 +20,11 @@ from zrb.util.string.name import get_random_name
20
20
 
21
21
 
22
22
  @make_task(
23
- name="validate-create-fastapp",
23
+ name="validate-add-fastapp",
24
24
  input=[project_dir_input, app_name_input],
25
25
  retries=0,
26
26
  )
27
- async def validate_create_fastapp(ctx: AnyContext):
27
+ async def validate_add_fastapp(ctx: AnyContext):
28
28
  project_dir = ctx.input.project_dir
29
29
  if not os.path.isdir(project_dir):
30
30
  raise ValueError(f"Project directory not exists: {project_dir}")
@@ -39,7 +39,7 @@ scaffold_fastapp = Scaffolder(
39
39
  project_dir_input,
40
40
  app_name_input,
41
41
  ],
42
- upstream=validate_create_fastapp,
42
+ upstream=validate_add_fastapp,
43
43
  source_path=os.path.join(os.path.dirname(__file__), "fastapp_template"),
44
44
  render_source_path=False,
45
45
  destination_path="{ctx.input.project_dir}",
@@ -0,0 +1,93 @@
1
+ import os
2
+
3
+ from my_app_name._zrb.config import APP_DIR
4
+ from my_app_name._zrb.format_task import format_my_app_name_code
5
+ from my_app_name._zrb.group import app_create_group
6
+ from my_app_name._zrb.input import (
7
+ existing_entity_input,
8
+ new_column_input,
9
+ new_column_type_input,
10
+ )
11
+ from my_app_name._zrb.util import get_existing_schema_names
12
+
13
+ from zrb import AnyContext, Task, make_task
14
+ from zrb.util.codemod.prepend_property_to_class import prepend_property_to_class
15
+ from zrb.util.file import read_file, write_file
16
+ from zrb.util.string.conversion import to_pascal_case, to_snake_case
17
+
18
+
19
+ @make_task(
20
+ name="validate-add-my-app-name-column",
21
+ input=existing_entity_input,
22
+ retries=0,
23
+ )
24
+ async def validate_add_my_app_name_column(ctx: AnyContext):
25
+ schema_name = ctx.input.entity
26
+ if schema_name not in get_existing_schema_names():
27
+ raise ValueError(f"Schema not exist: {schema_name}")
28
+
29
+
30
+ @make_task(
31
+ name="update-my-app-name-schema",
32
+ input=[
33
+ existing_entity_input,
34
+ new_column_input,
35
+ new_column_type_input,
36
+ ],
37
+ retries=0,
38
+ upstream=validate_add_my_app_name_column,
39
+ )
40
+ def update_my_app_name_schema(ctx: AnyContext):
41
+ snake_entity_name = to_snake_case(ctx.input.entity)
42
+ pascal_entity_name = to_pascal_case(ctx.input.entity)
43
+ schema_file_path = os.path.join(APP_DIR, "schema", f"{snake_entity_name}.py")
44
+ existing_code = read_file(schema_file_path)
45
+ snake_column_name = to_snake_case(ctx.input.column)
46
+ column_type = ctx.input.type
47
+ # Base
48
+ new_code = prepend_property_to_class(
49
+ original_code=existing_code,
50
+ class_name=f"{pascal_entity_name}Base",
51
+ property_name=snake_column_name,
52
+ annotation=column_type,
53
+ default_value=_get_default_value(column_type),
54
+ )
55
+ # Update
56
+ new_code = prepend_property_to_class(
57
+ original_code=new_code,
58
+ class_name=f"{pascal_entity_name}Update",
59
+ property_name=snake_column_name,
60
+ annotation=f"{column_type} | None",
61
+ default_value="None",
62
+ )
63
+ # Table
64
+ new_code = prepend_property_to_class(
65
+ original_code=new_code,
66
+ class_name=f"{pascal_entity_name}",
67
+ property_name=snake_column_name,
68
+ annotation=f"{column_type} | None",
69
+ default_value="Field(index=False)",
70
+ )
71
+ write_file(schema_file_path, new_code)
72
+
73
+
74
+ add_my_app_name_column = app_create_group.add_task(
75
+ Task(
76
+ name="add-my-app-name-column",
77
+ description="📊 Create new column on an entity",
78
+ upstream=update_my_app_name_schema,
79
+ successor=format_my_app_name_code,
80
+ retries=0,
81
+ ),
82
+ alias="column",
83
+ )
84
+
85
+
86
+ def _get_default_value(data_type: str) -> str:
87
+ if data_type == "str":
88
+ return '""'
89
+ if data_type in ("int", "float"):
90
+ return "0"
91
+ if data_type == "bool":
92
+ return "True"
93
+ return "None"
@@ -48,7 +48,7 @@ from zrb.util.string.conversion import to_snake_case
48
48
 
49
49
 
50
50
  @make_task(
51
- name="validate-create-my-app-name-entity",
51
+ name="validate-add-my-app-name-entity",
52
52
  input=[
53
53
  existing_module_input,
54
54
  new_entity_input,
@@ -57,7 +57,7 @@ from zrb.util.string.conversion import to_snake_case
57
57
  ],
58
58
  retries=0,
59
59
  )
60
- async def validate_create_my_app_name_entity(ctx: AnyContext):
60
+ async def validate_add_my_app_name_entity(ctx: AnyContext):
61
61
  module_name = to_snake_case(ctx.input.module)
62
62
  if module_name not in get_existing_module_names():
63
63
  raise ValueError(f"Module not exist: {module_name}")
@@ -147,7 +147,7 @@ scaffold_my_app_name_entity = Scaffolder(
147
147
  ),
148
148
  ],
149
149
  retries=0,
150
- upstream=validate_create_my_app_name_entity,
150
+ upstream=validate_add_my_app_name_entity,
151
151
  )
152
152
 
153
153
  create_my_app_name_entity_migration = CmdTask(
@@ -72,10 +72,8 @@ class MyEntityService(BaseService):
72
72
  async def update_my_entity_bulk(
73
73
  self, my_entity_ids: list[str], data: MyEntityUpdateWithAudit
74
74
  ) -> MyEntityResponse:
75
- my_entities = await self.my_entity_repository.update_bulk(my_entity_ids, data)
76
- return await self.my_entity_repository.get_by_ids(
77
- [my_entity.id for my_entity in my_entities]
78
- )
75
+ await self.my_entity_repository.update_bulk(my_entity_ids, data)
76
+ return await self.my_entity_repository.get_by_ids(my_entity_ids)
79
77
 
80
78
  @BaseService.route(
81
79
  "/api/v1/my-entities/{my_entity_id}",
@@ -85,21 +83,20 @@ class MyEntityService(BaseService):
85
83
  async def update_my_entity(
86
84
  self, my_entity_id: str, data: MyEntityUpdateWithAudit
87
85
  ) -> MyEntityResponse:
88
- my_entity = await self.my_entity_repository.update(my_entity_id, data)
89
- return await self.my_entity_repository.get_by_id(my_entity.id)
86
+ await self.my_entity_repository.update(my_entity_id, data)
87
+ return await self.my_entity_repository.get_by_id(my_entity_id)
90
88
 
91
89
  @BaseService.route(
92
- "/api/v1/my-entities/{my_entity_id}",
90
+ "/api/v1/my-entities/bulk",
93
91
  methods=["delete"],
94
92
  response_model=MyEntityResponse,
95
93
  )
96
94
  async def delete_my_entity_bulk(
97
95
  self, my_entity_ids: list[str], deleted_by: str
98
96
  ) -> MyEntityResponse:
99
- my_entities = await self.my_entity_repository.delete_bulk(my_entity_ids)
100
- return await self.my_entity_repository.get_by_ids(
101
- [my_entity.id for my_entity in my_entities]
102
- )
97
+ my_entities = await self.my_entity_repository.get_by_ids(my_entity_ids)
98
+ await self.my_entity_repository.delete_bulk(my_entity_ids)
99
+ return my_entities
103
100
 
104
101
  @BaseService.route(
105
102
  "/api/v1/my-entities/{my_entity_id}",
@@ -109,5 +106,6 @@ class MyEntityService(BaseService):
109
106
  async def delete_my_entity(
110
107
  self, my_entity_id: str, deleted_by: str
111
108
  ) -> MyEntityResponse:
112
- my_entity = await self.my_entity_repository.delete(my_entity_id)
113
- return await self.my_entity_repository.get_by_id(my_entity.id)
109
+ my_entity = await self.my_entity_repository.get_by_id(my_entity.id)
110
+ await self.my_entity_repository.delete(my_entity_id)
111
+ return my_entity
@@ -24,11 +24,11 @@ from zrb import AnyContext, ContentTransformer, Scaffolder, Task, make_task
24
24
 
25
25
 
26
26
  @make_task(
27
- name="validate-create-my-app-name-module",
27
+ name="validate-add-my-app-name-module",
28
28
  input=new_module_input,
29
29
  retries=0,
30
30
  )
31
- async def validate_create_my_app_name_module(ctx: AnyContext):
31
+ async def validate_add_my_app_name_module(ctx: AnyContext):
32
32
  if ctx.input.module in get_existing_module_names():
33
33
  raise ValueError(f"Module already exists: {ctx.input.module}")
34
34
 
@@ -93,7 +93,7 @@ scaffold_my_app_name_module = Scaffolder(
93
93
  ),
94
94
  ],
95
95
  retries=0,
96
- upstream=validate_create_my_app_name_module,
96
+ upstream=validate_add_my_app_name_module,
97
97
  )
98
98
 
99
99
  add_my_app_name_module = app_create_group.add_task(
@@ -76,10 +76,8 @@ class PermissionService(BaseService):
76
76
  async def update_permission_bulk(
77
77
  self, permission_ids: list[str], data: PermissionUpdateWithAudit
78
78
  ) -> PermissionResponse:
79
- permissions = await self.permission_repository.update_bulk(permission_ids, data)
80
- return await self.permission_repository.get_by_ids(
81
- [permission.id for permission in permissions]
82
- )
79
+ await self.permission_repository.update_bulk(permission_ids, data)
80
+ return await self.permission_repository.get_by_ids(permission_ids)
83
81
 
84
82
  @BaseService.route(
85
83
  "/api/v1/permissions/{permission_id}",
@@ -89,21 +87,20 @@ class PermissionService(BaseService):
89
87
  async def update_permission(
90
88
  self, permission_id: str, data: PermissionUpdateWithAudit
91
89
  ) -> PermissionResponse:
92
- permission = await self.permission_repository.update(permission_id, data)
93
- return await self.permission_repository.get_by_id(permission.id)
90
+ await self.permission_repository.update(permission_id, data)
91
+ return await self.permission_repository.get_by_id(permission_id)
94
92
 
95
93
  @BaseService.route(
96
- "/api/v1/permissions/{permission_id}",
94
+ "/api/v1/permissions/bulk",
97
95
  methods=["delete"],
98
96
  response_model=PermissionResponse,
99
97
  )
100
98
  async def delete_permission_bulk(
101
99
  self, permission_ids: list[str], deleted_by: str
102
100
  ) -> PermissionResponse:
103
- permissions = await self.permission_repository.delete_bulk(permission_ids)
104
- return await self.permission_repository.get_by_ids(
105
- [permission.id for permission in permissions]
106
- )
101
+ permissions = await self.permission_repository.get_by_ids(permission_ids)
102
+ await self.permission_repository.delete_bulk(permission_ids)
103
+ return permissions
107
104
 
108
105
  @BaseService.route(
109
106
  "/api/v1/permissions/{permission_id}",
@@ -113,5 +110,6 @@ class PermissionService(BaseService):
113
110
  async def delete_permission(
114
111
  self, permission_id: str, deleted_by: str
115
112
  ) -> PermissionResponse:
116
- permission = await self.permission_repository.delete(permission_id)
117
- return await self.permission_repository.get_by_id(permission.id)
113
+ permission = await self.permission_repository.get_by_id(permission_id)
114
+ await self.permission_repository.delete(permission_id)
115
+ return permission
@@ -87,17 +87,15 @@ class RoleService(BaseService):
87
87
  ) -> RoleResponse:
88
88
  permission_ids = [row.get_permission_ids() for row in data]
89
89
  data = [row.get_role_update_with_audit() for row in data]
90
- roles = await self.role_repository.update_bulk(role_ids, data)
91
- if len(roles) > 0:
92
- updated_by = roles[0].updated_by
93
- await self.role_repository.remove_all_permissions(
94
- [role.id for role in roles]
95
- )
90
+ await self.role_repository.update_bulk(role_ids, data)
91
+ if len(role_ids) > 0:
92
+ updated_by = data[0].updated_by
93
+ await self.role_repository.remove_all_permissions(role_ids)
96
94
  await self.role_repository.add_permissions(
97
- data={role.id: permission_ids[i] for i, role in enumerate(roles)},
95
+ data={role_id: permission_ids[i] for i, role_id in enumerate(role_ids)},
98
96
  created_by=updated_by,
99
97
  )
100
- return await self.role_repository.get_by_ids([role.id for role in roles])
98
+ return await self.role_repository.get_by_ids(role_ids)
101
99
 
102
100
  @BaseService.route(
103
101
  "/api/v1/roles/{role_id}",
@@ -108,24 +106,26 @@ class RoleService(BaseService):
108
106
  self, role_id: str, data: RoleUpdateWithPermissionsAndAudit
109
107
  ) -> RoleResponse:
110
108
  permission_ids = data.get_permission_ids()
111
- data = data.get_role_update_with_audit()
112
- role = await self.role_repository.update(role_id, data)
113
- await self.role_repository.remove_all_permissions([role.id])
109
+ role_data = data.get_role_update_with_audit()
110
+ await self.role_repository.update(role_id, role_data)
111
+ await self.role_repository.remove_all_permissions([role_id])
114
112
  await self.role_repository.add_permissions(
115
- data={role.id: permission_ids}, created_by=role.updated_by
113
+ data={role_id: permission_ids}, created_by=role_data.updated_by
116
114
  )
117
- return await self.role_repository.get_by_id(role.id)
115
+ return await self.role_repository.get_by_id(role_id)
118
116
 
119
117
  @BaseService.route(
120
- "/api/v1/roles/{role_id}",
118
+ "/api/v1/roles/bulk",
121
119
  methods=["delete"],
122
120
  response_model=RoleResponse,
123
121
  )
124
122
  async def delete_role_bulk(
125
123
  self, role_ids: list[str], deleted_by: str
126
124
  ) -> RoleResponse:
127
- roles = await self.role_repository.delete_bulk(role_ids)
128
- return await self.role_repository.get_by_ids([role.id for role in roles])
125
+ roles = await self.role_repository.get_by_ids(role_ids)
126
+ await self.role_repository.delete_bulk(role_ids)
127
+ await self.role_repository.remove_all_permissions(role_ids)
128
+ return roles
129
129
 
130
130
  @BaseService.route(
131
131
  "/api/v1/roles/{role_id}",
@@ -133,5 +133,7 @@ class RoleService(BaseService):
133
133
  response_model=RoleResponse,
134
134
  )
135
135
  async def delete_role(self, role_id: str, deleted_by: str) -> RoleResponse:
136
- role = await self.role_repository.delete(role_id)
137
- return await self.role_repository.get_by_id(role.id)
136
+ role = await self.role_repository.get_by_id(role_id)
137
+ await self.role_repository.delete(role_id)
138
+ await self.role_repository.remove_all_permissions([role_id])
139
+ return role
@@ -84,16 +84,16 @@ class UserService(BaseService):
84
84
  self, user_ids: list[str], data: UserUpdateWithRolesAndAudit
85
85
  ) -> UserResponse:
86
86
  role_ids = [row.get_role_ids() for row in data]
87
- data = [row.get_user_create_with_audit() for row in data]
88
- users = await self.user_repository.update_bulk(user_ids, data)
89
- if len(users) > 0:
90
- updated_by = users[0].updated_by
91
- await self.user_repository.remove_all_roles([user.id for user in users])
87
+ user_data = [row.get_user_create_with_audit() for row in data]
88
+ await self.user_repository.update_bulk(user_ids, user_data)
89
+ if len(user_ids) > 0:
90
+ updated_by = user_data[0].updated_by
91
+ await self.user_repository.remove_all_roles(user_ids)
92
92
  await self.user_repository.add_roles(
93
- data={user.id: role_ids[i] for i, user in enumerate(data)},
93
+ data={user_id: role_ids[i] for i, user_id in enumerate(user_ids)},
94
94
  updated_by=updated_by,
95
95
  )
96
- return await self.user_repository.get_by_ids([user.id for user in users])
96
+ return await self.user_repository.get_by_ids(user_ids)
97
97
 
98
98
  @BaseService.route(
99
99
  "/api/v1/users/{user_id}",
@@ -103,19 +103,27 @@ class UserService(BaseService):
103
103
  async def update_user(
104
104
  self, user_id: str, data: UserUpdateWithRolesAndAudit
105
105
  ) -> UserResponse:
106
- user = await self.user_repository.update(user_id, data)
107
- return await self.user_repository.get_by_id(user.id)
106
+ role_ids = data.get_role_ids()
107
+ user_data = data.get_user_update_with_audit()
108
+ await self.user_repository.update(user_id, user_data)
109
+ await self.user_repository.remove_all_roles([user_id])
110
+ await self.user_repository.add_roles(
111
+ data={user_id: role_ids}, created_by=user_data.updated_by
112
+ )
113
+ return await self.user_repository.get_by_id(user_id)
108
114
 
109
115
  @BaseService.route(
110
- "/api/v1/users/{user_id}",
116
+ "/api/v1/users/bulk",
111
117
  methods=["delete"],
112
118
  response_model=UserResponse,
113
119
  )
114
120
  async def delete_user_bulk(
115
121
  self, user_ids: list[str], deleted_by: str
116
122
  ) -> UserResponse:
117
- users = await self.user_repository.delete_bulk(user_ids)
118
- return await self.user_repository.get_by_ids([user.id for user in users])
123
+ roles = await self.user_repository.get_by_ids(user_ids)
124
+ await self.user_repository.delete_bulk(user_ids)
125
+ await self.user_repository.remove_all_roles(user_ids)
126
+ return roles
119
127
 
120
128
  @BaseService.route(
121
129
  "/api/v1/users/{user_id}",
@@ -123,5 +131,7 @@ class UserService(BaseService):
123
131
  response_model=UserResponse,
124
132
  )
125
133
  async def delete_user(self, user_id: str, deleted_by: str) -> UserResponse:
126
- user = await self.user_repository.delete(user_id)
127
- return await self.user_repository.get_by_id(user.id)
134
+ user = await self.user_repository.get_by_id(user_id)
135
+ await self.user_repository.delete(user_id)
136
+ await self.user_repository.remove_all_roles([user_id])
137
+ return user
@@ -24,7 +24,7 @@ install_tmux = CmdTask(
24
24
  prompt="Tmux config file",
25
25
  default_str="~/.tmux.conf",
26
26
  ),
27
- description="🖥️ Setup `tmux`.",
27
+ description="📺 Setup `tmux`.",
28
28
  group=setup_group,
29
29
  alias="tmux",
30
30
  )
@@ -0,0 +1,55 @@
1
+ import os
2
+
3
+ from zrb.builtin.group import setup_group
4
+ from zrb.builtin.setup.common_input import package_manager_input, use_sudo_input
5
+ from zrb.builtin.setup.zsh.zsh_helper import get_install_zsh_cmd
6
+ from zrb.context.any_context import AnyContext
7
+ from zrb.input.str_input import StrInput
8
+ from zrb.task.cmd_task import CmdTask
9
+ from zrb.task.make_task import make_task
10
+ from zrb.util.file import read_file, write_file
11
+
12
+ install_zsh = CmdTask(
13
+ name="install-zsh",
14
+ input=[package_manager_input, use_sudo_input],
15
+ cmd=get_install_zsh_cmd,
16
+ )
17
+
18
+ install_omz = CmdTask(
19
+ name="install-omz",
20
+ cmd='sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"', # noqa
21
+ upstream=install_zsh,
22
+ )
23
+
24
+ install_zinit = CmdTask(
25
+ name="install-zinit",
26
+ cmd='bash -c "$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"', # noqa
27
+ upstream=install_zsh,
28
+ )
29
+
30
+
31
+ @make_task(
32
+ name="setup-zsh",
33
+ input=StrInput(
34
+ name="zsh-config",
35
+ description="zsh config file",
36
+ prompt="zsh config file",
37
+ default_str="~/.zshrc",
38
+ ),
39
+ upstream=[install_omz, install_zinit],
40
+ description="💻 Setup `zsh`.",
41
+ group=setup_group,
42
+ alias="zsh",
43
+ )
44
+ def setup_zsh(ctx: AnyContext):
45
+ zsh_config = read_file(os.path.join(os.path.dirname(__file__), "zsh_config.sh"))
46
+ zsh_config_file = os.path.expanduser(ctx.input["zsh-config"])
47
+ # Make sure config file exists
48
+ if not os.path.isfile(zsh_config_file):
49
+ write_file(zsh_config_file, "")
50
+ content = read_file(zsh_config_file)
51
+ if zsh_config in content:
52
+ return
53
+ # Write config
54
+ write_file(zsh_config_file, [content, zsh_config, ""])
55
+ ctx.print("Setup complete, restart your terminal to continue")