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.

Files changed (148) hide show
  1. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/PKG-INFO +1 -1
  2. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/conf.py +5 -1
  3. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/routes/api_some.py +27 -2
  4. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/setup.py +1 -1
  5. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_start.py +3 -0
  6. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/api_sdk.py +11 -3
  7. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/api_sdk_config.py +14 -1
  8. ul-api-utils-7.8.6/ul_api_utils/resources/sockets.py +3 -0
  9. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils.egg-info/PKG-INFO +1 -1
  10. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils.egg-info/SOURCES.txt +1 -0
  11. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/LICENSE +0 -0
  12. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/README.md +0 -0
  13. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/__init__.py +0 -0
  14. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/main.py +0 -0
  15. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/models/__init__.py +0 -0
  16. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/permissions.py +0 -0
  17. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/pure_flask_example.py +0 -0
  18. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/rate_limit_load.py +0 -0
  19. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/routes/__init__.py +0 -0
  20. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/workers/__init__.py +0 -0
  21. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/example/workers/worker.py +0 -0
  22. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/setup.cfg +0 -0
  23. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/__init__.py +0 -0
  24. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/access/__init__.py +0 -0
  25. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/__init__.py +0 -0
  26. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_request.py +0 -0
  27. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource.py +0 -0
  28. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource_config.py +0 -0
  29. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource_error_handling.py +0 -0
  30. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource_fn_typing.py +0 -0
  31. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_resource_type.py +0 -0
  32. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_response.py +0 -0
  33. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_response_db.py +0 -0
  34. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/api_response_payload_alias.py +0 -0
  35. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/db_types.py +0 -0
  36. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/api_resource/signature_check.py +0 -0
  37. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/__init__.py +0 -0
  38. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_enc_keys.py +0 -0
  39. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_gen_api_user_token.py +0 -0
  40. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_gen_new_api_user.py +0 -0
  41. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_generate_api_docs.py +0 -0
  42. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/cmd_worker_start.py +0 -0
  43. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/start/__init__.py +0 -0
  44. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/start/gunicorn.conf.py +0 -0
  45. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/commands/start/wsgi.py +0 -0
  46. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/conf/ul-debugger-main.js +0 -0
  47. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/conf/ul-debugger-ui.js +0 -0
  48. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/conf.py +0 -0
  49. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/const.py +0 -0
  50. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/debug/__init__.py +0 -0
  51. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/debug/debugger.py +0 -0
  52. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/debug/malloc.py +0 -0
  53. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/debug/stat.py +0 -0
  54. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/encrypt/__init__.py +0 -0
  55. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/encrypt/encrypt_decrypt_abstract.py +0 -0
  56. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/encrypt/encrypt_decrypt_aes_xtea.py +0 -0
  57. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/errors.py +0 -0
  58. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/__init__.py +0 -0
  59. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/__tests__/__init__.py +0 -0
  60. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/__tests__/internal_api.py +0 -0
  61. {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
  62. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/internal_api.py +0 -0
  63. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/internal_api_check_context.py +0 -0
  64. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/internal_api_error.py +0 -0
  65. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/internal_api/internal_api_response.py +0 -0
  66. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/main.py +0 -0
  67. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/__init__.py +0 -0
  68. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/__tests__/__init__.py +0 -0
  69. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/__tests__/test_api_sdk_jwt.py +0 -0
  70. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/api_sdk_jwt.py +0 -0
  71. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/intermediate_state.py +0 -0
  72. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/worker_context.py +0 -0
  73. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/worker_sdk.py +0 -0
  74. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/modules/worker_sdk_config.py +0 -0
  75. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/py.typed +0 -0
  76. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/__init__.py +0 -0
  77. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/caching.py +0 -0
  78. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/debugger_scripts.py +0 -0
  79. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/health_check/__init__.py +0 -0
  80. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/health_check/const.py +0 -0
  81. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/health_check/health_check.py +0 -0
  82. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/health_check/health_check_template.py +0 -0
  83. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/health_check/resource.py +0 -0
  84. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/not_implemented.py +0 -0
  85. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/permissions.py +0 -0
  86. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/rate_limitter.py +0 -0
  87. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/swagger.py +0 -0
  88. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/__init__.py +0 -0
  89. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/custom_fields/__init__.py +0 -0
  90. {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
  91. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/custom_widgets/__init__.py +0 -0
  92. {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
  93. {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
  94. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/resources/web_forms/uni_form.py +0 -0
  95. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/sentry.py +0 -0
  96. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/__init__.py +0 -0
  97. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/__tests__/__init__.py +0 -0
  98. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/__tests__/api_path_version.py +0 -0
  99. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/__tests__/unwrap_typing.py +0 -0
  100. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_encoding.py +0 -0
  101. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_format.py +0 -0
  102. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_method.py +0 -0
  103. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_pagination.py +0 -0
  104. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_path_version.py +0 -0
  105. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/api_request_info.py +0 -0
  106. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/avro.py +0 -0
  107. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/broker_topics_message_count.py +0 -0
  108. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/cached_per_request.py +0 -0
  109. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/colors.py +0 -0
  110. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/constants.py +0 -0
  111. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/decode_base64.py +0 -0
  112. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/deprecated.py +0 -0
  113. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flags.py +0 -0
  114. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/__init__.py +0 -0
  115. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/conf.py +0 -0
  116. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/exceptions.py +0 -0
  117. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/specifiers/__init__.py +0 -0
  118. {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
  119. {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
  120. {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
  121. {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
  122. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/flask_swagger_generator/utils/__init__.py +0 -0
  123. {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
  124. {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
  125. {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
  126. {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
  127. {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
  128. {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
  129. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/imports.py +0 -0
  130. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/jinja/__init__.py +0 -0
  131. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/jinja/t_url_for.py +0 -0
  132. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/jinja/to_pretty_json.py +0 -0
  133. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/json_encoder.py +0 -0
  134. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/load_modules.py +0 -0
  135. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/token_check.py +0 -0
  136. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/token_check_through_request.py +0 -0
  137. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/unwrap_typing.py +0 -0
  138. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/utils/uuid_converter.py +0 -0
  139. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/__init__.py +0 -0
  140. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/__tests__/__init__.py +0 -0
  141. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/__tests__/test_custom_fields.py +0 -0
  142. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/custom_fields.py +0 -0
  143. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/validate_empty_object.py +0 -0
  144. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils/validators/validate_uuid.py +0 -0
  145. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils.egg-info/dependency_links.txt +0 -0
  146. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils.egg-info/entry_points.txt +0 -0
  147. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/ul_api_utils.egg-info/requires.txt +0 -0
  148. {ul-api-utils-7.8.4 → ul-api-utils-7.8.6}/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: 7.8.4
3
+ Version: 7.8.6
4
4
  Summary: Python api utils
5
5
  Author: Unic-lab
6
6
  Author-email:
@@ -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, ApiSdkFlaskDebuggingPluginsEnabled
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))
@@ -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='7.8.4',
12
+ version='7.8.6',
13
13
  description='Python api utils',
14
14
  author='Unic-lab',
15
15
  long_description=long_description,
@@ -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]
@@ -0,0 +1,3 @@
1
+ from flask_socketio import SocketIO # type: ignore
2
+
3
+ socket_io = SocketIO()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ul-api-utils
3
- Version: 7.8.4
3
+ Version: 7.8.6
4
4
  Summary: Python api utils
5
5
  Author: Unic-lab
6
6
  Author-email:
@@ -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