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,12 +1,14 @@
1
- from sqlalchemy import Column, String, Text
2
- from core.repo import Repo, DBEntityMixin, DBRepo
3
- from module.log.schema.activity import (
4
- Activity, ActivityData
5
- )
1
+ from core.repo import DBEntityMixin, DBRepo, Repo
6
2
  from module.log.component import Base
3
+ from module.log.schema.activity import Activity, ActivityData
4
+ from sqlalchemy import Column, String, Text
7
5
 
8
6
 
9
7
  class DBEntityActivity(Base, DBEntityMixin):
8
+ class Config:
9
+ orm_mode = True
10
+ from_attributes = True
11
+
10
12
  __tablename__ = "activities"
11
13
  action = Column(String)
12
14
  entity: Column = Column(String)
@@ -17,8 +19,6 @@ class ActivityRepo(Repo[Activity, ActivityData]):
17
19
  pass
18
20
 
19
21
 
20
- class ActivityDBRepo(
21
- DBRepo[Activity, ActivityData], ActivityRepo
22
- ):
22
+ class ActivityDBRepo(DBRepo[Activity, ActivityData], ActivityRepo):
23
23
  schema_cls = Activity
24
24
  db_entity_cls = DBEntityActivity
@@ -1,79 +1,62 @@
1
- from typing import Any, Mapping
2
1
  from logging import Logger
2
+ from typing import Any, Mapping
3
+
3
4
  from core.messagebus import Publisher
4
- from core.rpc import Caller, Server
5
5
  from core.repo import SearchFilter
6
- from module.log.component.model.activity_model import (
7
- activity_model
8
- )
9
- from module.log.schema.activity import ActivityData
6
+ from core.rpc import Caller, Server
10
7
  from module.auth.schema.token import AccessTokenData
8
+ from module.log.component.model.activity_model import activity_model
9
+ from module.log.schema.activity import ActivityData
11
10
 
12
11
 
13
12
  def register_rpc(
14
- logger: Logger,
15
- rpc_server: Server,
16
- rpc_caller: Caller,
17
- publisher: Publisher
13
+ logger: Logger, rpc_server: Server, rpc_caller: Caller, publisher: Publisher
18
14
  ):
19
15
  logger.info('🥪 Register RPC handlers for "log.activity"')
20
16
 
21
- @rpc_server.register('log_get_activity')
17
+ @rpc_server.register("log_get_activity")
22
18
  async def get(
23
19
  keyword: str,
24
20
  criterion: Mapping[str, Any],
25
21
  limit: int,
26
22
  offset: int,
27
- user_token_data: Mapping[str, Any]
23
+ user_token_data: Mapping[str, Any],
28
24
  ) -> Mapping[str, Any]:
29
25
  result = await activity_model.get(
30
- search_filter=SearchFilter(
31
- keyword=keyword, criterion=criterion
32
- ),
26
+ search_filter=SearchFilter(keyword=keyword, criterion=criterion),
33
27
  limit=limit,
34
- offset=offset
28
+ offset=offset,
35
29
  )
36
- return result.dict()
30
+ return result.model_dump()
37
31
 
38
- @rpc_server.register('log_get_activity_by_id')
32
+ @rpc_server.register("log_get_activity_by_id")
39
33
  async def get_by_id(
40
- id: str,
41
- user_token_data: Mapping[str, Any] = {}
34
+ id: str, user_token_data: Mapping[str, Any] = {}
42
35
  ) -> Mapping[str, Any]:
43
36
  row = await activity_model.get_by_id(id)
44
- return row.dict()
37
+ return row.model_dump()
45
38
 
46
- @rpc_server.register('log_insert_activity')
39
+ @rpc_server.register("log_insert_activity")
47
40
  async def insert(
48
- data: Mapping[str, Any],
49
- user_token_data: Mapping[str, Any]
41
+ data: Mapping[str, Any], user_token_data: Mapping[str, Any]
50
42
  ) -> Mapping[str, Any]:
