__init__.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # coding: utf-8
  2. from msgpack._version import version
  3. from msgpack.exceptions import *
  4. from collections import namedtuple
  5. class ExtType(namedtuple('ExtType', 'code data')):
  6. """ExtType represents ext type in msgpack."""
  7. def __new__(cls, code, data):
  8. if not isinstance(code, int):
  9. raise TypeError("code must be int")
  10. if not isinstance(data, bytes):
  11. raise TypeError("data must be bytes")
  12. if not 0 <= code <= 127:
  13. raise ValueError("code must be 0~127")
  14. return super(ExtType, cls).__new__(cls, code, data)
  15. import os
  16. if os.environ.get('MSGPACK_PUREPYTHON'):
  17. from msgpack.fallback import Packer, unpackb, Unpacker
  18. else:
  19. try:
  20. from msgpack._cmsgpack import Packer, unpackb, Unpacker
  21. except ImportError:
  22. from msgpack.fallback import Packer, unpackb, Unpacker
  23. def pack(o, stream, **kwargs):
  24. """
  25. Pack object `o` and write it to `stream`
  26. See :class:`Packer` for options.
  27. """
  28. packer = Packer(**kwargs)
  29. stream.write(packer.pack(o))
  30. def packb(o, **kwargs):
  31. """
  32. Pack object `o` and return packed bytes
  33. See :class:`Packer` for options.
  34. """
  35. return Packer(**kwargs).pack(o)
  36. def unpack(stream, **kwargs):
  37. """
  38. Unpack an object from `stream`.
  39. Raises `ExtraData` when `stream` contains extra bytes.
  40. See :class:`Unpacker` for options.
  41. """
  42. data = stream.read()
  43. return unpackb(data, **kwargs)
  44. # alias for compatibility to simplejson/marshal/pickle.
  45. load = unpack
  46. loads = unpackb
  47. dump = pack
  48. dumps = packb