From 57ec1ebf7c06a3c31939ae07056fe3c0d71c2133 Mon Sep 17 00:00:00 2001 From: Daniel Gellert Date: Mon, 18 Mar 2024 12:14:52 +0100 Subject: [PATCH] fix: remove sequence schema make_default handling --- src/py_avro_schema/_schemas.py | 8 ++++---- tests/test_pydantic.py | 29 ++++++++++++++++++++--------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/py_avro_schema/_schemas.py b/src/py_avro_schema/_schemas.py index cb246f9..37e39fb 100644 --- a/src/py_avro_schema/_schemas.py +++ b/src/py_avro_schema/_schemas.py @@ -567,9 +567,6 @@ def data(self, names: NamesType) -> JSONObj: "items": self.items_schema.data(names=names), } - def make_default(self, py_default: Any) -> Any: - return [_schema_obj(default.__class__).make_default(default) for default in py_default] - class DictSchema(Schema): """An Avro map schema for a given Python mapping""" @@ -907,7 +904,10 @@ def _record_field(self, name: str, py_field: pydantic.fields.FieldInfo) -> Recor def make_default(self, py_default: Any) -> Any: """Return an Avro schema compliant default value for a given Python value""" - return {key: _schema_obj(value.__class__).make_default(value) for key, value in py_default} + try: + return {key: _schema_obj(value.__class__).make_default(value) for key, value in py_default} + except TypeNotSupportedError: + return py_default def _annotation(self, field_name: str) -> Type: """ diff --git a/tests/test_pydantic.py b/tests/test_pydantic.py index ae5ef66..7f7e75f 100644 --- a/tests/test_pydantic.py +++ b/tests/test_pydantic.py @@ -531,22 +531,33 @@ class Default(pydantic.BaseModel): class PyType(pydantic.BaseModel): default: Default = pydantic.Field(..., default_factory=Default) - defaults: list[Default] = pydantic.Field(..., default_factory=lambda: [Default()]) + + class Nested(pydantic.BaseModel): + py_type: PyType = pydantic.Field(..., default_factory=PyType) expected = { "fields": [ { - "default": {"field_a": "default_a"}, - "name": "default", + "default": {"default": {"field_a": "default_a"}}, + "name": "py_type", "type": { - "fields": [{"default": "default_a", "name": "field_a", "type": "string"}], - "name": "Default", + "fields": [ + { + "default": {"field_a": "default_a"}, + "name": "default", + "type": { + "fields": [{"default": "default_a", "name": "field_a", "type": "string"}], + "name": "Default", + "type": "record", + }, + } + ], + "name": "PyType", "type": "record", }, - }, - {"default": [{"field_a": "default_a"}], "name": "defaults", "type": {"items": "Default", "type": "array"}}, + } ], - "name": "PyType", + "name": "Nested", "type": "record", } - assert_schema(PyType, expected) + assert_schema(Nested, expected)