[ https://issues.apache.org/jira/browse/AVRO-1777?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16727829#comment-16727829 ]
ASF subversion and git services commented on AVRO-1777: ------------------------------------------------------- Commit 52a53e9520d7657bd237cae3e92e3ed015c71811 in avro's branch refs/heads/master from Thiruvalluvan M. G. [ https://gitbox.apache.org/repos/asf?p=avro.git;h=52a53e9 ] Reverting the changes for AVRO-1777 which failed in Travis (#413) > 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 > Priority: Major > Fix For: 1.9.0 > > > 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)