Added experimental cache support
All checks were successful
Analysis / SonarCloud (push) Successful in 51s
All checks were successful
Analysis / SonarCloud (push) Successful in 51s
This commit is contained in:
42
src/libbot/cache/utils/_objects.py
vendored
Normal file
42
src/libbot/cache/utils/_objects.py
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
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
|
Reference in New Issue
Block a user