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,233 +1,203 @@
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-permission-success',
8
- 'description': '',
8
+ "name": "test-create-permission-success",
9
+ "description": "",
9
10
  }
10
11
  to_be_updated_success_data = {
11
- 'name': 'test-permission-to-be-updated-success',
12
- 'description': '',
12
+ "name": "test-permission-to-be-updated-success",
13
+ "description": "",
13
14
  }
14
15
  updated_success_data = {
15
- 'name': 'test-permission-updated-success',
16
- 'description': 'new-description',
16
+ "name": "test-permission-updated-success",
17
+ "description": "new-description",
17
18
  }
18
19
  to_be_deleted_success_data = {
19
- 'name': 'test-permission-to-be-deleted-success',
20
- 'description': '',
20
+ "name": "test-permission-to-be-deleted-success",
21
+ "description": "",
21
22
  }
22
23
 
23
24
 
24
25
  @pytest.mark.asyncio
25
26
  async def test_insert_permission_and_get_success(
26
- test_client_generator: AsyncIterator[AsyncClient]
27
+ test_client_generator: AsyncIterator[AsyncClient],
27
28
  ):
28
29
  async for client in test_client_generator:
29
30
  # login
30
31
  login_admin_response = await client.post(
31
- '/api/v1/auth/login',
32
+ "/api/v1/auth/login",
32
33
  json={
33
- 'identity': app_auth_admin_username,
34
- 'password': app_auth_admin_password
35
- }
34
+ "identity": app_auth_admin_username,
35
+ "password": app_auth_admin_password,
36
+ },
36
37
  )
37
38
  assert login_admin_response.status_code == 200
38
- admin_access_token = login_admin_response.json().get(
39
- 'access_token', ''
40
- )
39
+ admin_access_token = login_admin_response.json().get("access_token", "")
41
40
 
42
41
  # create permission
43
42
  create_response = await client.post(
44
- '/api/v1/auth/permissions',
43
+ "/api/v1/auth/permissions",
45
44
  json=inserted_success_data,
46
- headers={
47
- 'Authorization': 'Bearer ' + admin_access_token
48
- }
45
+ headers={"Authorization": "Bearer " + admin_access_token},
49
46
  )
50
47
  assert create_response.status_code == 200
51
48
  json_create_response = create_response.json()
52
- create_response_id = json_create_response.get('id', '')
53
- assert create_response_id != ''
49
+ create_response_id = json_create_response.get("id", "")
50
+ assert create_response_id != ""
54
51
 
55
52
  # get_by_id
56
53
  get_by_id_response = await client.get(
57
- f'/api/v1/auth/permissions/{create_response_id}',
58
- headers={
59
- 'Authorization': 'Bearer ' + admin_access_token
60
- }
54
+ f"/api/v1/auth/permissions/{create_response_id}",
55
+ headers={"Authorization": "Bearer " + admin_access_token},
61
56
  )
62
57
  assert get_by_id_response.status_code == 200
63
58
  json_get_by_id_response = get_by_id_response.json()
64
- get_by_id_response_id = json_get_by_id_response.get('id', '')
59
+ get_by_id_response_id = json_get_by_id_response.get("id", "")
65
60
  assert get_by_id_response_id == create_response_id
66
61
 
67
62
  # get
68
63
  get_response = await client.get(
69
- '/api/v1/auth/permissions',
70
- headers={
71
- 'Authorization': 'Bearer ' + admin_access_token
72
- }
64
+ "/api/v1/auth/permissions",
65
+ headers={"Authorization": "Bearer " + admin_access_token},
73
66
  )
74
67
  assert get_response.status_code == 200
75
68
  json_get_response = get_response.json()
76
- get_response_count = json_get_response.get('count', '')
69
+ get_response_count = json_get_response.get("count", "")
77
70
  assert get_response_count > 0
78
- get_response_data = json_get_response.get('data', [])
71
+ get_response_data = json_get_response.get("data", [])
79
72
  get_created_response_data = [
80
- row for row in get_response_data
81
- if row['id'] == create_response_id
73
+ row for row in get_response_data if row["id"] == create_response_id
82
74
  ]
83
75
  assert len(get_created_response_data) == 1
84
76
 
85
77
 
86
78
  @pytest.mark.asyncio