51
43
  user_token_data = AccessTokenData(**user_token_data)
52
- data['created_by'] = user_token_data.user_id
53
- data['updated_by'] = user_token_data.user_id
54
- row = await activity_model.insert(
55
- data=ActivityData(**data)
56
- )
57
- return row.dict()
44
+ data["created_by"] = user_token_data.user_id
45
+ data["updated_by"] = user_token_data.user_id
46
+ row = await activity_model.insert(data=ActivityData(**data))
47
+ return row.model_dump()
58
48
 
59
- @rpc_server.register('log_update_activity')
49
+ @rpc_server.register("log_update_activity")
60
50
  async def update(
61
- id: str,
62
- data: Mapping[str, Any],
63
- user_token_data: Mapping[str, Any]
51
+ id: str, data: Mapping[str, Any], user_token_data: Mapping[str, Any]
64
52
  ) -> Mapping[str, Any]:
65
53
  user_token_data = AccessTokenData(**user_token_data)
66
- data['updated_by'] = user_token_data.user_id
67
- row = await activity_model.update(
68
- id=id, data=ActivityData(**data)
69
- )
70
- return row.dict()
54
+ data["updated_by"] = user_token_data.user_id
55
+ row = await activity_model.update(id=id, data=ActivityData(**data))
56
+ return row.model_dump()
71
57
 
72
- @rpc_server.register('log_delete_activity')
73
- async def delete(
74
- id: str,
75
- user_token_data: Mapping[str, Any]
76
- ) -> Mapping[str, Any]:
58
+ @rpc_server.register("log_delete_activity")
59
+ async def delete(id: str, user_token_data: Mapping[str, Any]) -> Mapping[str, Any]:
77
60
  user_token_data = AccessTokenData(**user_token_data)
78
61
  row = await activity_model.delete(id=id)
79
- return row.dict()
62
+ return row.model_dump()
@@ -1,7 +1,7 @@
1
- from sqlalchemy import Column, Integer, Table, ForeignKey
2
1
  from module.log.component.base import Base
2
+ from sqlalchemy import Column, ForeignKey, Integer, Table
3
3
 
