You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by ha...@apache.org on 2010/06/16 07:24:44 UTC
svn commit: r955129 - in /avro/trunk/lang/py: src/avro/protocol.py
src/avro/schema.py test/test_schema.py
Author: hammer
Date: Wed Jun 16 05:24:44 2010
New Revision: 955129
URL: http://svn.apache.org/viewvc?rev=955129&view=rev
Log:
Completing AVRO-284. Handle namespaces correctly in new Python implementation
(Patrick Wendell via hammer)
Modified:
avro/trunk/lang/py/src/avro/protocol.py
avro/trunk/lang/py/src/avro/schema.py
avro/trunk/lang/py/test/test_schema.py
Modified: avro/trunk/lang/py/src/avro/protocol.py
URL: http://svn.apache.org/viewvc/avro/trunk/lang/py/src/avro/protocol.py?rev=955129&r1=955128&r2=955129&view=diff
==============================================================================
--- avro/trunk/lang/py/src/avro/protocol.py (original)
+++ avro/trunk/lang/py/src/avro/protocol.py Wed Jun 16 05:24:44 2010
@@ -109,7 +109,7 @@ class Protocol(object):
name = property(lambda self: self.get_prop('name'))
namespace = property(lambda self: self.get_prop('namespace'))
fullname = property(lambda self:
- schema.Name(self.name, self.namespace).get_full_name())
+ schema.Name(self.name, self.namespace).fullname)
types = property(lambda self: self.get_prop('types'))
types_dict = property(lambda self: dict([(type.name, type)
for type in self.types]))
Modified: avro/trunk/lang/py/src/avro/schema.py
URL: http://svn.apache.org/viewvc/avro/trunk/lang/py/src/avro/schema.py?rev=955129&r1=955128&r2=955129&view=diff
==============================================================================
--- avro/trunk/lang/py/src/avro/schema.py (original)
+++ avro/trunk/lang/py/src/avro/schema.py Wed Jun 16 05:24:44 2010
@@ -114,7 +114,8 @@ class Schema(object):
if not hasattr(self, '_props'): self._props = {}
self.set_prop('type', type)
- # read-only properties
+ # Read-only properties dict. Printing schemas
+ # creates JSON properties directly from this dict.
props = property(lambda self: self._props)
type = property(lambda self: self.get_prop('type'))
@@ -176,10 +177,9 @@ class Name(object):
def __eq__(self, other):
if not isinstance(other, Name):
return False
- return (self.get_full_name() == other.get_full_name())
+ return (self.fullname == other.fullname)
- def get_full_name(self):
- return self._full;
+ fullname = property(lambda self: self._full)
def get_space(self):
"""Back out a namespace from full name."""
@@ -198,11 +198,11 @@ class Names(object):
self.default_namespace = default_namespace
def has_name(self, name_attr, space_attr):
- test = Name(name_attr, space_attr, self.default_namespace).get_full_name()
+ test = Name(name_attr, space_attr, self.default_namespace).fullname
return self.names.has_key(test)
def get_name(self, name_attr, space_attr):
- test = Name(name_attr, space_attr, self.default_namespace).get_full_name()
+ test = Name(name_attr, space_attr, self.default_namespace).fullname
if not self.names.has_key(test):
return None
return self.names[test]
@@ -218,14 +218,14 @@ class Names(object):
"""
to_add = Name(name_attr, space_attr, self.default_namespace)
- if to_add.get_full_name() in VALID_TYPES:
- fail_msg = '%s is a reserved type name.' % to_add.get_full_name()
+ if to_add.fullname in VALID_TYPES:
+ fail_msg = '%s is a reserved type name.' % to_add.fullname
raise SchemaParseException(fail_msg)
- elif self.names.has_key(to_add.get_full_name()):
- fail_msg = 'The name "%s" is already in use.' % to_add.get_full_name()
+ elif self.names.has_key(to_add.fullname):
+ fail_msg = 'The name "%s" is already in use.' % to_add.fullname
raise SchemaParseException(fail_msg)
- self.names[to_add.get_full_name()] = new_schema
+ self.names[to_add.fullname] = new_schema
return to_add
class NamedSchema(Schema):
@@ -247,16 +247,20 @@ class NamedSchema(Schema):
# Add class members
new_name = names.add_name(name, namespace, self)
- self.set_prop('name', new_name.get_full_name())
- if new_name.get_space() is not None:
- self.set_prop('namespace', new_name.get_space())
- self.set_prop('fullname', new_name.get_full_name())
+
+ # Store name and namespace as they were read in origin schema
+ self.set_prop('name', name)
+ if namespace is not None:
+ self.set_prop('namespace', new_name.get_space())
+
+ # Store full name as calculated from name, namespace
+ self._fullname = new_name.fullname
# read-only properties
name = property(lambda self: self.get_prop('name'))
namespace = property(lambda self: self.get_prop('namespace'))
- fullname = property(lambda self: self.get_prop('fullname'))
+ fullname = property(lambda self: self._fullname)
class Field(object):
def __init__(self, type, name, has_default, default=None, order=None, names=None):
Modified: avro/trunk/lang/py/test/test_schema.py
URL: http://svn.apache.org/viewvc/avro/trunk/lang/py/test/test_schema.py?rev=955129&r1=955128&r2=955129&view=diff
==============================================================================
--- avro/trunk/lang/py/test/test_schema.py (original)
+++ avro/trunk/lang/py/test/test_schema.py Wed Jun 16 05:24:44 2010
@@ -369,27 +369,27 @@ class TestSchema(unittest.TestCase):
print_test_name('TEST FULLNAME')
# name and namespace specified
- fullname = schema.Name('a', 'o.a.h', None).get_full_name()
+ fullname = schema.Name('a', 'o.a.h', None).fullname
self.assertEqual(fullname, 'o.a.h.a')
# fullname and namespace specified
- fullname = schema.Name('a.b.c.d', 'o.a.h', None).get_full_name()
+ fullname = schema.Name('a.b.c.d', 'o.a.h', None).fullname
self.assertEqual(fullname, 'a.b.c.d')
# name and default namespace specified
- fullname = schema.Name('a', None, 'b.c.d').get_full_name()
+ fullname = schema.Name('a', None, 'b.c.d').fullname
self.assertEqual(fullname, 'b.c.d.a')
# fullname and default namespace specified
- fullname = schema.Name('a.b.c.d', None, 'o.a.h').get_full_name()
+ fullname = schema.Name('a.b.c.d', None, 'o.a.h').fullname
self.assertEqual(fullname, 'a.b.c.d')
# fullname, namespace, default namespace specified
- fullname = schema.Name('a.b.c.d', 'o.a.a', 'o.a.h').get_full_name()
+ fullname = schema.Name('a.b.c.d', 'o.a.a', 'o.a.h').fullname
self.assertEqual(fullname, 'a.b.c.d')
# name, namespace, default namespace specified
- fullname = schema.Name('a', 'o.a.a', 'o.a.h').get_full_name()
+ fullname = schema.Name('a', 'o.a.a', 'o.a.h').fullname
self.assertEqual(fullname, 'o.a.a.a')
if __name__ == '__main__':