From f67e25c2c03a33bf60a18e66718df7e23fb0e79f Mon Sep 17 00:00:00 2001 From: sydney-runkle <54324534+sydney-runkle@users.noreply.github.com> Date: Thu, 12 Oct 2023 07:56:25 -0500 Subject: [PATCH] Fix `definition-ref` bug with `Dict` keys (#1014) --- .../type_serializers/definitions.rs | 2 +- tests/serializers/test_definitions.py | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/serializers/type_serializers/definitions.rs b/src/serializers/type_serializers/definitions.rs index cf92df244..b7bf63365 100644 --- a/src/serializers/type_serializers/definitions.rs +++ b/src/serializers/type_serializers/definitions.rs @@ -76,7 +76,7 @@ impl TypeSerializer for DefinitionRefSerializer { } fn json_key<'py>(&self, key: &'py PyAny, extra: &Extra) -> PyResult> { - self._invalid_as_json_key(key, extra, Self::EXPECTED_TYPE) + self.definition.get().unwrap().json_key(key, extra) } fn serde_serialize( diff --git a/tests/serializers/test_definitions.py b/tests/serializers/test_definitions.py index 2da4d353d..d45398097 100644 --- a/tests/serializers/test_definitions.py +++ b/tests/serializers/test_definitions.py @@ -113,3 +113,24 @@ def test_use_after(): ) ) assert v.to_python((1, 2)) == ('1', '2') + + +def test_defs_with_dict(): + s = SchemaSerializer( + core_schema.definitions_schema( + schema=core_schema.typed_dict_schema( + { + 'foo': core_schema.typed_dict_field( + core_schema.dict_schema( + keys_schema=core_schema.definition_reference_schema('key'), + values_schema=core_schema.definition_reference_schema('val'), + ) + ) + } + ), + definitions=[core_schema.str_schema(ref='key'), core_schema.str_schema(ref='val')], + ) + ) + + assert s.to_json({'foo': {'key': 'val'}}) == b'{"foo":{"key":"val"}}' + assert s.to_python({'foo': {'key': 'val'}}) == {'foo': {'key': 'val'}}