Skip to content

Commit 469d815

Browse files
authored
add runtime type for wrapped records (#23)
1 parent ffa54ac commit 469d815

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

src/py_avro_schema/_schemas.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,14 +312,20 @@ def _wrap_as_record(self, inner_schema: JSONObj, names: NamesType) -> JSONType:
312312
if fullname in names:
313313
return fullname
314314
names.append(fullname)
315+
316+
fields = [
317+
{"name": REF_ID_KEY, "type": ["null", "long"], "default": None},
318+
{"name": REF_DATA_KEY, "type": inner_schema},
319+
]
320+
if Option.ADD_RUNTIME_TYPE_FIELD in self.options:
321+
fields.append({"name": RUNTIME_TYPE_KEY, "type": ["null", "string"]})
322+
315323
record_schema = {
316324
"type": "record",
317325
"name": record_name,
318-
"fields": [
319-
{"name": REF_ID_KEY, "type": ["null", "long"], "default": None},
320-
{"name": REF_DATA_KEY, "type": inner_schema},
321-
],
326+
"fields": fields,
322327
}
328+
323329
if self.namespace:
324330
record_schema["namespace"] = self.namespace
325331
return record_schema

tests/test_avro_schema.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,17 @@ class PyType:
8080
],
8181
}
8282
assert_schema(PyType, expected, options=pas.Option.ADD_RUNTIME_TYPE_FIELD)
83+
84+
85+
def test_add_type_field_on_wrapped_record():
86+
py_type = list[str]
87+
expected = {
88+
"type": "record",
89+
"name": "StrList",
90+
"fields": [
91+
{"name": "__id", "type": ["null", "long"], "default": None},
92+
{"name": "__data", "type": {"type": "array", "items": "string"}},
93+
{"name": "_runtime_type", "type": ["null", "string"]},
94+
],
95+
}
96+
assert_schema(py_type, expected, options=pas.Option.WRAP_INTO_RECORDS | pas.Option.ADD_RUNTIME_TYPE_FIELD)

0 commit comments

Comments
 (0)