def _get_property_list_from_pydantic_base_model()

in src/databao_context_engine/introspection/property_extract.py [0:0]


def _get_property_list_from_pydantic_base_model(parent_type: type):
    if not issubclass(parent_type, BaseModel):
        raise ValueError(f"{parent_type} is not a Pydantic BaseModel")

    pydantic_fields = parent_type.model_fields
    result = []

    for field_name, field_info in pydantic_fields.items():
        has_field_default = type(field_info.default) is not PydanticUndefinedType

        if field_info.annotation is None:
            # No type: ignore the field
            continue

        property_for_field = _create_property(
            property_type=field_info.annotation,
            property_name=field_name,
            property_default=field_info.default if has_field_default else None,
            is_property_required=not has_field_default,
            annotation=next(
                (metadata for metadata in field_info.metadata if isinstance(metadata, ConfigPropertyAnnotation)), None
            ),
        )

        if property_for_field is not None:
            result.append(property_for_field)

    return result