[ https://issues.apache.org/jira/browse/AVRO-1777?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16811008#comment-16811008 ]
Hudson commented on AVRO-1777: ------------------------------ SUCCESS: Integrated in Jenkins build AvroJava #642 (See [https://builds.apache.org/job/AvroJava/642/]) "Reverting the changes for AVRO-1777 which failed in Travis (#413)"" (dkulp: [https://github.com/apache/avro/commit/22d5483a1fe8a242f3a512cc0bb7131268e23e92]) * (edit) lang/py/src/avro/io.py * (edit) lang/py/test/test_io.py > Select best matching record when writing a union in python > ---------------------------------------------------------- > > Key: AVRO-1777 > URL: https://issues.apache.org/jira/browse/AVRO-1777 > Project: Apache Avro > Issue Type: Improvement > Components: python > Affects Versions: 1.7.7 > Reporter: Steven Aerts > Assignee: Daniel Kulp > Priority: Major > > Unlike javascript, python is not using wrapped types. > So when writing a union it needs to guess find out which type it will output. > At the moment it takes the last validating type. > I propose to take the type with the most matching fields. > So I propose to change in {{io.py}}: > {code} > # resolve union > index_of_schema = -1 > for i, candidate_schema in enumerate(writers_schema.schemas): > if validate(candidate_schema, datum): > index_of_schema = i > if index_of_schema < 0: raise AvroTypeException(writers_schema, datum) > {code} > into > {code} > # resolve union > index_of_schema = -1 > found_fields = -1 > for i, candidate_schema in enumerate(writers_schema.schemas): > if validate(candidate_schema, datum): > nr_fields = candidate_schema.type in ['record', 'error', 'request'] and > len(candidate_schema.fields) or 1 > if nr_fields > found_fields: > index_of_schema = i > found_fields = nr_fields > if index_of_schema < 0: raise AvroTypeException(writers_schema, datum) > {code} > If you want, I can create a pull request for this. And apply it both on py3 > as py. -- This message was sent by Atlassian JIRA (v7.6.3#76005)