Updates
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,12 @@
|
||||
from typing import Any
|
||||
|
||||
|
||||
class BaseSerializer:
|
||||
def __init__(self, options):
|
||||
pass
|
||||
|
||||
def dumps(self, value: Any) -> bytes:
|
||||
raise NotImplementedError
|
||||
|
||||
def loads(self, value: bytes) -> Any:
|
||||
raise NotImplementedError
|
||||
@@ -0,0 +1,16 @@
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
|
||||
from django_redis.serializers.base import BaseSerializer
|
||||
|
||||
|
||||
class JSONSerializer(BaseSerializer):
|
||||
encoder_class = DjangoJSONEncoder
|
||||
|
||||
def dumps(self, value: Any) -> bytes:
|
||||
return json.dumps(value, cls=self.encoder_class).encode()
|
||||
|
||||
def loads(self, value: bytes) -> Any:
|
||||
return json.loads(value.decode())
|
||||
@@ -0,0 +1,13 @@
|
||||
from typing import Any
|
||||
|
||||
import msgpack
|
||||
|
||||
from django_redis.serializers.base import BaseSerializer
|
||||
|
||||
|
||||
class MSGPackSerializer(BaseSerializer):
|
||||
def dumps(self, value: Any) -> bytes:
|
||||
return msgpack.dumps(value)
|
||||
|
||||
def loads(self, value: bytes) -> Any:
|
||||
return msgpack.loads(value, raw=False)
|
||||
@@ -0,0 +1,34 @@
|
||||
import pickle
|
||||
from typing import Any
|
||||
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
||||
from django_redis.serializers.base import BaseSerializer
|
||||
|
||||
|
||||
class PickleSerializer(BaseSerializer):
|
||||
def __init__(self, options) -> None:
|
||||
self._pickle_version = pickle.DEFAULT_PROTOCOL
|
||||
self.setup_pickle_version(options)
|
||||
|
||||
super().__init__(options=options)
|
||||
|
||||
def setup_pickle_version(self, options) -> None:
|
||||
if "PICKLE_VERSION" in options:
|
||||
try:
|
||||
self._pickle_version = int(options["PICKLE_VERSION"])
|
||||
if self._pickle_version > pickle.HIGHEST_PROTOCOL:
|
||||
error_message = (
|
||||
f"PICKLE_VERSION can't be higher than pickle.HIGHEST_PROTOCOL:"
|
||||
f" {pickle.HIGHEST_PROTOCOL}"
|
||||
)
|
||||
raise ImproperlyConfigured(error_message)
|
||||
except (ValueError, TypeError) as e:
|
||||
error_message = "PICKLE_VERSION value must be an integer"
|
||||
raise ImproperlyConfigured(error_message) from e
|
||||
|
||||
def dumps(self, value: Any) -> bytes:
|
||||
return pickle.dumps(value, self._pickle_version)
|
||||
|
||||
def loads(self, value: bytes) -> Any:
|
||||
return pickle.loads(value)
|
||||
Reference in New Issue
Block a user