edri 2025.10.1rc1__tar.gz → 2025.11.1rc1__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.
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/PKG-INFO +2 -1
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/handlers/base_handler.py +3 -1
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/handlers/http_handler.py +1 -1
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/validation.py +14 -7
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri.egg-info/PKG-INFO +2 -1
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/setup.py +2 -1
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/README.md +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/abstract/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/abstract/manager/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/abstract/manager/manager_base.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/abstract/manager/manager_priority_base.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/abstract/manager/worker.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/abstract/worker/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/abstract/worker/worker.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/abstract/worker/worker_process.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/abstract/worker/worker_thread.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/broker.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/dataclass/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/dataclass/api_event.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/dataclass/client.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/dataclass/file.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/extensions/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/extensions/url_extension.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/extensions/url_prefix.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/handlers/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/handlers/html_handler.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/handlers/rest_handler.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/handlers/websocket_handler.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/listener.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/middleware.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/static_pages/documentation.j2 +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/static_pages/health_check_status.j2 +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/static_pages/status_300.j2 +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/static_pages/status_400.j2 +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/api/static_pages/status_500.j2 +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/config/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/config/constant.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/config/setting.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/dataclass/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/dataclass/directive/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/dataclass/directive/base.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/dataclass/directive/html.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/dataclass/directive/http.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/dataclass/event.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/dataclass/health_checker.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/dataclass/injection.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/dataclass/response.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/client/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/client/documentation.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/client/register.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/client/unregister.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/group/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/group/client.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/group/manage.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/manage/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/manage/list_registered.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/manage/register.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/manage/unregister.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/api/manage/unregister_all.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/group/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/group/manager.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/group/router.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/group/scheduler.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/group/store.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/group/switch.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/group/test.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/manager/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/manager/restart.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/manager/stream_close.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/manager/stream_create.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/manager/stream_message.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/manager/worker_quit.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/demands.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/health_check.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/last_events.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/send_from.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/subscribe.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/subscribe_connector.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/subscribed_external.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/subscribed_new.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/unsubscribe.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/router/unsubscribe_all.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/scheduler/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/scheduler/cancel.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/scheduler/set.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/scheduler/set_or_update.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/scheduler/update.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/store/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/store/delete.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/store/get.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/store/get_callback.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/events/edri/store/set.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/router/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/router/cache.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/router/connector/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/router/connector/connector.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/router/connector/socket.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/router/health_checker.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/router/router.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/switch/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/switch/connection.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/switch/forwarder.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/switch/receiver.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/switch/sender.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/switch/switch.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/function.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/json_encoder.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/manager/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/manager/scheduler.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/manager/store.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/normalized_default_dict.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/queue.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/shared_memory_pipe.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/storage.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/transformation.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri/utility/watcher.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri.egg-info/SOURCES.txt +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri.egg-info/dependency_links.txt +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri.egg-info/requires.txt +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/edri.egg-info/top_level.txt +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/setup.cfg +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/abstract/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/abstract/manager/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/abstract/manager/test_manager_base.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/abstract/manager/test_manager_base_priority.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/abstract/worker/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/abstract/worker/test_worker.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/api/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/api/handlers/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/api/handlers/test_base_handler.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/api/handlers/test_html_handler.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/api/handlers/test_http_handler.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/api/test_broker.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/dataclass/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/dataclass/event/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/dataclass/event/test_event.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/dataclass/event/test_event_init.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/dataclass/event/test_response.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/events/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/events/test/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/events/test/event_request.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/events/test/ping.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/events/test/ping2.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/router/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/router/test_cache.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/router/test_health_checker.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/router/test_router.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/test_edri_init.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/manager/__init__.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/manager/test_scheduler.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/manager/test_store.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/test_function.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/test_json_encoder.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/test_normalized_default_dict.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/test_shared_memory_pipe.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/test_storage.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/test_transformation.py +0 -0
- {edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/utility/test_validation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edri
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.11.1rc1
|
|
4
4
|
Summary: Event Driven Routing Infrastructure
|
|
5
5
|
Author: Marek Olšan
|
|
6
6
|
Author-email: marek.olsan@gmail.com
|
|
@@ -9,6 +9,7 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
9
9
|
Classifier: Programming Language :: Python :: 3
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
12
13
|
Classifier: Operating System :: POSIX
|
|
13
14
|
Classifier: Operating System :: POSIX :: Linux
|
|
14
15
|
Classifier: Intended Audience :: Developers
|
|
@@ -2,7 +2,7 @@ from abc import ABC, abstractmethod
|
|
|
2
2
|
from dataclasses import fields, MISSING
|
|
3
3
|
from logging import getLogger
|
|
4
4
|
from types import UnionType, NoneType
|
|
5
|
-
from typing import Callable, Type, get_origin, Union, get_args, Any, TypedDict, Literal
|
|
5
|
+
from typing import Callable, Type, get_origin, Union, get_args, Any, TypedDict, Literal, TypeAliasType
|
|
6
6
|
from urllib.parse import parse_qs, unquote
|
|
7
7
|
|
|
8
8
|
from edri.dataclass.directive import ResponseDirective
|
|
@@ -91,6 +91,8 @@ class BaseHandler[T: ResponseDirective](ABC):
|
|
|
91
91
|
Raises:
|
|
92
92
|
TypeError: If the value cannot be converted to the specified type.
|
|
93
93
|
"""
|
|
94
|
+
if isinstance(annotation, TypeAliasType):
|
|
95
|
+
annotation = annotation.__value__
|
|
94
96
|
if get_origin(annotation) or isinstance(annotation, UnionType):
|
|
95
97
|
if isinstance(annotation, UnionType) or get_origin(annotation) == Union:
|
|
96
98
|
annotations = get_args(annotation)
|
|
@@ -486,7 +486,7 @@ class HTTPHandler[T: HTTPResponseDirective](BaseHandler, ABC):
|
|
|
486
486
|
|
|
487
487
|
async def parse_body(self, event: Type[Event]) -> None:
|
|
488
488
|
if not self.headers["content-type"]:
|
|
489
|
-
|
|
489
|
+
self.headers["content-type"] = ["application/octet-stream"]
|
|
490
490
|
|
|
491
491
|
if event._is_file_only is None:
|
|
492
492
|
while self.body.tell() < MAX_BODY_SIZE:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from datetime import date, datetime, time
|
|
2
2
|
from re import Pattern
|
|
3
|
+
from typing import Self
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
class StringValidation(str):
|
|
@@ -11,7 +12,7 @@ class StringValidation(str):
|
|
|
11
12
|
- Minimum and maximum allowed lengths.
|
|
12
13
|
|
|
13
14
|
Args:
|
|
14
|
-
|
|
15
|
+
value (str): The input string to validate.
|
|
15
16
|
maximum_length (int, optional): Maximum allowed length of the string.
|
|
16
17
|
minimum_length (int, optional): Minimum required length of the string.
|
|
17
18
|
regex (Pattern, optional): A compiled regex pattern the string must match.
|
|
@@ -27,20 +28,26 @@ class StringValidation(str):
|
|
|
27
28
|
def __new__(cls, value, /, *,
|
|
28
29
|
maximum_length: int = None,
|
|
29
30
|
minimum_length: int = None,
|
|
30
|
-
regex: Pattern | None = None,
|
|
31
|
-
):
|
|
31
|
+
regex: Pattern[str] | None = None,
|
|
32
|
+
) -> Self:
|
|
32
33
|
|
|
33
34
|
value = super().__new__(cls, value)
|
|
34
35
|
if regex is not None:
|
|
35
|
-
if not regex.
|
|
36
|
-
raise ValueError(
|
|
36
|
+
if not regex.fullmatch(value):
|
|
37
|
+
raise ValueError(
|
|
38
|
+
f"Invalid data provided. Data '{cls.safe_val(value)}' does not match pattern '{regex.pattern}'")
|
|
37
39
|
if minimum_length is not None and len(value) < minimum_length:
|
|
38
|
-
raise ValueError(f"Invalid data provided. Data '{value}' is too short")
|
|
40
|
+
raise ValueError(f"Invalid data provided. Data '{cls.safe_val(value)}' is too short")
|
|
39
41
|
if maximum_length is not None and len(value) > maximum_length:
|
|
40
|
-
raise ValueError(f"Invalid data provided. Data '{value}' is too long")
|
|
42
|
+
raise ValueError(f"Invalid data provided. Data '{cls.safe_val(value)}' is too long")
|
|
41
43
|
|
|
42
44
|
return value
|
|
43
45
|
|
|
46
|
+
@staticmethod
|
|
47
|
+
def safe_val(v, max_len=20):
|
|
48
|
+
"""Return truncated display string, not full content."""
|
|
49
|
+
return (v[:max_len] + "…") if len(v) > max_len else v
|
|
50
|
+
|
|
44
51
|
|
|
45
52
|
class IntegerValidation(int):
|
|
46
53
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edri
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.11.1rc1
|
|
4
4
|
Summary: Event Driven Routing Infrastructure
|
|
5
5
|
Author: Marek Olšan
|
|
6
6
|
Author-email: marek.olsan@gmail.com
|
|
@@ -9,6 +9,7 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
9
9
|
Classifier: Programming Language :: Python :: 3
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
12
13
|
Classifier: Operating System :: POSIX
|
|
13
14
|
Classifier: Operating System :: POSIX :: Linux
|
|
14
15
|
Classifier: Intended Audience :: Developers
|
|
@@ -122,7 +122,7 @@ Whether you're building a real-time data processing system, a distributed servic
|
|
|
122
122
|
|
|
123
123
|
setup(
|
|
124
124
|
name='edri',
|
|
125
|
-
version='2025.
|
|
125
|
+
version='2025.11.01rc1',
|
|
126
126
|
packages=find_packages(),
|
|
127
127
|
description='Event Driven Routing Infrastructure',
|
|
128
128
|
long_description=long_description,
|
|
@@ -163,6 +163,7 @@ setup(
|
|
|
163
163
|
"Programming Language :: Python :: 3",
|
|
164
164
|
"Programming Language :: Python :: 3.12",
|
|
165
165
|
"Programming Language :: Python :: 3.13",
|
|
166
|
+
"Programming Language :: Python :: 3.14",
|
|
166
167
|
"Operating System :: POSIX",
|
|
167
168
|
"Operating System :: POSIX :: Linux",
|
|
168
169
|
"Intended Audience :: Developers",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|
{edri-2025.10.1rc1 → edri-2025.11.1rc1}/tests/abstract/manager/test_manager_base_priority.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|