ul-api-utils 8.1.9__tar.gz → 8.1.11__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ul-api-utils might be problematic. Click here for more details.

Files changed (161) hide show
  1. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/PKG-INFO +1 -1
  2. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/setup.py +1 -1
  3. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/api_resource_fn_typing.py +21 -5
  4. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils.egg-info/PKG-INFO +1 -1
  5. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/LICENSE +0 -0
  6. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/README.md +0 -0
  7. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/__init__.py +0 -0
  8. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/conf.py +0 -0
  9. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/main.py +0 -0
  10. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/models/__init__.py +0 -0
  11. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/permissions.py +0 -0
  12. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/pure_flask_example.py +0 -0
  13. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/rate_limit_load.py +0 -0
  14. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/redis_repository.py +0 -0
  15. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/routes/__init__.py +0 -0
  16. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/routes/api_some.py +0 -0
  17. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/sockets/__init__.py +0 -0
  18. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/sockets/on_connect.py +0 -0
  19. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/sockets/on_disconnect.py +0 -0
  20. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/sockets/on_json.py +0 -0
  21. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/sockets/on_message.py +0 -0
  22. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/sockets/on_open.py +0 -0
  23. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/workers/__init__.py +0 -0
  24. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/example/workers/worker.py +0 -0
  25. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/setup.cfg +0 -0
  26. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/__init__.py +0 -0
  27. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/access/__init__.py +0 -0
  28. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/__init__.py +0 -0
  29. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/api_request.py +0 -0
  30. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/api_resource.py +0 -0
  31. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/api_resource_config.py +0 -0
  32. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/api_resource_error_handling.py +0 -0
  33. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/api_resource_type.py +0 -0
  34. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/api_response.py +0 -0
  35. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/api_response_db.py +0 -0
  36. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/api_response_payload_alias.py +0 -0
  37. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/db_types.py +0 -0
  38. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/api_resource/signature_check.py +0 -0
  39. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/__init__.py +0 -0
  40. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/cmd_enc_keys.py +0 -0
  41. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/cmd_gen_api_user_token.py +0 -0
  42. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/cmd_gen_new_api_user.py +0 -0
  43. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/cmd_generate_api_docs.py +0 -0
  44. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/cmd_start.py +0 -0
  45. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/cmd_worker_start.py +0 -0
  46. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/start/__init__.py +0 -0
  47. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/start/gunicorn.conf.local.py +0 -0
  48. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/start/gunicorn.conf.py +0 -0
  49. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/commands/start/wsgi.py +0 -0
  50. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/conf/ul-debugger-main.js +0 -0
  51. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/conf/ul-debugger-ui.js +0 -0
  52. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/conf.py +0 -0
  53. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/const.py +0 -0
  54. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/debug/__init__.py +0 -0
  55. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/debug/debugger.py +0 -0
  56. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/debug/malloc.py +0 -0
  57. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/debug/stat.py +0 -0
  58. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/encrypt/__init__.py +0 -0
  59. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/encrypt/encrypt_decrypt_abstract.py +0 -0
  60. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/encrypt/encrypt_decrypt_aes_xtea.py +0 -0
  61. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/errors.py +0 -0
  62. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/internal_api/__init__.py +0 -0
  63. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/internal_api/__tests__/__init__.py +0 -0
  64. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/internal_api/__tests__/internal_api.py +0 -0
  65. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/internal_api/__tests__/internal_api_content_type.py +0 -0
  66. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/internal_api/internal_api.py +0 -0
  67. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/internal_api/internal_api_check_context.py +0 -0
  68. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/internal_api/internal_api_error.py +0 -0
  69. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/internal_api/internal_api_response.py +0 -0
  70. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/main.py +0 -0
  71. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/modules/__init__.py +0 -0
  72. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/modules/__tests__/__init__.py +0 -0
  73. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/modules/__tests__/test_api_sdk_jwt.py +0 -0
  74. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/modules/api_sdk.py +0 -0
  75. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/modules/api_sdk_config.py +0 -0
  76. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/modules/api_sdk_jwt.py +0 -0
  77. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/modules/intermediate_state.py +0 -0
  78. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/modules/worker_context.py +0 -0
  79. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/modules/worker_sdk.py +0 -0
  80. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/modules/worker_sdk_config.py +0 -0
  81. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/py.typed +0 -0
  82. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/__init__.py +0 -0
  83. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/caching.py +0 -0
  84. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/debugger_scripts.py +0 -0
  85. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/health_check/__init__.py +0 -0
  86. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/health_check/const.py +0 -0
  87. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/health_check/health_check.py +0 -0
  88. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/health_check/health_check_template.py +0 -0
  89. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/health_check/resource.py +0 -0
  90. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/not_implemented.py +0 -0
  91. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/permissions.py +0 -0
  92. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/rate_limitter.py +0 -0
  93. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/socketio.py +0 -0
  94. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/swagger.py +0 -0
  95. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/web_forms/__init__.py +0 -0
  96. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/web_forms/custom_fields/__init__.py +0 -0
  97. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/web_forms/custom_fields/custom_checkbox_select.py +0 -0
  98. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/web_forms/custom_widgets/__init__.py +0 -0
  99. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/web_forms/custom_widgets/custom_select_widget.py +0 -0
  100. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/web_forms/custom_widgets/custom_text_input_widget.py +0 -0
  101. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/resources/web_forms/uni_form.py +0 -0
  102. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/sentry.py +0 -0
  103. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/__init__.py +0 -0
  104. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/__tests__/__init__.py +0 -0
  105. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/__tests__/api_path_version.py +0 -0
  106. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/__tests__/unwrap_typing.py +0 -0
  107. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/api_encoding.py +0 -0
  108. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/api_format.py +0 -0
  109. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/api_method.py +0 -0
  110. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/api_pagination.py +0 -0
  111. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/api_path_version.py +0 -0
  112. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/api_request_info.py +0 -0
  113. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/avro.py +0 -0
  114. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/broker_topics_message_count.py +0 -0
  115. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/cached_per_request.py +0 -0
  116. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/colors.py +0 -0
  117. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/constants.py +0 -0
  118. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/decode_base64.py +0 -0
  119. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/deprecated.py +0 -0
  120. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flags.py +0 -0
  121. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/__init__.py +0 -0
  122. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/conf.py +0 -0
  123. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/exceptions.py +0 -0
  124. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/specifiers/__init__.py +0 -0
  125. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_models.py +0 -0
  126. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_specifier.py +0 -0
  127. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_three_specifier.py +0 -0
  128. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_version.py +0 -0
  129. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/utils/__init__.py +0 -0
  130. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/utils/input_type.py +0 -0
  131. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/utils/parameter_type.py +0 -0
  132. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/utils/replace_in_dict.py +0 -0
  133. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/utils/request_type.py +0 -0
  134. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/utils/schema_type.py +0 -0
  135. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/flask_swagger_generator/utils/security_type.py +0 -0
  136. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/imports.py +0 -0
  137. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/instance_checks.py +0 -0
  138. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/jinja/__init__.py +0 -0
  139. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/jinja/t_url_for.py +0 -0
  140. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/jinja/to_pretty_json.py +0 -0
  141. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/json_encoder.py +0 -0
  142. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/load_modules.py +0 -0
  143. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/memory_db/__init__.py +0 -0
  144. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/memory_db/__tests__/__init__.py +0 -0
  145. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/memory_db/errors.py +0 -0
  146. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/memory_db/repository.py +0 -0
  147. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/token_check.py +0 -0
  148. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/token_check_through_request.py +0 -0
  149. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/unwrap_typing.py +0 -0
  150. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/utils/uuid_converter.py +0 -0
  151. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/validators/__init__.py +0 -0
  152. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/validators/__tests__/__init__.py +0 -0
  153. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/validators/__tests__/test_custom_fields.py +0 -0
  154. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/validators/custom_fields.py +0 -0
  155. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/validators/validate_empty_object.py +0 -0
  156. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils/validators/validate_uuid.py +0 -0
  157. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils.egg-info/SOURCES.txt +0 -0
  158. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils.egg-info/dependency_links.txt +0 -0
  159. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils.egg-info/entry_points.txt +0 -0
  160. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils.egg-info/requires.txt +0 -0
  161. {ul-api-utils-8.1.9 → ul-api-utils-8.1.11}/ul_api_utils.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ul-api-utils
