mirror of
https://github.com/long2ice/fastapi-cache.git
synced 2026-03-25 04:57:54 +00:00
Merge pull request #109 from Mrreadiness/fix/piclke-coder
Fix Piclke Coder
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import codecs
|
||||||
import datetime
|
import datetime
|
||||||
import json
|
import json
|
||||||
import pickle # nosec:B403
|
import pickle # nosec:B403
|
||||||
@@ -45,7 +46,7 @@ class Coder:
|
|||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def decode(cls, value: Any) -> Any:
|
def decode(cls, value: str) -> Any:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
@@ -57,7 +58,7 @@ class JsonCoder(Coder):
|
|||||||
return json.dumps(value, cls=JsonEncoder)
|
return json.dumps(value, cls=JsonEncoder)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def decode(cls, value: Any) -> str:
|
def decode(cls, value: str) -> str:
|
||||||
return json.loads(value, object_hook=object_hook)
|
return json.loads(value, object_hook=object_hook)
|
||||||
|
|
||||||
|
|
||||||
@@ -66,8 +67,8 @@ class PickleCoder(Coder):
|
|||||||
def encode(cls, value: Any) -> str:
|
def encode(cls, value: Any) -> str:
|
||||||
if isinstance(value, TemplateResponse):
|
if isinstance(value, TemplateResponse):
|
||||||
value = value.body
|
value = value.body
|
||||||
return str(pickle.dumps(value))
|
return codecs.encode(pickle.dumps(value), "base64").decode()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def decode(cls, value: Any) -> Any:
|
def decode(cls, value: str) -> Any:
|
||||||
return pickle.loads(bytes(value)) # nosec:B403,B301
|
return pickle.loads(codecs.decode(value.encode(), "base64")) # nosec:B403,B301
|
||||||
|
|||||||
22
tests/test_codecs.py
Normal file
22
tests/test_codecs.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
from typing import Any
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from fastapi_cache.coder import PickleCoder
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"value",
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
"some_string",
|
||||||
|
(1, 2),
|
||||||
|
[1, 2, 3],
|
||||||
|
{"some_key": 1, "other_key": 2},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_pickle_coder(value: Any) -> None:
|
||||||
|
encoded_value = PickleCoder.encode(value)
|
||||||
|
assert isinstance(encoded_value, str)
|
||||||
|
decoded_value = PickleCoder.decode(encoded_value)
|
||||||
|
assert decoded_value == value
|
||||||
Reference in New Issue
Block a user