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)