ai-content-maker/.venv/Lib/site-packages/srsly/_msgpack_api.py

58 lines
1.8 KiB
Python

import gc
from . import msgpack
from .msgpack import msgpack_encoders, msgpack_decoders # noqa: F401
from .util import force_path, FilePath, JSONInputBin, JSONOutputBin
def msgpack_dumps(data: JSONInputBin) -> bytes:
"""Serialize an object to a msgpack byte string.
data: The data to serialize.
RETURNS (bytes): The serialized bytes.
"""
return msgpack.dumps(data, use_bin_type=True)
def msgpack_loads(data: bytes, use_list: bool = True) -> JSONOutputBin:
"""Deserialize msgpack bytes to a Python object.
data (bytes): The data to deserialize.
use_list (bool): Don't use tuples instead of lists. Can make
deserialization slower.
RETURNS: The deserialized Python object.
"""
# msgpack-python docs suggest disabling gc before unpacking large messages
gc.disable()
msg = msgpack.loads(data, raw=False, use_list=use_list)
gc.enable()
return msg
def write_msgpack(path: FilePath, data: JSONInputBin) -> None:
"""Create a msgpack file and dump contents.
location (FilePath): The file path.
data (JSONInputBin): The data to serialize.
"""
file_path = force_path(path, require_exists=False)
with file_path.open("wb") as f:
msgpack.dump(data, f, use_bin_type=True)
def read_msgpack(path: FilePath, use_list: bool = True) -> JSONOutputBin:
"""Load a msgpack file.
location (FilePath): The file path.
use_list (bool): Don't use tuples instead of lists. Can make
deserialization slower.
RETURNS (JSONOutputBin): The loaded and deserialized content.
"""
file_path = force_path(path)
with file_path.open("rb") as f:
# msgpack-python docs suggest disabling gc before unpacking large messages
gc.disable()
msg = msgpack.load(f, raw=False, use_list=use_list)
gc.enable()
return msg