Skip to content

Commit f67e25c

Browse files
Fix definition-ref bug with Dict keys (#1014)
1 parent b51105a commit f67e25c

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/serializers/type_serializers/definitions.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ impl TypeSerializer for DefinitionRefSerializer {
7676
}
7777

7878
fn json_key<'py>(&self, key: &'py PyAny, extra: &Extra) -> PyResult<Cow<'py, str>> {
79-
self._invalid_as_json_key(key, extra, Self::EXPECTED_TYPE)
79+
self.definition.get().unwrap().json_key(key, extra)
8080
}
8181

8282
fn serde_serialize<S: serde::ser::Serializer>(

tests/serializers/test_definitions.py

+21
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,24 @@ def test_use_after():
113113
)
114114
)
115115
assert v.to_python((1, 2)) == ('1', '2')
116+
117+
118+
def test_defs_with_dict():
119+
s = SchemaSerializer(
120+
core_schema.definitions_schema(
121+
schema=core_schema.typed_dict_schema(
122+
{
123+
'foo': core_schema.typed_dict_field(
124+
core_schema.dict_schema(
125+
keys_schema=core_schema.definition_reference_schema('key'),
126+
values_schema=core_schema.definition_reference_schema('val'),
127+
)
128+
)
129+
}
130+
),
131+
definitions=[core_schema.str_schema(ref='key'), core_schema.str_schema(ref='val')],
132+
)
133+
)
134+
135+
assert s.to_json({'foo': {'key': 'val'}}) == b'{"foo":{"key":"val"}}'
136+
assert s.to_python({'foo': {'key': 'val'}}) == {'foo': {'key': 'val'}}

0 commit comments

Comments
 (0)