cledar-sdk 2.1.0__py3-none-any.whl → 2.1.1__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/redis/redis.py CHANGED
@@ -2,14 +2,15 @@
2
2
 
3
3
  import json
4
4
  import logging
5
- from dataclasses import dataclass
5
+ import urllib.parse
6
6
  from datetime import datetime
7
7
  from enum import Enum
8
8
  from typing import Any, TypeVar, cast
9
9
 
10
10
  import redis
11
11
  import redis.asyncio as aioredis
12
- from pydantic import BaseModel, ValidationError
12
+ from pydantic import BaseModel, ConfigDict, ValidationError
13
+ from pydantic.dataclasses import dataclass
13
14
 
14
15
  from .exceptions import (
15
16
  RedisConnectionError,
@@ -44,7 +45,7 @@ class CustomEncoder(json.JSONEncoder):
44
45
  T = TypeVar("T", bound=BaseModel)
45
46
 
46
47
 
47
- @dataclass
48
+ @dataclass(config=ConfigDict(arbitrary_types_allowed=True))
48
49
  class FailedValue:
49
50
  """Represents a failed Redis operation for a specific key."""
50
51
 
@@ -54,12 +55,50 @@ class FailedValue:
54
55
 
55
56
  @dataclass
56
57
  class RedisServiceConfig:
57
- """Configuration for Redis services."""
58
+ """Configuration for Redis services.
59
+
60
+ Supports two initialization modes:
61
+ 1. Pass redis_url to parse connection details from a URL
62
+ 2. Pass individual connection parameters (redis_host, redis_port, etc.)
63
+
64
+ Args:
65
+ redis_url: Redis connection URL (e.g., redis://:password@host:port/db).
66
+ If provided, individual parameters are ignored.
67
+ redis_host: Redis host address.
68
+ redis_port: Redis port number.
69
+ redis_db: Redis database number (default: 0).
70
+ redis_password: Redis password (optional).
58
71
 
59
- redis_host: str
60
- redis_port: int
72
+ """
73
+
74
+ redis_host: str = ""
75
+ redis_port: int = 0
61
76
  redis_db: int = 0
62
77
  redis_password: str | None = None
78
+ redis_url: str | None = None
79
+
80
+ def __post_init__(self) -> None:
81
+ """Parse redis_url if provided, otherwise validate individual parameters.
82
+
83
+ Raises:
84
+ ValueError: When neither redis_url nor redis_host/redis_port are provided.
85
+
86
+ """
87
+ if self.redis_url:
88
+ parsed = urllib.parse.urlparse(self.redis_url)
89
+ self.redis_host = parsed.hostname or ""
90
+ self.redis_port = parsed.port or 6379
91
+ self.redis_db = (
92
+ int(parsed.path.lstrip("/")) if parsed.path.lstrip("/") else 0
93
+ )
94
+ self.redis_password = parsed.password
95
+ else:
96
+ if not self.redis_host or not self.redis_port:
97
+ msg = (
98
+ "Either redis_url or both redis_host and redis_port must be "
99
+ "provided"
100
+ )
101
+ raise ValueError(msg)
63
102
 
64
103
 
65
104
  class RedisService:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cledar-sdk
3
- Version: 2.1.0
3
+ Version: 2.1.1
4
4
  Summary: Cledar Python SDK
5
5
  Author: Cledar
6
6
  License-File: LICENSE
@@ -60,7 +60,7 @@ cledar/redis/example.py,sha256=J1R9Um4jd3MXp8lFftVbLZyorwg2Q_cKyh7sIRGhFj0,1757
60
60
  cledar/redis/exceptions.py,sha256=C_5LJ9CsOT2VWqnX-eTmMgTzyT1AyIzjMvrpsSfOdn0,790
61
61
  cledar/redis/logger.py,sha256=opRHMp546sjaFrlIOZ7OM6Jyc8OMR65GLenqnBBzu1I,110
62
62
  cledar/redis/model.py,sha256=6smQWMMc9dFeronUX3ZiiSeB3Yo0UXWQfct-2SY-2eg,288
63
- cledar/redis/redis.py,sha256=_2c5os0emK0kzw6Qk_BKnV0l1XJUmixfUbztU1GzlKg,26257
63
+ cledar/redis/redis.py,sha256=kvebNW7l9fKoXP10YemZUcP528xVBD7j74A6TE8MiFw,27771
64
64
  cledar/redis/redis_config_store.py,sha256=74sjPSozWl8Si488N0ulvlqgLG5xj-A9KAeMGaLiY5k,10915
65
65
  cledar/redis/tests/test_async_integration_redis.py,sha256=DHwZusY6rdRHaOt_lPzmB4buq7GKH-4xTjSbiIWggFY,4981
66
66
  cledar/redis/tests/test_async_redis_service.py,sha256=uxmpNQt-eCuS3MVW3Iw-zWKy_BykpmCAU6ab5BlClBE,12474
@@ -78,7 +78,7 @@ cledar/storage/tests/test_integration_filesystem.py,sha256=TERmSJrw043S99fYE3xgE
78
78
  cledar/storage/tests/test_integration_s3.py,sha256=yl85bSW-QcaxCL8GVcXE6XXZe8Mrk65JZZDtNaGma4Y,13611
79
79
  cledar/storage/tests/test_local.py,sha256=ZT5EcBI7CzzviGJnadSTi8eSKOH9ntgk5UtmFG4GArU,11253
80
80
  cledar/storage/tests/test_s3.py,sha256=_ZuER9IWJSN-MEkTg83iRLqw9WvECkSBYQUTg81Na8U,16352
81
- cledar_sdk-2.1.0.dist-info/METADATA,sha256=MqePBmmW8SXfUGQ0lZO-3J1og8drgTYOFV2HV0PPuJ8,6733
82
- cledar_sdk-2.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
83
- cledar_sdk-2.1.0.dist-info/licenses/LICENSE,sha256=Pz2eACSxkhsGfW9_iN60pgy-enjnbGTj8df8O3ebnQQ,16726
84
- cledar_sdk-2.1.0.dist-info/RECORD,,
81
+ cledar_sdk-2.1.1.dist-info/METADATA,sha256=ecC1FSy7N12QriaqytJb_GTjUTYftiOYIrNbVzb2bSo,6733
82
+ cledar_sdk-2.1.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
83
+ cledar_sdk-2.1.1.dist-info/licenses/LICENSE,sha256=Pz2eACSxkhsGfW9_iN60pgy-enjnbGTj8df8O3ebnQQ,16726
84
+ cledar_sdk-2.1.1.dist-info/RECORD,,