ul-api-utils 8.1.16__tar.gz → 8.1.18__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.
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/PKG-INFO +1 -1
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/setup.py +1 -1
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_resource.py +4 -3
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_resource_fn_typing.py +2 -3
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_response.py +1 -1
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/internal_api_response.py +6 -6
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/json_encoder.py +3 -1
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/unwrap_typing.py +4 -1
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/validators/custom_fields.py +9 -4
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils.egg-info/PKG-INFO +1 -1
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/LICENSE +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/README.md +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/conf.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/main.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/models/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/permissions.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/pure_flask_example.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/rate_limit_load.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/redis_repository.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/routes/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/routes/api_some.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/sockets/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/sockets/on_connect.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/sockets/on_disconnect.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/sockets/on_json.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/sockets/on_message.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/sockets/on_open.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/workers/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/example/workers/worker.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/setup.cfg +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/access/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_request.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_resource_config.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_resource_error_handling.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_resource_type.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_response_db.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_response_payload_alias.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/db_types.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/signature_check.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/cmd_enc_keys.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/cmd_gen_api_user_token.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/cmd_gen_new_api_user.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/cmd_generate_api_docs.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/cmd_start.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/cmd_worker_start.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/start/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/start/gunicorn.conf.local.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/start/gunicorn.conf.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/start/wsgi.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/conf/ul-debugger-main.js +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/conf/ul-debugger-ui.js +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/conf.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/const.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/debug/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/debug/debugger.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/debug/malloc.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/debug/stat.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/encrypt/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/encrypt/encrypt_decrypt_abstract.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/encrypt/encrypt_decrypt_aes_xtea.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/errors.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/__tests__/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/__tests__/internal_api.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/__tests__/internal_api_content_type.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/internal_api.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/internal_api_check_context.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/internal_api_error.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/main.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/__tests__/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/__tests__/test_api_sdk_jwt.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/api_sdk.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/api_sdk_config.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/api_sdk_jwt.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/intermediate_state.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/worker_context.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/worker_sdk.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/worker_sdk_config.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/py.typed +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/caching.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/debugger_scripts.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/health_check/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/health_check/const.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/health_check/health_check.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/health_check/health_check_template.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/health_check/resource.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/not_implemented.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/permissions.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/rate_limitter.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/socketio.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/swagger.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/web_forms/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/web_forms/custom_fields/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/web_forms/custom_fields/custom_checkbox_select.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/web_forms/custom_widgets/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/web_forms/custom_widgets/custom_select_widget.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/web_forms/custom_widgets/custom_text_input_widget.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/web_forms/uni_form.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/sentry.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/__tests__/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/__tests__/api_path_version.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/__tests__/unwrap_typing.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/api_encoding.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/api_format.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/api_method.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/api_pagination.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/api_path_version.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/api_request_info.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/avro.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/broker_topics_message_count.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/cached_per_request.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/colors.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/constants.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/decode_base64.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/deprecated.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flags.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/conf.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/exceptions.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/specifiers/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_models.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_specifier.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_three_specifier.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_version.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/utils/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/utils/input_type.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/utils/parameter_type.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/utils/replace_in_dict.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/utils/request_type.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/utils/schema_type.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/utils/security_type.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/imports.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/instance_checks.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/jinja/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/jinja/t_url_for.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/jinja/to_pretty_json.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/load_modules.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/memory_db/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/memory_db/__tests__/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/memory_db/errors.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/memory_db/repository.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/token_check.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/token_check_through_request.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/uuid_converter.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/validators/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/validators/__tests__/__init__.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/validators/__tests__/test_custom_fields.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/validators/validate_empty_object.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/validators/validate_uuid.py +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils.egg-info/SOURCES.txt +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils.egg-info/dependency_links.txt +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils.egg-info/entry_points.txt +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils.egg-info/requires.txt +0 -0
- {ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils.egg-info/top_level.txt +0 -0
|
@@ -16,8 +16,9 @@ from ul_api_utils.api_resource.api_resource_error_handling import WEB_EXCEPTION_
|
|
|
16
16
|
ProcessingExceptionsParams, WEB_UNKNOWN_ERROR_PARAMS
|
|
17
17
|
from ul_api_utils.api_resource.api_resource_fn_typing import ApiResourceFnTyping
|
|
18
18
|
from ul_api_utils.api_resource.api_resource_type import ApiResourceType
|
|
19
|
-
from ul_api_utils.api_resource.api_response import JsonApiResponse, HtmlApiResponse, FileApiResponse,
|
|
20
|
-
|
|
19
|
+
from ul_api_utils.api_resource.api_response import JsonApiResponse, HtmlApiResponse, FileApiResponse, \
|
|
20
|
+
JsonApiResponsePayload, EmptyJsonApiResponse, \
|
|
21
|
+
RedirectApiResponse, ProxyJsonApiResponse, RootJsonApiResponse, RootJsonApiResponsePayload
|
|
21
22
|
from ul_api_utils.conf import APPLICATION_ENV, APPLICATION_JWT_PUBLIC_KEY, APPLICATION_DEBUG
|
|
22
23
|
from ul_api_utils.const import REQUEST_HEADER__X_FORWARDED_FOR, \
|
|
23
24
|
RESPONSE_HEADER__WWW_AUTH, OOPS, REQUEST_HEADER__USER_AGENT
|
|
@@ -38,7 +39,7 @@ TPayload = TypeVar('TPayload')
|
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
T = TypeVar('T')
|
|
41
|
-
TResp = TypeVar('TResp', bound=JsonApiResponsePayload)
|
|
42
|
+
TResp = TypeVar('TResp', bound=Union[JsonApiResponsePayload, RootJsonApiResponsePayload[Any]])
|
|
42
43
|
|
|
43
44
|
|
|
44
45
|
class ApiResource:
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_resource_fn_typing.py
RENAMED
|
@@ -25,7 +25,7 @@ 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):
|
|
28
|
+
def _is_complex_type(annotation: Any) -> bool:
|
|
29
29
|
origin = get_origin(annotation)
|
|
30
30
|
|
|
31
31
|
# Optional[type_] is typing.Union
|
|
@@ -165,8 +165,7 @@ class ApiResourceFnTyping(NamedTuple):
|
|
|
165
165
|
return kwargs, errors
|
|
166
166
|
body = self._get_body()
|
|
167
167
|
try:
|
|
168
|
-
expected_typing: Type[BaseModel | List[BaseModel]] = List[self.body_typing]
|
|
169
|
-
if self.request_body_many else self.body_typing
|
|
168
|
+
expected_typing: Type[BaseModel | List[BaseModel]] = List[self.body_typing] if self.request_body_many else self.body_typing # type: ignore
|
|
170
169
|
kwargs['body'] = TypeAdapter(expected_typing).validate_python(body)
|
|
171
170
|
except ValidationError as ve:
|
|
172
171
|
if self.has_body_validation_error:
|
|
@@ -168,7 +168,7 @@ class DictJsonApiResponsePayload(RootJsonApiResponsePayload[Dict[str, Any]]):
|
|
|
168
168
|
pass
|
|
169
169
|
|
|
170
170
|
|
|
171
|
-
TProxyPayload = TypeVar('TProxyPayload', bound=Union[JsonApiResponsePayload, List[JsonApiResponsePayload], None])
|
|
171
|
+
TProxyPayload = TypeVar('TProxyPayload', bound=Union[JsonApiResponsePayload, List[JsonApiResponsePayload], RootJsonApiResponsePayload[Any], List[RootJsonApiResponsePayload[Any]], None])
|
|
172
172
|
|
|
173
173
|
|
|
174
174
|
class ProxyJsonApiResponse(Generic[TProxyPayload], EmptyJsonApiResponse):
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/internal_api_response.py
RENAMED
|
@@ -7,7 +7,7 @@ from typing import Any, Optional, List, Generic, Type, TypeVar, Union, Dict, Nam
|
|
|
7
7
|
import requests
|
|
8
8
|
from pydantic import ValidationError
|
|
9
9
|
|
|
10
|
-
from ul_api_utils.api_resource.api_response import JsonApiResponsePayload
|
|
10
|
+
from ul_api_utils.api_resource.api_response import JsonApiResponsePayload, RootJsonApiResponsePayload
|
|
11
11
|
from ul_api_utils.api_resource.signature_check import set_model
|
|
12
12
|
from ul_api_utils.const import RESPONSE_PROP_DEBUG_STATS, RESPONSE_PROP_PAYLOAD, RESPONSE_PROP_OK, RESPONSE_PROP_ERRORS, RESPONSE_PROP_TOTAL, RESPONSE_PROP_COUNT, MIME__JSON, \
|
|
13
13
|
RESPONSE_HEADER__CONTENT_TYPE
|
|
@@ -18,7 +18,7 @@ from ul_api_utils.utils.api_format import ApiFormat
|
|
|
18
18
|
from ul_api_utils.internal_api.internal_api_error import InternalApiResponseErrorObj
|
|
19
19
|
from ul_api_utils.utils.unwrap_typing import UnwrappedOptionalObjOrListOfObj
|
|
20
20
|
|
|
21
|
-
TPyloadType = TypeVar('TPyloadType', bound=Union[JsonApiResponsePayload, List[JsonApiResponsePayload], None])
|
|
21
|
+
TPyloadType = TypeVar('TPyloadType', bound=Union[JsonApiResponsePayload, List[JsonApiResponsePayload], RootJsonApiResponsePayload[Any], List[RootJsonApiResponsePayload[Any]], None])
|
|
22
22
|
TResp = TypeVar('TResp', bound='InternalApiResponse[Any]')
|
|
23
23
|
|
|
24
24
|
|
|
@@ -73,17 +73,17 @@ class InternalApiResponse(Generic[TPyloadType]):
|
|
|
73
73
|
|
|
74
74
|
self._parsed_schema: Optional[InternalApiResponseSchema] = None
|
|
75
75
|
self._parsed_json: Any = None
|
|
76
|
-
self._parsed_payload: Union[None, JsonApiResponsePayload, List[JsonApiResponsePayload]] = None
|
|
76
|
+
self._parsed_payload: Union[None, JsonApiResponsePayload, List[JsonApiResponsePayload], RootJsonApiResponsePayload[Any], List[RootJsonApiResponsePayload[Any]]] = None
|
|
77
77
|
|
|
78
78
|
self._status_checked = False
|
|
79
79
|
self._info = info
|
|
80
80
|
|
|
81
81
|
if payload_type is not None:
|
|
82
|
-
self._payload_type = UnwrappedOptionalObjOrListOfObj.parse(payload_type, JsonApiResponsePayload)
|
|
82
|
+
self._payload_type = UnwrappedOptionalObjOrListOfObj.parse(payload_type, JsonApiResponsePayload) or UnwrappedOptionalObjOrListOfObj.parse(payload_type, RootJsonApiResponsePayload)
|
|
83
83
|
if self._payload_type is None:
|
|
84
|
-
|
|
84
|
+
tn1, tn2 = JsonApiResponsePayload.__name__, RootJsonApiResponsePayload.__name__
|
|
85
85
|
raise ValueError(
|
|
86
|
-
f'payload_typing is invalid. must be Union[Type[{
|
|
86
|
+
f'payload_typing is invalid. must be Union[Type[{tn1} | {tn2}], Optional[Type[{tn1} | {tn2}]], List[Type[{tn1} | {tn2}]], Optional[List[Type[{tn1} | {tn2}]]]]. {payload_type} was given',
|
|
87
87
|
)
|
|
88
88
|
|
|
89
89
|
def typed(self, payload_type: Type[TPyloadType]) -> 'InternalApiResponse[TPyloadType]':
|
|
@@ -2,7 +2,7 @@ import dataclasses
|
|
|
2
2
|
import decimal
|
|
3
3
|
import json
|
|
4
4
|
from base64 import b64encode
|
|
5
|
-
from datetime import date, datetime
|
|
5
|
+
from datetime import date, datetime, time
|
|
6
6
|
from enum import Enum
|
|
7
7
|
from json import JSONEncoder
|
|
8
8
|
from typing import Dict, Any, Union, List, Optional, TYPE_CHECKING
|
|
@@ -62,6 +62,8 @@ class CustomJSONEncoder(JSONEncoder):
|
|
|
62
62
|
return str(obj.isoformat())
|
|
63
63
|
if isinstance(obj, date):
|
|
64
64
|
return str(obj.isoformat())
|
|
65
|
+
if isinstance(obj, time):
|
|
66
|
+
return str(obj.isoformat())
|
|
65
67
|
if isinstance(obj, UUID):
|
|
66
68
|
return str(obj)
|
|
67
69
|
if isinstance(obj, Enum):
|
|
@@ -2,6 +2,8 @@ from dataclasses import dataclass
|
|
|
2
2
|
from types import NoneType
|
|
3
3
|
from typing import NamedTuple, Type, Tuple, _GenericAlias, _UnionGenericAlias, Any, Union, Optional, TypeVar, Generic, Callable # type: ignore
|
|
4
4
|
|
|
5
|
+
from ul_api_utils.api_resource.api_response import RootJsonApiResponsePayload
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
class TypingType(NamedTuple):
|
|
7
9
|
value: Type[Any]
|
|
@@ -47,6 +49,7 @@ def unwrap_typing(t: Type[Any]) -> Union[TypingGeneric, TypingUnion, TypingType,
|
|
|
47
49
|
|
|
48
50
|
T = TypeVar('T')
|
|
49
51
|
TVal = TypeVar('TVal')
|
|
52
|
+
TValRoot = TypeVar('TValRoot', bound=RootJsonApiResponsePayload[Any])
|
|
50
53
|
|
|
51
54
|
|
|
52
55
|
def default_constructor(value_type: Type[TVal], data: Any) -> TVal:
|
|
@@ -72,7 +75,7 @@ class UnwrappedOptionalObjOrListOfObj(Generic[TVal]):
|
|
|
72
75
|
return constructor(self.value_type, payload) # type: ignore
|
|
73
76
|
|
|
74
77
|
@staticmethod
|
|
75
|
-
def parse(t: Type[Any], type_constraint: Optional[Type[TVal]]) -> 'Optional[UnwrappedOptionalObjOrListOfObj[TVal]]':
|
|
78
|
+
def parse(t: Type[Any], type_constraint: Optional[Type[TVal | TValRoot]]) -> 'Optional[UnwrappedOptionalObjOrListOfObj[TVal]]':
|
|
76
79
|
unwrapped_t = unwrap_typing(t)
|
|
77
80
|
|
|
78
81
|
many = False
|
|
@@ -59,8 +59,6 @@ class QueryParamsSeparatedList(Generic[QueryParamsSeparatedListValueType]):
|
|
|
59
59
|
if cls._contains_type is None:
|
|
60
60
|
raise TypeError("QueryParamsSeparatedList must be parameterized with a type, e.g., QueryParamsSeparatedList[int]")
|
|
61
61
|
|
|
62
|
-
adapter = TypeAdapter(cls._contains_type)
|
|
63
|
-
|
|
64
62
|
if not isinstance(query_param, list):
|
|
65
63
|
query_param = [query_param]
|
|
66
64
|
|
|
@@ -72,7 +70,14 @@ class QueryParamsSeparatedList(Generic[QueryParamsSeparatedListValueType]):
|
|
|
72
70
|
|
|
73
71
|
for idx, value in enumerate(splitted):
|
|
74
72
|
try:
|
|
75
|
-
|
|
73
|
+
if cls._contains_type == Union[int, str]:
|
|
74
|
+
try:
|
|
75
|
+
validated_items.append(int(value))
|
|
76
|
+
except ValueError:
|
|
77
|
+
validated_items.append(value) # type: ignore
|
|
78
|
+
else:
|
|
79
|
+
adapter = TypeAdapter(cls._contains_type)
|
|
80
|
+
validated_items.append(adapter.validate_python(value))
|
|
76
81
|
except ValidationError as e:
|
|
77
82
|
for error in e.errors(include_url=False):
|
|
78
83
|
error['loc'] = ('param', idx)
|
|
@@ -81,4 +86,4 @@ class QueryParamsSeparatedList(Generic[QueryParamsSeparatedListValueType]):
|
|
|
81
86
|
if errors:
|
|
82
87
|
raise ValidationError.from_exception_data("List validation error", errors)
|
|
83
88
|
|
|
84
|
-
return validated_items
|
|
89
|
+
return validated_items # type: ignore
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_resource_config.py
RENAMED
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_resource_error_handling.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/api_resource/api_response_payload_alias.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/commands/start/gunicorn.conf.local.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/encrypt/encrypt_decrypt_abstract.py
RENAMED
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/encrypt/encrypt_decrypt_aes_xtea.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/__tests__/internal_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/internal_api/internal_api_check_context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/modules/__tests__/test_api_sdk_jwt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/resources/health_check/health_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/__tests__/api_path_version.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/broker_topics_message_count.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/__init__.py
RENAMED
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/conf.py
RENAMED
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/flask_swagger_generator/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/memory_db/__tests__/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/utils/token_check_through_request.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/validators/__tests__/test_custom_fields.py
RENAMED
|
File without changes
|
{ul-api-utils-8.1.16 → ul-api-utils-8.1.18}/ul_api_utils/validators/validate_empty_object.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|