Jim Pivarski created AVRO-1651:
----------------------------------

             Summary: Python-Avro fails to recognize previously defined types 
if they're not in the same namespace
                 Key: AVRO-1651
                 URL: https://issues.apache.org/jira/browse/AVRO-1651
             Project: Avro
          Issue Type: Bug
          Components: python
    Affects Versions: 1.7.7
            Reporter: Jim Pivarski


If you reference a named type in a record, but the named type doesn't have the 
same namespace as the record (or doesn't have a namespace, while the record 
does), Python-Avro fails to recognize the named type.  Here are five Python 
scripts that illustrate the problem:

import avro.schema
names = avro.schema.Names()
avro.schema.make_avsc_object({"type": "enum", "name": "Hello", "symbols": 
["one", "two", "three"]}, names)
avro.schema.make_avsc_object({"type": "record", "name": "There", "fields": 
[{"name": "Wow", "type": "Hello"}]}, names)
# works

import avro.schema
names = avro.schema.Names()
avro.schema.make_avsc_object({"type": "enum", "name": "Hello", "symbols": 
["one", "two", "three"]}, names)
avro.schema.make_avsc_object({"type": "record", "name": "There", "namespace": 
"com.wowie", "fields": [{"name": "Wow", "type": "Hello"}]}, names)
# doesn't work

import avro.schema
names = avro.schema.Names()
avro.schema.make_avsc_object({"type": "enum", "name": "Hello", "namespace": 
"com.wowie", "symbols": ["one", "two", "three"]}, names)
avro.schema.make_avsc_object({"type": "record", "name": "There", "namespace": 
"com.wowie", "fields": [{"name": "Wow", "type": "Hello"}]}, names)
# works

import avro.schema
names = avro.schema.Names()
avro.schema.make_avsc_object({"type": "enum", "name": "Hello", "namespace": 
"com.wowie", "symbols": ["one", "two", "three"]}, names)
avro.schema.make_avsc_object({"type": "record", "name": "There", "namespace": 
"com.wowie", "fields": [{"name": "Wow", "type": "com.wowie.Hello"}]}, names)
# works

import avro.schema
names = avro.schema.Names()
avro.schema.make_avsc_object({"type": "enum", "name": "Hello", "namespace": 
"com.wowie", "symbols": ["one", "two", "three"]}, names)
avro.schema.make_avsc_object({"type": "record", "name": "There", "fields": 
[{"name": "Wow", "type": "com.wowie.Hello"}]}, names)
# works

The equivalent Java programs (using Avro-Java) do work:

import org.apache.avro.Schema.Parser;
Parser p = new Parser;
p.parse("""{"type": "enum", "name": "Hello", "symbols": ["one", "two", 
"three"]}""");
p.parse("""{"type": "record", "name": "There", "fields": [{"name": "Wow", 
"type": "Hello"}]}""");
// works

import org.apache.avro.Schema.Parser;
Parser p = new Parser;
p.parse("""{"type": "enum", "name": "Hello", "symbols": ["one", "two", 
"three"]}""");
p.parse("""{"type": "record", "name": "There", "namespace": "com.wowie", 
"fields": [{"name": "Wow", "type": "Hello"}]}""");
// works

import org.apache.avro.Schema.Parser;
Parser p = new Parser;
p.parse("""{"type": "enum", "name": "Hello", "namespace": "com.wowie", 
"symbols": ["one", "two", "three"]}""");
p.parse("""{"type": "record", "name": "There", "namespace": "com.wowie", 
"fields": [{"name": "Wow", "type": "Hello"}]}""");
// works

import org.apache.avro.Schema.Parser;
Parser p = new Parser;
p.parse("""{"type": "enum", "name": "Hello", "namespace": "com.wowie", 
"symbols": ["one", "two", "three"]}""");
p.parse("""{"type": "record", "name": "There", "namespace": "com.wowie", 
"fields": [{"name": "Wow", "type": "com.wowie.Hello"}]}""");
// works

import org.apache.avro.Schema.Parser;
Parser p = new Parser;
p.parse("""{"type": "enum", "name": "Hello", "namespace": "com.wowie", 
"symbols": ["one", "two", "three"]}""");
p.parse("""{"type": "record", "name": "There", "fields": [{"name": "Wow", 
"type": "com.wowie.Hello"}]}""");
// works






--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to