zrb 0.6.0__py3-none-any.whl → 0.6.1__py3-none-any.whl

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 (316) hide show
  1. zrb/__init__.py +24 -20
  2. zrb/__main__.py +5 -5
  3. zrb/action/runner.py +22 -30
  4. zrb/advertisement.py +10 -9
  5. zrb/builtin/__init__.py +18 -16
  6. zrb/builtin/base64.py +13 -18
  7. zrb/builtin/devtool/__init__.py +14 -3
  8. zrb/builtin/devtool/devtool_install.py +207 -221
  9. zrb/builtin/env.py +9 -12
  10. zrb/builtin/eval.py +9 -9
  11. zrb/builtin/explain.py +73 -74
  12. zrb/builtin/generator/__init__.py +7 -11
  13. zrb/builtin/generator/app_generator/add.py +86 -87
  14. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/add.py +78 -77
  15. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_checker.py +6 -6
  16. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_common.py +14 -15
  17. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/container.py +32 -32
  18. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/deployment.py +29 -30
  19. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/image.py +1 -3
  20. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +5 -4
  21. zrb/builtin/generator/app_generator/template/base/_automate/generate_snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/__main__.py +24 -32
  22. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/add.py +89 -87
  23. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_common.py +14 -15
  24. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/container.py +42 -54
  25. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/deployment.py +34 -32
  26. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/image.py +19 -22
  27. zrb/builtin/generator/app_generator/template/build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +18 -18
  28. zrb/builtin/generator/app_generator/template/http-port/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_checker.py +10 -10
  29. zrb/builtin/generator/app_generator/template/http-port-build-custom-image/_automate/generate_snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +19 -19
  30. zrb/builtin/generator/app_generator/template/use-helm/_automate/generate_snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/__main__.py +12 -14
  31. zrb/builtin/generator/cmd_task/add.py +23 -25
  32. zrb/builtin/generator/cmd_task/template/_automate/snake_zrb_task_name.py +3 -5
  33. zrb/builtin/generator/common/helper.py +15 -20
  34. zrb/builtin/generator/common/task_factory.py +29 -26
  35. zrb/builtin/generator/common/task_input.py +97 -91
  36. zrb/builtin/generator/docker_compose_task/add.py +38 -39
  37. zrb/builtin/generator/docker_compose_task/template/_automate/snake_zrb_task_name.py +13 -19
  38. zrb/builtin/generator/docker_compose_task/template/src/kebab-zrb-task-name/image/main.py +18 -14
  39. zrb/builtin/generator/fastapp/add.py +94 -90
  40. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_checker.py +28 -27
  41. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_config.py +68 -39
  42. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_env.py +24 -22
  43. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_env_file.py +12 -12
  44. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_get_start_microservices.py +43 -41
  45. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_helper.py +23 -24
  46. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_input.py +21 -20
  47. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-load-test.sh +1 -1
  48. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-start.sh +1 -1
  49. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-test.sh +2 -2
  50. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/container.py +46 -39
  51. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/deployment.py +28 -20
  52. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/frontend.py +21 -27
  53. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/image.py +23 -18
  54. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/load_test.py +35 -36
  55. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/local.py +68 -58
  56. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/test.py +24 -38
  57. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/__main__.py +23 -21
  58. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/_common.py +72 -75
  59. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/app_helper.py +70 -75
  60. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_postgresql_helper.py +18 -21
  61. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_rabbitmq_helper.py +11 -19
  62. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_redpanda_helper.py +18 -15
  63. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/helm_signoz_helper.py +17 -21
  64. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/docker-compose.yml +12 -12
  65. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/loadtest/locustfile.py +10 -12
  66. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/Dockerfile +1 -0
  67. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/app.py +35 -30
  68. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/app_lifespan.py +21 -17
  69. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/app_state.py +3 -2
  70. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/db_connection.py +18 -20
  71. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/frontend_index.py +5 -6
  72. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/log.py +7 -15
  73. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/messagebus.py +38 -34
  74. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/component/rpc.py +19 -18
  75. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/config.py +68 -103
  76. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/error.py +11 -10
  77. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/__init__.py +2 -4
  78. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/kafka/admin.py +38 -35
  79. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/kafka/consumer.py +38 -45
  80. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/kafka/publisher.py +26 -29
  81. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/messagebus.py +8 -14
  82. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/mock.py +12 -8
  83. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/rabbitmq/admin.py +37 -44
  84. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/rabbitmq/consumer.py +42 -67
  85. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/messagebus/rabbitmq/publisher.py +32 -55
  86. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/model/repo_model.py +11 -10
  87. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/__init__.py +2 -2
  88. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/db_entity_mixin.py +3 -6
  89. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/db_repo.py +76 -83
  90. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/repo.py +5 -5
  91. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/repo/search_filter.py +1 -0
  92. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/__init__.py +1 -1
  93. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/messagebus/caller.py +17 -19
  94. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/messagebus/server.py +14 -18
  95. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/rpc/rpc.py +15 -28
  96. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/schema/__init__.py +1 -1
  97. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/schema/base_schema.py +6 -5
  98. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/serializer/__init__.py +1 -3
  99. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/core/serializer/serializer.py +3 -4
  100. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/helper/async_task.py +3 -5
  101. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/helper/conversion.py +10 -10
  102. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/helper/migration.py +6 -10
  103. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/migrate.py +3 -2
  104. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/api.py +7 -12
  105. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/__init__.py +4 -6
  106. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/access_token_scheme.py +9 -10
  107. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/access_token_util.py +6 -5
  108. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/authorizer.py +4 -4
  109. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/bearer_token_scheme.py +1 -1
  110. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/model/user_model.py +8 -10
  111. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/password_hasher.py +1 -1
  112. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/refresh_token_util.py +7 -6
  113. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/repo/group_repo.py +3 -8
  114. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/repo/permission_repo.py +3 -7
  115. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/repo/user_repo.py +3 -5
  116. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/component/user.py +12 -7
  117. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/__init__.py +7 -12
  118. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/access_token/scheme.py +7 -12
  119. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/access_token/util.py +20 -30
  120. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/authorizer/authorizer.py +1 -3
  121. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/authorizer/rpc_authorizer.py +5 -12
  122. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/password_hasher/bcrypt_password_hasher.py +3 -8
  123. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/password_hasher/password_hasher.py +0 -1
  124. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/core/refresh_token/util.py +15 -21
  125. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/api.py +42 -49
  126. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/model.py +3 -7
  127. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +18 -16
  128. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +26 -41
  129. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/api.py +46 -51
  130. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/model.py +5 -7
  131. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/repo.py +11 -8
  132. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +28 -45
  133. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/table.py +10 -10
  134. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +60 -72
  135. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +32 -61
  136. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +33 -36
  137. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +42 -61
  138. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/event.py +2 -4
  139. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/migrate.py +3 -5
  140. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/register_module.py +11 -12
  141. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +19 -26
  142. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/rpc.py +5 -13
  143. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +6 -4
  144. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +3 -1
  145. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/request.py +1 -0
  146. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/token.py +2 -2
  147. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +4 -3
  148. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/api.py +4 -5
  149. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/component/model/activity_model.py +3 -9
  150. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/component/repo/activity_repo.py +3 -7
  151. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/core/historical_repo_model.py +13 -13
  152. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/api.py +22 -23
  153. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +5 -7
  154. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/model.py +2 -6
  155. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/repo.py +8 -8
  156. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +28 -45
  157. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/entity/table.py +3 -3
  158. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/event.py +4 -8
  159. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/migrate.py +2 -4
  160. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/register_module.py +10 -11
  161. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/rpc.py +3 -5
  162. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +3 -1
  163. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/requirements.txt +12 -12
  164. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +76 -106
  165. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +73 -103
  166. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +92 -122
  167. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +107 -134
  168. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/conftest.py +2 -2
  169. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +8 -15
  170. zrb/builtin/generator/fastapp_crud/add.py +74 -79
  171. zrb/builtin/generator/fastapp_crud/helper.py +51 -48
  172. zrb/builtin/generator/fastapp_crud/task_factory.py +17 -14
  173. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/component/model/snake_zrb_entity_name_model.py +2 -2
  174. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/component/repo/snake_zrb_entity_name_repo.py +3 -2
  175. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/api.py +58 -40
  176. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/model.py +7 -3
  177. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/repo.py +9 -4
  178. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/rpc.py +32 -39
  179. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/snake_zrb_entity_name.py +3 -1
  180. zrb/builtin/generator/fastapp_crud/template/src/kebab-zrb-app-name/test/snake_zrb_module_name/test_snake_zrb_entity_name.py +68 -98
  181. zrb/builtin/generator/fastapp_field/add.py +143 -85
  182. zrb/builtin/generator/fastapp_field/helper.py +184 -125
  183. zrb/builtin/generator/fastapp_module/add.py +90 -67
  184. zrb/builtin/generator/fastapp_module/helper.py +141 -155
  185. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/api.py +3 -2
  186. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/table.py +3 -3
  187. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/event.py +3 -5
  188. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/migrate.py +2 -4
  189. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/register_module.py +10 -11
  190. zrb/builtin/generator/fastapp_module/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/rpc.py +3 -5
  191. zrb/builtin/generator/pip_package/add.py +39 -40
  192. zrb/builtin/generator/pip_package/template/_automate/snake_zrb_package_name/local.py +30 -30
  193. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/__init__.py +1 -0
  194. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/__main__.py +1 -0
  195. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/util.py +2 -2
  196. zrb/builtin/generator/plugin/create.py +39 -36
  197. zrb/builtin/generator/plugin/template/src/snake_zrb_package_name/__init__.py +1 -1
  198. zrb/builtin/generator/plugin/template/src/snake_zrb_package_name/__main__.py +1 -0
  199. zrb/builtin/generator/plugin/template/src/snake_zrb_package_name/task/example_task.py +6 -4
  200. zrb/builtin/generator/plugin/template/zrb_init.py +27 -27
  201. zrb/builtin/generator/project/create.py +38 -46
  202. zrb/builtin/generator/project/template/.flake8 +3 -0
  203. zrb/builtin/generator/project/template/project.sh +19 -10
  204. zrb/builtin/generator/project_task/task_factory.py +60 -61
  205. zrb/builtin/generator/project_task/template/_automate/_project/__init__.py +2 -2
  206. zrb/builtin/generator/project_task/template/_automate/_project/build_project_images.py +4 -4
  207. zrb/builtin/generator/project_task/template/_automate/_project/deploy_project.py +4 -4
  208. zrb/builtin/generator/project_task/template/_automate/_project/destroy_project.py +4 -4
  209. zrb/builtin/generator/project_task/template/_automate/_project/push_project_images.py +4 -4
  210. zrb/builtin/generator/project_task/template/_automate/_project/remove_project_containers.py +4 -4
  211. zrb/builtin/generator/project_task/template/_automate/_project/start_project.py +4 -4
  212. zrb/builtin/generator/project_task/template/_automate/_project/start_project_containers.py +4 -4
  213. zrb/builtin/generator/project_task/template/_automate/_project/stop_project_containers.py +4 -4
  214. zrb/builtin/generator/python_task/add.py +25 -33
  215. zrb/builtin/generator/python_task/template/_automate/snake_zrb_task_name.py +8 -7
  216. zrb/builtin/generator/simple_python_app/add.py +81 -75
  217. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/_common.py +14 -15
  218. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/container.py +46 -61
  219. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/deployment.py +34 -32
  220. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/image.py +19 -22
  221. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/local.py +23 -25
  222. zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/deployment/__main__.py +24 -32
  223. zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/src/main.py +18 -14
  224. zrb/builtin/git.py +46 -46
  225. zrb/builtin/group.py +13 -34
  226. zrb/builtin/helper/reccuring_action.py +26 -29
  227. zrb/builtin/md5.py +17 -30
  228. zrb/builtin/process.py +19 -19
  229. zrb/builtin/project.py +13 -15
  230. zrb/builtin/say.py +69 -88
  231. zrb/builtin/schedule.py +15 -19
  232. zrb/builtin/ubuntu.py +44 -35
  233. zrb/builtin/update.py +5 -5
  234. zrb/builtin/version.py +3 -7
  235. zrb/builtin/watch_changes.py +24 -25
  236. zrb/config/config.py +19 -18
  237. zrb/helper/accessories/color.py +18 -6
  238. zrb/helper/accessories/icon.py +24 -3
  239. zrb/helper/accessories/name.py +120 -28
  240. zrb/helper/advertisement.py +9 -13
  241. zrb/helper/callable.py +2 -4
  242. zrb/helper/cli.py +27 -31
  243. zrb/helper/codemod/add_argument_to_function.py +3 -4
  244. zrb/helper/codemod/add_argument_to_function_call.py +4 -7
  245. zrb/helper/codemod/add_assert_resource.py +7 -7
  246. zrb/helper/codemod/add_function_call.py +3 -5
  247. zrb/helper/codemod/add_import_module.py +15 -26
  248. zrb/helper/codemod/add_key_value_to_dict.py +7 -10
  249. zrb/helper/codemod/add_property_to_class.py +10 -8
  250. zrb/helper/codemod/add_upstream_to_task.py +21 -33
  251. zrb/helper/codemod/append_code_to_function.py +6 -13
  252. zrb/helper/codemod/format_code.py +2 -1
  253. zrb/helper/default_env.py +25 -25
  254. zrb/helper/docker_compose/fetch_external_env.py +18 -18
  255. zrb/helper/docker_compose/file.py +5 -4
  256. zrb/helper/docstring.py +44 -47
  257. zrb/helper/env_map/fetch.py +7 -12
  258. zrb/helper/file/copy_tree.py +12 -17
  259. zrb/helper/file/match.py +6 -7
  260. zrb/helper/file/text.py +8 -6
  261. zrb/helper/git/detect_changes.py +9 -8
  262. zrb/helper/loader/load_module.py +14 -13
  263. zrb/helper/log.py +4 -3
  264. zrb/helper/map/conversion.py +4 -5
  265. zrb/helper/python_task.py +2 -4
  266. zrb/helper/render_data.py +25 -18
  267. zrb/helper/string/constant.py +2 -2
  268. zrb/helper/string/conversion.py +17 -16
  269. zrb/helper/string/jinja.py +2 -2
  270. zrb/helper/typecheck.py +6 -4
  271. zrb/helper/typing.py +10 -2
  272. zrb/helper/util.py +44 -40
  273. zrb/task/any_task.py +251 -251
  274. zrb/task/base_remote_cmd_task.py +76 -59
  275. zrb/task/base_task/base_task.py +95 -108
  276. zrb/task/base_task/component/base_task_model.py +73 -71
  277. zrb/task/base_task/component/common_task_model.py +42 -29
  278. zrb/task/base_task/component/pid_model.py +3 -5
  279. zrb/task/base_task/component/renderer.py +26 -36
  280. zrb/task/base_task/component/trackers.py +6 -9
  281. zrb/task/checker.py +14 -9
  282. zrb/task/cmd_task.py +102 -100
  283. zrb/task/decorator.py +19 -13
  284. zrb/task/docker_compose_task.py +127 -98
  285. zrb/task/flow_task.py +16 -19
  286. zrb/task/http_checker.py +40 -36
  287. zrb/task/notifier.py +50 -38
  288. zrb/task/parallel.py +3 -3
  289. zrb/task/path_checker.py +34 -27
  290. zrb/task/path_watcher.py +49 -40
  291. zrb/task/port_checker.py +33 -26
  292. zrb/task/recurring_task.py +36 -42
  293. zrb/task/remote_cmd_task.py +31 -28
  294. zrb/task/resource_maker.py +66 -52
  295. zrb/task/rsync_task.py +24 -21
  296. zrb/task/task.py +4 -3
  297. zrb/task/time_watcher.py +36 -31
  298. zrb/task_env/constant.py +1 -1
  299. zrb/task_env/env.py +33 -31
  300. zrb/task_env/env_file.py +24 -23
  301. zrb/task_group/group.py +27 -30
  302. zrb/task_input/any_input.py +18 -16
  303. zrb/task_input/base_input.py +26 -26
  304. zrb/task_input/bool_input.py +6 -6
  305. zrb/task_input/choice_input.py +11 -9
  306. zrb/task_input/constant.py +1 -1
  307. zrb/task_input/float_input.py +6 -5
  308. zrb/task_input/int_input.py +8 -8
  309. zrb/task_input/password_input.py +9 -9
  310. zrb/task_input/str_input.py +8 -8
  311. zrb/task_input/task_input.py +4 -2
  312. {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/METADATA +3 -1
  313. {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/RECORD +316 -315
  314. {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/LICENSE +0 -0
  315. {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/WHEEL +0 -0
  316. {zrb-0.6.0.dist-info → zrb-0.6.1.dist-info}/entry_points.txt +0 -0
@@ -1,116 +1,97 @@
1
- from typing import Any, Mapping, List, Union
2
1
  from logging import Logger
2
+ from typing import Any, List, Mapping, Union
3
+
3
4
  from core.messagebus import Publisher
4
- from core.rpc import Caller, Server
5
5
  from core.repo import SearchFilter
6
+ from core.rpc import Caller, Server
6
7
  from module.auth.component.model.user_model import user_model
7
- from module.auth.schema.user import UserData, UserLogin
8
8
  from module.auth.schema.token import AccessTokenData
9
+ from module.auth.schema.user import UserData, UserLogin
9
10
 
10
11
 
11
12
  def register_rpc(
12
- logger: Logger,
13
- rpc_server: Server,
14
- rpc_caller: Caller,
15
- publisher: Publisher
13
+ logger: Logger, rpc_server: Server, rpc_caller: Caller, publisher: Publisher
16
14
  ):
17
15
  logger.info('🥪 Register RPC handlers for "auth.user"')
18
16
 
19
- @rpc_server.register('auth_user_is_admin')
17
+ @rpc_server.register("auth_user_is_admin")
20
18
  async def user_is_admin(id: str) -> bool:
21
- '''
19
+ """
22
20
  Used by RPC Authenticator
23
- '''
21
+ """
24
22
  return await user_model.is_admin(id)
25
23
 
26
- @rpc_server.register('auth_user_is_guest')
24
+ @rpc_server.register("auth_user_is_guest")
27
25
  async def user_is_guest(id: str) -> bool:
28
- '''
26
+ """
29
27
  Used by RPC Authenticator
30
- '''
28
+ """
31
29
  return await user_model.is_guest(id)
32
30
 
33
- @rpc_server.register('auth_is_user_authorized')
31
+ @rpc_server.register("auth_is_user_authorized")
34
32
  async def is_user_having_permission(
35
33
  id: str, permission_name: Union[str, List[str]]
36
34
  ) -> Mapping[str, bool]:
37
- '''
35
+ """
38
36
  Used by RPC Authenticator
39
- '''
37
+ """
40
38
  if isinstance(permission_name, str):
41
39
  return await user_model.is_authorized(id, permission_name)
42
40
  return await user_model.is_authorized(id, *permission_name)
43
41
 
44
- @rpc_server.register('auth_create_token')
42
+ @rpc_server.register("auth_create_token")
45
43
  async def create_token(login_data: Mapping[str, str]) -> Mapping[str, str]:
46
44
  result = await user_model.create_auth_token(UserLogin(**login_data))
47
- return result.dict()
45
+ return result.model_dump()
48
46
 
49
- @rpc_server.register('auth_refresh_token')
50
- async def refresh_token(
51
- refresh_token: str, access_token: str
52
- ) -> Mapping[str, str]:
53
- result = await user_model.refresh_auth_token(
54
- refresh_token, access_token
55
- )
56
- return result.dict()
47
+ @rpc_server.register("auth_refresh_token")
48
+ async def refresh_token(refresh_token: str, access_token: str) -> Mapping[str, str]:
49
+ result = await user_model.refresh_auth_token(refresh_token, access_token)
50
+ return result.model_dump()
57
51
 
58
- @rpc_server.register('auth_get_user')
52
+ @rpc_server.register("auth_get_user")
59
53
  async def get(
60
54
  keyword: str,
61
55
  criterion: Mapping[str, Any],
62
56
  limit: int,
63
57
  offset: int,
64
- user_token_data: Mapping[str, Any]
58
+ user_token_data: Mapping[str, Any],
65
59
  ) -> Mapping[str, Any]:
66
60
  result = await user_model.get(
67
- search_filter=SearchFilter(
68
- keyword=keyword, criterion=criterion
69
- ),
61
+ search_filter=SearchFilter(keyword=keyword, criterion=criterion),
70
62
  limit=limit,
71
- offset=offset
63
+ offset=offset,
72
64
  )
73
- return result.dict()
65
+ return result.model_dump()
74
66
 
75
- @rpc_server.register('auth_get_user_by_id')
67
+ @rpc_server.register("auth_get_user_by_id")
76
68
  async def get_by_id(
77
- id: str,
78
- user_token_data: Mapping[str, Any] = {}
69
+ id: str, user_token_data: Mapping[str, Any] = {}
79
70
  ) -> Mapping[str, Any]:
80
71
  row = await user_model.get_by_id(id)
81
- return row.dict()
72
+ return row.model_dump()
82
73
 
83
- @rpc_server.register('auth_insert_user')
74
+ @rpc_server.register("auth_insert_user")
84
75
  async def insert(
85
- data: Mapping[str, Any],
86
- user_token_data: Mapping[str, Any]
76
+ data: Mapping[str, Any], user_token_data: Mapping[str, Any]
87
77
  ) -> Mapping[str, Any]:
88
78
  user_token_data = AccessTokenData(**user_token_data)
89
- data['created_by'] = user_token_data.user_id
90
- data['updated_by'] = user_token_data.user_id
91
- row = await user_model.insert(
92
- data=UserData(**data)
93
- )
94
- return row.dict()
79
+ data["created_by"] = user_token_data.user_id
80
+ data["updated_by"] = user_token_data.user_id
81
+ row = await user_model.insert(data=UserData(**data))
82
+ return row.model_dump()
95
83
 
96
- @rpc_server.register('auth_update_user')
84
+ @rpc_server.register("auth_update_user")
97
85
  async def update(
98
- id: str,
99
- data: Mapping[str, Any],
100
- user_token_data: Mapping[str, Any]
86
+ id: str, data: Mapping[str, Any], user_token_data: Mapping[str, Any]
101
87
  ) -> Mapping[str, Any]:
102
88
  user_token_data = AccessTokenData(**user_token_data)
103
- data['updated_by'] = user_token_data.user_id
104
- row = await user_model.update(
105
- id=id, data=UserData(**data)
106
- )
107
- return row.dict()
89
+ data["updated_by"] = user_token_data.user_id
90
+ row = await user_model.update(id=id, data=UserData(**data))
91
+ return row.model_dump()
108
92
 
109
- @rpc_server.register('auth_delete_user')
110
- async def delete(
111
- id: str,
112
- user_token_data: Mapping[str, Any]
113
- ) -> Mapping[str, Any]:
93
+ @rpc_server.register("auth_delete_user")
94
+ async def delete(id: str, user_token_data: Mapping[str, Any]) -> Mapping[str, Any]:
114
95
  user_token_data = AccessTokenData(**user_token_data)
115
96
  row = await user_model.delete(id=id)
116
- return row.dict()
97
+ return row.model_dump()
@@ -1,12 +1,10 @@
1
1
  from logging import Logger
2
+
2
3
  from core.messagebus import Consumer, Publisher
3
4
  from core.rpc import Caller
4
5
 
5
6
 
6
7
  def register_event(
7
- logger: Logger,
8
- consumer: Consumer,
9
- rpc_caller: Caller,
10
- publisher: Publisher
8
+ logger: Logger, consumer: Consumer, rpc_caller: Caller, publisher: Publisher
11
9
  ):
12
10
  logger.info('🥪 Register event handlers for "auth"')
@@ -1,8 +1,6 @@
1
- from config import (
2
- app_enable_auth_module
3
- )
4
- from component.log import logger
5
1
  from component.db_connection import engine
2
+ from component.log import logger
3
+ from config import app_enable_auth_module
6
4
  from helper.migration import migrate
7
5
  from module.auth.component import Base
8
6
  from module.auth.register_permission import register_permission
@@ -14,5 +12,5 @@ async def migrate_auth():
14
12
  return
15
13
  logger.info('🥪 Perform DB migration for "auth"')
16
14
  await migrate(engine=engine, Base=Base)
17
- logger.info('🥪 Register permissions')
15
+ logger.info("🥪 Register permissions")
18
16
  await register_permission()
@@ -1,13 +1,15 @@
1
- from config import (
2
- app_enable_rpc_server, app_enable_event_handler, app_enable_api,
3
- app_enable_auth_module
4
- )
5
- from component.log import logger
6
1
  from component.app import app
2
+ from component.log import logger
7
3
  from component.messagebus import consumer, publisher
8
4
  from component.rpc import rpc_caller, rpc_server
9
- from module.auth.component import authorizer
5
+ from config import (
6
+ app_enable_api,
7
+ app_enable_auth_module,
8
+ app_enable_event_handler,
9
+ app_enable_rpc_server,
10
+ )
10
11
  from module.auth.api import register_api
12
+ from module.auth.component import authorizer
11
13
  from module.auth.event import register_event
12
14
  from module.auth.rpc import register_rpc
13
15
 
@@ -22,19 +24,16 @@ def register_auth():
22
24
  app=app,
23
25
  authorizer=authorizer,
24
26
  rpc_caller=rpc_caller,
25
- publisher=publisher
27
+ publisher=publisher,
26
28
  )
27
29
  if app_enable_event_handler:
28
30
  register_event(
29
- logger=logger,
30
- consumer=consumer,
31
- rpc_caller=rpc_caller,
32
- publisher=publisher
31
+ logger=logger, consumer=consumer, rpc_caller=rpc_caller, publisher=publisher
33
32
  )
34
33
  if app_enable_rpc_server:
35
34
  register_rpc(
36
35
  logger=logger,
37
36
  rpc_server=rpc_server,
38
37
  rpc_caller=rpc_caller,
39
- publisher=publisher
38
+ publisher=publisher,
40
39
  )
@@ -1,44 +1,37 @@
1
1
  from typing import List, Optional
2
- from module.auth.schema.permission import PermissionData
2
+
3
3
  from module.auth.component.model.permission_model import permission_model
4
+ from module.auth.schema.permission import PermissionData
4
5
 
5
- DEFAULT_ACTION_NAMES = ['get', 'get_by_id', 'insert', 'update', 'delete']
6
+ DEFAULT_ACTION_NAMES = ["get", "get_by_id", "insert", "update", "delete"]
6
7
  ACTION_DESCRIPTION = {
7
- 'get': 'list all',
8
- 'get_by_id': 'get single',
9
- 'insert': 'insert new',
10
- 'update': 'update',
11
- 'delete': 'delete',
8
+ "get": "list all",
9
+ "get_by_id": "get single",
10
+ "insert": "insert new",
11
+ "update": "update",
12
+ "delete": "delete",
12
13
  }
13
14
 
14
15
 
15
16
  async def ensure_entity_permission(
16
- module_name: str,
17
- entity_name: str,
18
- action_names: Optional[List[str]] = None
17
+ module_name: str, entity_name: str, action_names: Optional[List[str]] = None
19
18
  ):
20
19
  if action_names is None:
21
20
  action_names = DEFAULT_ACTION_NAMES
22
21
  for action_name in action_names:
23
22
  caption = ACTION_DESCRIPTION[action_name]
24
- await permission_model.ensure_permission(PermissionData(
25
- name=f'{module_name}:{entity_name}:{action_name}',
26
- description=f'Allow {caption} {entity_name} on {module_name}'
27
- ))
23
+ await permission_model.ensure_permission(
24
+ PermissionData(
25
+ name=f"{module_name}:{entity_name}:{action_name}",
26
+ description=f"Allow {caption} {entity_name} on {module_name}",
27
+ )
28
+ )
28
29
 
29
30
 
30
31
  async def register_permission():
32
+ await ensure_entity_permission(module_name="auth", entity_name="group")
33
+ await ensure_entity_permission(module_name="auth", entity_name="permission")
34
+ await ensure_entity_permission(module_name="auth", entity_name="user")
31
35
  await ensure_entity_permission(
32
- module_name='auth', entity_name='group'
33
- )
34
- await ensure_entity_permission(
35
- module_name='auth', entity_name='permission'
36
- )
37
- await ensure_entity_permission(
38
- module_name='auth', entity_name='user'
39
- )
40
- await ensure_entity_permission(
41
- module_name='log',
42
- entity_name='activity',
43
- action_names=['get', 'get_by_id']
36
+ module_name="log", entity_name="activity", action_names=["get", "get_by_id"]
44
37
  )
@@ -1,22 +1,14 @@
1
1
  from logging import Logger
2
+
2
3
  from core.messagebus import Publisher
3
4
  from core.rpc import Caller, Server
4
- from module.auth.entity.permission.rpc import (
5
- register_rpc as register_permission_rpc
6
- )
7
- from module.auth.entity.group.rpc import (
8
- register_rpc as register_group_rpc
9
- )
10
- from module.auth.entity.user.rpc import (
11
- register_rpc as register_user_rpc
12
- )
5
+ from module.auth.entity.group.rpc import register_rpc as register_group_rpc
6
+ from module.auth.entity.permission.rpc import register_rpc as register_permission_rpc
7
+ from module.auth.entity.user.rpc import register_rpc as register_user_rpc
13
8
 
14
9
 
15
10
  def register_rpc(
16
- logger: Logger,
17
- rpc_server: Server,
18
- rpc_caller: Caller,
19
- publisher: Publisher
11
+ logger: Logger, rpc_server: Server, rpc_caller: Caller, publisher: Publisher
20
12
  ):
21
13
  logger.info('🥪 Register RPC handlers for "auth"')
22
14
  register_permission_rpc(logger, rpc_server, rpc_caller, publisher)
@@ -1,5 +1,6 @@
1
1
  from typing import List
2
- from core.schema import BaseDateTimeSchema, BaseCountSchema
2
+
3
+ from core.schema import BaseCountSchema, BaseDateTimeSchema
3
4
  from module.auth.schema.permission import Permission
4
5
 
5
6
 
@@ -13,11 +14,12 @@ class GroupData(GroupBase):
13
14
 
14
15
 
15
16
  class Group(GroupBase):
16
- id: str
17
- permissions: List[Permission] = []
18
-
19
17
  class Config:
20
18
  orm_mode = True
19
+ from_attributes = True
20
+
21
+ id: str
22
+ permissions: List[Permission] = []
21
23
 
22
24
 
23
25
  class GroupResult(BaseCountSchema):
@@ -1,5 +1,6 @@
1
1
  from typing import List
2
- from core.schema import BaseDateTimeSchema, BaseCountSchema
2
+
3
+ from core.schema import BaseCountSchema, BaseDateTimeSchema
3
4
 
4
5
 
5
6
  class PermissionData(BaseDateTimeSchema):
@@ -12,6 +13,7 @@ class Permission(PermissionData):
12
13
 
13
14
  class Config:
14
15
  orm_mode = True
16
+ from_attributes = True
15
17
 
16
18
 
17
19
  class PermissionResult(BaseCountSchema):
@@ -1,4 +1,5 @@
1
1
  from typing import List
2
+
2
3
  from pydantic import BaseModel
3
4
 
4
5
 
@@ -4,12 +4,12 @@ from pydantic import BaseModel
4
4
  class AccessTokenData(BaseModel):
5
5
  user_id: str
6
6
  username: str
7
- expire_seconds: int
7
+ expire_seconds: int | float
8
8
 
9
9
 
10
10
  class RefreshTokenData(BaseModel):
11
11
  user_id: str
12
- expire_seconds: int
12
+ expire_seconds: int | float
13
13
 
14
14
 
15
15
  class TokenResponse(BaseModel):
@@ -1,8 +1,9 @@
1
1
  from typing import List
2
- from pydantic import BaseModel
3
- from core.schema import BaseDateTimeSchema, BaseCountSchema
4
- from module.auth.schema.permission import Permission
2
+
3
+ from core.schema import BaseCountSchema, BaseDateTimeSchema
5
4
  from module.auth.schema.group import Group
5
+ from module.auth.schema.permission import Permission
6
+ from pydantic import BaseModel
6
7
 
7
8
 
8
9
  class UserBase(BaseDateTimeSchema):
@@ -1,11 +1,10 @@
1
- from fastapi import FastAPI
2
1
  from logging import Logger
2
+
3
3
  from core.messagebus import Publisher
4
4
  from core.rpc import Caller
5
+ from fastapi import FastAPI
5
6
  from module.auth.core import Authorizer
6
- from module.log.entity.activity.api import (
7
- register_api as register_activity_api
8
- )
7
+ from module.log.entity.activity.api import register_api as register_activity_api
9
8
 
10
9
 
11
10
  def register_api(
@@ -13,7 +12,7 @@ def register_api(
13
12
  app: FastAPI,
14
13
  authorizer: Authorizer,
15
14
  rpc_caller: Caller,
16
- publisher: Publisher
15
+ publisher: Publisher,
17
16
  ):
18
17
  logger.info('🥪 Register API for "log"')
19
18
  register_activity_api(logger, app, authorizer, rpc_caller, publisher)
@@ -1,10 +1,4 @@
1
- from module.log.component.repo.activity_repo import (
2
- activity_repo
3
- )
4
- from module.log.entity.activity.model import (
5
- ActivityModel
6
- )
1
+ from module.log.component.repo.activity_repo import activity_repo
2
+ from module.log.entity.activity.model import ActivityModel
7
3
 
8
- activity_model: ActivityModel = ActivityModel(
9
- activity_repo
10
- )
4
+ activity_model: ActivityModel = ActivityModel(activity_repo)
@@ -1,9 +1,5 @@
1
- from component.log import logger
2
1
  from component.db_connection import engine
3
- from module.log.entity.activity.repo import (
4
- ActivityRepo, ActivityDBRepo
5
- )
2
+ from component.log import logger
3
+ from module.log.entity.activity.repo import ActivityDBRepo, ActivityRepo
6
4
 
7
- activity_repo: ActivityRepo = ActivityDBRepo(
8
- logger=logger, engine=engine
9
- )
5
+ activity_repo: ActivityRepo = ActivityDBRepo(logger=logger, engine=engine)
@@ -1,15 +1,15 @@
1
- from typing import TypeVar, Type
2
- from pydantic import BaseModel
3
- from core.repo.repo import Repo
1
+ from typing import Type, TypeVar
2
+
3
+ import jsons
4
4
  from core.messagebus.messagebus import Publisher
5
5
  from core.model.repo_model import RepoModel
6
+ from core.repo.repo import Repo
6
7
  from module.log.schema.activity import ActivityData
7
- import jsons
8
-
8
+ from pydantic import BaseModel
9
9
 
10
- Schema = TypeVar('Schema', bound=BaseModel)
11
- SchemaData = TypeVar('SchemaData', bound=BaseModel)
12
- SchemaResult = TypeVar('SchemaResult', bound=BaseModel)
10
+ Schema = TypeVar("Schema", bound=BaseModel)
11
+ SchemaData = TypeVar("SchemaData", bound=BaseModel)
12
+ SchemaResult = TypeVar("SchemaResult", bound=BaseModel)
13
13
 
14
14
 
15
15
  class HistoricalRepoModel(RepoModel[Schema, SchemaData, SchemaResult]):
@@ -22,23 +22,23 @@ class HistoricalRepoModel(RepoModel[Schema, SchemaData, SchemaResult]):
22
22
 
23
23
  async def insert(self, data: SchemaData) -> Schema:
24
24
  result = await super().insert(data)
25
- await self._publish_activity(action='insert', result=result)
25
+ await self._publish_activity(action="insert", result=result)
26
26
  return result
27
27
 
28
28
  async def update(self, id: str, data: SchemaData) -> Schema:
29
29
  result = await self.repo.update(id, data)
30
- await self._publish_activity(action='update', result=result)
30
+ await self._publish_activity(action="update", result=result)
31
31
  return result
32
32
 
33
33
  async def delete(self, id: str) -> Schema:
34
34
  result = await self.repo.delete(id)
35
- await self._publish_activity(action='delete', result=result)
35
+ await self._publish_activity(action="delete", result=result)
36
36
  return result
37
37
 
38
38
  async def _publish_activity(self, action: str, result: Schema):
39
39
  activity_data = ActivityData(
40
40
  action=action,
41
41
  entity=self.log_entity_name,
42
- data=jsons.dumps(result.dict())
42
+ data=jsons.dumps(result.model_dump()),
43
43
  )
44
- await self.publisher.publish('log_new_activity', activity_data.dict())
44
+ await self.publisher.publish("log_new_activity", activity_data.model_dump())
@@ -1,12 +1,13 @@
1
- from fastapi import FastAPI, Depends
2
1
  from logging import Logger
2
+
3
+ from core.error import HTTPAPIException
3
4
  from core.messagebus import Publisher
4
5
  from core.rpc import Caller
5
- from core.error import HTTPAPIException
6
+ from fastapi import Depends, FastAPI
7
+ from module.auth.component import access_token_scheme
6
8
  from module.auth.core import Authorizer
7
- from module.log.schema.activity import Activity, ActivityResult
8
9
  from module.auth.schema.token import AccessTokenData
9
- from module.auth.component import access_token_scheme
10
+ from module.log.schema.activity import Activity, ActivityResult
10
11
 
11
12
 
12
13
  def register_api(
@@ -14,49 +15,47 @@ def register_api(
14
15
  app: FastAPI,
15
16
  authorizer: Authorizer,
16
17
  rpc_caller: Caller,
17
- publisher: Publisher
18
+ publisher: Publisher,
18
19
  ):
19
20
  logger.info('🥪 Register API for "log.activity"')
20
21
 
21
- @app.get(
22
- '/api/v1/log/activities', response_model=ActivityResult
23
- )
22
+ @app.get("/api/v1/log/activities", response_model=ActivityResult)
24
23
  async def get_activitys(
25
- keyword: str = '', limit: int = 100, offset: int = 0,
26
- user_token_data: AccessTokenData = Depends(access_token_scheme)
24
+ keyword: str = "",
25
+ limit: int = 100,
26
+ offset: int = 0,
27
+ user_token_data: AccessTokenData = Depends(access_token_scheme),
27
28
  ):
28
29
  if not await authorizer.is_having_permission(
29
- user_token_data.user_id, 'log:activity:get'
30
+ user_token_data.user_id, "log:activity:get"
30
31
  ):
31
- raise HTTPAPIException(403, 'Unauthorized')
32
+ raise HTTPAPIException(403, "Unauthorized")
32
33
  try:
33
34
  result_dict = await rpc_caller.call(
34
- 'log_get_activity',
35
+ "log_get_activity",
35
36
  keyword=keyword,
36
37
  criterion={},
37
38
  limit=limit,
38
39
  offset=offset,
39
- user_token_data=user_token_data.dict()
40
+ user_token_data=user_token_data.model_dump(),
40
41
  )
41
42
  return ActivityResult(**result_dict)
42
43
  except Exception as e:
43
44
  raise HTTPAPIException(error=e)
44
45
 
45
- @app.get(
46
- '/api/v1/log/activities/{id}', response_model=Activity
47
- )
46
+ @app.get("/api/v1/log/activities/{id}", response_model=Activity)
48
47
  async def get_activity_by_id(
49
- id: str,
50
- user_token_data: AccessTokenData = Depends(access_token_scheme)
48
+ id: str, user_token_data: AccessTokenData = Depends(access_token_scheme)
51
49
  ):
52
50
  if not await authorizer.is_having_permission(
53
- user_token_data.user_id, 'log:activity:get_by_id'
51
+ user_token_data.user_id, "log:activity:get_by_id"
54
52
  ):
55
- raise HTTPAPIException(403, 'Unauthorized')
53
+ raise HTTPAPIException(403, "Unauthorized")
56
54
  try:
57
55
  result_dict = await rpc_caller.call(
58
- 'log_get_activity_by_id',
59
- id=id, user_token_data=user_token_data.dict()
56
+ "log_get_activity_by_id",
57
+ id=id,
58
+ user_token_data=user_token_data.model_dump(),
60
59
  )
61
60
  return Activity(**result_dict)
62
61
  except Exception as e:
@@ -1,20 +1,18 @@
1
- from typing import Any, Mapping
2
1
  from logging import Logger
3
- from core.messagebus import Publisher, Consumer
2
+ from typing import Any, Mapping
3
+
4
+ from core.messagebus import Consumer, Publisher
4
5
  from core.rpc import Caller
5
6
  from module.log.component.model.activity_model import activity_model
6
7
  from module.log.schema.activity import ActivityData
7
8
 
8
9
 
9
10
  def register_event(
10
- logger: Logger,
11
- consumer: Consumer,
12
- rpc_caller: Caller,
13
- publisher: Publisher
11
+ logger: Logger, consumer: Consumer, rpc_caller: Caller, publisher: Publisher
14
12
  ):
15
13
  logger.info('🥪 Register event handlers for "log.activity"')
16
14
 
17
- @consumer.register('log_new_activity')
15
+ @consumer.register("log_new_activity")
18
16
  async def insert(
19
17
  data: Mapping[str, Any],
20
18
  ):
@@ -1,10 +1,6 @@
1
1
  from core.model import RepoModel
2
- from module.log.schema.activity import (
3
- Activity, ActivityData, ActivityResult
4
- )
2
+ from module.log.schema.activity import Activity, ActivityData, ActivityResult
5
3
 
6
4
 
7
- class ActivityModel(
8
- RepoModel[Activity, ActivityData, ActivityResult]
9
- ):
5
+ class ActivityModel(RepoModel[Activity, ActivityData, ActivityResult]):
10
6
  schema_result_cls = ActivityResult