@@ -111,6 +111,21 @@ def merge_all_of_schemas(original_data: dict[str, Any]) -> dict[str, Any]:
111111 return schema_dict
112112
113113
114+ def build_discriminator (value : dict [str , Any ]) -> Discriminator :
115+ """Build a Discriminator object from raw data.
116+
117+ Args:
118+ value: Raw discriminator data
119+
120+ Returns:
121+ Discriminator object
122+ """
123+ return Discriminator (
124+ property_name = value ["propertyName" ],
125+ mapping = value .get ("mapping" , {}),
126+ )
127+
128+
114129class SchemaFactory :
115130 """Factory for creating schema objects from raw dicts."""
116131
@@ -262,19 +277,6 @@ def _one_of(self, data: dict[str, Any]) -> OneOf:
262277 def create_inner_schemas (schemas : list [dict [str , Any ]]) -> list [Schema ]:
263278 return [self .create (x ) for x in schemas ]
264279
265- def build_discriminator (discriminator_data : dict [str , Any ]) -> Discriminator :
266- discriminator = Discriminator (
267- property_name = discriminator_data ["propertyName" ],
268- )
269-
270- if "mapping" in discriminator_data :
271- discriminator .mapping = {
272- key : self .create (schema )
273- for key , schema in discriminator_data ["mapping" ].items ()
274- }
275-
276- return discriminator
277-
278280 attrs_map = {
279281 "schemas" : PropertyMeta (name = "oneOf" , cast = create_inner_schemas ),
280282 "discriminator" : PropertyMeta (
@@ -289,7 +291,13 @@ def _any_of(self, data: dict[str, Any]) -> AnyOf:
289291 def create_inner_schemas (schemas : list [dict [str , Any ]]) -> list [Schema ]:
290292 return [self .create (x ) for x in schemas ]
291293
292- attrs_map = {"schemas" : PropertyMeta (name = "anyOf" , cast = create_inner_schemas )}
294+ attrs_map = {
295+ "schemas" : PropertyMeta (name = "anyOf" , cast = create_inner_schemas ),
296+ "discriminator" : PropertyMeta (
297+ name = "discriminator" ,
298+ cast = build_discriminator ,
299+ ),
300+ }
293301
294302 if "type" in data :
295303 return AnyOf (** extract_attrs (data , attrs_map ))
0 commit comments