"""Preconfigured converters for msgpack."""fromcollections.abcimportSetfromdatetimeimportdate,datetime,time,timezonefromtypingimportAny,TypeVar,Unionfrommsgpackimportdumps,loadsfrom..convertersimportBaseConverter,Converterfrom..fnsimportidentityfrom..literalsimportis_literal_containing_enumsfrom..strategiesimportconfigure_union_passthroughfrom.importis_primitive_enum,literals_with_enums_unstructure_factory,wrap__all__=["MsgpackConverter","configure_converter","make_converter"]T=TypeVar("T")
[docs]defconfigure_converter(converter:BaseConverter)->None:""" Configure the converter for use with the msgpack library. * datetimes are serialized as timestamp floats * sets are serialized as lists * string and int enums are passed through when unstructuring .. versionchanged:: 24.2.0 Enums are left to the library to unstructure, speeding them up. """converter.register_unstructure_hook(datetime,lambdav:v.timestamp())converter.register_structure_hook(datetime,lambdav,_:datetime.fromtimestamp(v,timezone.utc))converter.register_unstructure_hook(date,lambdav:datetime.combine(v,time(tzinfo=timezone.utc)).timestamp())converter.register_structure_hook(date,lambdav,_:datetime.fromtimestamp(v,timezone.utc).date())converter.register_unstructure_hook_factory(is_primitive_enum,lambdat:identity)converter.register_unstructure_hook_factory(is_literal_containing_enums,literals_with_enums_unstructure_factory)configure_union_passthrough(Union[str,bool,int,float,None,bytes],converter)