87
79
  async def test_update_permission_and_get_success(
88
- test_client_generator: AsyncIterator[AsyncClient]
80
+ test_client_generator: AsyncIterator[AsyncClient],
89
81
  ):
90
82
  async for client in test_client_generator:
91
83
  # login
92
84
  login_admin_response = await client.post(
93
- '/api/v1/auth/login',
85
+ "/api/v1/auth/login",
94
86
  json={
95
- 'identity': app_auth_admin_username,
96
- 'password': app_auth_admin_password,
97
- 'permissions': [],
98
- }
87
+ "identity": app_auth_admin_username,
88
+ "password": app_auth_admin_password,
89
+ "permissions": [],
90
+ },
99
91
  )
100
92
  assert login_admin_response.status_code == 200
101
- admin_access_token = login_admin_response.json().get(
102
- 'access_token', ''
103
- )
93
+ admin_access_token = login_admin_response.json().get("access_token", "")
104
94
 
105
95
  # create permission
106
96
  create_response = await client.post(
107
- '/api/v1/auth/permissions',
97
+ "/api/v1/auth/permissions",
108
98
  json=to_be_updated_success_data,
109
- headers={
110
- 'Authorization': 'Bearer ' + admin_access_token
111
- }
99
+ headers={"Authorization": "Bearer " + admin_access_token},
112
100
  )
113
101
  assert create_response.status_code == 200
114
102
  json_create_response = create_response.json()
115
- create_response_id = json_create_response.get('id', '')
116
- assert create_response_id != ''
103
+ create_response_id = json_create_response.get("id", "")
104
+ assert create_response_id != ""
117
105
 
118
106
  # update permission
119
107
  update_response = await client.put(
120
- f'/api/v1/auth/permissions/{create_response_id}',
108
+ f"/api/v1/auth/permissions/{create_response_id}",
121
109
  json=updated_success_data,
122
- headers={
123
- 'Authorization': 'Bearer ' + admin_access_token
124
- }
110
+ headers={"Authorization": "Bearer " + admin_access_token},
125
111
  )
126
112
  assert update_response.status_code == 200
127
113
  json_update_response = update_response.json()
128
- update_response_id = json_update_response.get('id', '')
114
+ update_response_id = json_update_response.get("id", "")
129
115
  assert update_response_id == create_response_id
130
116
 
131
117
  # get_by_id
132
118
  get_by_id_response = await client.get(
133
- f'/api/v1/auth/permissions/{create_response_id}',
134
- headers={
135
- 'Authorization': 'Bearer ' + admin_access_token
136
- }
119
+ f"/api/v1/auth/permissions/{create_response_id}",
120
+ headers={"Authorization": "Bearer " + admin_access_token},
137
121
  )
138
122
  assert get_by_id_response.status_code == 200
139
123
  json_get_by_id_response = get_by_id_response.json()
140
- get_by_id_response_id = json_get_by_id_response.get('id', '')
124
+ get_by_id_response_id = json_get_by_id_response.get("id", "")
141
125
  assert get_by_id_response_id == create_response_id
142
126
  for key, expected_value in updated_success_data.items():
143
- actual_value = json_get_by_id_response.get(key, '')
144
- assert f'{key}:{actual_value}' == f'{key}:{expected_value}'
127
+ actual_value = json_get_by_id_response.get(key, "")
128
+ assert f"{key}:{actual_value}" == f"{key}:{expected_value}"
145
129
 
146
130
  # get
147
131
  get_response = await client.get(
148
- '/api/v1/auth/permissions',
149
- headers={
150
- 'Authorization': 'Bearer ' + admin_access_token
151
- }
132
+ "/api/v1/auth/permissions",
133
+ headers={"Authorization": "Bearer " + admin_access_token},
152
134
  )
153
135
  assert get_response.status_code == 200
154
136
  json_get_response = get_response.json()
155
- get_response_count = json_get_response.get('count', '')
137
+ get_response_count = json_get_response.get("count", "")
156
138
  assert get_response_count > 0
157
- get_response_data = json_get_response.get('data', [])
139
+ get_response_data = json_get_response.get("data", [])
158
140
  get_created_response_data = [
159
- row for row in get_response_data
160
- if row['id'] == create_response_id
141
+ row for row in get_response_data if row["id"] == create_response_id
161
142
  ]
