ul-api-utils 7.10.4__tar.gz → 7.10.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.

Files changed (155) hide show
  1. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/PKG-INFO +1 -1
  2. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/conf.py +5 -7
  3. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/main.py +2 -0
  4. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/sockets/on_message.py +6 -2
  5. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/workers/worker.py +9 -1
  6. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/setup.py +4 -4
  7. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/modules/api_sdk.py +9 -9
  8. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/modules/api_sdk_config.py +4 -39
  9. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/modules/worker_sdk.py +10 -1
  10. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/modules/worker_sdk_config.py +3 -0
  11. ul-api-utils-7.10.5/ul_api_utils/resources/socketio.py +57 -0
  12. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils.egg-info/PKG-INFO +1 -1
  13. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils.egg-info/requires.txt +2 -2
  14. ul-api-utils-7.10.4/ul_api_utils/resources/socketio.py +0 -20
  15. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/LICENSE +0 -0
  16. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/README.md +0 -0
  17. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/__init__.py +0 -0
  18. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/models/__init__.py +0 -0
  19. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/permissions.py +0 -0
  20. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/pure_flask_example.py +0 -0
  21. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/rate_limit_load.py +0 -0
  22. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/routes/__init__.py +0 -0
  23. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/routes/api_some.py +0 -0
  24. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/sockets/__init__.py +0 -0
  25. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/sockets/on_connect.py +0 -0
  26. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/sockets/on_disconnect.py +0 -0
  27. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/sockets/on_json.py +0 -0
  28. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/sockets/on_open.py +0 -0
  29. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/example/workers/__init__.py +0 -0
  30. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/setup.cfg +0 -0
  31. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/__init__.py +0 -0
  32. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/access/__init__.py +0 -0
  33. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/__init__.py +0 -0
  34. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/api_request.py +0 -0
  35. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/api_resource.py +0 -0
  36. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/api_resource_config.py +0 -0
  37. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/api_resource_error_handling.py +0 -0
  38. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/api_resource_fn_typing.py +0 -0
  39. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/api_resource_type.py +0 -0
  40. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/api_response.py +0 -0
  41. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/api_response_db.py +0 -0
  42. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/api_response_payload_alias.py +0 -0
  43. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/db_types.py +0 -0
  44. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/api_resource/signature_check.py +0 -0
  45. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/commands/__init__.py +0 -0
  46. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/commands/cmd_enc_keys.py +0 -0
  47. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/commands/cmd_gen_api_user_token.py +0 -0
  48. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/commands/cmd_gen_new_api_user.py +0 -0
  49. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/commands/cmd_generate_api_docs.py +0 -0
  50. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/commands/cmd_start.py +0 -0
  51. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/commands/cmd_worker_start.py +0 -0
  52. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/commands/start/__init__.py +0 -0
  53. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/commands/start/gunicorn.conf.py +0 -0
  54. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/commands/start/wsgi.py +0 -0
  55. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/conf/ul-debugger-main.js +0 -0
  56. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/conf/ul-debugger-ui.js +0 -0
  57. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/conf.py +0 -0
  58. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/const.py +0 -0
  59. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/debug/__init__.py +0 -0
  60. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/debug/debugger.py +0 -0
  61. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/debug/malloc.py +0 -0
  62. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/debug/stat.py +0 -0
  63. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/encrypt/__init__.py +0 -0
  64. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/encrypt/encrypt_decrypt_abstract.py +0 -0
  65. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/encrypt/encrypt_decrypt_aes_xtea.py +0 -0
  66. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/errors.py +0 -0
  67. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/internal_api/__init__.py +0 -0
  68. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/internal_api/__tests__/__init__.py +0 -0
  69. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/internal_api/__tests__/internal_api.py +0 -0
  70. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/internal_api/__tests__/internal_api_content_type.py +0 -0
  71. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/internal_api/internal_api.py +0 -0
  72. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/internal_api/internal_api_check_context.py +0 -0
  73. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/internal_api/internal_api_error.py +0 -0
  74. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/internal_api/internal_api_response.py +0 -0
  75. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/main.py +0 -0
  76. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/modules/__init__.py +0 -0
  77. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/modules/__tests__/__init__.py +0 -0
  78. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/modules/__tests__/test_api_sdk_jwt.py +0 -0
  79. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/modules/api_sdk_jwt.py +0 -0
  80. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/modules/intermediate_state.py +0 -0
  81. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/modules/worker_context.py +0 -0
  82. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/py.typed +0 -0
  83. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/__init__.py +0 -0
  84. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/caching.py +0 -0
  85. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/debugger_scripts.py +0 -0
  86. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/health_check/__init__.py +0 -0
  87. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/health_check/const.py +0 -0
  88. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/health_check/health_check.py +0 -0
  89. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/health_check/health_check_template.py +0 -0
  90. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/health_check/resource.py +0 -0
  91. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/not_implemented.py +0 -0
  92. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/permissions.py +0 -0
  93. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/rate_limitter.py +0 -0
  94. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/swagger.py +0 -0
  95. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/web_forms/__init__.py +0 -0
  96. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/web_forms/custom_fields/__init__.py +0 -0
  97. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/web_forms/custom_fields/custom_checkbox_select.py +0 -0
  98. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/web_forms/custom_widgets/__init__.py +0 -0
  99. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/web_forms/custom_widgets/custom_select_widget.py +0 -0
  100. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/web_forms/custom_widgets/custom_text_input_widget.py +0 -0
  101. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/resources/web_forms/uni_form.py +0 -0
  102. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/sentry.py +0 -0
  103. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/__init__.py +0 -0
  104. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/__tests__/__init__.py +0 -0
  105. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/__tests__/api_path_version.py +0 -0
  106. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/__tests__/unwrap_typing.py +0 -0
  107. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/api_encoding.py +0 -0
  108. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/api_format.py +0 -0
  109. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/api_method.py +0 -0
  110. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/api_pagination.py +0 -0
  111. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/api_path_version.py +0 -0
  112. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/api_request_info.py +0 -0
  113. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/avro.py +0 -0
  114. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/broker_topics_message_count.py +0 -0
  115. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/cached_per_request.py +0 -0
  116. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/colors.py +0 -0
  117. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/constants.py +0 -0
  118. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/decode_base64.py +0 -0
  119. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/deprecated.py +0 -0
  120. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flags.py +0 -0
  121. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/__init__.py +0 -0
  122. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/conf.py +0 -0
  123. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/exceptions.py +0 -0
  124. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/specifiers/__init__.py +0 -0
  125. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_models.py +0 -0
  126. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_specifier.py +0 -0
  127. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_three_specifier.py +0 -0
  128. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_version.py +0 -0
  129. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/utils/__init__.py +0 -0
  130. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/utils/input_type.py +0 -0
  131. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/utils/parameter_type.py +0 -0
  132. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/utils/replace_in_dict.py +0 -0
  133. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/utils/request_type.py +0 -0
  134. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/utils/schema_type.py +0 -0
  135. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/flask_swagger_generator/utils/security_type.py +0 -0
  136. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/imports.py +0 -0
  137. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/jinja/__init__.py +0 -0
  138. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/jinja/t_url_for.py +0 -0
  139. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/jinja/to_pretty_json.py +0 -0
  140. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/json_encoder.py +0 -0
  141. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/load_modules.py +0 -0
  142. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/token_check.py +0 -0
  143. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/token_check_through_request.py +0 -0
  144. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/unwrap_typing.py +0 -0
  145. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/utils/uuid_converter.py +0 -0
  146. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/validators/__init__.py +0 -0
  147. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/validators/__tests__/__init__.py +0 -0
  148. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/validators/__tests__/test_custom_fields.py +0 -0
  149. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/validators/custom_fields.py +0 -0
  150. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/validators/validate_empty_object.py +0 -0
  151. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils/validators/validate_uuid.py +0 -0
  152. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils.egg-info/SOURCES.txt +0 -0
  153. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils.egg-info/dependency_links.txt +0 -0
  154. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/ul_api_utils.egg-info/entry_points.txt +0 -0
  155. {ul-api-utils-7.10.4 → ul-api-utils-7.10.5}/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.10.4
