diff --git a/src/py_avro_schema/_schemas.py b/src/py_avro_schema/_schemas.py index ecaa150..7eb04a9 100644 --- a/src/py_avro_schema/_schemas.py +++ b/src/py_avro_schema/_schemas.py @@ -312,14 +312,20 @@ 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 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)