162
143
  assert len(get_created_response_data) == 1
163
144
 
164
145
 
165
146
  @pytest.mark.asyncio
166
147
  async def test_delete_permission_and_get_success(
167
- test_client_generator: AsyncIterator[AsyncClient]
148
+ test_client_generator: AsyncIterator[AsyncClient],
168
149
  ):
169
150
  async for client in test_client_generator:
170
151
  # login
171
152
  login_admin_response = await client.post(
172
- '/api/v1/auth/login',
153
+ "/api/v1/auth/login",
173
154
  json={
174
- 'identity': app_auth_admin_username,
175
- 'password': app_auth_admin_password
176
- }
155
+ "identity": app_auth_admin_username,
156
+ "password": app_auth_admin_password,
157
+ },
177
158
  )
178
159
  assert login_admin_response.status_code == 200
179
- admin_access_token = login_admin_response.json().get(
180
- 'access_token', ''
181
- )
160
+ admin_access_token = login_admin_response.json().get("access_token", "")
182
161
 
183
162
  # create permission
184
163
  create_response = await client.post(
185
- '/api/v1/auth/permissions',
164
+ "/api/v1/auth/permissions",
186
165
  json=to_be_deleted_success_data,
187
- headers={
188
- 'Authorization': 'Bearer ' + admin_access_token
189
- }
166
+ headers={"Authorization": "Bearer " + admin_access_token},
190
167
  )
191
168
  assert create_response.status_code == 200
192
169
  json_create_response = create_response.json()
193
- create_response_id = json_create_response.get('id', '')
194
- assert create_response_id != ''
170
+ create_response_id = json_create_response.get("id", "")
171
+ assert create_response_id != ""
195
172
 
196
173
  # create permission
197
174
  delete_response = await client.delete(
198
- f'/api/v1/auth/permissions/{create_response_id}',
199
- headers={
200
- 'Authorization': 'Bearer ' + admin_access_token
201
- }
175
+ f"/api/v1/auth/permissions/{create_response_id}",
176
+ headers={"Authorization": "Bearer " + admin_access_token},
202
177
  )
203
178
  assert delete_response.status_code == 200
204
179
  json_delete_response = delete_response.json()
205
- delete_response_id = json_delete_response.get('id', '')
180
+ delete_response_id = json_delete_response.get("id", "")
206
181
  assert delete_response_id == create_response_id
207
182
 
208
183
  # get_by_id
209
184
  get_by_id_response = await client.get(
210
- f'/api/v1/auth/permissions/{create_response_id}',
211
- headers={
212
- 'Authorization': 'Bearer ' + admin_access_token
213
- }
185
+ f"/api/v1/auth/permissions/{create_response_id}",
186
+ headers={"Authorization": "Bearer " + admin_access_token},
214
187
  )
215
188
  assert get_by_id_response.status_code == 404
216
189
 
217
190
  # get
218
191
  get_response = await client.get(
219
- '/api/v1/auth/permissions',
220
- headers={
221
- 'Authorization': 'Bearer ' + admin_access_token
222
- }
192
+ "/api/v1/auth/permissions",
193
+ headers={"Authorization": "Bearer " + admin_access_token},
223
194
  )
224
195
  assert get_response.status_code == 200
225
196
  json_get_response = get_response.json()
226
- get_response_count = json_get_response.get('count', '')
197
+ get_response_count = json_get_response.get("count", "")
227
198
  assert get_response_count > 0
228
- get_response_data = json_get_response.get('data', [])
199
+ get_response_data = json_get_response.get("data", [])
229
200
  get_created_response_data = [
230
- row for row in get_response_data
231
- if row['id'] == create_response_id
201
+ row for row in get_response_data if row["id"] == create_response_id
232
202
  ]
233
203
  assert len(get_created_response_data) == 0
@@ -1,252 +1,222 @@
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
- 'username': 'test-create-user-success',
8
- 'phone': '',
9
- 'email': '',
10
- 'password': '',
11
- 'description': '',
12
- 'groups': [],
13
- 'permissions': [],
8
+ "username": "test-create-user-success",
9
+ "phone": "",
10
+ "email": "",
11
+ "password": "",
12
+ "description": "",
13
+ "groups": [],
14
+ "permissions": [],
14
15
  }
