sharedkernel 2.6.4__py3-none-any.whl → 2.7.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.
File without changes
@@ -0,0 +1,37 @@
1
+
2
+ from abc import ABC, abstractmethod
3
+ from typing import Generic, Optional, TypeVar
4
+ from pydantic import BaseModel
5
+
6
+ T = TypeVar("T", bound=BaseModel)
7
+
8
+
9
+ class CacheRepository(ABC, Generic[T]):
10
+ @abstractmethod
11
+ async def set(
12
+ self,
13
+ key: str,
14
+ value: T,
15
+ ttl_seconds: int | None = None,
16
+ ) -> None:
17
+ pass
18
+
19
+ @abstractmethod
20
+ async def get(self, key: str) -> Optional[T]:
21
+ pass
22
+
23
+ @abstractmethod
24
+ async def exists(self, key: str) -> bool:
25
+ pass
26
+
27
+ @abstractmethod
28
+ async def delete(self, key: str) -> int:
29
+ pass
30
+
31
+ @abstractmethod
32
+ async def delete_group(self, key_prefix: str) -> int:
33
+ pass
34
+
35
+ @abstractmethod
36
+ async def clear(self) -> int:
37
+ pass
@@ -0,0 +1,88 @@
1
+ from typing import Generic, Optional, Type, TypeVar
2
+ from pydantic import BaseModel
3
+ from redis.asyncio import Redis
4
+
5
+ from cache.cache_repository import CacheRepository
6
+
7
+ T = TypeVar("T", bound=BaseModel)
8
+
9
+
10
+ class RedisGenericCache(CacheRepository[T], Generic[T]):
11
+ def __init__(
12
+ self,
13
+ client: Redis,
14
+ namespace: str,
15
+ model: Type[T],
16
+ default_ttl_seconds: int | None = None,
17
+ ):
18
+ self.client = client
19
+ self.namespace = namespace
20
+ self.model = model
21
+ self.default_ttl_seconds = default_ttl_seconds
22
+
23
+ def _pref(self, key: str) -> str:
24
+ return f"{self.namespace}:{key}"
25
+
26
+ def _unpref(self, key: str) -> str:
27
+ prefix = f"{self.namespace}:"
28
+ return key.removeprefix(prefix)
29
+
30
+ def _serialize(self, value: T) -> str:
31
+ return value.model_dump_json()
32
+
33
+ def _deserialize(self, raw: str | bytes) -> T:
34
+ return self.model.model_validate_json(raw.decode())
35
+
36
+ async def set(
37
+ self,
38
+ key: str,
39
+ value: T,
40
+ ttl_seconds: int | None = None,
41
+ ) -> None:
42
+ if value is None:
43
+ return
44
+
45
+ redis_key = self._pref(key)
46
+ ttl = ttl_seconds if ttl_seconds else self.default_ttl_seconds
47
+
48
+ if ttl:
49
+ await self.client.set(redis_key, self._serialize(value), ex=ttl)
50
+ else:
51
+ await self.client.set(redis_key, self._serialize(value))
52
+
53
+ async def get(self, key: str) -> Optional[T]:
54
+ raw = await self.client.get(self._pref(key))
55
+ if raw is None:
56
+ return None
57
+ return self._deserialize(raw)
58
+
59
+ async def exists(self, key: str) -> bool:
60
+ return bool(await self.client.exists(self._pref(key)))
61
+
62
+ async def delete(self, key: str) -> int:
63
+ return await self.client.delete(self._pref(key))
64
+
65
+ async def delete_group(self, key_prefix: str) -> int:
66
+ pattern = self._pref(f"{key_prefix}*")
67
+ deleted = 0
68
+
69
+ async for key in self.client.scan_iter(match=pattern):
70
+ deleted += await self.client.delete(key)
71
+
72
+ return deleted
73
+
74
+ async def clear(self) -> int:
75
+ deleted = 0
76
+
77
+ async for key in self.client.scan_iter(match=f"{self.namespace}:*"):
78
+ deleted += await self.client.delete(key)
79
+
80
+ return deleted
81
+
82
+ async def get_all_ids(self) -> list[str]:
83
+ result: list[str] = []
84
+
85
+ async for raw in self.client.scan_iter(match=f"{self.namespace}:*"):
86
+ result.append(self._unpref(raw.decode()))
87
+
88
+ return result
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sharedkernel
3
- Version: 2.6.4
3
+ Version: 2.7.0
4
4
  Summary: sharekernel is a shared package between all python projects
