From e844a7d01804a52fc5aceeec4ff30f2e81c2405c Mon Sep 17 00:00:00 2001 From: Benjamin Simon Date: Tue, 24 Feb 2026 20:30:13 +0100 Subject: [PATCH 1/2] add runtime type for wrapped records --- src/py_avro_schema/_schemas.py | 3 +++ tests/test_avro_schema.py | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/py_avro_schema/_schemas.py b/src/py_avro_schema/_schemas.py index ecaa150..b76012e 100644 --- a/src/py_avro_schema/_schemas.py +++ b/src/py_avro_schema/_schemas.py @@ -320,6 +320,9 @@ def _wrap_as_record(self, inner_schema: JSONObj, names: NamesType) -> JSONType: {"name": REF_DATA_KEY, "type": inner_schema}, ], } + if Option.ADD_RUNTIME_TYPE_FIELD in self.options: + record_schema["fields"].append({"name": RUNTIME_TYPE_KEY, "type": ["null", "string"]}) + if self.namespace: record_schema["namespace"] = self.namespace return record_schema diff --git a/tests/test_avro_schema.py b/tests/test_avro_schema.py index 5bffbcb..691e990 100644 --- a/tests/test_avro_schema.py +++ b/tests/test_avro_schema.py @@ -80,3 +80,17 @@ class PyType: ], } assert_schema(PyType, expected, options=pas.Option.ADD_RUNTIME_TYPE_FIELD) + + +def test_add_type_field_on_wrapped_record(): + py_type = list[str] + expected = { + "type": "record", + "name": "StrList", + "fields": [ + {"name": "__id", "type": ["null", "long"], "default": None}, + {"name": "__data", "type": {"type": "array", "items": "string"}}, + {"name": "_runtime_type", "type": ["null", "string"]}, + ], + } + assert_schema(py_type, expected, options=pas.Option.WRAP_INTO_RECORDS | pas.Option.ADD_RUNTIME_TYPE_FIELD) From d1021cb1e412ef18ca004c77a9c50fa029ba27f7 Mon Sep 17 00:00:00 2001 From: Benjamin Simon Date: Tue, 24 Feb 2026 20:46:49 +0100 Subject: [PATCH 2/2] add runtime type for wrapped records --- src/py_avro_schema/_schemas.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/py_avro_schema/_schemas.py b/src/py_avro_schema/_schemas.py index b76012e..7eb04a9 100644 --- a/src/py_avro_schema/_schemas.py +++ b/src/py_avro_schema/_schemas.py @@ -312,16 +312,19 @@ def _wrap_as_record(self, inner_schema: JSONObj, names: NamesType) -> JSONType: if fullname in names: return fullname names.append(fullname) + + fields = [ + {"name": REF_ID_KEY, "type": ["null", "long"], "default": None}, + {"name": REF_DATA_KEY, "type": inner_schema}, + ] + if Option.ADD_RUNTIME_TYPE_FIELD in self.options: + fields.append({"name": RUNTIME_TYPE_KEY, "type": ["null", "string"]}) + record_schema = { "type": "record", "name": record_name, - "fields": [ - {"name": REF_ID_KEY, "type": ["null", "long"], "default": None}, - {"name": REF_DATA_KEY, "type": inner_schema}, - ], + "fields": fields, } - if Option.ADD_RUNTIME_TYPE_FIELD in self.options: - record_schema["fields"].append({"name": RUNTIME_TYPE_KEY, "type": ["null", "string"]}) if self.namespace: record_schema["namespace"] = self.namespace