MCPcopy Create free account
hub / github.com/ccxt/ccxt / _pack

Method _pack

python/ccxt/static_dependencies/msgpack/fallback.py:698–820  ·  view source on GitHub ↗
(
        self,
        obj,
        nest_limit=DEFAULT_RECURSE_LIMIT,
        check=isinstance,
        check_type_strict=_check_type_strict,
    )

Source from the content-addressed store, hash-verified

696 self._default = default
697
698 def _pack(
699 self,
700 obj,
701 nest_limit=DEFAULT_RECURSE_LIMIT,
702 check=isinstance,
703 check_type_strict=_check_type_strict,
704 ):
705 default_used = False
706 if self._strict_types:
707 check = check_type_strict
708 list_types = list
709 else:
710 list_types = (list, tuple)
711 while True:
712 if nest_limit < 0:
713 raise ValueError("recursion limit exceeded")
714 if obj is None:
715 return self._buffer.write(b"\xc0")
716 if check(obj, bool):
717 if obj:
718 return self._buffer.write(b"\xc3")
719 return self._buffer.write(b"\xc2")
720 if check(obj, int):
721 if 0 <= obj < 0x80:
722 return self._buffer.write(struct.pack("B", obj))
723 if -0x20 <= obj < 0:
724 return self._buffer.write(struct.pack("b", obj))
725 if 0x80 <= obj <= 0xFF:
726 return self._buffer.write(struct.pack("BB", 0xCC, obj))
727 if -0x80 <= obj < 0:
728 return self._buffer.write(struct.pack(">Bb", 0xD0, obj))
729 if 0xFF < obj <= 0xFFFF:
730 return self._buffer.write(struct.pack(">BH", 0xCD, obj))
731 if -0x8000 <= obj < -0x80:
732 return self._buffer.write(struct.pack(">Bh", 0xD1, obj))
733 if 0xFFFF < obj <= 0xFFFFFFFF:
734 return self._buffer.write(struct.pack(">BI", 0xCE, obj))
735 if -0x80000000 <= obj < -0x8000:
736 return self._buffer.write(struct.pack(">Bi", 0xD2, obj))
737 if 0xFFFFFFFF < obj <= 0xFFFFFFFFFFFFFFFF:
738 return self._buffer.write(struct.pack(">BQ", 0xCF, obj))
739 if -0x8000000000000000 <= obj < -0x80000000:
740 return self._buffer.write(struct.pack(">Bq", 0xD3, obj))
741 if not default_used and self._default is not None:
742 obj = self._default(obj)
743 default_used = True
744 continue
745 raise OverflowError("Integer value out of range")
746 if check(obj, (bytes, bytearray)):
747 n = len(obj)
748 if n >= 2**32:
749 raise ValueError("%s is too large" % type(obj).__name__)
750 self._pack_bin_header(n)
751 return self._buffer.write(obj)
752 if check(obj, str):
753 obj = obj.encode("utf-8", self._unicode_errors)
754 n = len(obj)
755 if n >= 2**32:

Callers 2

packMethod · 0.95
_pack_map_pairsMethod · 0.95

Calls 11

_pack_bin_headerMethod · 0.95
_pack_raw_headerMethod · 0.95
_pack_array_headerMethod · 0.95
_pack_map_pairsMethod · 0.95
writeMethod · 0.80
packMethod · 0.80
from_datetimeMethod · 0.80
checkFunction · 0.50
rangeFunction · 0.50
encodeMethod · 0.45
to_bytesMethod · 0.45

Tested by

no test coverage detected