cledar-sdk 2.0.2__py3-none-any.whl → 2.1.0__py3-none-any.whl
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.
- cledar/__init__.py +1 -0
- cledar/kafka/README.md +239 -0
- cledar/kafka/__init__.py +42 -0
- cledar/kafka/clients/base.py +117 -0
- cledar/kafka/clients/consumer.py +138 -0
- cledar/kafka/clients/producer.py +97 -0
- cledar/kafka/config/schemas.py +262 -0
- cledar/kafka/exceptions.py +17 -0
- cledar/kafka/handlers/dead_letter.py +88 -0
- cledar/kafka/handlers/parser.py +83 -0
- cledar/kafka/logger.py +5 -0
- cledar/kafka/models/input.py +17 -0
- cledar/kafka/models/message.py +14 -0
- cledar/kafka/models/output.py +12 -0
- cledar/kafka/tests/.env.test.kafka +3 -0
- cledar/kafka/tests/README.md +216 -0
- cledar/kafka/tests/conftest.py +104 -0
- cledar/kafka/tests/integration/__init__.py +1 -0
- cledar/kafka/tests/integration/conftest.py +78 -0
- cledar/kafka/tests/integration/helpers.py +47 -0
- cledar/kafka/tests/integration/test_consumer_integration.py +375 -0
- cledar/kafka/tests/integration/test_integration.py +394 -0
- cledar/kafka/tests/integration/test_producer_consumer_interaction.py +388 -0
- cledar/kafka/tests/integration/test_producer_integration.py +217 -0
- cledar/kafka/tests/unit/__init__.py +1 -0
- cledar/kafka/tests/unit/test_base_kafka_client.py +391 -0
- cledar/kafka/tests/unit/test_config_validation.py +609 -0
- cledar/kafka/tests/unit/test_dead_letter_handler.py +443 -0
- cledar/kafka/tests/unit/test_error_handling.py +674 -0
- cledar/kafka/tests/unit/test_input_parser.py +310 -0
- cledar/kafka/tests/unit/test_input_parser_comprehensive.py +489 -0
- cledar/kafka/tests/unit/test_utils.py +25 -0
- cledar/kafka/tests/unit/test_utils_comprehensive.py +408 -0
- cledar/kafka/utils/callbacks.py +28 -0
- cledar/kafka/utils/messages.py +39 -0
- cledar/kafka/utils/topics.py +15 -0
- cledar/kserve/README.md +352 -0
- cledar/kserve/__init__.py +5 -0
- cledar/kserve/tests/__init__.py +0 -0
- cledar/kserve/tests/test_utils.py +64 -0
- cledar/kserve/utils.py +30 -0
- cledar/logging/README.md +53 -0
- cledar/logging/__init__.py +5 -0
- cledar/logging/tests/test_universal_plaintext_formatter.py +249 -0
- cledar/logging/universal_plaintext_formatter.py +99 -0
- cledar/monitoring/README.md +71 -0
- cledar/monitoring/__init__.py +5 -0
- cledar/monitoring/monitoring_server.py +156 -0
- cledar/monitoring/tests/integration/test_monitoring_server_int.py +162 -0
- cledar/monitoring/tests/test_monitoring_server.py +59 -0
- cledar/nonce/README.md +99 -0
- cledar/nonce/__init__.py +5 -0
- cledar/nonce/nonce_service.py +62 -0
- cledar/nonce/tests/__init__.py +0 -0
- cledar/nonce/tests/test_nonce_service.py +136 -0
- cledar/redis/README.md +536 -0
- cledar/redis/__init__.py +17 -0
- cledar/redis/async_example.py +112 -0
- cledar/redis/example.py +67 -0
- cledar/redis/exceptions.py +25 -0
- cledar/redis/logger.py +5 -0
- cledar/redis/model.py +14 -0
- cledar/redis/redis.py +764 -0
- cledar/redis/redis_config_store.py +333 -0
- cledar/redis/tests/test_async_integration_redis.py +158 -0
- cledar/redis/tests/test_async_redis_service.py +380 -0
- cledar/redis/tests/test_integration_redis.py +119 -0
- cledar/redis/tests/test_redis_service.py +319 -0
- cledar/storage/README.md +529 -0
- cledar/storage/__init__.py +6 -0
- cledar/storage/constants.py +5 -0
- cledar/storage/exceptions.py +79 -0
- cledar/storage/models.py +41 -0
- cledar/storage/object_storage.py +1274 -0
- cledar/storage/tests/conftest.py +18 -0
- cledar/storage/tests/test_abfs.py +164 -0
- cledar/storage/tests/test_integration_filesystem.py +359 -0
- cledar/storage/tests/test_integration_s3.py +453 -0
- cledar/storage/tests/test_local.py +384 -0
- cledar/storage/tests/test_s3.py +521 -0
- {cledar_sdk-2.0.2.dist-info → cledar_sdk-2.1.0.dist-info}/METADATA +1 -1
- cledar_sdk-2.1.0.dist-info/RECORD +84 -0
- cledar_sdk-2.0.2.dist-info/RECORD +0 -4
- {cledar_sdk-2.0.2.dist-info → cledar_sdk-2.1.0.dist-info}/WHEEL +0 -0
- {cledar_sdk-2.0.2.dist-info → cledar_sdk-2.1.0.dist-info}/licenses/LICENSE +0 -0
cledar/redis/example.py
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Example usage of RedisConfigStore."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from .model import BaseConfigClass
|
|
7
|
+
from .redis_config_store import RedisConfigStore
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dataclass
|
|
11
|
+
class ExampleConfig(BaseConfigClass):
|
|
12
|
+
"""Example configuration model."""
|
|
13
|
+
|
|
14
|
+
name: str
|
|
15
|
+
index: int
|
|
16
|
+
data: dict[str, Any]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
DEFAULT_CONFIG = ExampleConfig(name="name", index=0, data={})
|
|
20
|
+
CONFIG_KEY = "example_config"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ConfigProvider:
|
|
24
|
+
"""Example provider for configuration using RedisConfigStore."""
|
|
25
|
+
|
|
26
|
+
def __init__(self, redis_config_store: RedisConfigStore) -> None:
|
|
27
|
+
"""Initialize the ConfigProvider.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
redis_config_store: The Redis config store instance.
|
|
31
|
+
|
|
32
|
+
"""
|
|
33
|
+
self.redis_config_store = redis_config_store
|
|
34
|
+
if self.redis_config_store.fetch(ExampleConfig, CONFIG_KEY) is None:
|
|
35
|
+
self.redis_config_store[CONFIG_KEY] = DEFAULT_CONFIG
|
|
36
|
+
|
|
37
|
+
def get_example_config(self) -> ExampleConfig:
|
|
38
|
+
"""Get the example configuration.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
ExampleConfig: The current configuration.
|
|
42
|
+
|
|
43
|
+
"""
|
|
44
|
+
return (
|
|
45
|
+
self.redis_config_store.fetch(ExampleConfig, CONFIG_KEY) or DEFAULT_CONFIG
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
def get_example_config_version(self) -> int:
|
|
49
|
+
"""Get the version of the example configuration.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
int: The configuration version.
|
|
53
|
+
|
|
54
|
+
"""
|
|
55
|
+
return self.redis_config_store.cached_version(CONFIG_KEY) or -1
|
|
56
|
+
|
|
57
|
+
def set_example_config(self, config: ExampleConfig | None) -> None:
|
|
58
|
+
"""Set the example configuration.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
config: The new configuration to set.
|
|
62
|
+
|
|
63
|
+
"""
|
|
64
|
+
if config is None:
|
|
65
|
+
return
|
|
66
|
+
|
|
67
|
+
self.redis_config_store[CONFIG_KEY] = config
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Redis-related exceptions for the Cledar SDK."""
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class RedisServiceError(Exception):
|
|
5
|
+
"""Base exception for RedisService errors."""
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class RedisConnectionError(RedisServiceError):
|
|
9
|
+
"""Raised when the Redis connection cannot be established or used."""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class RedisClientNotInitializedError(RedisServiceError):
|
|
13
|
+
"""Raised when a Redis operation is attempted without an initialized client."""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class RedisSerializationError(RedisServiceError):
|
|
17
|
+
"""Raised when serialization of a value fails before sending to Redis."""
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class RedisDeserializationError(RedisServiceError):
|
|
21
|
+
"""Raised when deserialization of a value fetched from Redis fails."""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class RedisOperationError(RedisServiceError):
|
|
25
|
+
"""Raised for generic Redis operation errors (e.g., command failures)."""
|
cledar/redis/logger.py
ADDED
cledar/redis/model.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Base models for Redis-based configuration."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import TypeVar
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class BaseConfigClass:
|
|
9
|
+
"""Base class for configuration models stored in Redis."""
|
|
10
|
+
|
|
11
|
+
pass
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
ConfigAbstract = TypeVar("ConfigAbstract", bound=BaseConfigClass)
|