ul-api-utils 7.8.4__tar.gz → 7.8.6__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.4 → ul-api-utils-7.8.6}/PKG-INFO +1 -1
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/conf.py +5 -1
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/routes/api_some.py +27 -2
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/setup.py +1 -1
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_start.py +3 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/api_sdk.py +11 -3
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/api_sdk_config.py +14 -1
- ul-api-utils-7.8.6/ul_api_utils/resources/sockets.py +3 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils.egg-info/PKG-INFO +1 -1
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils.egg-info/SOURCES.txt +1 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/LICENSE +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/README.md +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/main.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/models/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/permissions.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/pure_flask_example.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/rate_limit_load.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/routes/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/workers/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/workers/worker.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/setup.cfg +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/access/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_request.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource_config.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource_error_handling.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource_fn_typing.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource_type.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_response.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_response_db.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_response_payload_alias.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/db_types.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/signature_check.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_enc_keys.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_gen_api_user_token.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_gen_new_api_user.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_generate_api_docs.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_worker_start.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/start/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/start/gunicorn.conf.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/start/wsgi.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/conf/ul-debugger-main.js +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/conf/ul-debugger-ui.js +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/conf.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/const.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/debug/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/debug/debugger.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/debug/malloc.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/debug/stat.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/encrypt/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/encrypt/encrypt_decrypt_abstract.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/encrypt/encrypt_decrypt_aes_xtea.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/errors.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/__tests__/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/__tests__/internal_api.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/__tests__/internal_api_content_type.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/internal_api.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/internal_api_check_context.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/internal_api_error.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/internal_api_response.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/main.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/__tests__/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/__tests__/test_api_sdk_jwt.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/api_sdk_jwt.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/intermediate_state.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/worker_context.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/worker_sdk.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/worker_sdk_config.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/py.typed +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/caching.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/debugger_scripts.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/health_check/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/health_check/const.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/health_check/health_check.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/health_check/health_check_template.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/health_check/resource.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/not_implemented.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/permissions.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/rate_limitter.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/swagger.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/custom_fields/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/custom_fields/custom_checkbox_select.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/custom_widgets/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/custom_widgets/custom_select_widget.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/custom_widgets/custom_text_input_widget.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/uni_form.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/sentry.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/__tests__/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/__tests__/api_path_version.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/__tests__/unwrap_typing.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_encoding.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_format.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_method.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_pagination.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_path_version.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_request_info.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/avro.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/broker_topics_message_count.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/cached_per_request.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/colors.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/constants.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/decode_base64.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/deprecated.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flags.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/conf.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/exceptions.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_models.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_specifier.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_three_specifier.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_version.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/utils/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/utils/input_type.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/utils/parameter_type.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/utils/replace_in_dict.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/utils/request_type.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/utils/schema_type.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/utils/security_type.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/imports.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/jinja/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/jinja/t_url_for.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/jinja/to_pretty_json.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/json_encoder.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/load_modules.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/token_check.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/token_check_through_request.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/unwrap_typing.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/uuid_converter.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/__tests__/__init__.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/__tests__/test_custom_fields.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/custom_fields.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/validate_empty_object.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/validate_uuid.py +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils.egg-info/dependency_links.txt +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils.egg-info/entry_points.txt +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils.egg-info/requires.txt +0 -0
- {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/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,12 +1,16 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
from time import sleep
|
|
2
3
|
from datetime import datetime, timedelta
|
|
3
|
-
from typing import List, Optional, Tuple
|
|
4
|
+
from typing import List, Optional, Tuple, Any
|
|
4
5
|
|
|
6
|
+
from flask_socketio import emit
|
|
7
|
+
|
|
8
|
+
from ul_api_utils.resources.sockets import socket_io
|
|
5
9
|
from flask import jsonify
|
|
6
10
|
from pydantic import BaseModel
|
|
7
11
|
from ul_db_utils.modules.db import db
|
|
8
12
|
from werkzeug import Response as BaseResponse
|
|
9
|
-
|
|
13
|
+
from flask import request
|
|
10
14
|
from example.conf import sdk
|
|
11
15
|
from example.permissions import SOME_PERMISSION, SOME_PERMISSION2
|
|
12
16
|
from ul_api_utils.api_resource.api_request import ApiRequestQuery
|
|
@@ -51,6 +55,9 @@ class Some2Query(ApiRequestQuery):
|
|
|
51
55
|
some: QueryParamsSeparatedList[str] = '' # type: ignore
|
|
52
56
|
|
|
53
57
|
|
|
58
|
+
logger = logging.getLogger(__name__)
|
|
59
|
+
|
|
60
|
+
|
|
54
61
|
@sdk.rest_api('POST', '/example-resource-simple', access=sdk.ACCESS_PUBLIC)
|
|
55
62
|
@sdk.cache_api('REFRESH', 'example')
|
|
56
63
|
def some5(api_resource: ApiResource, body: SomeBody) -> JsonApiResponse[List[RespObject]]:
|
|
@@ -314,3 +321,21 @@ def somefile(api_resource: ApiResource) -> FileApiResponse:
|
|
|
314
321
|
as_attachment=True,
|
|
315
322
|
attachment_filename='import_devices_log.txt',
|
|
316
323
|
)
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
@socket_io.on('message')
|
|
327
|
+
def handle(data: Any, message: Any) -> None:
|
|
328
|
+
sid = request.sid
|
|
329
|
+
emit('message', {"data1": 1, "data": 2}, room=sid)
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
@socket_io.event
|
|
333
|
+
def connect():
|
|
334
|
+
logger.info("Connected!")
|
|
335
|
+
logger.info("SESSION INFO: " + str(request.sid))
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
@socket_io.event('disconnect')
|
|
339
|
+
def disconnect():
|
|
340
|
+
logger.info("Client disconnected!")
|
|
341
|
+
logger.info("SESSION INFO: " + str(request.sid))
|
|
@@ -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
|
|
@@ -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]
|
|
@@ -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.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource_error_handling.py
RENAMED
|
File without changes
|
{ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/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.4 → ul-api-utils-7.8.6}/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.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/__tests__/internal_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/internal_api_check_context.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/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.4 → ul-api-utils-7.8.6}/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
|
{ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/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.4 → ul-api-utils-7.8.6}/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.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/__init__.py
RENAMED
|
File without changes
|
{ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/conf.py
RENAMED
|
File without changes
|
{ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/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.4 → ul-api-utils-7.8.6}/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
|