[
https://issues.apache.org/jira/browse/AVRO-3229?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17461964#comment-17461964
]
Michael A. Smith commented on AVRO-3229:
----------------------------------------
To be sure, the record schema is a bit of a distraction. Record fields can have
a default, too, but what's at issue here is the enum schema's default. So for
the test, I just used
{code:java}
{"type": "enum", "name": "bad_default", "symbols": ["A"], "default": "B"} {code}
[Hammer left a
TODO|https://github.com/apache/avro/blob/57e0bbf961d0bffafe6dceddadc65f0defd84d80/lang/py/avro/schema.py#L348]
in the code to check to ensure that record defaults are valid, but I did not
fix that for this issue. I'll open a separate ticket for that.
> Python Avro doesn't validate the default value of an enum field
> ---------------------------------------------------------------
>
> Key: AVRO-3229
> URL: https://issues.apache.org/jira/browse/AVRO-3229
> Project: Apache Avro
> Issue Type: Bug
> Components: python
> Affects Versions: 1.10.2
> Environment: python --version
> Python 3.9.5
> pip freeze | grep avro
> avro==1.10.2
> Reporter: Augusto Hack
> Assignee: Michael A. Smith
> Priority: Trivial
> Labels: pull-request-available
> Time Spent: 10m
> Remaining Estimate: 0h
>
> The following schema is invalid for Java (it fails to compile), because the
> default value is not a valid symbol:
>
> {code:java}
> {
> "type": "record",
> "name": "test_schema",
> "fields": [
> {
> "name": "test_enum",
> "type": {
> "name": "test_enum_type",
> "type": "enum",
> "symbols": [
> "NONE"
> ],
> "default": "UNKNOWN"
> }
> }
> ]
> }
> {code}
> This matches the behavior documented in the spec:
>
> {quote}default: A default value for this enumeration, used during resolution
> when the reader encounters a symbol from the writer that isn't defined in the
> reader's schema (optional). The value provided here must be a JSON *string
> that's a member of the symbols array*. See documentation on schema resolution
> for how this gets used.
> {quote}
> But the same schema is silently accepted by the python library (although the
> writer doesn't allow the invalid value to be produced):
> {code:java}
> import avro.schema
> from avro.datafile import DataFileReader, DataFileWriter
> from avro.io import DatumReader, DatumWriter
> with open("test.avsc", "rb") as handler:
> schema = avro.schema.parse(handler.read())
> DATA_FILE = "test.avro"
> with open(DATA_FILE, "wb") as handler:
> writer = DataFileWriter(handler, DatumWriter(), schema)
> writer.append({"test_enum": "NONE"})
> # writer.append({"test_enum": "UNKNOWN"})
> # writer.append({})
> writer.close()
> with open(DATA_FILE, "rb") as handler:
> for user in DataFileReader(handler, DatumReader()):
> print(user)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)