3
+ Version: 7.10.5
4
4
  Summary: Python api utils
5
5
  Author: Unic-lab
6
6
  Author-email:
@@ -4,20 +4,18 @@ from ul_db_utils.modules.postgres_modules.db import DbConfig
4
4
 
5
5
  from ul_api_utils.modules.api_sdk import ApiSdk
6
6
  from ul_api_utils.modules.api_sdk_config import ApiSdkConfig, ApiSdkIdentifyTypeEnum, \
7
- ApiSdkFlaskDebuggingPluginsEnabled, SocketIOConfig
7
+ ApiSdkFlaskDebuggingPluginsEnabled
8
8
  from example.permissions import permissions
9
+ from ul_api_utils.resources.socketio import SocketIOConfigType, SocketIOConfig
10
+
9
11
 
10
12
  sdk = ApiSdk(ApiSdkConfig(
11
- server_socketio_config=SocketIOConfig(
13
+ socket_config=SocketIOConfig(
14
+ app_type=SocketIOConfigType.EXTERNAL_PROCESS,
12
15
  message_queue='redis://localhost:16379',
13
16
  logs_enabled=True,
14
17
  engineio_logs_enabled=False,
15
18
  ),
16
- # client_socketio_config=SocketIOConfig(
17
- # message_queue='redis://localhost:16379',
18
- # logs_enabled=True,
19
- # engineio_logs_enabled=False,
20
- # ),
21
19
  service_name='example_service',
22
20
  permissions=permissions,
23
21
  cache_storage_uri='redis://localhost:16379',
@@ -1,6 +1,8 @@
1
1
  # from gevent import monkey
2
2
  #
3
3
  # monkey.patch_all()
4
+
5
+
4
6
  # UNCOMMENT THIS IN CASE YOU'RE TESTING GEVENT WORKERS WITH SOCKET.IO
5
7
 
6
8
  import os
@@ -1,9 +1,13 @@
1
+ import logging
1
2
  from typing import Any
2
3
 
3
4
  from example.conf import sdk
4
5
 
5
6
 
7
+ logger = logging.getLogger(__name__)
8
+
9
+
6
10
  @sdk.socket.on('message')
7
11
  def handle_message(data: Any) -> None:
8
- print('received message: ')
9
- print(data)
12
+ logger.info('received message: ')
13
+ logger.info(data)
@@ -5,8 +5,16 @@ from unipipeline.worker.uni_worker_consumer_message import UniWorkerConsumerMess
5
5
  from ul_api_utils.modules.worker_context import WorkerContext
6
6
  from ul_api_utils.modules.worker_sdk import WorkerSdk
7
7
  from ul_api_utils.modules.worker_sdk_config import WorkerSdkConfig
8
+ from ul_api_utils.resources.socketio import SocketIOConfig, SocketIOConfigType
8
9
 
9
- initialized_worker = WorkerSdk(WorkerSdkConfig())
10
+ initialized_worker = WorkerSdk(WorkerSdkConfig(
11
+ socket_config=SocketIOConfig(
12
+ app_type=SocketIOConfigType.EXTERNAL_PROCESS,
13
+ message_queue='redis://localhost:16379',
14
+ logs_enabled=True,
15
+ engineio_logs_enabled=False,
16
+ ),
17
+ ))
10
18
 
11
19
 
12
20
  class Msg(UniMessage):
@@ -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.10.4',
12
+ version='7.10.5',
13
13
  description='Python api utils',
14
14
  author='Unic-lab',
15
15
  long_description=long_description,
@@ -67,12 +67,12 @@ setup(
67
67
  "requests==2.28.1",
68
68
  "cryptography==38.0.1",
69
69
  "colored==1.4.3",
70
- "flask_socketio==5.3.6",
70
+ "flask-socketio==5.3.6",
71
71
  "ormsgpack==1.4.1",
72
72
  "msgpack==1.0.4",
73
73
  "msgpack-types==0.2.0",
74
74
  "fastavro==1.7.0",
75
- "factory_boy==3.3.0",
75
+ "factory-boy==3.3.0",
76
76
  "sentry-sdk[flask]==1.9.2",
77
77
  "faker==24.8.0",
78
78
  "types-requests==2.28.8",
@@ -89,7 +89,7 @@ setup(
89
89
  # "opentelemetry-instrumentation-requests==0.27b0",
90
90
  # "opentelemetry-exporter-jaeger==1.8.0",
91
91
  # "opentelemetry-instrumentation-sqlalchemy==0.27b0",
92
- # "ul-db-utils==3.2.1", # ACTUALIZE, BUT DO NOT UNCOMMENT PLEASE
92
+ # "ul-db-utils==3.2.2", # ACTUALIZE, BUT DO NOT UNCOMMENT PLEASE
93
93
  # "ul-py-tool==1.15.42", # ACTUALIZE, BUT DO NOT UNCOMMENT PLEASE
94
94
  ],
95
95
  )
@@ -26,7 +26,7 @@ from ul_api_utils.debug import stat
26
26
  from ul_api_utils.debug.debugger import Debugger
27
27
  from ul_api_utils.errors import UserAbstractApiError, ResourceRuntimeApiError, ResponseTypeRuntimeApiError
28
28
  from ul_api_utils.internal_api.internal_api_check_context import internal_api_check_context
29
- from ul_api_utils.modules.api_sdk_config import ApiSdkConfig, SocketAsyncModesEnum
29
+ from ul_api_utils.modules.api_sdk_config import ApiSdkConfig
30
30
  from ul_api_utils.modules.intermediate_state import try_init, try_configure
31
31
  from ul_api_utils.resources.caching import ULCache, TCacheMode, ULCacheMode, ULCacheConfig
32
32
  from ul_api_utils.resources.debugger_scripts import load_debugger_static_scripts
@@ -35,7 +35,7 @@ from ul_api_utils.resources.health_check.resource import init_health_check_resou
35
35
  from ul_api_utils.resources.not_implemented import not_implemented_handler
36
36
  from ul_api_utils.resources.permissions import load_permissions
37
37
  from ul_api_utils.resources.rate_limitter import init_rate_limiter
38
- from ul_api_utils.resources.socketio import init_socketio
38
+ from ul_api_utils.resources.socketio import init_socket_io, SocketAsyncModesEnum, SocketIOConfigType
39
39
  from ul_api_utils.resources.swagger import load_swagger, ApiSdkResource
40
40
  from ul_api_utils.sentry import sentry
41
41
  from ul_api_utils.utils.api_encoding import ApiEncoding
@@ -139,7 +139,7 @@ class ApiSdk:
139
139
 
140
140
  def init_with_flask(self, app_name: str, *, db_config: Optional['MongoDbConfig'] | Optional['DbConfig'] = None) -> Flask:
141
141
  self._initialized_flask_name = try_init(self, app_name)
142
- self._sio = init_socketio(self._config.server_socketio_config, self._config.client_socketio_config)
142
+ self._sio = init_socket_io(config=self._config.socket_config)
143
143
 
144
144
  if db_config is not None and type(db_config).__name__ == 'MongoDbConfig':
145
145
  from ul_db_utils.utils.waiting_for_mongo import waiting_for_mongo
@@ -254,16 +254,16 @@ class ApiSdk:
254
254
  debugger_enabled=self._debugger_enabled_with_pin,
255
255
  ))
256
256
 
257
- if self._config.server_socketio_config:
257
+ if self._config.socket_config and self._config.socket_config.app_type is SocketIOConfigType.SERVER:
258
258
  assert self._sio # mypy
259
259
  self._sio.init_app(
260
260
  flask_app,
261
- message_queue=self._config.server_socketio_config.message_queue,
261
+ message_queue=self._config.socket_config.message_queue,
262
262
  async_mode=SocketAsyncModesEnum.GEVENT.value,
263
- channel=self._config.server_socketio_config.channel,
264
- cors_allowed_origins=self._config.server_socketio_config.cors_allowed_origins,
265
- logger=self._config.server_socketio_config.logs_enabled,
266
- engineio_logger=self._config.server_socketio_config.engineio_logs_enabled,
263
+ channel=self._config.socket_config.channel,
264
+ cors_allowed_origins=self._config.socket_config.cors_allowed_origins,
265
+ logger=self._config.socket_config.logs_enabled,
266
+ engineio_logger=self._config.socket_config.engineio_logs_enabled,
267
267
  )
268
268
  load_modules_by_template([os.path.join(APPLICATION_DIR, 'sockets', '*')])
269
269
 
@@ -1,23 +1,17 @@
1
1
  from enum import Enum
2
- from typing import List, Optional, Callable, Union, Any
2
+ from typing import List, Optional, Callable, Union
3
3
 
4
- from pydantic import BaseModel, Extra, root_validator
4
+ from pydantic import BaseModel, Extra
5
5
 
6
6
  from ul_api_utils.access import PermissionRegistry, PermissionDefinition
7
7
  from ul_api_utils.modules.api_sdk_jwt import ApiSdkJwt
8
+ from ul_api_utils.resources.socketio import SocketIOConfig
8
9
 
9
10
 
10
11
  def join_route_paths(prev_sect: str, next_sect: str) -> str:
11
12
  return prev_sect.rstrip('/') + '/' + next_sect.lstrip('/')
12
13
 
13
14
 
14
- class SocketAsyncModesEnum(Enum):
15
- THREADING = 'threading'
16
- GEVENT = 'gevent'
17
- EVENTLET = 'eventlet'
18
- GEVENT_UWSGI = 'gevent_uwsgi'
19
-
20
-
21
15
  class ApiSdkIdentifyTypeEnum(Enum):
22
16
  DISABLED = 'DISABLED'
23
17
  CLIENT_IP = 'IP'
@@ -36,14 +30,6 @@ class ApiSdkFlaskDebuggingPluginsEnabled(BaseModel):
36
30
  flask_monitoring_dashboard: bool = False
37
31
 
38
32
 
39
- class SocketIOConfig(BaseModel):
40
- message_queue: str
41
- channel: Optional[str] = "flask-socketio"
42
- cors_allowed_origins: Optional[str] = "*"
43
- logs_enabled: Optional[bool] = False
44
- engineio_logs_enabled: Optional[bool] = False
45
-
46
-
47
33
  class ApiSdkConfig(BaseModel):
48
34
  service_name: str
49
35
  permissions: Optional[Union[Callable[[], PermissionRegistry], PermissionRegistry]] = None
@@ -56,8 +42,7 @@ class ApiSdkConfig(BaseModel):
56
42
  http_auth: Optional[ApiSdkHttpAuth] = None
57
43
 
58
44
  static_url_path: Optional[str] = None
59
- server_socketio_config: Optional[SocketIOConfig] = None
60
- client_socketio_config: Optional[SocketIOConfig] = None
45
+ socket_config: Optional[SocketIOConfig] = None
61
46
  web_error_template: Optional[str] = None
62
47
 
63
48
  rate_limit: Union[str, List[str]] = '100/minute' # [count (int)] [per|/] [second|minute|hour|day|month|year][s]
@@ -71,26 +56,6 @@ class ApiSdkConfig(BaseModel):
71
56
 
72
57
  api_route_path_prefix: str = '/api'
73
58
 
74
- @staticmethod
75
- def validate_socketio(values: dict[str, Any]) -> None:
76
- """
77
- ApiSdk instance could be either a Socket.IO server or Socket.IO client.
78
- Client do not need the flask_app process attached to it, but server does.
79
-
80
- Client should use the same config as server (message_queue).
81
- Validate that ApiSdk instance couldn't be a server and a client simultaneously.
82
- """
83
- server_conf, client_conf = values.get("server_socketio_config"), values.get("client_socketio_config")
84
- service = values["service_name"]
85
- error_msg = f"Can't create ApiSdkConfig for {service}. ApiSdk cannot be a socketio server and client simultaneously"
86
- if all([server_conf, client_conf]):
87
- raise AssertionError(error_msg)
88
-
89
- @root_validator
90
- def validator(cls, values: dict[str, Any]) -> dict[str, Any]:
91
- cls.validate_socketio(values)
92
- return values
93
-
94
59
  class Config:
95
60
  extra = Extra.forbid
96
61
  allow_mutation = False
@@ -12,9 +12,11 @@ from ul_api_utils.conf import APPLICATION_START_DT
12
12
  from ul_api_utils.modules.intermediate_state import try_init, try_configure
13
13
  from ul_api_utils.modules.worker_context import WorkerContext
14
14
  from ul_api_utils.modules.worker_sdk_config import WorkerSdkConfig
15
+ from ul_api_utils.resources.socketio import init_socket_io
15
16
  from ul_api_utils.sentry import sentry
16
17
 
17
18
  if TYPE_CHECKING:
19
+ import flask_socketio # type: ignore # lib without mypy stubs
18
20
  from ul_db_utils.modules.postgres_modules.db import DbConfig
19
21
 
20
22
  TI = TypeVar('TI', bound=UniMessage)
@@ -27,6 +29,7 @@ class WorkerSdk:
27
29
  '_config',
28
30
  '_db_initialized',
29
31
  '_flask_app_cache',
32
+ '_sio',
30
33
  )
