ul-api-utils 7.8.3__tar.gz → 7.8.5__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-7.8.3 → ul-api-utils-7.8.5}/PKG-INFO +1 -1
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/conf.py +5 -1
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/routes/api_some.py +8 -3
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/setup.py +1 -1
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/commands/cmd_start.py +3 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/modules/api_sdk.py +14 -4
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/modules/api_sdk_config.py +14 -1
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/caching.py +9 -0
- ul-api-utils-7.8.5/ul_api_utils/resources/sockets.py +3 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils.egg-info/PKG-INFO +1 -1
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils.egg-info/SOURCES.txt +1 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/LICENSE +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/README.md +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/main.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/models/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/permissions.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/pure_flask_example.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/rate_limit_load.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/routes/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/workers/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/example/workers/worker.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/setup.cfg +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/access/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_request.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_resource.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_resource_config.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_resource_error_handling.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_resource_fn_typing.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_resource_type.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_response.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_response_db.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_response_payload_alias.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/db_types.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/signature_check.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/commands/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/commands/cmd_enc_keys.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/commands/cmd_gen_api_user_token.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/commands/cmd_gen_new_api_user.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/commands/cmd_generate_api_docs.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/commands/cmd_worker_start.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/commands/start/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/commands/start/gunicorn.conf.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/commands/start/wsgi.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/conf/ul-debugger-main.js +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/conf/ul-debugger-ui.js +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/conf.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/const.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/debug/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/debug/debugger.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/debug/malloc.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/debug/stat.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/encrypt/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/encrypt/encrypt_decrypt_abstract.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/encrypt/encrypt_decrypt_aes_xtea.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/errors.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/__tests__/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/__tests__/internal_api.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/__tests__/internal_api_content_type.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/internal_api.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/internal_api_check_context.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/internal_api_error.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/internal_api_response.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/main.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/modules/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/modules/__tests__/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/modules/__tests__/test_api_sdk_jwt.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/modules/api_sdk_jwt.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/modules/intermediate_state.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/modules/worker_context.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/modules/worker_sdk.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/modules/worker_sdk_config.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/py.typed +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/debugger_scripts.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/health_check/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/health_check/const.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/health_check/health_check.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/health_check/health_check_template.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/health_check/resource.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/not_implemented.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/permissions.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/rate_limitter.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/swagger.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/web_forms/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/web_forms/custom_fields/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/web_forms/custom_fields/custom_checkbox_select.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/web_forms/custom_widgets/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/web_forms/custom_widgets/custom_select_widget.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/web_forms/custom_widgets/custom_text_input_widget.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/web_forms/uni_form.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/sentry.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/__tests__/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/__tests__/api_path_version.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/__tests__/unwrap_typing.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/api_encoding.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/api_format.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/api_method.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/api_pagination.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/api_path_version.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/api_request_info.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/avro.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/broker_topics_message_count.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/cached_per_request.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/colors.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/constants.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/decode_base64.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/deprecated.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flags.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/conf.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/exceptions.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/specifiers/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_models.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_specifier.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_three_specifier.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_version.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/utils/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/utils/input_type.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/utils/parameter_type.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/utils/replace_in_dict.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/utils/request_type.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/utils/schema_type.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/utils/security_type.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/imports.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/jinja/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/jinja/t_url_for.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/jinja/to_pretty_json.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/json_encoder.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/load_modules.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/token_check.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/token_check_through_request.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/unwrap_typing.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/uuid_converter.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/validators/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/validators/__tests__/__init__.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/validators/__tests__/test_custom_fields.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/validators/custom_fields.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/validators/validate_empty_object.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/validators/validate_uuid.py +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils.egg-info/dependency_links.txt +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils.egg-info/entry_points.txt +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils.egg-info/requires.txt +0 -0
- {ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils.egg-info/top_level.txt +0 -0
|
@@ -3,10 +3,14 @@ import os
|
|
|
3
3
|
from ul_db_utils.modules.db import DbConfig
|
|
4
4
|
|
|
5
5
|
from ul_api_utils.modules.api_sdk import ApiSdk
|
|
6
|
-
from ul_api_utils.modules.api_sdk_config import ApiSdkConfig, ApiSdkIdentifyTypeEnum,
|
|
6
|
+
from ul_api_utils.modules.api_sdk_config import ApiSdkConfig, ApiSdkIdentifyTypeEnum, \
|
|
7
|
+
ApiSdkFlaskDebuggingPluginsEnabled, SocketIOConfig
|
|
7
8
|
from example.permissions import permissions
|
|
8
9
|
|
|
9
10
|
sdk = ApiSdk(ApiSdkConfig(
|
|
11
|
+
sockets_config=SocketIOConfig(
|
|
12
|
+
message_queue='redis://localhost:16379',
|
|
13
|
+
),
|
|
10
14
|
service_name='example_service',
|
|
11
15
|
permissions=permissions,
|
|
12
16
|
cache_storage_uri='redis://localhost:16379',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from time import sleep
|
|
2
2
|
from datetime import datetime, timedelta
|
|
3
|
-
from typing import List, Optional, Tuple
|
|
4
|
-
|
|
3
|
+
from typing import List, Optional, Tuple, Any
|
|
4
|
+
from ul_api_utils.resources.sockets import socket_io
|
|
5
5
|
from flask import jsonify
|
|
6
6
|
from pydantic import BaseModel
|
|
7
7
|
from ul_db_utils.modules.db import db
|
|
@@ -79,8 +79,8 @@ class Some7Query(ApiRequestQuery):
|
|
|
79
79
|
need_redirect: int
|
|
80
80
|
|
|
81
81
|
|
|
82
|
-
@sdk.cache_api('READ', 'example')
|
|
83
82
|
@sdk.rest_api('POST', '/example-resource-simple-any', access=sdk.ACCESS_PUBLIC)
|
|
83
|
+
@sdk.cache_api('READ', 'example')
|
|
84
84
|
def some9(api_resource: ApiResource) -> AnyJsonApiResponse:
|
|
85
85
|
return api_resource.response_ok([RespObject(now=datetime.now(), notes="some9")], 1)
|
|
86
86
|
|
|
@@ -314,3 +314,8 @@ def somefile(api_resource: ApiResource) -> FileApiResponse:
|
|
|
314
314
|
as_attachment=True,
|
|
315
315
|
attachment_filename='import_devices_log.txt',
|
|
316
316
|
)
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
@socket_io.on('message')
|
|
320
|
+
def handle(data: Any, message: Any) -> None:
|
|
321
|
+
...
|
|
@@ -25,6 +25,7 @@ class CmdStart(Cmd):
|
|
|
25
25
|
debug: bool
|
|
26
26
|
max_requests: int
|
|
27
27
|
max_requests_jitter: int
|
|
28
|
+
worker_class: str
|
|
28
29
|
|
|
29
30
|
@property
|
|
30
31
|
def app_rel_dir(self) -> str:
|
|
@@ -49,6 +50,7 @@ class CmdStart(Cmd):
|
|
|
49
50
|
parser.add_argument('--debug', dest='debug', type=arg_str2bool, default=False, required=False)
|
|
50
51
|
parser.add_argument('--max-requests', dest='max_requests', type=int, default=1000, required=False)
|
|
51
52
|
parser.add_argument('--max-requests-jitter', dest='max_requests_jitter', type=int, default=50, required=False)
|
|
53
|
+
parser.add_argument('--worker-class', dest='worker_class', type=str, default='sync', required=False)
|
|
52
54
|
|
|
53
55
|
def run(self) -> None:
|
|
54
56
|
env = os.environ.copy()
|
|
@@ -69,6 +71,7 @@ class CmdStart(Cmd):
|
|
|
69
71
|
args = [
|
|
70
72
|
f'-n={name}',
|
|
71
73
|
f'-w={APPLICATION_GUNICORN_WORKERS}',
|
|
74
|
+
f'--worker-class={self.worker_class}',
|
|
72
75
|
f'-b=0.0.0.0:{self.port}',
|
|
73
76
|
f'--config={conf}',
|
|
74
77
|
'--log-level=INFO',
|
|
@@ -8,13 +8,12 @@ from base64 import b64decode
|
|
|
8
8
|
from datetime import datetime
|
|
9
9
|
from functools import wraps
|
|
10
10
|
from typing import List, Union, Callable, Tuple, Any, Optional, TypeVar, cast, Set, TYPE_CHECKING
|
|
11
|
-
|
|
11
|
+
from ul_api_utils.resources.sockets import socket_io
|
|
12
12
|
from flask import Response, request, Flask, url_for as flask_url_for, _app_ctx_stack
|
|
13
13
|
from pydantic import BaseModel
|
|
14
14
|
from redis.connection import parse_url
|
|
15
15
|
from ul_py_tool.utils.arg_files_glob import arg_files_print
|
|
16
16
|
from werkzeug import Response as BaseResponse
|
|
17
|
-
|
|
18
17
|
from ul_api_utils.access import PermissionDefinition, GLOBAL_PERMISSION__PRIVATE, GLOBAL_PERMISSION__PRIVATE_RT, \
|
|
19
18
|
GLOBAL_PERMISSION__PUBLIC, PermissionRegistry
|
|
20
19
|
from ul_api_utils.api_resource.api_resource import ApiResource
|
|
@@ -28,7 +27,7 @@ from ul_api_utils.debug import stat
|
|
|
28
27
|
from ul_api_utils.debug.debugger import Debugger
|
|
29
28
|
from ul_api_utils.errors import UserAbstractApiError, ResourceRuntimeApiError, ResponseTypeRuntimeApiError
|
|
30
29
|
from ul_api_utils.internal_api.internal_api_check_context import internal_api_check_context
|
|
31
|
-
from ul_api_utils.modules.api_sdk_config import ApiSdkConfig
|
|
30
|
+
from ul_api_utils.modules.api_sdk_config import ApiSdkConfig, SocketAsyncModesEnum
|
|
32
31
|
from ul_api_utils.modules.intermediate_state import try_init, try_configure
|
|
33
32
|
from ul_api_utils.resources.caching import ULCache, TCacheMode, ULCacheMode, ULCacheConfig
|
|
34
33
|
from ul_api_utils.resources.debugger_scripts import load_debugger_static_scripts
|
|
@@ -200,6 +199,15 @@ class ApiSdk:
|
|
|
200
199
|
|
|
201
200
|
load_swagger(self, self._fn_registry, self._config.api_route_path_prefix)
|
|
202
201
|
|
|
202
|
+
if self.config.sockets_config:
|
|
203
|
+
socket_io.init_app(
|
|
204
|
+
self._flask_app,
|
|
205
|
+
message_queue=self.config.sockets_config.message_queue,
|
|
206
|
+
async_mode=SocketAsyncModesEnum.GEVENT.value,
|
|
207
|
+
channel=self.config.sockets_config.channel,
|
|
208
|
+
cors_allowed_origins=self.config.sockets_config.cors_allowed_origins,
|
|
209
|
+
)
|
|
210
|
+
|
|
203
211
|
return self._flask_app
|
|
204
212
|
|
|
205
213
|
@property
|
|
@@ -320,7 +328,9 @@ class ApiSdk:
|
|
|
320
328
|
timeout: Optional[int] = None,
|
|
321
329
|
source_check: Optional[bool] = True,
|
|
322
330
|
) -> Callable[[TFn], TFn]:
|
|
323
|
-
|
|
331
|
+
if self.ul_cache_factory is None:
|
|
332
|
+
logger.warning("Cache URI is not configured, cache will not work.")
|
|
333
|
+
return lambda fn: fn
|
|
324
334
|
if ULCacheMode.compile_mode(mode) == ULCacheMode.READ.value:
|
|
325
335
|
return self.ul_cache_factory.cache_read_wrap(tags, timeout, source_check)
|
|
326
336
|
return self.ul_cache_factory.cache_refresh_wrap(tags)
|
|
@@ -11,6 +11,13 @@ def join_route_paths(prev_sect: str, next_sect: str) -> str:
|
|
|
11
11
|
return prev_sect.rstrip('/') + '/' + next_sect.lstrip('/')
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
class SocketAsyncModesEnum(Enum):
|
|
15
|
+
THREADING = 'threading'
|
|
16
|
+
GEVENT = 'gevent'
|
|
17
|
+
EVENTLET = 'eventlet'
|
|
18
|
+
GEVENT_UWSGI = 'gevent_uwsgi'
|
|
19
|
+
|
|
20
|
+
|
|
14
21
|
class ApiSdkIdentifyTypeEnum(Enum):
|
|
15
22
|
DISABLED = 'DISABLED'
|
|
16
23
|
CLIENT_IP = 'IP'
|
|
@@ -29,6 +36,12 @@ class ApiSdkFlaskDebuggingPluginsEnabled(BaseModel):
|
|
|
29
36
|
flask_monitoring_dashboard: bool = False
|
|
30
37
|
|
|
31
38
|
|
|
39
|
+
class SocketIOConfig(BaseModel):
|
|
40
|
+
message_queue: str
|
|
41
|
+
channel: Optional[str] = "flask-socketio"
|
|
42
|
+
cors_allowed_origins: Optional[str] = "*"
|
|
43
|
+
|
|
44
|
+
|
|
32
45
|
class ApiSdkConfig(BaseModel):
|
|
33
46
|
service_name: str
|
|
34
47
|
permissions: Optional[Union[Callable[[], PermissionRegistry], PermissionRegistry]] = None
|
|
@@ -41,7 +54,7 @@ class ApiSdkConfig(BaseModel):
|
|
|
41
54
|
http_auth: Optional[ApiSdkHttpAuth] = None
|
|
42
55
|
|
|
43
56
|
static_url_path: Optional[str] = None
|
|
44
|
-
|
|
57
|
+
sockets_config: Optional[SocketIOConfig] = None
|
|
45
58
|
web_error_template: Optional[str] = None
|
|
46
59
|
|
|
47
60
|
rate_limit: Union[str, List[str]] = '100/minute' # [count (int)] [per|/] [second|minute|hour|day|month|year][s]
|
|
@@ -125,6 +125,15 @@ class ULCache(Cache):
|
|
|
125
125
|
return cast(TFn, wrapper)
|
|
126
126
|
return wrap
|
|
127
127
|
|
|
128
|
+
def cache_noop(
|
|
129
|
+
self,
|
|
130
|
+
) -> Callable[[TFn], TFn]:
|
|
131
|
+
def wrap(fn: TFn) -> TFn:
|
|
132
|
+
assert fn.__module__, 'empty __module__ of function'
|
|
133
|
+
return fn
|
|
134
|
+
|
|
135
|
+
return wrap
|
|
136
|
+
|
|
128
137
|
def cache_read_wrap(
|
|
129
138
|
self,
|
|
130
139
|
tags: Tuple[str, ...] | str,
|
|
@@ -81,6 +81,7 @@ ul_api_utils/resources/debugger_scripts.py
|
|
|
81
81
|
ul_api_utils/resources/not_implemented.py
|
|
82
82
|
ul_api_utils/resources/permissions.py
|
|
83
83
|
ul_api_utils/resources/rate_limitter.py
|
|
84
|
+
ul_api_utils/resources/sockets.py
|
|
84
85
|
ul_api_utils/resources/swagger.py
|
|
85
86
|
ul_api_utils/resources/health_check/__init__.py
|
|
86
87
|
ul_api_utils/resources/health_check/const.py
|
|
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-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_resource_error_handling.py
RENAMED
|
File without changes
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/api_resource/api_resource_fn_typing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/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
|
|
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-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/__tests__/internal_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/internal_api_check_context.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/internal_api/internal_api_response.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/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
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/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
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/resources/web_forms/custom_fields/__init__.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/__init__.py
RENAMED
|
File without changes
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/utils/flask_swagger_generator/conf.py
RENAMED
|
File without changes
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.8.3 → ul-api-utils-7.8.5}/ul_api_utils/validators/__tests__/test_custom_fields.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
|