11"""Preconfigured converters for bson."""
22
33from base64 import b85decode , b85encode
4+ from collections .abc import Set
45from datetime import date , datetime
56from typing import Any , TypeVar , Union
67
78from bson import DEFAULT_CODEC_OPTIONS , CodecOptions , Int64 , ObjectId , decode , encode
89
9- from cattrs ._compat import AbstractSet , is_mapping
10- from cattrs .gen import make_mapping_structure_fn
11-
10+ from .._compat import is_mapping , is_subclass
11+ from ..cols import mapping_structure_factory
1212from ..converters import BaseConverter , Converter
1313from ..dispatch import StructureHook
1414from ..fns import identity
@@ -69,9 +69,9 @@ def gen_unstructure_mapping(cl: Any, unstructure_to=None):
6969 key_handler = str
7070 args = getattr (cl , "__args__" , None )
7171 if args :
72- if issubclass (args [0 ], str ):
72+ if is_subclass (args [0 ], str ):
7373 key_handler = None
74- elif issubclass (args [0 ], bytes ):
74+ elif is_subclass (args [0 ], bytes ):
7575
7676 def key_handler (k ):
7777 return b85encode (k ).decode ("utf8" )
@@ -82,10 +82,10 @@ def key_handler(k):
8282
8383 def gen_structure_mapping (cl : Any ) -> StructureHook :
8484 args = getattr (cl , "__args__" , None )
85- if args and issubclass (args [0 ], bytes ):
86- h = make_mapping_structure_fn (cl , converter , key_type = Base85Bytes )
85+ if args and is_subclass (args [0 ], bytes ):
86+ h = mapping_structure_factory (cl , converter , key_type = Base85Bytes )
8787 else :
88- h = make_mapping_structure_fn (cl , converter )
88+ h = mapping_structure_factory (cl , converter )
8989 return h
9090
9191 converter .register_structure_hook (Base85Bytes , lambda v , _ : b85decode (v ))
@@ -112,7 +112,7 @@ def gen_structure_mapping(cl: Any) -> StructureHook:
112112@wrap (BsonConverter )
113113def make_converter (* args : Any , ** kwargs : Any ) -> BsonConverter :
114114 kwargs ["unstruct_collection_overrides" ] = {
115- AbstractSet : list ,
115+ Set : list ,
116116 ** kwargs .get ("unstruct_collection_overrides" , {}),
117117 }
118118 res = BsonConverter (* args , ** kwargs )
0 commit comments