1717from typing import Any
1818
1919import redis
20- from pydantic import BaseModel , Field , PrivateAttr
20+ from pydantic import BaseModel , Field
2121from typing_extensions import override
2222
2323from veadk .config import getenv
3030
3131class RedisDatabaseConfig (BaseModel ):
3232 host : str = Field (
33- default = getenv ("DATABASE_REDIS_HOST" ),
33+ default_factory = lambda : getenv ("DATABASE_REDIS_HOST" ),
3434 description = "Redis host" ,
3535 )
3636 port : int = Field (
37- default = getenv ("DATABASE_REDIS_PORT" ),
37+ default_factory = lambda : int ( getenv ("DATABASE_REDIS_PORT" ) ),
3838 description = "Redis port" ,
3939 )
4040 db : int = Field (
41- default = getenv ("DATABASE_REDIS_DB" ),
41+ default_factory = lambda : int ( getenv ("DATABASE_REDIS_DB" ) ),
4242 description = "Redis db" ,
4343 )
4444 password : str = Field (
45- default = getenv ("DATABASE_REDIS_PASSWORD" ),
45+ default_factory = lambda : getenv ("DATABASE_REDIS_PASSWORD" ),
4646 description = "Redis password" ,
4747 )
4848 decode_responses : bool = Field (
@@ -53,7 +53,6 @@ class RedisDatabaseConfig(BaseModel):
5353
5454class RedisDatabase (BaseModel , BaseDatabase ):
5555 config : RedisDatabaseConfig = Field (default_factory = RedisDatabaseConfig )
56- _client : redis .Redis = PrivateAttr (default = None )
5756
5857 def model_post_init (self , context : Any , / ) -> None :
5958 try :
@@ -64,6 +63,7 @@ def model_post_init(self, context: Any, /) -> None:
6463 password = self .config .password ,
6564 decode_responses = self .config .decode_responses ,
6665 )
66+
6767 self ._client .ping ()
6868 logger .info ("Connected to Redis successfully." )
6969 except Exception as e :
@@ -79,10 +79,10 @@ def add(self, key: str, value: str, **kwargs):
7979 raise e
8080
8181 @override
82- def query (self , key : str , query : str = "" , ** kwargs ) -> list [ str ] :
82+ def query (self , key : str , query : str = "" , ** kwargs ) -> list :
8383 try :
8484 result = self ._client .lrange (key , 0 , - 1 )
85- return result
85+ return result # type: ignore
8686 except Exception as e :
8787 logger .error (f"Failed to search from Redis list key '{ key } ': { e } " )
8888 raise e
@@ -99,8 +99,11 @@ def delete(self, **kwargs):
9999
100100 try :
101101 # For simple key deletion
102+ # We use sync Redis client to delete the key
103+ # so the result will be `int`
102104 result = self ._client .delete (key )
103- if result > 0 :
105+
106+ if result > 0 : # type: ignore
104107 logger .info (f"Deleted key `{ key } ` from Redis." )
105108 else :
106109 logger .info (f"Key `{ key } ` not found in Redis. Skipping deletion." )
0 commit comments