31
34
 
32
35
  def __init__(self, config: WorkerSdkConfig) -> None:
@@ -35,6 +38,12 @@ class WorkerSdk:
35
38
  self._config = config
36
39
  self._db_initialized = False
37
40
  self._flask_app_cache: Optional[Flask] = None
41
+ self._sio: Optional['flask_socketio.SocketIO'] = None
42
+
43
+ @property
44
+ def socket(self) -> 'flask_socketio.SocketIO':
45
+ assert self._sio is not None, "SocketIO client is not configured, try adding SocketIOConfig to your WorkerSdk first."
46
+ return self._sio
38
47
 
39
48
  @property
40
49
  def _flask_app(self) -> Flask:
@@ -50,7 +59,7 @@ class WorkerSdk:
50
59
 
51
60
  def init(self, app_name: str, *, db_config: Optional['DbConfig'] = None) -> 'WorkerSdk':
52
61
  self._initialized_flask_name = try_init(self, app_name)
53
-
62
+ self._sio = init_socket_io(config=self._config.socket_config)
54
63
  if db_config is not None:
55
64
  from ul_db_utils.utils.waiting_for_postgres import waiting_for_postgres
56
65
  self._db_initialized = True
@@ -1,7 +1,10 @@
1
1
  from pydantic import BaseModel, Extra
