@@ -144,27 +144,8 @@ impl<'a, Ans: LookupAnswer> AnswersSolver<'a, Ans> {
144
144
"metaclass" => Either :: Left ( x) ,
145
145
_ => Either :: Right ( ( n. clone ( ) , self . expr_infer ( x, errors) ) ) ,
146
146
} ) ;
147
- let has_pydantic_base_model_base_class =
148
- bases_with_metadata. iter ( ) . any ( |( base_class_object, _) | {
149
- base_class_object. has_qname ( ModuleName :: pydantic ( ) . as_str ( ) , "BaseModel" )
150
- } ) ;
151
-
152
- let is_pydantic_model = has_pydantic_base_model_base_class
153
- || bases_with_metadata
154
- . iter ( )
155
- . any ( |( _, metadata) | metadata. is_pydantic_model ( ) ) ;
156
-
157
- // Determine final PydanticMetadata only if the class inherits from BaseModel in the MRO
158
- let pydantic_metadata = match pydantic_metadata_binding {
159
- PydanticMetadataBinding {
160
- frozen,
161
- validation_alias,
162
- } if is_pydantic_model => Some ( PydanticMetadata {
163
- frozen : * frozen,
164
- validation_alias : validation_alias. clone ( ) ,
165
- } ) ,
166
- _ => None ,
167
- } ;
147
+ let pydantic_metadata =
148
+ self . pydantic_metadata ( & bases_with_metadata, pydantic_metadata_binding) ;
168
149
169
150
// If this class inherits from a dataclass_transform-ed class, record the defaults that we
170
151
// should use for dataclass parameters.
@@ -459,6 +440,34 @@ impl<'a, Ans: LookupAnswer> AnswersSolver<'a, Ans> {
459
440
} )
460
441
}
461
442
443
+ fn pydantic_metadata (
444
+ & self ,
445
+ bases_with_metadata : & [ ( Class , Arc < ClassMetadata > ) ] ,
446
+ pydantic_metadata_binding : & PydanticMetadataBinding ,
447
+ ) -> Option < PydanticMetadata > {
448
+ let has_pydantic_base_model_base_class =
449
+ bases_with_metadata. iter ( ) . any ( |( base_class_object, _) | {
450
+ base_class_object. has_qname ( ModuleName :: pydantic ( ) . as_str ( ) , "BaseModel" )
451
+ } ) ;
452
+
453
+ let is_pydantic_model = has_pydantic_base_model_base_class
454
+ || bases_with_metadata
455
+ . iter ( )
456
+ . any ( |( _, metadata) | metadata. is_pydantic_model ( ) ) ;
457
+
458
+ // Determine final PydanticMetadata only if the class inherits from BaseModel in the MRO
459
+ match pydantic_metadata_binding {
460
+ PydanticMetadataBinding {
461
+ frozen,
462
+ validation_alias,
463
+ } if is_pydantic_model => Some ( PydanticMetadata {
464
+ frozen : * frozen,
465
+ validation_alias : validation_alias. clone ( ) ,
466
+ } ) ,
467
+ _ => None ,
468
+ }
469
+ }
470
+
462
471
fn typed_dict_metadata (
463
472
& self ,
464
473
cls : & Class ,
0 commit comments