15
16
  to_be_updated_success_data = {
16
- 'username': 'test-user-to-be-updated-success',
17
- 'phone': '',
18
- 'email': '',
19
- 'password': '',
20
- 'description': '',
21
- 'groups': [],
22
- 'permissions': [],
17
+ "username": "test-user-to-be-updated-success",
18
+ "phone": "",
19
+ "email": "",
20
+ "password": "",
21
+ "description": "",
22
+ "groups": [],
23
+ "permissions": [],
23
24
  }
24
25
  updated_success_data = {
25
- 'username': 'test-user-updated-success',
26
- 'phone': '',
27
- 'email': '',
28
- 'password': '',
29
- 'description': 'new-description',
30
- 'groups': [],
31
- 'permissions': [],
26
+ "username": "test-user-updated-success",
27
+ "phone": "",
28
+ "email": "",
29
+ "password": "",
30
+ "description": "new-description",
31
+ "groups": [],
32
+ "permissions": [],
32
33
  }
33
34
  to_be_deleted_success_data = {
34
- 'username': 'test-user-to-be-deleted-success',
35
- 'phone': '',
36
- 'email': '',
37
- 'password': '',
38
- 'description': '',
39
- 'groups': [],
40
- 'permissions': [],
35
+ "username": "test-user-to-be-deleted-success",
36
+ "phone": "",
37
+ "email": "",
38
+ "password": "",
39
+ "description": "",
40
+ "groups": [],
41
+ "permissions": [],
41
42
  }
42
43
 
43
44
 
44
45
  @pytest.mark.asyncio
45
46
  async def test_insert_user_and_get_success(
46
- test_client_generator: AsyncIterator[AsyncClient]
47
+ test_client_generator: AsyncIterator[AsyncClient],
47
48
  ):
48
49
  async for client in test_client_generator:
49
50
  # login
50
51
  login_admin_response = await client.post(
51
- '/api/v1/auth/login',
52
+ "/api/v1/auth/login",
52
53
  json={
53
- 'identity': app_auth_admin_username,
54
- 'password': app_auth_admin_password
55
- }
54
+ "identity": app_auth_admin_username,
55
+ "password": app_auth_admin_password,
56
+ },
56
57
  )
57
58
  assert login_admin_response.status_code == 200
58
- admin_access_token = login_admin_response.json().get(
59
- 'access_token', ''
60
- )
59
+ admin_access_token = login_admin_response.json().get("access_token", "")
61
60
 
62
61
  # create user
63
62
  create_response = await client.post(
64
- '/api/v1/auth/users',
63
+ "/api/v1/auth/users",
65
64
  json=inserted_success_data,
66
- headers={
67
- 'Authorization': 'Bearer ' + admin_access_token
68
- }
65
+ headers={"Authorization": "Bearer " + admin_access_token},
69
66
  )
70
67
  assert create_response.status_code == 200
71
68
  json_create_response = create_response.json()
72
- create_response_id = json_create_response.get('id', '')
73
- assert create_response_id != ''
69
+ create_response_id = json_create_response.get("id", "")
70
+ assert create_response_id != ""
74
71
 
75
72
  # get_by_id
76
73
  get_by_id_response = await client.get(
77
- f'/api/v1/auth/users/{create_response_id}',
78
- headers={
79
- 'Authorization': 'Bearer ' + admin_access_token
80
- }
74
+ f"/api/v1/auth/users/{create_response_id}",
75
+ headers={"Authorization": "Bearer " + admin_access_token},
81
76
  )
82
77
  assert get_by_id_response.status_code == 200
83
78
  json_get_by_id_response = get_by_id_response.json()
84
- get_by_id_response_id = json_get_by_id_response.get('id', '')
79
+ get_by_id_response_id = json_get_by_id_response.get("id", "")
85
80
  assert get_by_id_response_id == create_response_id
86
81
 
87
82
  # get
88
83
  get_response = await client.get(
89
- '/api/v1/auth/users',
90
- headers={
91
- 'Authorization': 'Bearer ' + admin_access_token
92
- }
84
+ "/api/v1/auth/users",
85
+ headers={"Authorization": "Bearer " + admin_access_token},
93
86
  )
94
87
  assert get_response.status_code == 200
95
88
  json_get_response = get_response.json()