4
- '''
4
+ """
5
5
  You should put any "many-to-many" table declarations in this file.
6
6
  For example:
7
7
  ```
@@ -15,7 +15,7 @@ user_permission = Table(
15
15
  ```
16
16
 
17
17
  Remove the following assertions:
18
- '''
18
+ """
19
19
  assert Column
20
20
  assert Integer
21
21
  assert Table
@@ -1,16 +1,12 @@
1
1
  from logging import Logger
2
- from core.messagebus import Publisher, Consumer
2
+
3
+ from core.messagebus import Consumer, Publisher
3
4
  from core.rpc import Caller
4
- from module.log.entity.activity.event import (
5
- register_event as register_activity_event
6
- )
5
+ from module.log.entity.activity.event import register_event as register_activity_event
7
6
 
8
7
 
9
8
  def register_event(
10
- logger: Logger,
11
- consumer: Consumer,
12
- rpc_caller: Caller,
13
- publisher: Publisher
9
+ logger: Logger, consumer: Consumer, rpc_caller: Caller, publisher: Publisher
14
10
  ):
15
11
  logger.info('🥪 Register event handlers for "log"')
16
12
  register_activity_event(logger, consumer, rpc_caller, publisher)
@@ -1,8 +1,6 @@
1
- from config import (
2
- app_enable_log_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_log_module
6
4
  from helper.migration import migrate
7
5
  from module.log.component import Base
8
6
 
@@ -1,11 +1,13 @@
1
- from config import (
2
- app_enable_rpc_server, app_enable_event_handler, app_enable_api,
3
- app_enable_log_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
5
+ from config import (
6
+ app_enable_api,
7
+ app_enable_event_handler,
8
+ app_enable_log_module,
9
+ app_enable_rpc_server,
10
+ )
9
11
  from module.auth.component import authorizer
10
12
  from module.log.api import register_api
11
13
  from module.log.event import register_event
@@ -22,19 +24,16 @@ def register_log():
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,15 +1,13 @@
1
- from typing import Any
2
1
  from logging import Logger
2
+ from typing import Any
3
+
3
4
  from core.messagebus import Publisher
4
5
  from core.rpc import Caller, Server
5
6
  from module.log.entity.activity.rpc import register_rpc as register_activity_rpc
6
7
 
7
8
 
8
9
  def register_rpc(
9
- logger: Logger,
10
- rpc_server: Server,
11
- rpc_caller: Caller,
12
- publisher: Publisher
10
+ logger: Logger, rpc_server: Server, rpc_caller: Caller, publisher: Publisher
13
11
  ):
14
12
  logger.info('🥪 Register RPC handlers for "log"')
15
13
  register_activity_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
 
4
5
 
5
6
  class ActivityData(BaseDateTimeSchema):
@@ -13,6 +14,7 @@ class Activity(ActivityData):
13
14
 
14
15
  class Config:
15
16
  orm_mode = True
17
+ from_attributes = True
16
18
 
17
19
 
18
20
  class ActivityResult(BaseCountSchema):
@@ -1,17 +1,17 @@
1
- SQLAlchemy==2.0.18
2
- aiormq==6.7.7
3
- aiokafka==0.8.1
4
- alembic==1.11.3
5
- bcrypt==4.0.1
6
- fastapi==0.101.1
1
+ SQLAlchemy==2.0.25
2
+ aiormq==6.8.0
3
+ aiokafka==0.10.0
4
+ alembic==1.13.1
5
+ bcrypt==4.1.2
6
+ fastapi==0.109.0
7
7
  jsons==1.6.3
8
- pydantic==1.10.9
9
- psycopg2-binary==2.9.6
8
+ pydantic==2.5.3
9
+ psycopg2-binary==2.9.9
10
10
  python-jose==3.3.0
11
- uvicorn==0.22.0
12
- watchfiles==0.19.0
11
+ uvicorn==0.27.0
12
+ watchfiles==0.21.0
13
13
  python-multipart==0.0.6
14
- python-ulid==1.1.0
14
+ python-ulid==2.2.0
15
15
  opentelemetry-distro==0.40b0
16
16
  opentelemetry-exporter-otlp==1.19.0
17
17
  opentelemetry-instrumentation-fastapi==0.40b0
@@ -21,4 +21,4 @@ pytest==7.4.0
21
21
  pytest-cov==4.1.0
22
22
  pytest-asyncio==0.21.0
23
23
  httpx==0.24.1
24
- asgi-lifespan==2.1.0
24
+ asgi-lifespan==2.1.0
@@ -1,236 +1,206 @@
1
1
  from typing import AsyncIterator
2
- from httpx import AsyncClient
3
- from src.config import app_auth_admin_username, app_auth_admin_password
2
+
4
3
  import pytest
4
+ from httpx import AsyncClient
5
+ from src.config import app_auth_admin_password, app_auth_admin_username
5
6
 
6
7
  inserted_success_data = {
7
- 'name': 'test-create-group-success',
8
- 'description': '',
9
- 'permissions': [],
8
+ "name": "test-create-group-success",
9
+ "description": "",
10
+ "permissions": [],
10
11
  }
11
12
  to_be_updated_success_data = {
12
- 'name': 'test-group-to-be-updated-success',
13
- 'description': '',
14
- 'permissions': [],
13
+ "name": "test-group-to-be-updated-success",
14
+ "description": "",
15
+ "permissions": [],
15
16
  }
16
17
  updated_success_data = {
17
- 'name': 'test-group-updated-success',
18
- 'description': 'new-description',
19
- 'permissions': [],
18
+ "name": "test-group-updated-success",
19
+ "description": "new-description",
20
+ "permissions": [],
20
21
  }
21
22
  to_be_deleted_success_data = {
22
- 'name': 'test-group-to-be-deleted-success',
23
- 'description': '',
24
- 'permissions': [],
23
+ "name": "test-group-to-be-deleted-success",
24
+ "description": "",
25
+ "permissions": [],
25
26
  }
26
27
 
27
28
 
28
29
  @pytest.mark.asyncio
29
30
  async def test_insert_group_and_get_success(
30
- test_client_generator: AsyncIterator[AsyncClient]
31
+ test_client_generator: AsyncIterator[AsyncClient],
31
32
  ):
32
33
  async for client in test_client_generator:
33
34
  # login
34
35
  login_admin_response = await client.post(
35
- '/api/v1/auth/login',
36
+ "/api/v1/auth/login",
36
37
  json={
37
- 'identity': app_auth_admin_username,
38
- 'password': app_auth_admin_password
39
- }
38
+ "identity": app_auth_admin_username,
39
+ "password": app_auth_admin_password,
40
+ },
40
41
  )
41
42
  assert login_admin_response.status_code == 200
42
- admin_access_token = login_admin_response.json().get(
43
- 'access_token', ''
44
- )
43
+ admin_access_token = login_admin_response.json().get("access_token", "")
45
44
 
46
45
  # create group
47
46
  create_response = await client.post(
48
- '/api/v1/auth/groups',
47
+ "/api/v1/auth/groups",
49
48
  json=inserted_success_data,
50
- headers={
51
- 'Authorization': 'Bearer ' + admin_access_token
52
- }
49
+ headers={"Authorization": "Bearer " + admin_access_token},
53
50
  )
54
51
  assert create_response.status_code == 200
55
52
  json_create_response = create_response.json()
56
- create_response_id = json_create_response.get('id', '')
57
- assert create_response_id != ''
53
+ create_response_id = json_create_response.get("id", "")
54
+ assert create_response_id != ""
58
55
 
59
56
  # get_by_id
60
57
  get_by_id_response = await client.get(
61
- f'/api/v1/auth/groups/{create_response_id}',
62
- headers={
63
- 'Authorization': 'Bearer ' + admin_access_token
64
- }
58
+ f"/api/v1/auth/groups/{create_response_id}",
59
+ headers={"Authorization": "Bearer " + admin_access_token},
65
60
  )
66
61
  assert get_by_id_response.status_code == 200
67
62
  json_get_by_id_response = get_by_id_response.json()
68
- get_by_id_response_id = json_get_by_id_response.get('id', '')
63
+ get_by_id_response_id = json_get_by_id_response.get("id", "")
69
64
  assert get_by_id_response_id == create_response_id
70
65
 
71
66
  # get
72
67
  get_response = await client.get(
73
- '/api/v1/auth/groups',
74
- headers={
75
- 'Authorization': 'Bearer ' + admin_access_token
76
- }
68
+ "/api/v1/auth/groups",
69
+ headers={"Authorization": "Bearer " + admin_access_token},
77
70
  )
78
71
  assert get_response.status_code == 200
79
72
  json_get_response = get_response.json()
80
- get_response_count = json_get_response.get('count', '')
73
+ get_response_count = json_get_response.get("count", "")
81
74
  assert get_response_count > 0
82
- get_response_data = json_get_response.get('data', [])
75
+ get_response_data = json_get_response.get("data", [])
83
76
  get_created_response_data = [
84
- row for row in get_response_data
85
- if row['id'] == create_response_id
77
+ row for row in get_response_data if row["id"] == create_response_id
86
78
  ]
87
79
  assert len(get_created_response_data) == 1
88
80
 
89
81
 
90
82
  @pytest.mark.asyncio
91
83
  async def test_update_group_and_get_success(
92
- test_client_generator: AsyncIterator[AsyncClient]
84
+ test_client_generator: AsyncIterator[AsyncClient],
93
85
  ):
94
86
  async for client in test_client_generator:
95
87
  # login
96
88
  login_admin_response = await client.post(
97
- '/api/v1/auth/login',
89
+ "/api/v1/auth/login",
98
90
  json={
99
- 'identity': app_auth_admin_username,
100
- 'password': app_auth_admin_password,
101
- }
91
+ "identity": app_auth_admin_username,
92
+ "password": app_auth_admin_password,
93
+ },
102
94
  )
103
95
  assert login_admin_response.status_code == 200
104
- admin_access_token = login_admin_response.json().get(
105
- 'access_token', ''
106
- )
96
+ admin_access_token = login_admin_response.json().get("access_token", "")
107
97
 
108
98
  # create group
109
99
  create_response = await client.post(
110
- '/api/v1/auth/groups',
100
+ "/api/v1/auth/groups",
111
101
  json=to_be_updated_success_data,
112
- headers={
113
- 'Authorization': 'Bearer ' + admin_access_token
114
- }
102
+ headers={"Authorization": "Bearer " + admin_access_token},
115
103
  )
116
104
  assert create_response.status_code == 200
117
105
  json_create_response = create_response.json()
118
- create_response_id = json_create_response.get('id', '')
119
- assert create_response_id != ''
106
+ create_response_id = json_create_response.get("id", "")
107
+ assert create_response_id != ""
120
108
 
121
109
  # update group
122
110
  update_response = await client.put(
123
- f'/api/v1/auth/groups/{create_response_id}',
111
+ f"/api/v1/auth/groups/{create_response_id}",
124
112
  json=updated_success_data,
125
- headers={
126
- 'Authorization': 'Bearer ' + admin_access_token
127
- }
113
+ headers={"Authorization": "Bearer " + admin_access_token},
128
114
  )
129
115
  assert update_response.status_code == 200
130
116
  json_update_response = update_response.json()
131
- update_response_id = json_update_response.get('id', '')
117
+ update_response_id = json_update_response.get("id", "")
132
118
  assert update_response_id == create_response_id
133
119
 
134
120
  # get_by_id
135
121
  get_by_id_response = await client.get(
136
- f'/api/v1/auth/groups/{create_response_id}',
137
- headers={
138
- 'Authorization': 'Bearer ' + admin_access_token
139
- }
122
+ f"/api/v1/auth/groups/{create_response_id}",
123
+ headers={"Authorization": "Bearer " + admin_access_token},
140
124
  )
141
125
  assert get_by_id_response.status_code == 200
142
126
  json_get_by_id_response = get_by_id_response.json()
143
- get_by_id_response_id = json_get_by_id_response.get('id', '')
127
+ get_by_id_response_id = json_get_by_id_response.get("id", "")
144
128
  assert get_by_id_response_id == create_response_id
145
129
  for key, expected_value in updated_success_data.items():
146
- actual_value = json_get_by_id_response.get(key, '')
147
- assert f'{key}:{actual_value}' == f'{key}:{expected_value}'
130
+ actual_value = json_get_by_id_response.get(key, "")
131
+ assert f"{key}:{actual_value}" == f"{key}:{expected_value}"
148
132
 
149
133
  # get
150
134
  get_response = await client.get(
151
- '/api/v1/auth/groups',
152
- headers={
153
- 'Authorization': 'Bearer ' + admin_access_token
154
- }
135
+ "/api/v1/auth/groups",
136
+ headers={"Authorization": "Bearer " + admin_access_token},
155
137
  )
156
138
  assert get_response.status_code == 200
157
139
  json_get_response = get_response.json()
158
- get_response_count = json_get_response.get('count', '')
140
+ get_response_count = json_get_response.get("count", "")
159
141
  assert get_response_count > 0
160
- get_response_data = json_get_response.get('data', [])
142
+ get_response_data = json_get_response.get("data", [])
161
143
  get_created_response_data = [
162
- row for row in get_response_data
163
- if row['id'] == create_response_id
144
+ row for row in get_response_data if row["id"] == create_response_id
164
145
  ]
165
146
  assert len(get_created_response_data) == 1
166
147
 
167
148
 
168
149
  @pytest.mark.asyncio
169
150
  async def test_delete_group_and_get_success(
170
- test_client_generator: AsyncIterator[AsyncClient]
151
+ test_client_generator: AsyncIterator[AsyncClient],
171
152
  ):
172
153
  async for client in test_client_generator:
173
154
  # login
174
155
  login_admin_response = await client.post(
175
- '/api/v1/auth/login',
156
+ "/api/v1/auth/login",
176
157
  json={
177
- 'identity': app_auth_admin_username,
178
- 'password': app_auth_admin_password
179
- }
158
+ "identity": app_auth_admin_username,
159
+ "password": app_auth_admin_password,
160
+ },
180
161
  )
181
162
  assert login_admin_response.status_code == 200
182
- admin_access_token = login_admin_response.json().get(
183
- 'access_token', ''
184
- )
163
+ admin_access_token = login_admin_response.json().get("access_token", "")
185
164
 
186
165
  # create group
187
166
  create_response = await client.post(
188
- '/api/v1/auth/groups',
167
+ "/api/v1/auth/groups",
189
168
  json=to_be_deleted_success_data,
190
- headers={
191
- 'Authorization': 'Bearer ' + admin_access_token
192
- }
169
+ headers={"Authorization": "Bearer " + admin_access_token},
193
170
  )
194
171
  assert create_response.status_code == 200
195
172
  json_create_response = create_response.json()
196
- create_response_id = json_create_response.get('id', '')
197
- assert create_response_id != ''
173
+ create_response_id = json_create_response.get("id", "")
174
+ assert create_response_id != ""
198
175
 
199
176
  # create group
200
177
  delete_response = await client.delete(
201
- f'/api/v1/auth/groups/{create_response_id}',
202
- headers={
203
- 'Authorization': 'Bearer ' + admin_access_token
204
- }
178
+ f"/api/v1/auth/groups/{create_response_id}",
179
+ headers={"Authorization": "Bearer " + admin_access_token},
205
180
  )
206
181
  assert delete_response.status_code == 200
207
182
  json_delete_response = delete_response.json()
208
- delete_response_id = json_delete_response.get('id', '')
183
+ delete_response_id = json_delete_response.get("id", "")
209
184
  assert delete_response_id == create_response_id
210
185
 
211
186
  # get_by_id
212
187
  get_by_id_response = await client.get(
213
- f'/api/v1/auth/groups/{create_response_id}',
214
- headers={
215
- 'Authorization': 'Bearer ' + admin_access_token
216
- }
188
+ f"/api/v1/auth/groups/{create_response_id}",
189
+ headers={"Authorization": "Bearer " + admin_access_token},
217
190
  )
218
191
  assert get_by_id_response.status_code == 404
219
192
 
220
193
  # get
221
194
  get_response = await client.get(
222
- '/api/v1/auth/groups',
223
- headers={
224
- 'Authorization': 'Bearer ' + admin_access_token
225
- }
195
+ "/api/v1/auth/groups",
196
+ headers={"Authorization": "Bearer " + admin_access_token},
226
197
  )
227
198
  assert get_response.status_code == 200
228
199
  json_get_response = get_response.json()
229
- get_response_count = json_get_response.get('count', '')
200
+ get_response_count = json_get_response.get("count", "")
230
201
  assert get_response_count > 0
231
- get_response_data = json_get_response.get('data', [])
202
+ get_response_data = json_get_response.get("data", [])
232
203
  get_created_response_data = [
233
- row for row in get_response_data
234
- if row['id'] == create_response_id
204
+ row for row in get_response_data if row["id"] == create_response_id
235
205
  ]
236
206
  assert len(get_created_response_data) == 0