Skip to content

Commit 468c68e

Browse files
rchen152facebook-github-bot
authored andcommitted
Move PydanticMetadata calculation into its own function
Reviewed By: stroxler Differential Revision: D80371713 fbshipit-source-id: 663be684b32e58d302d350def34025df055efcd7
1 parent c3733e1 commit 468c68e

File tree

1 file changed

+30
-21
lines changed

1 file changed

+30
-21
lines changed

pyrefly/lib/alt/class/class_metadata.rs

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -144,27 +144,8 @@ impl<'a, Ans: LookupAnswer> AnswersSolver<'a, Ans> {
144144
"metaclass" => Either::Left(x),
145145
_ => Either::Right((n.clone(), self.expr_infer(x, errors))),
146146
});
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);
168149

169150
// If this class inherits from a dataclass_transform-ed class, record the defaults that we
170151
// should use for dataclass parameters.
@@ -459,6 +440,34 @@ impl<'a, Ans: LookupAnswer> AnswersSolver<'a, Ans> {
459440
})
460441
}
461442

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+
462471
fn typed_dict_metadata(
463472
&self,
464473
cls: &Class,

0 commit comments

Comments
 (0)