43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
import logging
|
|
from copy import deepcopy
|
|
from logging import Logger
|
|
from typing import Any
|
|
|
|
try:
|
|
from ujson import dumps, loads
|
|
except ImportError:
|
|
from json import dumps, loads
|
|
|
|
logger: Logger = logging.getLogger(__name__)
|
|
|
|
try:
|
|
from bson import ObjectId
|
|
except ImportError:
|
|
logger.warning(
|
|
"Could not import bson.ObjectId. PyMongo conversions will not be supported by the cache. It's safe to ignore this message if you do not use MongoDB."
|
|
)
|
|
|
|
|
|
def _json_to_string(json_object: Any) -> str:
|
|
json_object_copy: Any = deepcopy(json_object)
|
|
|
|
if isinstance(json_object_copy, dict) and "_id" in json_object_copy:
|
|
json_object_copy["_id"] = str(json_object_copy["_id"])
|
|
|
|
return dumps(json_object_copy, ensure_ascii=False, indent=0, escape_forward_slashes=False)
|
|
|
|
|
|
def _string_to_json(json_string: str) -> Any:
|
|
json_object: Any = loads(json_string)
|
|
|
|
if "_id" in json_object:
|
|
try:
|
|
json_object["_id"] = ObjectId(json_object["_id"])
|
|
except NameError:
|
|
logger.debug(
|
|
"Tried to convert attribute '_id' with value '%s' but bson.ObjectId is not present, skipping the conversion.",
|
|
json_object["_id"],
|
|
)
|
|
|
|
return json_object
|