diff --git a/src/huggingface_hub/dataclasses.py b/src/huggingface_hub/dataclasses.py index 16b5a1be70..2fcec6b774 100644 --- a/src/huggingface_hub/dataclasses.py +++ b/src/huggingface_hub/dataclasses.py @@ -431,11 +431,11 @@ def type_validator(name: str, value: Any, expected_type: Any) -> None: elif origin is Required: if value is _TYPED_DICT_DEFAULT_VALUE: raise TypeError(f"Field '{name}' is required but missing.") - _validate_simple_type(name, value, args[0]) + type_validator(name, value, args[0]) elif origin is NotRequired: if value is _TYPED_DICT_DEFAULT_VALUE: return - _validate_simple_type(name, value, args[0]) + type_validator(name, value, args[0]) else: raise TypeError(f"Unsupported type for field '{name}': {expected_type}") diff --git a/tests/test_utils_strict_dataclass.py b/tests/test_utils_strict_dataclass.py index bdd2620264..70ee8f5cdb 100644 --- a/tests/test_utils_strict_dataclass.py +++ b/tests/test_utils_strict_dataclass.py @@ -671,6 +671,13 @@ class ConfigDict(TypedDict): optional_value: Optional[int] +class ConfigDictIncomplete(TypedDict, total=False): + str_value: str + positive_int_value: Annotated[int, positive_int] + forward_ref_value: "ForwardDtype" + optional_value: Optional[int] + + @pytest.mark.parametrize( "data", [ @@ -680,6 +687,7 @@ class ConfigDict(TypedDict): ) def test_typed_dict_valid_data(data: dict): validate_typed_dict(ConfigDict, data) + validate_typed_dict(ConfigDictIncomplete, data) @pytest.mark.parametrize(