2
2
 
3
+ from ul_api_utils.resources.socketio import SocketIOConfig
4
+
3
5
 
4
6
  class WorkerSdkConfig(BaseModel):
7
+ socket_config: SocketIOConfig | None = None
5
8
 
6
9
  class Config:
7
10
  extra = Extra.forbid
@@ -0,0 +1,57 @@
1
+ from enum import Enum
2
+
3
+ from flask_socketio import SocketIO # type: ignore
4
+ from pydantic import BaseModel
5
+
6
+
7
+ class SocketIOConfigType(Enum):
8
+ """
9
+ Defines two basic approaches of creating Socket.IO instance:
10
+ 1. SERVER - Socket.IO instance is being attached to the Flask App,
11
+ async gunicorn workers (gevent, eventlet), requires monkey-patching of
12
+ psycopg and default library. Socket application.
13
+ 2. EXTERNAL_PROCESS - Socket.IO instance isn't attached to Flask App,
14
+ sync gunicorn workers, doesn't require monkey-patching. Could be any
15
+ API, worker, etc. Used only to submit events from an external process
16
+ to the server clients.
17
+
18
+ Further reading: https://flask-socketio.readthedocs.io/en/latest/deployment.html#emitting-from-an-external-process
19
+ """
20
+ SERVER = "SERVER"
21
+ EXTERNAL_PROCESS = "EXTERNAL_PROCESS"
22
+
23
+
24
+ class SocketIOConfig(BaseModel):
25
+ app_type: SocketIOConfigType = SocketIOConfigType.SERVER
26
+ message_queue: str
27
+ channel: str | None = "flask-socketio"
28
+ cors_allowed_origins: str | None = "*"
29
+ logs_enabled: bool | None = False
30
+ engineio_logs_enabled: bool | None = False
31
+
32
+
33
+ class SocketAsyncModesEnum(Enum):
34
+ THREADING = 'threading'
35
+ GEVENT = 'gevent'
36
+ EVENTLET = 'eventlet'
37
+ GEVENT_UWSGI = 'gevent_uwsgi'
38
+
39
+
40
+ def init_socket_io(config: SocketIOConfig | None) -> SocketIO | None:
41
+ socket_io = None
42
+ if config is None:
43
+ return None
44
+
45
+ if config.app_type is SocketIOConfigType.SERVER:
46
+ socket_io = SocketIO()
47
+
48
+ if config.app_type is SocketIOConfigType.EXTERNAL_PROCESS:
49
+ socket_io = SocketIO(
50
+ message_queue=config.message_queue,
51
+ async_mode=SocketAsyncModesEnum.GEVENT.value,
52
+ channel=config.channel,
53
+ cors_allowed_origins=config.cors_allowed_origins,
54
+ logger=config.logs_enabled,
55
+ engineio_logger=config.engineio_logs_enabled,
56
+ )
57
+ return socket_io
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ul-api-utils
3
- Version: 7.10.4
3
+ Version: 7.10.5
4
4
  Summary: Python api utils