5
5
  Author: Smilinno
6
6
  Description-Content-Type: text/markdown
@@ -20,7 +20,7 @@ Requires-Dist: markdown
20
20
  Requires-Dist: beautifulsoup4
21
21
  Requires-Dist: deepdiff
22
22
  Requires-Dist: kombu
23
- Requires-Dist: redis
23
+ Requires-Dist: redis==8.0.0
24
24
  Dynamic: author
25
25
  Dynamic: description
26
26
  Dynamic: description-content-type
@@ -31,6 +31,8 @@ Dynamic: summary
31
31
  this is a shared kernel package
32
32
 
33
33
  # Change Log
34
+ ### Version 2.7.0
35
+ - Add Redis and cache repository
34
36
  ### Version 2.6.4
35
37
  - Add Verbose to log
36
38
  ### Version 2.6.3
@@ -17,6 +17,9 @@ sharedkernel/database/mongo_generic_audit_repository.py,sha256=F8z_4l7c2wHOeF995
17
17
  sharedkernel/database/mongo_generic_repository.py,sha256=KrigWbKXo99GegMjvrlH4BYGPH8kvST9smxcWjdNqEU,5887
18
18
  sharedkernel/database/mongo_health_checker.py,sha256=IYAaV8mJgGG_uxfnSRRvbq6JybxpA58pBCpDb7XXaq8,1842
19
19
  sharedkernel/database/pagination_response_dto.py,sha256=91Gkajx4hHmYfypP7EJTiMP1ZrzopjwRuEyMrzQ3SVE,389
20
+ sharedkernel/database/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ sharedkernel/database/cache/cache_repository.py,sha256=xL5Q18wgsSzIID_Zq8r0sa2OKC_c96q7cg2zUALzPwg,750
22
+ sharedkernel/database/cache/redis_generic_cache.py,sha256=9_jUDfvUP37_IQ0ANDzniHv-Hj6lQDKPtJ0J76e8r7A,2526
20
23
  sharedkernel/enum/__init__.py,sha256=BQxVEO5O1PrNB8gm5nUrh_9Us2HcdgPF-8iZuro7UEM,73
21
24
  sharedkernel/enum/error_code.py,sha256=M_z-rAW4-zmWs1hMcc97zo4CpqzmoUidMarwo9UuNAk,551
22
25
  sharedkernel/enum/redis_mode_enum.py,sha256=v_n9g7_rq_pdMiZrC8mMveRcjgF3eBv3K2tsaV1Pidc,136
@@ -40,7 +43,7 @@ sharedkernel/objects/json_string_model.py,sha256=j63tnoqiok0EmBP6T-ChYuQYKPw7mLq
40
43
  sharedkernel/objects/jwt_model.py,sha256=XQHQhTbg7PT8XiUh5fd9MwRH4ldPsesI_hfbjaSqdKg,134
41
44
  sharedkernel/objects/result.py,sha256=I_9hX5TPEO1oStzuFLjFh1rtimXorz7ml-OaW_2BMvc,680
42
45
  sharedkernel/objects/user_info.py,sha256=51WyspRxlIWzK7Lfxgqg4D6mylXeHe9ZSenf-RhYTdA,286
43
- sharedkernel-2.6.4.dist-info/METADATA,sha256=TqJC3vdtP_Te76cPF63uPyi8Fnqk4F4jRAoNQ9j-0xY,4034
44
- sharedkernel-2.6.4.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
45
- sharedkernel-2.6.4.dist-info/top_level.txt,sha256=TVTOnV1MItSSlpSjqkiijuHkoVsGHS4CArpsM-lylkE,13
46
- sharedkernel-2.6.4.dist-info/RECORD,,
46
+ sharedkernel-2.7.0.dist-info/METADATA,sha256=8tNBtxeSL5t9rwHqbq94K3xGS3SXVyVjhWHCPZ56fW0,4092
47
+ sharedkernel-2.7.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
48
+ sharedkernel-2.7.0.dist-info/top_level.txt,sha256=TVTOnV1MItSSlpSjqkiijuHkoVsGHS4CArpsM-lylkE,13
49
+ sharedkernel-2.7.0.dist-info/RECORD,,