96
- get_response_count = json_get_response.get('count', '')
89
+ get_response_count = json_get_response.get("count", "")
97
90
  assert get_response_count > 0
98
- get_response_data = json_get_response.get('data', [])
91
+ get_response_data = json_get_response.get("data", [])
99
92
  get_created_response_data = [
100
- row for row in get_response_data
101
- if row['id'] == create_response_id
93
+ row for row in get_response_data if row["id"] == create_response_id
102
94
  ]
103
95
  assert len(get_created_response_data) == 1
104
96
 
105
97
 
106
98
  @pytest.mark.asyncio
107
99
  async def test_update_user_and_get_success(
108
- test_client_generator: AsyncIterator[AsyncClient]
100
+ test_client_generator: AsyncIterator[AsyncClient],
109
101
  ):
110
102
  async for client in test_client_generator:
111
103
  # login
112
104
  login_admin_response = await client.post(
113
- '/api/v1/auth/login',
105
+ "/api/v1/auth/login",
114
106
  json={
115
- 'identity': app_auth_admin_username,
116
- 'password': app_auth_admin_password,
117
- }
107
+ "identity": app_auth_admin_username,
108
+ "password": app_auth_admin_password,
109
+ },
118
110
  )
119
111
  assert login_admin_response.status_code == 200
120
- admin_access_token = login_admin_response.json().get(
121
- 'access_token', ''
122
- )
112
+ admin_access_token = login_admin_response.json().get("access_token", "")
123
113
 
124
114
  # create user
125
115
  create_response = await client.post(
126
- '/api/v1/auth/users',
116
+ "/api/v1/auth/users",
127
117
  json=to_be_updated_success_data,
128
- headers={
129
- 'Authorization': 'Bearer ' + admin_access_token
130
- }
118
+ headers={"Authorization": "Bearer " + admin_access_token},
131
119
  )
132
120
  assert create_response.status_code == 200
133
121
  json_create_response = create_response.json()
134
- create_response_id = json_create_response.get('id', '')
135
- assert create_response_id != ''
122
+ create_response_id = json_create_response.get("id", "")
123
+ assert create_response_id != ""
136
124
 
137
125
  # update user
138
126
  update_response = await client.put(
139
- f'/api/v1/auth/users/{create_response_id}',
127
+ f"/api/v1/auth/users/{create_response_id}",
140
128
  json=updated_success_data,
141
- headers={
142
- 'Authorization': 'Bearer ' + admin_access_token
143
- }
129
+ headers={"Authorization": "Bearer " + admin_access_token},
144
130
  )
145
131
  assert update_response.status_code == 200
146
132
  json_update_response = update_response.json()
147
- update_response_id = json_update_response.get('id', '')
133
+ update_response_id = json_update_response.get("id", "")
148
134
  assert update_response_id == create_response_id
149
135
 
150
136
  # get_by_id
151
137
  get_by_id_response = await client.get(
152
- f'/api/v1/auth/users/{create_response_id}',
153
- headers={
154
- 'Authorization': 'Bearer ' + admin_access_token
155
- }
138
+ f"/api/v1/auth/users/{create_response_id}",
139
+ headers={"Authorization": "Bearer " + admin_access_token},
156
140
  )
157
141
  assert get_by_id_response.status_code == 200
158
142
  json_get_by_id_response = get_by_id_response.json()
159
- get_by_id_response_id = json_get_by_id_response.get('id', '')
143
+ get_by_id_response_id = json_get_by_id_response.get("id", "")
160
144
  assert get_by_id_response_id == create_response_id
161
145
  for key, expected_value in updated_success_data.items():
162
- actual_value = json_get_by_id_response.get(key, '')
163
- assert f'{key}:{actual_value}' == f'{key}:{expected_value}'
146
+ actual_value = json_get_by_id_response.get(key, "")
147
+ assert f"{key}:{actual_value}" == f"{key}:{expected_value}"
164
148
 
165
149
  # get
166
150
  get_response = await client.get(
167
- '/api/v1/auth/users',
168
- headers={
169
- 'Authorization': 'Bearer ' + admin_access_token
170
- }
151
+ "/api/v1/auth/users",
152
+ headers={"Authorization": "Bearer " + admin_access_token},
171
153
  )
