[
https://issues.apache.org/jira/browse/AVRO-2720?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ryan Skraba updated AVRO-2720:
------------------------------
Fix Version/s: 1.11.0
> Avro should display invalid field data on AvroTypeException
> -----------------------------------------------------------
>
> Key: AVRO-2720
> URL: https://issues.apache.org/jira/browse/AVRO-2720
> Project: Apache Avro
> Issue Type: Bug
> Components: python
> Reporter: Chelsea Dole
> Assignee: Subhash Bhushan
> Priority: Critical
> Fix For: 1.11.0
>
>
> Calling "Validate"/"write" raises an AvroTypeException when the input "datum"
> does not fit the input "expected_schema". It would be useful for users if
> AvroTypeException specified which fields were not valid representations of
> the expected_schema, by adding additional information to the string printed
> when the error is thrown.
>
>
> {code:java}
> writer_schema = schema.parse("""\
> {"type": "record", "name": "Test",
> "fields": [{"name": "F", "type": "int"},
> {"name": "E", "type": "int"}]}""")
> datum_to_write = {'E': 5, 'F': 'Bad'}
> datum_writer = avro_io.DatumWriter(writer_schema)
> datum_writer.write(datum, encoder)
> {code}
>
> The last line of the above example ^ will throw an AvroTypeException, because
> field "F" isn't an int. If there are multiple fields with incompatible types,
> the message will only show the first field. Once it is fixed, it will throw
> another AvroTypeException with the second incompatible type field, and so on.
>
> *Current AvroTypeException Output:*
> {code:java}
> avro.io.AvroTypeException: The datum {'E': 5, 'F': 'Bad'} is not an example
> of the schema {
> "type": "record",
> "name": "Test",
> "fields": [{"type": "int", "name": "F"}, {"type": "int", "name":
> "E"}]}{code}
> *Suggested AvroTypeException Output:*
>
> {code:java}
> avro.io.AvroTypeException: Field 'F' with value 'Bad' has an unexpected type.
> The datum {'E': 5, 'F': 'Bad'} is not an example of the schema {
> "type": "record",
> "name": "Test",
> "fields": [{"type": "int", "name": "F"}, {"type": "int", "name": "E"}]}
> {code}
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)