4
4
import socket
5
5
import time
6
6
from collections .abc import AsyncGenerator , Iterable , Iterator
7
- from contextlib import suppress
8
7
from typing import (
9
8
Any ,
10
9
Dict ,
28
27
from django_valkey import pool
29
28
from django_valkey .base import ATTR_DOES_NOT_EXIST
30
29
from django_valkey .compressors .identity import IdentityCompressor
31
- from django_valkey .exceptions import CompressorError , ConnectionInterrupted
30
+ from django_valkey .exceptions import ConnectionInterrupted
32
31
from django_valkey .serializers .pickle import PickleSerializer
33
- from django_valkey .util import CacheKey
32
+ from django_valkey .util import CacheKey , decode , encode , make_key , make_pattern
34
33
35
34
if TYPE_CHECKING :
36
35
from valkey .lock import Lock
@@ -132,28 +131,16 @@ def decode(self, value: bytes) -> Any:
132
131
"""
133
132
Decode the given value.
134
133
"""
135
- try :
136
- if value .isdigit ():
137
- value = int (value )
138
- else :
139
- value = float (value )
140
- except (ValueError , TypeError ):
141
- # Handle little values, chosen to be not compressed
142
- with suppress (CompressorError ):
143
- value = self ._compressor .decompress (value )
144
- value = self ._serializer .loads (value )
145
- return value
134
+ return decode (value , serializer = self ._serializer , compressor = self ._compressor )
146
135
147
136
def encode (self , value : EncodableT ) -> bytes | int | float :
148
137
"""
149
138
Encode the given value.
150
139
"""
151
140
152
- if type (value ) is not int and type (value ) is not float :
153
- value = self ._serializer .dumps (value )
154
- return self ._compressor .compress (value )
155
-
156
- return value
141
+ return encode (
142
+ value = value , serializer = self ._serializer , compressor = self ._compressor
143
+ )
157
144
158
145
def _decode_iterable_result (
159
146
self , result : Any , convert_to_set : bool = True
@@ -170,32 +157,22 @@ def make_key(
170
157
self , key : KeyT , version : int | None = None , prefix : str | None = None
171
158
) -> KeyT :
172
159
"""Return key as a CacheKey instance so it has additional methods"""
173
- if isinstance (key , CacheKey ):
174
- return key
175
-
176
- if prefix is None :
177
- prefix = self ._backend .key_prefix
178
-
179
- if version is None :
180
- version = self ._backend .version
181
-
182
- return CacheKey (self ._backend .key_func (key , prefix , version ))
160
+ return make_key (
161
+ key ,
162
+ key_func = self ._backend .key_func ,
163
+ version = version or self ._backend .version ,
164
+ prefix = prefix or self ._backend .key_prefix ,
165
+ )
183
166
184
167
def make_pattern (
185
168
self , pattern : str , version : int | None = None , prefix : str | None = None
186
169
) -> KeyT :
187
- if isinstance (pattern , CacheKey ):
188
- return pattern
189
-
190
- if prefix is None :
191
- prefix = self ._backend .key_prefix
192
- prefix = glob_escape (prefix )
193
-
194
- if version is None :
195
- version = self ._backend .version
196
- version_str = glob_escape (str (version ))
197
-
198
- return CacheKey (self ._backend .key_func (pattern , prefix , version_str ))
170
+ return make_pattern (
171
+ pattern = pattern ,
172
+ key_func = self ._backend .key_func ,
173
+ version = version or self ._backend .version ,
174
+ prefix = prefix or self ._backend .key_prefix ,
175
+ )
199
176
200
177
201
178
class ClientCommands (Generic [Backend ]):
0 commit comments