ul-api-utils 10.0.0.dev4__tar.gz → 10.0.0.dev6__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.
- {ul_api_utils-10.0.0.dev4/ul_api_utils.egg-info → ul_api_utils-10.0.0.dev6}/PKG-INFO +7 -3
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/pyproject.toml +5 -3
- ul_api_utils-10.0.0.dev6/setup.py +94 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_resource_fn_typing.py +10 -1
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/cmd_start.py +4 -2
- ul_api_utils-10.0.0.dev6/ul_api_utils/commands/start/gunicorn.conf.local.py +40 -0
- ul_api_utils-10.0.0.dev6/ul_api_utils/commands/start/gunicorn.conf.py +53 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/const.py +5 -5
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/api_sdk.py +0 -7
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/api_sdk_config.py +0 -6
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6/ul_api_utils.egg-info}/PKG-INFO +7 -3
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils.egg-info/SOURCES.txt +1 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils.egg-info/requires.txt +3 -2
- ul_api_utils-10.0.0.dev4/ul_api_utils/commands/start/gunicorn.conf.local.py +0 -0
- ul_api_utils-10.0.0.dev4/ul_api_utils/commands/start/gunicorn.conf.py +0 -26
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/LICENSE +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/README.md +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/setup.cfg +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/access/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_request.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_resource.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_resource_config.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_resource_error_handling.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_resource_type.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_response.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_response_db.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_response_payload_alias.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/db_types.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/signature_check.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/cmd_enc_keys.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/cmd_gen_api_user_token.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/cmd_gen_new_api_user.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/cmd_generate_api_docs.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/cmd_worker_start.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/start/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/start/wsgi.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/conf/ul-debugger-main.js +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/conf/ul-debugger-ui.js +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/conf.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/debug/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/debug/debugger.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/debug/malloc.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/debug/stat.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/encrypt/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/encrypt/encrypt_decrypt_abstract.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/encrypt/encrypt_decrypt_aes_xtea.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/errors.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/internal_api/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/internal_api/__tests__/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/internal_api/__tests__/internal_api.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/internal_api/__tests__/internal_api_content_type.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/internal_api/internal_api.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/internal_api/internal_api_check_context.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/internal_api/internal_api_error.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/internal_api/internal_api_response.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/main.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/__tests__/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/__tests__/test_api_sdk_jwt.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/api_sdk_jwt.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/intermediate_state.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/worker_context.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/worker_sdk.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/worker_sdk_config.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/py.typed +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/caching.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/debugger_scripts.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/health_check/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/health_check/const.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/health_check/health_check.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/health_check/health_check_template.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/health_check/resource.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/not_implemented.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/permissions.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/rate_limitter.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/socketio.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/swagger.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/web_forms/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/web_forms/custom_fields/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/web_forms/custom_fields/custom_checkbox_select.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/web_forms/custom_widgets/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/web_forms/custom_widgets/custom_select_widget.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/web_forms/custom_widgets/custom_text_input_widget.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/web_forms/uni_form.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/sentry.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/__tests__/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/__tests__/api_path_version.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/__tests__/unwrap_typing.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/api_encoding.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/api_format.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/api_method.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/api_pagination.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/api_path_version.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/api_request_info.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/avro.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/broker_topics_message_count.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/cached_per_request.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/colors.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/constants.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/decode_base64.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/deprecated.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flags.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/conf.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/exceptions.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/specifiers/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_models.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_specifier.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_three_specifier.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/specifiers/swagger_version.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/utils/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/utils/input_type.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/utils/parameter_type.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/utils/replace_in_dict.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/utils/request_type.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/utils/schema_type.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/flask_swagger_generator/utils/security_type.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/imports.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/instance_checks.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/jinja/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/jinja/t_url_for.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/jinja/to_pretty_json.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/json_encoder.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/load_modules.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/memory_db/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/memory_db/__tests__/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/memory_db/errors.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/memory_db/repository.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/token_check.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/token_check_through_request.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/unwrap_typing.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/uuid_converter.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/validators/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/validators/__tests__/__init__.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/validators/__tests__/test_custom_fields.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/validators/custom_fields.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/validators/validate_empty_object.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/validators/validate_uuid.py +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils.egg-info/dependency_links.txt +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils.egg-info/entry_points.txt +0 -0
- {ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils.egg-info/top_level.txt +0 -0
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ul_api_utils
|
|
3
|
-
Version: 10.0.0.
|
|
3
|
+
Version: 10.0.0.dev6
|
|
4
4
|
Summary: Python api utils
|
|
5
5
|
Author: Unic-lab
|
|
6
|
+
Author-email:
|
|
6
7
|
License: MIT
|
|
8
|
+
Platform: any
|
|
7
9
|
Classifier: Intended Audience :: Developers
|
|
8
10
|
Classifier: License :: OSI Approved :: MIT License
|
|
9
11
|
Classifier: Programming Language :: Python
|
|
@@ -12,9 +14,9 @@ Classifier: Operating System :: OS Independent
|
|
|
12
14
|
Requires-Python: >=3.14
|
|
13
15
|
Description-Content-Type: text/markdown
|
|
14
16
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist: ul-db-utils==6.0.0.
|
|
17
|
+
Requires-Dist: ul-db-utils==6.0.0.dev3
|
|
16
18
|
Requires-Dist: ul-py-tool==3.0.2.dev1
|
|
17
|
-
Requires-Dist: ul-unipipeline>=3.0.2.
|
|
19
|
+
Requires-Dist: ul-unipipeline>=3.0.2.dev1
|
|
18
20
|
Requires-Dist: frozendict>=2.4.4
|
|
19
21
|
Requires-Dist: jinja2>=3.1.6
|
|
20
22
|
Requires-Dist: flask>=3.1.0
|
|
@@ -27,6 +29,7 @@ Requires-Dist: pyjwt>=2.10.1
|
|
|
27
29
|
Requires-Dist: gunicorn>=23.0.0
|
|
28
30
|
Requires-Dist: gevent>=25.9.1
|
|
29
31
|
Requires-Dist: gevent-websocket>=0.10.1
|
|
32
|
+
Requires-Dist: psycogreen>=1.0.2
|
|
30
33
|
Requires-Dist: flask-socketio>=5.5.1
|
|
31
34
|
Requires-Dist: pyyaml>=6.0
|
|
32
35
|
Requires-Dist: requests>=2.31.0
|
|
@@ -49,6 +52,7 @@ Requires-Dist: wtforms-alchemy>=0.18.0
|
|
|
49
52
|
Provides-Extra: dev
|
|
50
53
|
Requires-Dist: uv-script>=0.1.9; extra == "dev"
|
|
51
54
|
Dynamic: license-file
|
|
55
|
+
Dynamic: platform
|
|
52
56
|
|
|
53
57
|
# Generic library api-utils
|
|
54
58
|
|
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "ul_api_utils"
|
|
10
|
-
version = "10.0.0.
|
|
10
|
+
version = "10.0.0.dev6"
|
|
11
11
|
description = "Python api utils"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
license = { text = "MIT" }
|
|
@@ -21,9 +21,10 @@ classifiers = [
|
|
|
21
21
|
"Operating System :: OS Independent",
|
|
22
22
|
]
|
|
23
23
|
dependencies = [
|
|
24
|
-
"ul-db-utils==6.0.0.
|
|
24
|
+
"ul-db-utils==6.0.0.dev3",
|
|
25
25
|
"ul-py-tool==3.0.2.dev1",
|
|
26
|
-
"ul-unipipeline>=3.0.2.
|
|
26
|
+
"ul-unipipeline>=3.0.2.dev1",
|
|
27
|
+
|
|
27
28
|
"frozendict>=2.4.4",
|
|
28
29
|
"jinja2>=3.1.6",
|
|
29
30
|
"flask>=3.1.0",
|
|
@@ -36,6 +37,7 @@ dependencies = [
|
|
|
36
37
|
"gunicorn>=23.0.0",
|
|
37
38
|
"gevent>=25.9.1",
|
|
38
39
|
"gevent-websocket>=0.10.1",
|
|
40
|
+
"psycogreen>=1.0.2",
|
|
39
41
|
"flask-socketio>=5.5.1",
|
|
40
42
|
"pyyaml>=6.0",
|
|
41
43
|
"requests>=2.31.0",
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
from os import path
|
|
2
|
+
from setuptools import setup, find_packages
|
|
3
|
+
|
|
4
|
+
HERE = path.abspath(path.dirname(__file__))
|
|
5
|
+
|
|
6
|
+
with open(path.join(HERE, 'README.md'), encoding='utf-8') as f:
|
|
7
|
+
long_description = f.read()
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
setup(
|
|
11
|
+
name='ul_api_utils',
|
|
12
|
+
version='9.4.0',
|
|
13
|
+
description='Python api utils',
|
|
14
|
+
author='Unic-lab',
|
|
15
|
+
long_description=long_description,
|
|
16
|
+
long_description_content_type="text/markdown",
|
|
17
|
+
author_email='',
|
|
18
|
+
packages=find_packages(),
|
|
19
|
+
package_data={
|
|
20
|
+
"ul_api_utils": [
|
|
21
|
+
'py.typed',
|
|
22
|
+
"utils/flask_swagger_ui/templates/*.html",
|
|
23
|
+
"utils/flask_swagger_ui/static/*.html",
|
|
24
|
+
"utils/flask_swagger_ui/static/*.js",
|
|
25
|
+
"utils/flask_swagger_ui/static/*.css",
|
|
26
|
+
"utils/flask_swagger_ui/static/*.png",
|
|
27
|
+
"utils/flask_swagger_ui/static/*.map",
|
|
28
|
+
"conf/ul-debugger-main.js",
|
|
29
|
+
"conf/ul-debugger-ui.js",
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
entry_points={
|
|
33
|
+
"console_scripts": [
|
|
34
|
+
'ulapiutls=ul_api_utils.main:main',
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
include_package_data=True,
|
|
38
|
+
license="MIT",
|
|
39
|
+
classifiers=[
|
|
40
|
+
"Intended Audience :: Developers",
|
|
41
|
+
"License :: OSI Approved :: MIT License",
|
|
42
|
+
"Programming Language :: Python",
|
|
43
|
+
"Programming Language :: Python :: 3.8",
|
|
44
|
+
"Programming Language :: Python :: 3.9",
|
|
45
|
+
"Programming Language :: Python :: 3.10",
|
|
46
|
+
"Operating System :: OS Independent",
|
|
47
|
+
],
|
|
48
|
+
platforms='any',
|
|
49
|
+
install_requires=[
|
|
50
|
+
"ul-unipipeline==2.0.6",
|
|
51
|
+
"jinja2==3.1.6",
|
|
52
|
+
"flask==3.1.0",
|
|
53
|
+
"flask-wtf==1.2.2",
|
|
54
|
+
"flask-limiter==3.10.1",
|
|
55
|
+
"flask-caching==2.3.1",
|
|
56
|
+
"flask-swagger-ui==4.11.1",
|
|
57
|
+
"flask-monitoringdashboard>=5.0.0",
|
|
58
|
+
"pycryptodome==3.21.0",
|
|
59
|
+
"pyjwt==2.10.1",
|
|
60
|
+
"gunicorn==23.0.0",
|
|
61
|
+
"gevent==24.11.1",
|
|
62
|
+
"gevent-websocket==0.10.1",
|
|
63
|
+
"psycogreen==1.0.2",
|
|
64
|
+
"pyyaml==6.0",
|
|
65
|
+
"requests>=2.32.0",
|
|
66
|
+
"cryptography==44.0.2",
|
|
67
|
+
"colored==1.4.3",
|
|
68
|
+
"flask-socketio==5.5.1",
|
|
69
|
+
"ormsgpack==1.8.0",
|
|
70
|
+
"msgpack==1.1.0",
|
|
71
|
+
"msgpack-types==0.5.0",
|
|
72
|
+
"fastavro==1.10.0",
|
|
73
|
+
"factory-boy==3.3.0",
|
|
74
|
+
"sentry-sdk[flask]==2.22.0",
|
|
75
|
+
"faker==37.0.0",
|
|
76
|
+
"types-requests==2.32.0.20250306",
|
|
77
|
+
"types-jinja2==2.11.9",
|
|
78
|
+
"xlsxwriter==3.2.2",
|
|
79
|
+
"werkzeug==3.1.3",
|
|
80
|
+
"frozendict==2.4.4",
|
|
81
|
+
"wtforms==3.0.1",
|
|
82
|
+
"wtforms-alchemy==0.18.0",
|
|
83
|
+
"pathvalidate==3.2.3",
|
|
84
|
+
|
|
85
|
+
# "opentelemetry-sdk==1.8.0",
|
|
86
|
+
# "opentelemetry-api==1.8.0",
|
|
87
|
+
# "opentelemetry-instrumentation-flask==0.27b0",
|
|
88
|
+
# "opentelemetry-instrumentation-requests==0.27b0",
|
|
89
|
+
# "opentelemetry-exporter-jaeger==1.8.0",
|
|
90
|
+
# "opentelemetry-instrumentation-sqlalchemy==0.27b0",
|
|
91
|
+
# "ul-db-utils==5.1.0", # ACTUALIZE, BUT DO NOT UNCOMMENT PLEASE
|
|
92
|
+
# "ul-py-tool==2.1.4", # ACTUALIZE, BUT DO NOT UNCOMMENT PLEASE
|
|
93
|
+
],
|
|
94
|
+
)
|
|
@@ -3,7 +3,6 @@ from typing import NamedTuple, Any, Callable, Optional, List, Dict, Type, Tuple,
|
|
|
3
3
|
|
|
4
4
|
from flask import request
|
|
5
5
|
from pydantic import BaseModel, ValidationError, validate_call, TypeAdapter, RootModel
|
|
6
|
-
from pydantic.v1.utils import deep_update
|
|
7
6
|
from pydantic_core import ErrorDetails
|
|
8
7
|
|
|
9
8
|
from ul_api_utils.api_resource.api_request import ApiRequestQuery
|
|
@@ -25,6 +24,16 @@ if TYPE_CHECKING:
|
|
|
25
24
|
FN_SYSTEM_PROPS = {"api_resource", "query", "body", "return", "body_validation_error", "query_validation_error"}
|
|
26
25
|
|
|
27
26
|
|
|
27
|
+
def deep_update(mapping: Dict[str, Any], updating_mapping: Dict[str, Any]) -> Dict[str, Any]:
|
|
28
|
+
updated_mapping = mapping.copy()
|
|
29
|
+
for k, v in updating_mapping.items():
|
|
30
|
+
if k in updated_mapping and isinstance(updated_mapping[k], dict) and isinstance(v, dict):
|
|
31
|
+
updated_mapping[k] = deep_update(updated_mapping[k], v)
|
|
32
|
+
else:
|
|
33
|
+
updated_mapping[k] = v
|
|
34
|
+
return updated_mapping
|
|
35
|
+
|
|
36
|
+
|
|
28
37
|
def _is_complex_type(annotation: Any) -> bool:
|
|
29
38
|
origin = get_origin(annotation)
|
|
30
39
|
|
|
@@ -55,7 +55,7 @@ class CmdStart(Cmd):
|
|
|
55
55
|
parser.add_argument('--debug', dest='debug', type=arg_str2bool, default=False, required=False)
|
|
56
56
|
parser.add_argument('--max-requests', dest='max_requests', type=int, default=1000, required=False)
|
|
57
57
|
parser.add_argument('--max-requests-jitter', dest='max_requests_jitter', type=int, default=50, required=False)
|
|
58
|
-
parser.add_argument('--worker-class', dest='worker_class', type=str, default='
|
|
58
|
+
parser.add_argument('--worker-class', dest='worker_class', type=str, default='gevent', required=False)
|
|
59
59
|
parser.add_argument('--statsd_endpoint', dest='statsd_endpoint', type=str, default=None, required=False)
|
|
60
60
|
parser.add_argument('--statsd_prefix', dest='statsd_prefix', type=str, default=None, required=False)
|
|
61
61
|
parser.add_argument('--freeze-gc', dest='freeze_gc', type=bool, default=False, required=False)
|
|
@@ -77,8 +77,10 @@ class CmdStart(Cmd):
|
|
|
77
77
|
assert len(APPLICATION_GUNICORN_WORKERS) > 0
|
|
78
78
|
|
|
79
79
|
debug = (self.debug and self.env == ENV_LOCAL)
|
|
80
|
+
|
|
80
81
|
local_conf = os.path.abspath(os.path.normpath(os.path.join(THIS_LIB_CWD, "commands", "start", "gunicorn.conf.local.py")))
|
|
81
82
|
prod_conf = os.path.abspath(os.path.normpath(os.path.join(THIS_LIB_CWD, "commands", "start", "gunicorn.conf.py")))
|
|
83
|
+
|
|
82
84
|
gunicorn_config = prod_conf if self.freeze_gc and not debug else local_conf
|
|
83
85
|
|
|
84
86
|
args = [
|
|
@@ -94,7 +96,7 @@ class CmdStart(Cmd):
|
|
|
94
96
|
'--access-logfile=-',
|
|
95
97
|
'--error-logfile=-',
|
|
96
98
|
'--disable-redirect-access-to-syslog',
|
|
97
|
-
*(['--reload'] if debug else ['--preload']),
|
|
99
|
+
*(['--reload'] if debug else ([] if self.worker_class.lower().startswith('gevent') else ['--preload'])), # gevent workers do monkey-patching in init_process; --preload loads app in master before that
|
|
98
100
|
f'{self.app_module}:{self.app_name}',
|
|
99
101
|
]
|
|
100
102
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import gc
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from ul_py_tool.utils.write_stdout import write_stdout
|
|
5
|
+
|
|
6
|
+
try:
|
|
7
|
+
import gevent.monkey # type: ignore
|
|
8
|
+
_gevent_available = True
|
|
9
|
+
except ImportError:
|
|
10
|
+
_gevent_available = False
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def post_fork(server: Any, worker: Any) -> None:
|
|
14
|
+
"""
|
|
15
|
+
Called just after a worker has been forked.
|
|
16
|
+
Applies gevent monkey-patching so that all stdlib I/O is cooperative
|
|
17
|
+
from the very start of the worker process (local / debug mode).
|
|
18
|
+
https://docs.gunicorn.org/en/20.1.0/settings.html?highlight=preload#post-fork
|
|
19
|
+
"""
|
|
20
|
+
if _gevent_available and not gevent.monkey.is_module_patched('os'):
|
|
21
|
+
gevent.monkey.patch_all()
|
|
22
|
+
write_stdout("gevent monkey-patching applied for worker", worker.pid)
|
|
23
|
+
write_stdout("Enabling GC for worker", worker.pid)
|
|
24
|
+
gc.enable()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def post_worker_init(worker: Any) -> None:
|
|
28
|
+
"""
|
|
29
|
+
Called just after a worker has been initialized (inside the worker process).
|
|
30
|
+
Patches psycopg2 to use a gevent-friendly wait callback so that database I/O
|
|
31
|
+
through libpq (C extension) yields to the gevent event loop instead of blocking.
|
|
32
|
+
https://docs.gunicorn.org/en/stable/settings.html#post-worker-init
|
|
33
|
+
"""
|
|
34
|
+
if _gevent_available and gevent.monkey.is_module_patched('socket'):
|
|
35
|
+
try:
|
|
36
|
+
from psycogreen.gevent import patch_psycopg # type: ignore
|
|
37
|
+
patch_psycopg()
|
|
38
|
+
write_stdout("psycogreen patch applied for worker", worker.pid)
|
|
39
|
+
except ImportError:
|
|
40
|
+
pass
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import gc
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from ul_py_tool.utils.write_stdout import write_stdout
|
|
5
|
+
|
|
6
|
+
try:
|
|
7
|
+
import gevent.monkey # type: ignore
|
|
8
|
+
_gevent_available = True
|
|
9
|
+
except ImportError:
|
|
10
|
+
_gevent_available = False
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def when_ready(server: Any) -> None:
|
|
14
|
+
"""
|
|
15
|
+
Use only with --preload option.
|
|
16
|
+
Called just after the server is started.
|
|
17
|
+
Freeze garbage collector objects after preloading the application.
|
|
18
|
+
https://docs.gunicorn.org/en/20.1.0/settings.html?highlight=preload#when-ready
|
|
19
|
+
"""
|
|
20
|
+
gc.freeze()
|
|
21
|
+
write_stdout("Objects frozen in permanent generation: ", gc.get_freeze_count())
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def post_fork(server: Any, worker: Any) -> None:
|
|
25
|
+
"""
|
|
26
|
+
Works only with --preload.
|
|
27
|
+
Called just after a worker has been forked.
|
|
28
|
+
Enable garbage collection on each worker if it's not enabled for some reason.
|
|
29
|
+
Also applies gevent monkey-patching when using a gevent-based worker class so
|
|
30
|
+
that all stdlib I/O is cooperative from the very start of the worker process.
|
|
31
|
+
https://docs.gunicorn.org/en/20.1.0/settings.html?highlight=preload#post-fork
|
|
32
|
+
"""
|
|
33
|
+
if _gevent_available and not gevent.monkey.is_module_patched('os'):
|
|
34
|
+
gevent.monkey.patch_all()
|
|
35
|
+
write_stdout("gevent monkey-patching applied for worker", worker.pid)
|
|
36
|
+
write_stdout("Enabling GC for worker", worker.pid)
|
|
37
|
+
gc.enable()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def post_worker_init(worker: Any) -> None:
|
|
41
|
+
"""
|
|
42
|
+
Called just after a worker has been initialized (inside the worker process).
|
|
43
|
+
Patches psycopg2 to use a gevent-friendly wait callback so that database I/O
|
|
44
|
+
through libpq (C extension) yields to the gevent event loop instead of blocking.
|
|
45
|
+
https://docs.gunicorn.org/en/stable/settings.html#post-worker-init
|
|
46
|
+
"""
|
|
47
|
+
if _gevent_available and gevent.monkey.is_module_patched('socket'):
|
|
48
|
+
try:
|
|
49
|
+
from psycogreen.gevent import patch_psycopg # type: ignore
|
|
50
|
+
patch_psycopg()
|
|
51
|
+
write_stdout("psycogreen patch applied for worker", worker.pid)
|
|
52
|
+
except ImportError:
|
|
53
|
+
pass
|
|
@@ -68,11 +68,11 @@ INTERNAL_API__DEFAULT_PATH_PREFIX = '/api'
|
|
|
68
68
|
|
|
69
69
|
AUTO_GZIP_THRESHOLD_LENGTH = 1000
|
|
70
70
|
|
|
71
|
-
CRON_EXPRESSION_VALIDATION_REGEX = "(^((\*\/)?([0-5]?[0-9])((\,|\-|\/)([0-5]?[0-9]))*|\*)\s+((\*\/)?((2[0-3]|1[0-9]|[0-9]|00))"
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
CRON_EXPRESSION_VALIDATION_REGEX = (r"(^((\*\/)?([0-5]?[0-9])((\,|\-|\/)([0-5]?[0-9]))*|\*)\s+((\*\/)?((2[0-3]|1[0-9]|[0-9]|00))"
|
|
72
|
+
r"((\,|\-|\/)(2[0-3]|1[0-9]|[0-9]|00))*|\*)\s+((\*\/)?([1-9]|[12][0-9]|3[01])((\,|\-|\/)"
|
|
73
|
+
r"([1-9]|[12][0-9]|3[01]))*|\*)\s+((\*\/)?([1-9]|1[0-2])((\,|\-|\/)"
|
|
74
|
+
r"([1-9]|1[0-2]))*|\*|(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|des))\s+((\*\/)?[0-6]"
|
|
75
|
+
r"((\,|\-|\/)[0-6])*|\*|00|(sun|mon|tue|wed|thu|fri|sat))\s*$)|@(annually|yearly|monthly|weekly|daily|hourly|reboot)") # noqa
|
|
76
76
|
|
|
77
77
|
MAX_UTC_OFFSET_SECONDS = 50400
|
|
78
78
|
MIN_UTC_OFFSET_SECONDS = -43200
|
|
@@ -194,13 +194,6 @@ class ApiSdk:
|
|
|
194
194
|
if APPLICATION_DEBUG:
|
|
195
195
|
arg_files_print(1000, route_files, ignored_files=ignored_route_files, name='files loaded')
|
|
196
196
|
|
|
197
|
-
if (plugins_config := self.config.flask_debugging_plugins) is not None:
|
|
198
|
-
if plugins_config.flask_monitoring_dashboard:
|
|
199
|
-
import flask_monitoringdashboard as dashboard # type: ignore
|
|
200
|
-
if os.environ.get('FLASK_MONITORING_DASHBOARD_CONFIG'):
|
|
201
|
-
dashboard.config.init_from(envvar='FLASK_MONITORING_DASHBOARD_CONFIG', log_verbose=True)
|
|
202
|
-
dashboard.bind(self._flask_app)
|
|
203
|
-
|
|
204
197
|
load_permissions(self, self._initialized_flask_name, self._config.permissions)
|
|
205
198
|
|
|
206
199
|
load_debugger_static_scripts(self)
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/api_sdk_config.py
RENAMED
|
@@ -26,10 +26,6 @@ class ApiSdkHttpAuth(BaseModel):
|
|
|
26
26
|
scheme: str = 'Basic'
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
class ApiSdkFlaskDebuggingPluginsEnabled(BaseModel):
|
|
30
|
-
flask_monitoring_dashboard: bool = False
|
|
31
|
-
|
|
32
|
-
|
|
33
29
|
class ApiSdkConfig(BaseModel):
|
|
34
30
|
service_name: str
|
|
35
31
|
permissions: Optional[Union[Callable[[], PermissionRegistry], PermissionRegistry]] = None
|
|
@@ -52,8 +48,6 @@ class ApiSdkConfig(BaseModel):
|
|
|
52
48
|
cache_storage_uri: str = '' # supports only redis
|
|
53
49
|
cache_default_ttl: int = 60 # seconds
|
|
54
50
|
|
|
55
|
-
flask_debugging_plugins: Optional[ApiSdkFlaskDebuggingPluginsEnabled] = None
|
|
56
|
-
|
|
57
51
|
api_route_path_prefix: str = '/api'
|
|
58
52
|
|
|
59
53
|
model_config = ConfigDict(
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ul_api_utils
|
|
3
|
-
Version: 10.0.0.
|
|
3
|
+
Version: 10.0.0.dev6
|
|
4
4
|
Summary: Python api utils
|
|
5
5
|
Author: Unic-lab
|
|
6
|
+
Author-email:
|
|
6
7
|
License: MIT
|
|
8
|
+
Platform: any
|
|
7
9
|
Classifier: Intended Audience :: Developers
|
|
8
10
|
Classifier: License :: OSI Approved :: MIT License
|
|
9
11
|
Classifier: Programming Language :: Python
|
|
@@ -12,9 +14,9 @@ Classifier: Operating System :: OS Independent
|
|
|
12
14
|
Requires-Python: >=3.14
|
|
13
15
|
Description-Content-Type: text/markdown
|
|
14
16
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist: ul-db-utils==6.0.0.
|
|
17
|
+
Requires-Dist: ul-db-utils==6.0.0.dev3
|
|
16
18
|
Requires-Dist: ul-py-tool==3.0.2.dev1
|
|
17
|
-
Requires-Dist: ul-unipipeline>=3.0.2.
|
|
19
|
+
Requires-Dist: ul-unipipeline>=3.0.2.dev1
|
|
18
20
|
Requires-Dist: frozendict>=2.4.4
|
|
19
21
|
Requires-Dist: jinja2>=3.1.6
|
|
20
22
|
Requires-Dist: flask>=3.1.0
|
|
@@ -27,6 +29,7 @@ Requires-Dist: pyjwt>=2.10.1
|
|
|
27
29
|
Requires-Dist: gunicorn>=23.0.0
|
|
28
30
|
Requires-Dist: gevent>=25.9.1
|
|
29
31
|
Requires-Dist: gevent-websocket>=0.10.1
|
|
32
|
+
Requires-Dist: psycogreen>=1.0.2
|
|
30
33
|
Requires-Dist: flask-socketio>=5.5.1
|
|
31
34
|
Requires-Dist: pyyaml>=6.0
|
|
32
35
|
Requires-Dist: requests>=2.31.0
|
|
@@ -49,6 +52,7 @@ Requires-Dist: wtforms-alchemy>=0.18.0
|
|
|
49
52
|
Provides-Extra: dev
|
|
50
53
|
Requires-Dist: uv-script>=0.1.9; extra == "dev"
|
|
51
54
|
Dynamic: license-file
|
|
55
|
+
Dynamic: platform
|
|
52
56
|
|
|
53
57
|
# Generic library api-utils
|
|
54
58
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
ul-db-utils==6.0.0.
|
|
1
|
+
ul-db-utils==6.0.0.dev3
|
|
2
2
|
ul-py-tool==3.0.2.dev1
|
|
3
|
-
ul-unipipeline>=3.0.2.
|
|
3
|
+
ul-unipipeline>=3.0.2.dev1
|
|
4
4
|
frozendict>=2.4.4
|
|
5
5
|
jinja2>=3.1.6
|
|
6
6
|
flask>=3.1.0
|
|
@@ -13,6 +13,7 @@ pyjwt>=2.10.1
|
|
|
13
13
|
gunicorn>=23.0.0
|
|
14
14
|
gevent>=25.9.1
|
|
15
15
|
gevent-websocket>=0.10.1
|
|
16
|
+
psycogreen>=1.0.2
|
|
16
17
|
flask-socketio>=5.5.1
|
|
17
18
|
pyyaml>=6.0
|
|
18
19
|
requests>=2.31.0
|
|
File without changes
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import gc
|
|
2
|
-
from typing import Any
|
|
3
|
-
|
|
4
|
-
from ul_py_tool.utils.write_stdout import write_stdout
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def when_ready(server: Any) -> None:
|
|
8
|
-
"""
|
|
9
|
-
Use only with --preload option.
|
|
10
|
-
Called just after the server is started.
|
|
11
|
-
Freeze garbage collector objects after preloading the application.
|
|
12
|
-
https://docs.gunicorn.org/en/20.1.0/settings.html?highlight=preload#when-ready
|
|
13
|
-
"""
|
|
14
|
-
gc.freeze()
|
|
15
|
-
write_stdout("Objects frozen in permanent generation: ", gc.get_freeze_count())
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def post_fork(server: Any, worker: Any) -> None:
|
|
19
|
-
"""
|
|
20
|
-
Works only with --preload.
|
|
21
|
-
Called just after a worker has been forked.
|
|
22
|
-
Enable garbage collection on each worker if it's not enabled for some reason.
|
|
23
|
-
https://docs.gunicorn.org/en/20.1.0/settings.html?highlight=preload#post-fork
|
|
24
|
-
"""
|
|
25
|
-
write_stdout("Enabling GC for worker", worker.pid)
|
|
26
|
-
gc.enable()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_request.py
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_resource.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_resource_type.py
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_response.py
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/api_response_db.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/api_resource/signature_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/cmd_gen_new_api_user.py
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/cmd_generate_api_docs.py
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/cmd_worker_start.py
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/commands/start/__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
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/internal_api/internal_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/__tests__/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/intermediate_state.py
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/worker_context.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/modules/worker_sdk_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/debugger_scripts.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/health_check/const.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/not_implemented.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/rate_limitter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/web_forms/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/resources/web_forms/uni_form.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/__tests__/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/__tests__/unwrap_typing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/api_path_version.py
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/api_request_info.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/cached_per_request.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-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/jinja/to_pretty_json.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/memory_db/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/memory_db/errors.py
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/utils/memory_db/repository.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/validators/__tests__/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/validators/custom_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils/validators/validate_uuid.py
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ul_api_utils-10.0.0.dev4 → ul_api_utils-10.0.0.dev6}/ul_api_utils.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|