3
- Version: 8.1.9
3
+ Version: 8.1.11
4
4
  Summary: Python api utils
5
5
  Author: Unic-lab
6
6
  Author-email:
@@ -9,7 +9,7 @@ with open(path.join(HERE, 'README.md'), encoding='utf-8') as f:
9
9
 
10
10
  setup(
11
11
  name='ul-api-utils',
12
- version='8.1.9',
12
+ version='8.1.11',
13
13
  description='Python api utils',
14
14
  author='Unic-lab',
15
15
  long_description=long_description,
@@ -1,5 +1,5 @@
1
1
  import inspect
2
- from typing import NamedTuple, Any, Callable, Optional, List, Dict, Type, Tuple, TYPE_CHECKING
2
+ from typing import NamedTuple, Any, Callable, Optional, List, Dict, Type, Tuple, TYPE_CHECKING, Union, get_origin, get_args
3
3
 
4
4
  from flask import request
5
5
  from pydantic import BaseModel, ValidationError, validate_call, TypeAdapter
@@ -25,6 +25,18 @@ if TYPE_CHECKING:
25
25
  FN_SYSTEM_PROPS = {"api_resource", "query", "body", "return", "body_validation_error", "query_validation_error"}
26
26
 
27
27
 
28
+ def _is_complex_type(annotation):
29
+ origin = get_origin(annotation)
30
+
31
+ # Optional[type_] is typing.Union
32
+ if origin is Union:
33
+ return any(_is_complex_type(arg) for arg in get_args(annotation))
34
+
35
+ if origin is None:
36
+ return annotation not in (str, int, float, bool, type(None))
37
+
38
+ return origin in (list, dict, tuple, set)
39
+
28
40
  def _patch_errors(dest_errors: List[Dict[str, str]], errors: List[ErrorDetails], kind: str) -> List[Dict[str, str]]:
29
41
  for error in errors:
30
42
  dest_errors.append({
@@ -156,7 +168,9 @@ class ApiResourceFnTyping(NamedTuple):
156
168
  return kwargs, errors
157
169
  body = self._get_body()
158
170
  try:
159
- kwargs['body'] = TypeAdapter(Type[BaseModel | List[BaseModel]]).validate_python(body)
171
+ expected_typing: Type[BaseModel | List[BaseModel]] = List[self.body_typing] \
172
+ if self.request_body_many else self.body_typing
173
+ kwargs['body'] = TypeAdapter(expected_typing).validate_python(body)
160
174
  except ValidationError as ve:
161
175
  if self.has_body_validation_error:
162
176
  kwargs['body_validation_error'] = ve
@@ -168,11 +182,13 @@ class ApiResourceFnTyping(NamedTuple):
168
182
  if self.query_typing is None:
169
183
  return kwargs, errors
170
184
  try:
171
- is_complex_field = lambda field: field.annotation and not isinstance(field.annotation, (str, int, float, bool, type(None))) # noqa: E731
172
185
  kwargs["query"] = set_model(self.query_typing, {
173
186
  **request.args.to_dict(),
174
- **{key: value for key, value in request.args.to_dict(flat=False).items()
175
- if key in self.query_typing.model_fields and is_complex_field(self.query_typing.model_fields[key])},
187
+ **{
188
+ key: value for key, value in request.args.to_dict(flat=False).items()
189
+ if key in self.query_typing.model_fields
190
+ and _is_complex_type(self.query_typing.model_fields[key].annotation)
191
+ },
176
192
  })
177
193
  except ValidationError as ve:
178
194
  if self.has_query_validation_error:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ul-api-utils
3
- Version: 8.1.9
3
+ Version: 8.1.11
4
4
  Summary: Python api utils
5
5
  Author: Unic-lab
6
6
  Author-email:
File without changes
File without changes
File without changes