@@ -57,6 +57,11 @@ def __init__(
57
57
self ._read_client = self ._write_client = host
58
58
self .key_prefix = key_prefix or ""
59
59
60
+ def _get_prefix (self ):
61
+ return (
62
+ self .key_prefix if isinstance (self .key_prefix , str ) else self .key_prefix ()
63
+ )
64
+
60
65
def _normalize_timeout (self , timeout : _t .Optional [int ]) -> int :
61
66
"""Normalize timeout by setting it to default of 300 if
62
67
not defined (None) or -1 if explicitly set to zero.
@@ -69,11 +74,11 @@ def _normalize_timeout(self, timeout: _t.Optional[int]) -> int:
69
74
return timeout
70
75
71
76
def get (self , key : str ) -> _t .Any :
72
- return self .serializer .loads (self ._read_client .get (self .key_prefix + key ))
77
+ return self .serializer .loads (self ._read_client .get (self ._get_prefix () + key ))
73
78
74
79
def get_many (self , * keys : str ) -> _t .List [_t .Any ]:
75
80
if self .key_prefix :
76
- prefixed_keys = [self .key_prefix + key for key in keys ]
81
+ prefixed_keys = [self ._get_prefix () + key for key in keys ]
77
82
else :
78
83
prefixed_keys = list (keys )
79
84
return [self .serializer .loads (x ) for x in self ._read_client .mget (prefixed_keys )]
@@ -82,20 +87,20 @@ def set(self, key: str, value: _t.Any, timeout: _t.Optional[int] = None) -> _t.A
82
87
timeout = self ._normalize_timeout (timeout )
83
88
dump = self .serializer .dumps (value )
84
89
if timeout == - 1 :
85
- result = self ._write_client .set (name = self .key_prefix + key , value = dump )
90
+ result = self ._write_client .set (name = self ._get_prefix () + key , value = dump )
86
91
else :
87
92
result = self ._write_client .setex (
88
- name = self .key_prefix + key , value = dump , time = timeout
93
+ name = self ._get_prefix () + key , value = dump , time = timeout
89
94
)
90
95
return result
91
96
92
97
def add (self , key : str , value : _t .Any , timeout : _t .Optional [int ] = None ) -> _t .Any :
93
98
timeout = self ._normalize_timeout (timeout )
94
99
dump = self .serializer .dumps (value )
95
- created = self ._write_client .setnx (name = self .key_prefix + key , value = dump )
100
+ created = self ._write_client .setnx (name = self ._get_prefix () + key , value = dump )
96
101
# handle case where timeout is explicitly set to zero
97
102
if created and timeout != - 1 :
98
- self ._write_client .expire (name = self .key_prefix + key , time = timeout )
103
+ self ._write_client .expire (name = self ._get_prefix () + key , time = timeout )
99
104
return created
100
105
101
106
def set_many (
@@ -109,41 +114,40 @@ def set_many(
109
114
for key , value in mapping .items ():
110
115
dump = self .serializer .dumps (value )
111
116
if timeout == - 1 :
112
- pipe .set (name = self .key_prefix + key , value = dump )
117
+ pipe .set (name = self ._get_prefix () + key , value = dump )
113
118
else :
114
- pipe .setex (name = self .key_prefix + key , value = dump , time = timeout )
119
+ pipe .setex (name = self ._get_prefix () + key , value = dump , time = timeout )
115
120
results = pipe .execute ()
116
- res = zip (mapping .keys (), results ) # noqa: B905
117
- return [k for k , was_set in res if was_set ]
121
+ return [k for k , was_set in zip (mapping .keys (), results ) if was_set ]
118
122
119
123
def delete (self , key : str ) -> bool :
120
- return bool (self ._write_client .delete (self .key_prefix + key ))
124
+ return bool (self ._write_client .delete (self ._get_prefix () + key ))
121
125
122
126
def delete_many (self , * keys : str ) -> _t .List [_t .Any ]:
123
127
if not keys :
124
128
return []
125
129
if self .key_prefix :
126
- prefixed_keys = [self .key_prefix + key for key in keys ]
130
+ prefixed_keys = [self ._get_prefix () + key for key in keys ]
127
131
else :
128
132
prefixed_keys = [k for k in keys ]
129
133
self ._write_client .delete (* prefixed_keys )
130
134
return [k for k in prefixed_keys if not self .has (k )]
131
135
132
136
def has (self , key : str ) -> bool :
133
- return bool (self ._read_client .exists (self .key_prefix + key ))
137
+ return bool (self ._read_client .exists (self ._get_prefix () + key ))
134
138
135
139
def clear (self ) -> bool :
136
140
status = 0
137
141
if self .key_prefix :
138
- keys = self ._read_client .keys (self .key_prefix + "*" )
142
+ keys = self ._read_client .keys (self ._get_prefix () + "*" )
139
143
if keys :
140
144
status = self ._write_client .delete (* keys )
141
145
else :
142
146
status = self ._write_client .flushdb ()
143
147
return bool (status )
144
148
145
149
def inc (self , key : str , delta : int = 1 ) -> _t .Any :
146
- return self ._write_client .incr (name = self .key_prefix + key , amount = delta )
150
+ return self ._write_client .incr (name = self ._get_prefix () + key , amount = delta )
147
151
148
152
def dec (self , key : str , delta : int = 1 ) -> _t .Any :
149
- return self ._write_client .incr (name = self .key_prefix + key , amount = - delta )
153
+ return self ._write_client .incr (name = self ._get_prefix () + key , amount = - delta )
0 commit comments