API Docs¶
Structs¶
- class msgspec.Struct¶
A base class for defining efficient serializable objects.
Fields are defined using type annotations. Fields may optionally have default values, which result in keyword parameters to the constructor.
Structs automatically define
__init__
,__eq__
,__repr__
, and__copy__
methods. Additional methods can be defined on the class as needed. Note that__init__
/__new__
cannot be overridden, but other methods can. A tuple of the field names is available on the class via the__struct_fields__
attribute if needed.Additional class options can be enabled by passing keywords to the class definition (see example below). These configuration options may also be inspected at runtime through the
__struct_config__
attribute.- Configuration:
frozen (bool, default False) – Whether instances of this type are pseudo-immutable. If true, attribute assignment is disabled and a corresponding
__hash__
is defined.order (bool, default False) – If True,
__lt__
,__le__`
,__gt__
, and__ge__
methods will be generated for this type.eq (bool, default True) – If True (the default), an
__eq__
method will be generated for this type. Set to False to compare based on instance identity alone.kw_only (bool, default False) – If True, all fields will be treated as keyword-only arguments in the generated
__init__
method. Default is False.omit_defaults (bool, default False) – Whether fields should be omitted from encoding if the corresponding value is the default for that field. Enabling this may reduce message size, and often also improve encoding & decoding performance.
forbid_unknown_fields (bool, default False) – If True, an error is raised if an unknown field is encountered while decoding structs of this type. If False (the default), no error is raised and the unknown field is skipped.
tag (str, int, bool, callable, or None, default None) – Used along with
tag_field
for configuring tagged union support. If either are non-None, then the struct is considered “tagged”. In this case, an extra field (thetag_field
) and value (thetag
) are added to the encoded message, which can be used to differentiate message types during decoding.Set
tag=True
to enable the default tagged configuration (tag_field
is"type"
,tag
is the class name). Alternatively, you can provide a string (or less commonly int) value directly to be used as the tag (e.g.tag="my-tag-value"
).``tag`` can also be passed a callable that takes the class qualname and returns a valid tag value (e.g.tag=str.lower
). See the docs for more information.tag_field (str or None, default None) – The field name to use for tagged union support. If
tag
is non-None, then this defaults to"type"
. See thetag
docs above for more information.rename (str, mapping, callable, or None, default None) – Controls renaming the field names used when encoding/decoding the struct. May be one of
"lower"
,"upper"
,"camel"
,"pascal"
, or"kebab"
to rename in lowercase, UPPERCASE, camelCase, PascalCase, or kebab-case respectively. May also be a mapping from field names to the renamed names (missing fields are not renamed). Alternatively, may be a callable that takes the field name and returns a new name orNone
to not rename that field. Default isNone
for no field renaming.repr_omit_defaults (bool, default False) – Whether fields should be omitted from the generated repr if the corresponding value is the default for that field.
array_like (bool, default False) – If True, this struct type will be treated as an array-like type during encoding/decoding, rather than a dict-like type (the default). This may improve performance, at the cost of a more inscrutable message encoding.
gc (bool, default True) – Whether garbage collection is enabled for this type. Disabling this may help reduce GC pressure, but will prevent reference cycles composed of only
gc=False
from being collected. It is the user’s responsibility to ensure that reference cycles don’t occur when settinggc=False
.weakref (bool, default False) – Whether instances of this type support weak references. Defaults to False.
dict (bool, default False) – Whether instances of this type will include a
__dict__
. Setting this to True will allow adding additional undeclared attributes to a struct instance, which may be useful for holding private runtime state. Defaults to False.cache_hash (bool, default False) – If enabled, the hash of a frozen struct instance will be computed at most once, and then cached on the instance for further reuse. For expensive hash values this can improve performance at the cost of a small amount of memory usage.
Examples
Here we define a new
Struct
type for describing a dog. It has three fields; two required and one optional.>>> class Dog(Struct): ... name: str ... breed: str ... is_good_boy: bool = True ... >>> Dog('snickers', breed='corgi') Dog(name='snickers', breed='corgi', is_good_boy=True)
Additional struct options can be set as part of the class definition. Here we define a new
Struct
type for a frozenPoint
object.>>> class Point(Struct, frozen=True): ... x: float ... y: float ... >>> {Point(1.5, 2.0): 1} # frozen structs are hashable {Point(x=1.5, y=2.0): 1}
- msgspec.field(*, default=NODEFAULT, default_factory=NODEFAULT, name=None)¶
Configuration for a Struct field.
- Parameters:
default (Any, optional) – A default value to use for this field.
default_factory (callable, optional) – A zero-argument function called to generate a new default value per-instance, rather than using a constant value as in
default
.name (str, optional) – The name to use when encoding/decoding this field. If present, this will override any struct-level configuration using the
rename
option for this field.
- msgspec.defstruct(name, fields, *, bases=None, module=None, namespace=None, tag_field=None, tag=None, rename=None, omit_defaults=False, forbid_unknown_fields=False, frozen=False, eq=True, order=False, kw_only=False, repr_omit_defaults=False, array_like=False, gc=True, weakref=False, dict=False, cache_hash=False)¶
Dynamically define a new Struct class.
- Parameters:
name (str) – The name of the new Struct class.
fields (iterable) – An iterable of fields in the new class. Elements may be either
name
, tuples of(name, type)
,(name, type, default)
, or(name, type, msgspec.field)
. Fields without a specified type will default totyping.Any
.bases (tuple, optional) – A tuple of any Struct base classes to use when defining the new class.
module (str, optional) – The module name to use for the new class. If not provided, will be inferred from the caller’s stack frame.
namespace (dict, optional) – If provided, will be used as the base namespace for the new class. This may be used to add additional methods to the class definition.
**kwargs – Additional Struct configuration options. See the
Struct
docs for more information.
Examples
>>> from msgspec import defstruct, field >>> User = defstruct( ... 'User', ... [ ... ('name', str), ... ('email', str | None, None), ... ('groups', set[str], field(default_factory=set)), ... ], ... ) >>> User('alice') User(name='alice', email=None, groups=set())
See also
- msgspec.structs.replace(struct, /, **changes)¶
Create a new struct instance of the same type as
struct
, replacing fields with values from**changes
.- Parameters:
struct (Struct) – The original struct instance.
**changes – Fields and values that should be replaced in the new struct instance.
- Returns:
new_struct (Struct) – A new struct instance of the same type as
struct
.
Examples
>>> class Point(msgspec.Struct): ... x: int ... y: int >>> obj = Point(x=1, y=2) >>> msgspec.structs.replace(obj, x=3) Point(x=3, y=2)
See also
- msgspec.structs.asdict(struct)¶
Convert a struct to a dict.
- Parameters:
struct (Struct) – The struct instance.
- Returns:
dict
Examples
>>> class Point(msgspec.Struct): ... x: int ... y: int >>> obj = Point(x=1, y=2) >>> msgspec.structs.asdict(obj) {'x': 1, 'y': 2}
See also
- msgspec.structs.astuple(struct)¶
Convert a struct to a tuple.
- Parameters:
struct (Struct) – The struct instance.
- Returns:
tuple
Examples
>>> class Point(msgspec.Struct): ... x: int ... y: int >>> obj = Point(x=1, y=2) >>> msgspec.structs.astuple(obj) (1, 2)
See also
- msgspec.structs.force_setattr(struct, name, value)¶
Set an attribute on a struct, even if the struct is frozen.
The main use case for this is modifying a frozen struct in a
__post_init__
method before returning.Warning
This function violates the guarantees of a frozen struct, and is potentially unsafe. Only use it if you know what you’re doing!
- msgspec.structs.fields(type_or_instance)¶
Get information about the fields in a Struct.
- Parameters:
type_or_instance – A struct type or instance.
- Returns:
tuple[FieldInfo]
- class msgspec.structs.FieldInfo(name, encode_name, type, default=<factory>, default_factory=<factory>)¶
A record describing a field in a struct type.
- Parameters:
name (str) – The field name as seen by Python code (e.g.
field_one
).encode_name (str) – The name used when encoding/decoding the field. This may differ if the field is renamed (e.g.
fieldOne
).type (Any) – The full field type annotation.
default (Any, optional) – A default value for the field. Will be
NODEFAULT
if no default value is set.default_factory (Any, optional) – A callable that creates a default value for the field. Will be
NODEFAULT
if nodefault_factory
is set.
- class msgspec.structs.StructConfig¶
Configuration settings for a given Struct type.
This object is accessible through the
__struct_config__
field on a struct type or instance. It exposes the following attributes, matching the Struct configuration parameters of the same name. See theStruct
docstring for details.- Configuration:
frozen (bool)
eq (bool)
order (bool)
array_like (bool)
gc (bool)
repr_omit_defaults (bool)
omit_defaults (bool)
forbid_unknown_fields (bool)
weakref (bool)
dict (bool)
cache_hash (bool)
tag_field (str | None)
tag (str | int | None)
- msgspec.NODEFAULT¶
A singleton indicating no default value is configured.
Meta¶
- class msgspec.Meta(*, gt=None, ge=None, lt=None, le=None, multiple_of=None, pattern=None, min_length=None, max_length=None, tz=None, title=None, description=None, examples=None, extra_json_schema=None, extra=None)¶
Extra metadata and constraints for a type or field.
- Parameters:
gt (int or float, optional) – The annotated value must be greater than
gt
.ge (int or float, optional) – The annotated value must be greater than or equal to
ge
.lt (int or float, optional) – The annotated value must be less than
lt
.le (int or float, optional) – The annotated value must be less than or equal to
le
.multiple_of (int or float, optional) – The annotated value must be a multiple of
multiple_of
.pattern (str, optional) – A regex pattern that the annotated value must match against. Note that the pattern is treated as unanchored, meaning the
re.search
method is used when matching.min_length (int, optional) – The annotated value must have a length greater than or equal to
min_length
.max_length (int, optional) – The annotated value must have a length less than or equal to
max_length
.tz (bool, optional) – Configures the timezone-requirements for annotated
datetime
/time
types. Set toTrue
to require timezone-aware values, orFalse
to require timezone-naive values. The default isNone
, which accepts either timezone-aware or timezone-naive values.title (str, optional) – The title to use for the annotated value when generating a json-schema.
description (str, optional) – The description to use for the annotated value when generating a json-schema.
examples (list, optional) – A list of examples to use for the annotated value when generating a json-schema.
extra_json_schema (dict, optional) – A dict of extra fields to set for the annotated value when generating a json-schema. This dict is recursively merged with the generated schema, with
extra_json_schema
overriding any conflicting autogenerated fields.extra (dict, optional) – Any additional user-defined metadata.
Examples
Here we use
Meta
to add constraints on two different types. The first defines a new type aliasNonNegativeInt
, which is an integer that must be>= 0
. This type alias can be reused in multiple locations. The second usesMeta
inline in a struct definition to restrict thename
string field to a maximum length of 32 characters.>>> import msgspec >>> from typing import Annotated >>> from msgspec import Struct, Meta >>> NonNegativeInt = Annotated[int, Meta(ge=0)] >>> class User(Struct): ... name: Annotated[str, Meta(max_length=32)] ... age: NonNegativeInt ... >>> msgspec.json.decode(b'{"name": "alice", "age": 25}', type=User) User(name='alice', age=25)
Raw¶
- class msgspec.Raw¶
A buffer containing an encoded message.
Raw objects have two common uses:
During decoding. Fields annotated with the
Raw
type won’t be decoded immediately, but will instead return aRaw
object with a view into the original message where that field is encoded. This is useful for decoding fields whose type may only be inferred after decoding other fields.During encoding. Raw objects wrap pre-encoded messages. These can be added as components of larger messages without having to pay the cost of decoding and re-encoding them.
- Parameters:
msg (bytes, bytearray, memoryview, or str, optional) – A buffer containing an encoded message. One of bytes, bytearray, memoryview, str, or any object that implements the buffer protocol. If not present, defaults to an empty buffer.
- copy()¶
Copy a Raw object.
If the raw message is backed by a memoryview into a larger buffer (as happens during decoding), the message is copied and the reference to the larger buffer released. This may be useful to reduce memory usage if a Raw object created during decoding will be kept in memory for a while rather than immediately decoded and dropped.
Unset¶
- msgspec.UNSET¶
A singleton indicating a field value is unset.
This may be useful for working with message schemas where an unset field in an object needs to be treated differently than one containing an explicit
None
value. In this case, you may useUNSET
as the default value, rather thanNone
when defining object schemas. This feature is supported for anymsgspec.Struct
,dataclasses
orattrs
types.Examples
>>> from msgspec import Struct, UnsetType, UNSET, json >>> class Example(Struct): ... x: int ... y: int | None | UnsetType = UNSET
During encoding, any field containing
UNSET
is omitted from the message.>>> json.encode(Example(1)) b'{"x":1}' >>> json.encode(Example(1, 2)) b'{"x":1,"y":2}'
During decoding, if a field isn’t explicitly set in the message, the default value of
UNSET
will be set instead. This lets downstream consumers determine whether a field was left unset, or explicitly set toNone
>>> json.decode(b'{"x": 1}', type=Example) # unset Example(x=1, y=UNSET) >>> json.decode(b'{"x": 1, "y": null}', type=Example) # explicit null Example(x=1, y=None) >>> json.decode(b'{"x": 1, "y": 2}', type=Example) # explicit value Example(x=1, y=2)
JSON¶
- class msgspec.json.Encoder(*, enc_hook=None, decimal_format='string', uuid_format='canonical', order=None)¶
A JSON encoder.
- Parameters:
enc_hook (callable, optional) – A callable to call for objects that aren’t supported msgspec types. Takes the unsupported object and should return a supported object, or raise a
NotImplementedError
if unsupported.decimal_format ({'string', 'number'}, optional) – The format to use for encoding
decimal.Decimal
objects. If ‘string’ they’re encoded as strings, if ‘number’, they’re encoded as floats. Defaults to ‘string’, which is the recommended value since ‘number’ may result in precision loss when decoding for some JSON library implementations.uuid_format ({'canonical', 'hex'}, optional) – The format to use for encoding
uuid.UUID
objects. The ‘canonical’ and ‘hex’ formats encode them as strings with and without hyphens respectively. Defaults to ‘canonical’.order ({None, 'deterministic', 'sorted'}, optional) –
The ordering to use when encoding unordered compound types.
None
: All objects are encoded in the most efficient manner matching their in-memory representations. The default.'deterministic'
: Unordered collections (sets, dicts) are sorted to ensure a consistent output between runs. Useful when comparison/hashing of the encoded binary output is necessary.'sorted'
: Like'deterministic'
, but all object-like types (structs, dataclasses, …) are also sorted by field name before encoding. This is slower than'deterministic'
, but may produce more human-readable output.
- encode(obj)¶
Serialize an object to bytes.
- Parameters:
obj (Any) – The object to serialize.
- Returns:
data (bytes) – The serialized object.
- encode_into(obj, buffer, offset=0, /)¶
Serialize an object into an existing bytearray buffer.
Upon success, the buffer will be truncated to the end of the serialized message. Note that the underlying memory buffer won’t be truncated, allowing for efficiently appending additional bytes later.
- encode_lines(items)¶
Encode an iterable of items as newline-delimited JSON, one item per line.
- Parameters:
items (iterable) – An iterable of items to encode.
- Returns:
data (bytes) – The items encoded as newline-delimited JSON, one item per line.
Examples
>>> import msgspec >>> items = [{"name": "alice"}, {"name": "ben"}] >>> encoder = msgspec.json.Encoder() >>> encoder.encode_lines(items) b'{"name":"alice"}\n{"name":"ben"}\n'
- class msgspec.json.Decoder(type='Any', *, strict=True, dec_hook=None, float_hook=None)¶
A JSON decoder.
- Parameters:
type (type, optional) – A Python type (in type annotation form) to decode the object as. If provided, the message will be type checked and decoded as the specified type. Defaults to
Any
, in which case the message will be decoded using the default JSON types.strict (bool, optional) – Whether type coercion rules should be strict. Setting to False enables a wider set of coercion rules from string to non-string types for all values. Default is True.
dec_hook (callable, optional) – An optional callback for handling decoding custom types. Should have the signature
dec_hook(type: Type, obj: Any) -> Any
, wheretype
is the expected message type, andobj
is the decoded representation composed of only basic JSON types. This hook should transformobj
into typetype
, or raise aNotImplementedError
if unsupported.float_hook (callable, optional) – An optional callback for handling decoding untyped float literals. Should have the signature
float_hook(val: str) -> Any
, whereval
is the raw string value of the JSON float. This hook is called to decode any “untyped” float value (e.g.typing.Any
typed). The default is equivalent tofloat_hook=float
, where all untyped JSON floats are decoded as python floats. Specifyingfloat_hook=decimal.Decimal
will decode all untyped JSON floats as decimals instead.
- decode(buf)¶
Deserialize an object from JSON.
- Parameters:
buf (bytes-like or str) – The message to decode.
- Returns:
obj (Any) – The deserialized object.
- decode_lines(buf)¶
Decode a list of items from newline-delimited JSON.
- Parameters:
buf (bytes-like or str) – The message to decode.
- Returns:
items (list) – A list of decoded objects.
Examples
>>> import msgspec >>> msg = """ ... {"x": 1, "y": 2} ... {"x": 3, "y": 4} ... """ >>> dec = msgspec.json.Decoder() >>> dec.decode_lines(msg) [{'x': 1, 'y': 2}, {'x': 3, 'y': 4}]
- msgspec.json.encode(obj, *, enc_hook=None, order=None)¶
Serialize an object as JSON.
- Parameters:
obj (Any) – The object to serialize.
enc_hook (callable, optional) – A callable to call for objects that aren’t supported msgspec types. Takes the unsupported object and should return a supported object, or raise a
NotImplementedError
if unsupported.order ({None, 'deterministic', 'sorted'}, optional) –
The ordering to use when encoding unordered compound types.
None
: All objects are encoded in the most efficient manner matching their in-memory representations. The default.'deterministic'
: Unordered collections (sets, dicts) are sorted to ensure a consistent output between runs. Useful when comparison/hashing of the encoded binary output is necessary.'sorted'
: Like'deterministic'
, but all object-like types (structs, dataclasses, …) are also sorted by field name before encoding. This is slower than'deterministic'
, but may produce more human-readable output.
- Returns:
data (bytes) – The serialized object.
See also
- msgspec.json.decode(buf, *, type='Any', strict=True, dec_hook=None)¶
Deserialize an object from JSON.
- Parameters:
buf (bytes-like or str) – The message to decode.
type (type, optional) – A Python type (in type annotation form) to decode the object as. If provided, the message will be type checked and decoded as the specified type. Defaults to
Any
, in which case the message will be decoded using the default JSON types.strict (bool, optional) – Whether type coercion rules should be strict. Setting to False enables a wider set of coercion rules from string to non-string types for all values. Default is True.
dec_hook (callable, optional) – An optional callback for handling decoding custom types. Should have the signature
dec_hook(type: Type, obj: Any) -> Any
, wheretype
is the expected message type, andobj
is the decoded representation composed of only basic JSON types. This hook should transformobj
into typetype
, or raise aTypeError
if unsupported.
- Returns:
obj (Any) – The deserialized object.
See also
- msgspec.json.format(buf, *, indent=2)¶
Format an existing JSON message, usually to be more human readable.
- Parameters:
buf (bytes-like or str) – The JSON message to format.
indent (int, optional) – How many spaces to indent for a single indentation level. Defaults to 2. Set to 0 to format the message as a single line, with spaces added between items for readability. Set to a negative number to strip all unnecessary whitespace, minimizing the message size.
- Returns:
output (bytes or str) – The formatted JSON message. Returns a str if input is a str, bytes otherwise.
MessagePack¶
- class msgspec.msgpack.Encoder(*, enc_hook=None, decimal_format='string', uuid_format='canonical', order=None)¶
A MessagePack encoder.
- Parameters:
enc_hook (callable, optional) – A callable to call for objects that aren’t supported msgspec types. Takes the unsupported object and should return a supported object, or raise a
NotImplementedError
if unsupported.decimal_format ({'string', 'number'}, optional) – The format to use for encoding
decimal.Decimal
objects. If ‘string’ they’re encoded as strings, if ‘number’, they’re encoded as floats. Defaults to ‘string’, which is the recommended value since ‘number’ may result in precision loss when decoding.uuid_format ({'canonical', 'hex', 'bytes'}, optional) – The format to use for encoding
uuid.UUID
objects. The ‘canonical’ and ‘hex’ formats encode them as strings with and without hyphens respectively. The ‘bytes’ format encodes them as big-endian binary representations of the corresponding 128-bit integers. Defaults to ‘canonical’.order ({None, 'deterministic', 'sorted'}, optional) –
The ordering to use when encoding unordered compound types.
None
: All objects are encoded in the most efficient manner matching their in-memory representations. The default.'deterministic'
: Unordered collections (sets, dicts) are sorted to ensure a consistent output between runs. Useful when comparison/hashing of the encoded binary output is necessary.'sorted'
: Like'deterministic'
, but all object-like types (structs, dataclasses, …) are also sorted by field name before encoding. This is slower than'deterministic'
, but may produce more human-readable output.
- encode(obj)¶
Serialize an object to bytes.
- Parameters:
obj (Any) – The object to serialize.
- Returns:
data (bytes) – The serialized object.
- encode_into(obj, buffer, offset=0, /)¶
Serialize an object into an existing bytearray buffer.
Upon success, the buffer will be truncated to the end of the serialized message. Note that the underlying memory buffer won’t be truncated, allowing for efficiently appending additional bytes later.
- class msgspec.msgpack.Decoder(type='Any', *, strict=True, dec_hook=None, ext_hook=None)¶
A MessagePack decoder.
- Parameters:
type (type, optional) – A Python type (in type annotation form) to decode the object as. If provided, the message will be type checked and decoded as the specified type. Defaults to
Any
, in which case the message will be decoded using the default MessagePack types.strict (bool, optional) – Whether type coercion rules should be strict. Setting to False enables a wider set of coercion rules from string to non-string types for all values. Default is True.
dec_hook (callable, optional) – An optional callback for handling decoding custom types. Should have the signature
dec_hook(type: Type, obj: Any) -> Any
, wheretype
is the expected message type, andobj
is the decoded representation composed of only basic MessagePack types. This hook should transformobj
into typetype
, or raise aNotImplementedError
if unsupported.ext_hook (callable, optional) – An optional callback for decoding MessagePack extensions. Should have the signature
ext_hook(code: int, data: memoryview) -> Any
. If provided, this will be called to deserialize all extension types found in the message. Note thatdata
is a memoryview into the larger message buffer - any references created to the underlying buffer without copying the data out will cause the full message buffer to persist in memory. If not provided, extension types will decode asmsgspec.Ext
objects.
- decode(buf)¶
Deserialize an object from MessagePack.
- Parameters:
buf (bytes-like) – The message to decode.
- Returns:
obj (Any) – The deserialized object.
- class msgspec.msgpack.Ext(code, data)¶
A record representing a MessagePack Extension Type.
- Parameters:
code (int) – The integer type code for this extension. Must be between -128 and 127.
data (bytes, bytearray, or memoryview) – The byte buffer for this extension. One of bytes, bytearray, memoryview, or any object that implements the buffer protocol.
- code¶
The extension type code
- data¶
The extension data payload
- msgspec.msgpack.encode(obj, *, enc_hook=None, order=None)¶
Serialize an object as MessagePack.
- Parameters:
obj (Any) – The object to serialize.
enc_hook (callable, optional) – A callable to call for objects that aren’t supported msgspec types. Takes the unsupported object and should return a supported object, or raise a
NotImplementedError
if unsupported.order ({None, 'deterministic', 'sorted'}, optional) –
The ordering to use when encoding unordered compound types.
None
: All objects are encoded in the most efficient manner matching their in-memory representations. The default.'deterministic'
: Unordered collections (sets, dicts) are sorted to ensure a consistent output between runs. Useful when comparison/hashing of the encoded binary output is necessary.'sorted'
: Like'deterministic'
, but all object-like types (structs, dataclasses, …) are also sorted by field name before encoding. This is slower than'deterministic'
, but may produce more human-readable output.
- Returns:
data (bytes) – The serialized object.
See also
- msgspec.msgpack.decode(buf, *, type='Any', strict=True, dec_hook=None, ext_hook=None)¶
Deserialize an object from MessagePack.
- Parameters:
buf (bytes-like) – The message to decode.
type (type, optional) – A Python type (in type annotation form) to decode the object as. If provided, the message will be type checked and decoded as the specified type. Defaults to
Any
, in which case the message will be decoded using the default MessagePack types.strict (bool, optional) – Whether type coercion rules should be strict. Setting to False enables a wider set of coercion rules from string to non-string types for all values. Default is True.
dec_hook (callable, optional) – An optional callback for handling decoding custom types. Should have the signature
dec_hook(type: Type, obj: Any) -> Any
, wheretype
is the expected message type, andobj
is the decoded representation composed of only basic MessagePack types. This hook should transformobj
into typetype
, or raise aNotImplementedError
if unsupported.ext_hook (callable, optional) – An optional callback for decoding MessagePack extensions. Should have the signature
ext_hook(code: int, data: memoryview) -> Any
. If provided, this will be called to deserialize all extension types found in the message. Note thatdata
is a memoryview into the larger message buffer - any references created to the underlying buffer without copying the data out will cause the full message buffer to persist in memory. If not provided, extension types will decode asmsgspec.Ext
objects.
- Returns:
obj (Any) – The deserialized object.
See also
YAML¶
- msgspec.yaml.encode(obj, *, enc_hook=None, order=None)¶
Serialize an object as YAML.
- Parameters:
obj (Any) – The object to serialize.
enc_hook (callable, optional) – A callable to call for objects that aren’t supported msgspec types. Takes the unsupported object and should return a supported object, or raise a
NotImplementedError
if unsupported.order ({None, 'deterministic', 'sorted'}, optional) –
The ordering to use when encoding unordered compound types.
None
: All objects are encoded in the most efficient manner matching their in-memory representations. The default.'deterministic'
: Unordered collections (sets, dicts) are sorted to ensure a consistent output between runs. Useful when comparison/hashing of the encoded binary output is necessary.'sorted'
: Like'deterministic'
, but all object-like types (structs, dataclasses, …) are also sorted by field name before encoding. This is slower than'deterministic'
, but may produce more human-readable output.
- Returns:
data (bytes) – The serialized object.
Notes
This function requires that the third-party PyYAML library is installed.
See also
- msgspec.yaml.decode(buf, *, type=typing.Any, strict=True, dec_hook=None)¶
Deserialize an object from YAML.
- Parameters:
buf (bytes-like or str) – The message to decode.
type (type, optional) – A Python type (in type annotation form) to decode the object as. If provided, the message will be type checked and decoded as the specified type. Defaults to
Any
, in which case the message will be decoded using the default YAML types.strict (bool, optional) – Whether type coercion rules should be strict. Setting to False enables a wider set of coercion rules from string to non-string types for all values. Default is True.
dec_hook (callable, optional) – An optional callback for handling decoding custom types. Should have the signature
dec_hook(type: Type, obj: Any) -> Any
, wheretype
is the expected message type, andobj
is the decoded representation composed of only basic YAML types. This hook should transformobj
into typetype
, or raise aNotImplementedError
if unsupported.
- Returns:
obj (Any) – The deserialized object.
Notes
This function requires that the third-party PyYAML library is installed.
See also
TOML¶
- msgspec.toml.encode(obj, *, enc_hook=None, order=None)¶
Serialize an object as TOML.
- Parameters:
obj (Any) – The object to serialize.
enc_hook (callable, optional) – A callable to call for objects that aren’t supported msgspec types. Takes the unsupported object and should return a supported object, or raise a
NotImplementedError
if unsupported.order ({None, 'deterministic', 'sorted'}, optional) –
The ordering to use when encoding unordered compound types.
None
: All objects are encoded in the most efficient manner matching their in-memory representations. The default.'deterministic'
: Unordered collections (sets, dicts) are sorted to ensure a consistent output between runs. Useful when comparison/hashing of the encoded binary output is necessary.'sorted'
: Like'deterministic'
, but all object-like types (structs, dataclasses, …) are also sorted by field name before encoding. This is slower than'deterministic'
, but may produce more human-readable output.
- Returns:
data (bytes) – The serialized object.
See also
- msgspec.toml.decode(buf, *, type=typing.Any, strict=True, dec_hook=None)¶
Deserialize an object from TOML.
- Parameters:
buf (bytes-like or str) – The message to decode.
type (type, optional) – A Python type (in type annotation form) to decode the object as. If provided, the message will be type checked and decoded as the specified type. Defaults to
Any
, in which case the message will be decoded using the default TOML types.strict (bool, optional) – Whether type coercion rules should be strict. Setting to False enables a wider set of coercion rules from string to non-string types for all values. Default is True.
dec_hook (callable, optional) – An optional callback for handling decoding custom types. Should have the signature
dec_hook(type: Type, obj: Any) -> Any
, wheretype
is the expected message type, andobj
is the decoded representation composed of only basic TOML types. This hook should transformobj
into typetype
, or raise aNotImplementedError
if unsupported.
- Returns:
obj (Any) – The deserialized object.
See also
JSON Schema¶
- msgspec.json.schema(type, *, schema_hook=None)¶
Generate a JSON Schema for a given type.
Any schemas for (potentially) shared components are extracted and stored in a top-level
"$defs"
field.If you want to generate schemas for multiple types, or to have more control over the generated schema you may want to use
schema_components
instead.- Parameters:
type (type) – The type to generate the schema for.
schema_hook (callable, optional) – An optional callback to use for generating JSON schemas of custom types. Will be called with the custom type, and should return a dict representation of the JSON schema for that type.
- Returns:
schema (dict) – The generated JSON Schema.
See also
- msgspec.json.schema_components(types, *, schema_hook=None, ref_template='#/$defs/{name}')¶
Generate JSON Schemas for one or more types.
Any schemas for (potentially) shared components are extracted and returned in a separate
components
dict.- Parameters:
types (Iterable[type]) – An iterable of one or more types to generate schemas for.
schema_hook (callable, optional) – An optional callback to use for generating JSON schemas of custom types. Will be called with the custom type, and should return a dict representation of the JSON schema for that type.
ref_template (str, optional) – A template to use when generating
"$ref"
fields. This template is formatted with the type name astemplate.format(name=name)
. This can be useful if you intend to store thecomponents
mapping somewhere other than a top-level"$defs"
field. For example, you might useref_template="#/components/{name}"
if generating an OpenAPI schema.
- Returns:
schemas (tuple[dict]) – A tuple of JSON Schemas, one for each type in
types
.components (dict) – A mapping of name to schema for any shared components used by
schemas
.
See also
Converters¶
- msgspec.convert(obj, type, *, strict=True, from_attributes=False, dec_hook=None, str_keys=False, builtin_types=None)¶
Convert the input object to the specified type, or error accordingly.
- Parameters:
obj (Any) – The object to convert.
type (Type) – A Python type (in type annotation form) to convert the object to.
strict (bool, optional) – Whether type coercion rules should be strict. Setting to False enables a wider set of coercion rules from string to non-string types for all values. Setting
strict=False
impliesstr_keys=True, builtin_types=None
. Default is True.from_attributes (bool, optional) – If True, input objects may be coerced to
Struct
/dataclass
/attrs
types by extracting attributes from the input matching fields in the output type. One use case is converting database query results (ORM or otherwise) to msgspec structured types. Default is False.dec_hook (callable, optional) – An optional callback for handling decoding custom types. Should have the signature
dec_hook(type: Type, obj: Any) -> Any
, wheretype
is the expected message type, andobj
is the decoded representation composed of only basic MessagePack types. This hook should transformobj
into typetype
, or raise aNotImplementedError
if unsupported.builtin_types (Iterable[type], optional) – Useful for wrapping other serialization protocols. An iterable of types to treat as additional builtin types. Passing a type here indicates that the wrapped protocol natively supports that type, disabling any coercion to that type provided by
convert
. For example, passingbuiltin_types=(datetime,)
disables the defaultstr
todatetime
conversion; the wrapped protocol must provide adatetime
object directly. Currently supportsbytes
,bytearray
,datetime.datetime
,datetime.time
,datetime.date
,datetime.timedelta
,uuid.UUID
, anddecimal.Decimal
.str_keys (bool, optional) – Useful for wrapping other serialization protocols. Indicates whether the wrapped protocol only supports string keys. Setting to True enables a wider set of coercion rules from string to non-string types for dict keys. Default is False.
- Returns:
Any – The converted object of the specified
type
.
Examples
>>> import msgspec >>> class Example(msgspec.Struct): ... x: set[int] ... y: bytes >>> msg = {'x': [1, 2, 3], 'y': 'AQI='}
Construct the message from a simpler set of builtin types.
>>> msgspec.convert(msg, Example) Example({1, 2, 3}, b'\x01\x02')
See also
- msgspec.to_builtins(obj, *, str_keys=False, builtin_types=None, enc_hook=None, order=None)¶
Convert a complex object to one composed only of simpler builtin types commonly supported by Python serialization libraries.
This is mainly useful for adding msgspec support for other protocols.
- Parameters:
obj (Any) – The object to convert.
builtin_types (Iterable[type], optional) – An iterable of types to treat as additional builtin types. These types will be passed through
to_builtins
unchanged. Currently supportsbytes
,bytearray
,memoryview
,datetime.datetime
,datetime.time
,datetime.date
,datetime.timedelta
,uuid.UUID
,decimal.Decimal
, and custom types.str_keys (bool, optional) – Whether to convert all object keys to strings. Default is False.
enc_hook (callable, optional) – A callable to call for objects that aren’t supported msgspec types. Takes the unsupported object and should return a supported object, or raise a
NotImplementedError
if unsupported.order ({None, 'deterministic', 'sorted'}, optional) –
The ordering to use when converting unordered compound types.
None
: All objects are converted in the most efficient manner matching their in-memory representations. The default.'deterministic'
: Unordered collections (sets, dicts) are sorted to ensure a consistent output between runs. Useful when comparison/hashing of the converted output is necessary.'sorted'
: Like'deterministic'
, but all object-like types (structs, dataclasses, …) are also sorted by field name before encoding. This is slower than'deterministic'
, but may produce more human-readable output.
- Returns:
Any – The converted object.
Examples
>>> import msgspec >>> class Example(msgspec.Struct): ... x: set[int] ... y: bytes >>> msg = Example({1, 2, 3}, b'\x01\x02')
Convert the message to a simpler set of builtin types. Note that by default all bytes-like objects are base64-encoded and converted to strings.
>>> msgspec.to_builtins(msg) {'x': [1, 2, 3], 'y': 'AQI='}
If the downstream code supports binary objects natively, you can disable conversion by passing in the types to
builtin_types
.>>> msgspec.to_builtins(msg, builtin_types=(bytes, bytearray, memoryview)) {'x': [1, 2, 3], 'y': b'\x01\x02'}
Inspect¶
- msgspec.inspect.type_info(type)¶
Get information about a msgspec-compatible type.
Note that if you need to inspect multiple types it’s more efficient to call
multi_type_info
once with a sequence of types than callingtype_info
multiple times.- Parameters:
type (type) – The type to get info about.
- Returns:
Type
Examples
>>> msgspec.inspect.type_info(bool) BoolType()
>>> msgspec.inspect.type_info(int) IntType(gt=None, ge=None, lt=None, le=None, multiple_of=None)
>>> msgspec.inspect.type_info(list[int]) ListType(item_type=IntType(gt=None, ge=None, lt=None, le=None, multiple_of=None), min_length=None, max_length=None)
- msgspec.inspect.multi_type_info(types)¶
Get information about multiple msgspec-compatible types.
- Parameters:
types (an iterable of types) – The types to get info about.
- Returns:
tuple[Type, …]
Examples
>>> msgspec.inspect.multi_type_info([int, float, list[str]]) (IntType(gt=None, ge=None, lt=None, le=None, multiple_of=None), FloatType(gt=None, ge=None, lt=None, le=None, multiple_of=None), ListType(item_type=StrType(min_length=None, max_length=None, pattern=None), min_length=None, max_length=None))
- class msgspec.inspect.Type¶
The base Type.
- class msgspec.inspect.Metadata(type, extra_json_schema=None, extra=None)¶
A type wrapping a subtype with additional metadata.
- class msgspec.inspect.AnyType¶
A type corresponding to
typing.Any
.
- class msgspec.inspect.IntType(gt=None, ge=None, lt=None, le=None, multiple_of=None)¶
A type corresponding to
int
.- Parameters:
gt (int, optional) – If set, an instance of this type must be greater than
gt
.ge (int, optional) – If set, an instance of this type must be greater than or equal to
ge
.lt (int, optional) – If set, an instance of this type must be less than to
lt
.le (int, optional) – If set, an instance of this type must be less than or equal to
le
.multiple_of (int, optional) – If set, an instance of this type must be a multiple of
multiple_of
.
- class msgspec.inspect.FloatType(gt=None, ge=None, lt=None, le=None, multiple_of=None)¶
A type corresponding to
float
.- Parameters:
gt (float, optional) – If set, an instance of this type must be greater than
gt
.ge (float, optional) – If set, an instance of this type must be greater than or equal to
ge
.lt (float, optional) – If set, an instance of this type must be less than to
lt
.le (float, optional) – If set, an instance of this type must be less than or equal to
le
.multiple_of (float, optional) – If set, an instance of this type must be a multiple of
multiple_of
.
- class msgspec.inspect.StrType(min_length=None, max_length=None, pattern=None)¶
A type corresponding to
str
.- Parameters:
min_length (int, optional) – If set, an instance of this type must have length greater than or equal to
min_length
.max_length (int, optional) – If set, an instance of this type must have length less than or equal to
max_length
.pattern (str, optional) – If set, an instance of this type must match against this regex pattern. Note that the pattern is treated as unanchored.
- class msgspec.inspect.ByteArrayType(min_length=None, max_length=None)¶
A type corresponding to
bytearray
.
- class msgspec.inspect.MemoryViewType(min_length=None, max_length=None)¶
A type corresponding to
memoryview
.
- class msgspec.inspect.DateTimeType(tz=None)¶
A type corresponding to
datetime.datetime
.- Parameters:
tz (bool) – The timezone-requirements for an instance of this type.
True
indicates a timezone-aware value is required,False
indicates a timezone-aware value is required. The default isNone
, which accepts either timezone-aware or timezone-naive values.
- class msgspec.inspect.TimeType(tz=None)¶
A type corresponding to
datetime.time
.- Parameters:
tz (bool) – The timezone-requirements for an instance of this type.
True
indicates a timezone-aware value is required,False
indicates a timezone-aware value is required. The default isNone
, which accepts either timezone-aware or timezone-naive values.
- class msgspec.inspect.DateType¶
A type corresponding to
datetime.date
.
- class msgspec.inspect.TimeDeltaType¶
A type corresponding to
datetime.timedelta
.
- class msgspec.inspect.DecimalType¶
A type corresponding to
decimal.Decimal
.
- class msgspec.inspect.ExtType¶
A type corresponding to
msgspec.msgpack.Ext
.
- class msgspec.inspect.RawType¶
A type corresponding to
msgspec.Raw
.
- class msgspec.inspect.LiteralType(values)¶
A type corresponding to a
typing.Literal
type.
- class msgspec.inspect.CustomType(cls)¶
A custom type.
- Parameters:
cls (type) – The corresponding custom type.
- class msgspec.inspect.UnionType(types)¶
A union type.
- Parameters:
types (Tuple[Type, ...]) – A tuple of possible types for this union.
- property includes_none¶
A helper for checking whether
None
is included in this union.
- class msgspec.inspect.CollectionType(item_type, min_length=None, max_length=None)¶
A collection type.
This is the base type shared by collection types like
ListType
,SetType
, etc.
- class msgspec.inspect.ListType(item_type, min_length=None, max_length=None)¶
A type corresponding to a
list
.
- class msgspec.inspect.SetType(item_type, min_length=None, max_length=None)¶
A type corresponding to a
set
.
- class msgspec.inspect.FrozenSetType(item_type, min_length=None, max_length=None)¶
A type corresponding to a
frozenset
.
- class msgspec.inspect.VarTupleType(item_type, min_length=None, max_length=None)¶
A type corresponding to a variadic
tuple
.
- class msgspec.inspect.TupleType(item_types)¶
A type corresponding to
tuple
.- Parameters:
item_types (Tuple[Type, ...]) – A tuple of types for each element in the tuple.
- class msgspec.inspect.DictType(key_type, value_type, min_length=None, max_length=None)¶
A type corresponding to
dict
.- Parameters:
- class msgspec.inspect.Field(name, encode_name, type, required=True, default=<factory>, default_factory=<factory>)¶
A record describing a field in an object-like type.
- Parameters:
name (str) – The field name as seen by Python code (e.g.
field_one
).encode_name (str) – The name used when encoding/decoding the field. This may differ if the field is renamed (e.g.
fieldOne
).type (Type) – The field type.
required (bool, optional) – Whether the field is required. Note that if
required
is False doesn’t necessarily mean thatdefault
ordefault_factory
will be set - optional fields may exist with no default value.default (Any, optional) – A default value for the field. Will be
NODEFAULT
if no default value is set.default_factory (Any, optional) – A callable that creates a default value for the field. Will be
NODEFAULT
if nodefault_factory
is set.
- class msgspec.inspect.TypedDictType(cls, fields)¶
A type corresponding to a
typing.TypedDict
type.
- class msgspec.inspect.NamedTupleType(cls, fields)¶
A type corresponding to a
typing.NamedTuple
type.
- class msgspec.inspect.DataclassType(cls, fields)¶
A type corresponding to a
dataclasses
orattrs
type.
- class msgspec.inspect.StructType(cls, fields, tag_field=None, tag=None, array_like=False, forbid_unknown_fields=False)¶
A type corresponding to a
msgspec.Struct
type.- Parameters:
cls (type) – The corresponding Struct type.
fields (Tuple[Field, ...]) – A tuple of fields in the Struct.
tag_field (str or None, optional) – If set, the field name used for the tag in a tagged union.
tag (str, int, or None, optional) – If set, the value used for the tag in a tagged union.
array_like (bool, optional) – Whether the struct is encoded as an array rather than an object.
forbid_unknown_fields (bool, optional) – If
False
(the default) unknown fields are ignored when decoding. IfTrue
any unknown fields will result in an error.
Exceptions¶
- exception msgspec.EncodeError¶
Bases:
MsgspecError
An error occurred while encoding an object
- exception msgspec.DecodeError¶
Bases:
MsgspecError
An error occurred while decoding an object
- exception msgspec.ValidationError¶
Bases:
DecodeError
The message didn’t match the expected schema