172
154
  assert get_response.status_code == 200
173
155
  json_get_response = get_response.json()
174
- get_response_count = json_get_response.get('count', '')
156
+ get_response_count = json_get_response.get("count", "")
175
157
  assert get_response_count > 0
176
- get_response_data = json_get_response.get('data', [])
158
+ get_response_data = json_get_response.get("data", [])
177
159
  get_created_response_data = [
178
- row for row in get_response_data
179
- if row['id'] == create_response_id
160
+ row for row in get_response_data if row["id"] == create_response_id
180
161
  ]
181
162
  assert len(get_created_response_data) == 1
182
163
 
183
164
 
184
165
  @pytest.mark.asyncio
185
166
  async def test_delete_user_and_get_success(
186
- test_client_generator: AsyncIterator[AsyncClient]
167
+ test_client_generator: AsyncIterator[AsyncClient],
187
168
  ):
188
169
  async for client in test_client_generator:
189
170
  # login
190
171
  login_admin_response = await client.post(
191
- '/api/v1/auth/login',
172
+ "/api/v1/auth/login",
192
173
  json={
193
- 'identity': app_auth_admin_username,
194
- 'password': app_auth_admin_password
195
- }
174
+ "identity": app_auth_admin_username,
175
+ "password": app_auth_admin_password,
176
+ },
196
177
  )
197
178
  assert login_admin_response.status_code == 200
198
- admin_access_token = login_admin_response.json().get(
199
- 'access_token', ''
200
- )
179
+ admin_access_token = login_admin_response.json().get("access_token", "")
201
180
 
202
181
  # create user
203
182
  create_response = await client.post(
204
- '/api/v1/auth/users',
183
+ "/api/v1/auth/users",
205
184
  json=to_be_deleted_success_data,
206
- headers={
207
- 'Authorization': 'Bearer ' + admin_access_token
208
- }
185
+ headers={"Authorization": "Bearer " + admin_access_token},
209
186
  )
210
187
  assert create_response.status_code == 200
211
188
  json_create_response = create_response.json()
212
- create_response_id = json_create_response.get('id', '')
213
- assert create_response_id != ''
189
+ create_response_id = json_create_response.get("id", "")
190
+ assert create_response_id != ""
214
191
 
215
192
  # create user
216
193
  delete_response = await client.delete(
217
- f'/api/v1/auth/users/{create_response_id}',
218
- headers={
219
- 'Authorization': 'Bearer ' + admin_access_token
220
- }
194
+ f"/api/v1/auth/users/{create_response_id}",
195
+ headers={"Authorization": "Bearer " + admin_access_token},
221
196
  )
222
197
  assert delete_response.status_code == 200
223
198
  json_delete_response = delete_response.json()
224
- delete_response_id = json_delete_response.get('id', '')
199
+ delete_response_id = json_delete_response.get("id", "")
225
200
  assert delete_response_id == create_response_id
226
201
 
227
202
  # get_by_id
228
203
  get_by_id_response = await client.get(
229
- f'/api/v1/auth/users/{create_response_id}',
230
- headers={
231
- 'Authorization': 'Bearer ' + admin_access_token
232
- }
204
+ f"/api/v1/auth/users/{create_response_id}",
205
+ headers={"Authorization": "Bearer " + admin_access_token},
233
206
  )
234
207
  assert get_by_id_response.status_code == 404
235
208
 
236
209
  # get
237
210
  get_response = await client.get(
238
- '/api/v1/auth/users',
239
- headers={
240
- 'Authorization': 'Bearer ' + admin_access_token
241
- }
211
+ "/api/v1/auth/users",
212
+ headers={"Authorization": "Bearer " + admin_access_token},
242
213
  )
243
214
  assert get_response.status_code == 200
244
215
  json_get_response = get_response.json()
245
- get_response_count = json_get_response.get('count', '')
216
+ get_response_count = json_get_response.get("count", "")
246
217
  assert get_response_count > 0
247
- get_response_data = json_get_response.get('data', [])
218
+ get_response_data = json_get_response.get("data", [])
248
219
  get_created_response_data = [
249
- row for row in get_response_data
250
- if row['id'] == create_response_id
220
+ row for row in get_response_data if row["id"] == create_response_id
251
221
  ]
252
222
  assert len(get_created_response_data) == 0