5
5
  Author: Unic-lab
6
6
  Author-email:
@@ -17,12 +17,12 @@ pyyaml==6.0
17
17
  requests==2.28.1
18
18
  cryptography==38.0.1
19
19
  colored==1.4.3
20
- flask_socketio==5.3.6
20
+ flask-socketio==5.3.6
21
21
  ormsgpack==1.4.1
22
22
  msgpack==1.0.4
23
23
  msgpack-types==0.2.0
24
24
  fastavro==1.7.0
25
- factory_boy==3.3.0
25
+ factory-boy==3.3.0
26
26
  sentry-sdk[flask]==1.9.2
27
27
  faker==24.8.0
28
28
  types-requests==2.28.8
@@ -1,20 +0,0 @@
1
- from flask_socketio import SocketIO # type: ignore
2
-
3
- from ul_api_utils.modules.api_sdk_config import SocketIOConfig, SocketAsyncModesEnum
4
-
5
-
6
- def init_socketio(server_config: SocketIOConfig | None, client_config: SocketIOConfig | None) -> SocketIO | None:
7
- socketio = None
8
- if server_config is not None:
9
- socketio = SocketIO()
10
-
11
- if client_config is not None:
12
- socketio = SocketIO(
13
- message_queue=client_config.message_queue,
14
- async_mode=SocketAsyncModesEnum.GEVENT.value,
15
- channel=client_config.channel,
16
- cors_allowed_origins=client_config.cors_allowed_origins,
17
- logger=client_config.logs_enabled,
18
- engineio_logger=client_config.engineio_logs_enabled,
19
- )
20
- return socketio
File without changes
File without changes
File without changes