summaryrefslogtreecommitdiff
path: root/python/qpid/spec010.py
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2008-05-08 20:52:28 +0000
committerRafael H. Schloming <rhs@apache.org>2008-05-08 20:52:28 +0000
commitfd5ba0c75091336020287825a973c88a07dbe5b4 (patch)
tree5a90ff41987b15e85f254a9266d9c933cd505b9e /python/qpid/spec010.py
parent32613b43c550fec2785299a271b3818db75490c4 (diff)
downloadqpid-python-fd5ba0c75091336020287825a973c88a07dbe5b4.tar.gz
QPID-979: added access to enums through the session so that symbolic constants can be used rather than hard coded ones; also added default loading of the spec
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@654618 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/qpid/spec010.py')
-rw-r--r--python/qpid/spec010.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/python/qpid/spec010.py b/python/qpid/spec010.py
index 1668729876..fb625eab65 100644
--- a/python/qpid/spec010.py
+++ b/python/qpid/spec010.py
@@ -166,6 +166,15 @@ class Domain(Type, Lookup):
def decode(self, codec):
return self.type.decode(codec)
+class Enum:
+
+ def __init__(self, name):
+ self.name = name
+
+ def __repr__(self):
+ return "%s(%s)" % (self.name, ", ".join([k for k in self.__dict__.keys()
+ if k != "name"]))
+
class Choice(Named, Node):
def __init__(self, name, value, children):
@@ -177,6 +186,12 @@ class Choice(Named, Node):
Named.register(self, node)
node.choices[self.value] = self
Node.register(self)
+ try:
+ enum = node.spec.enums[node.name]
+ except KeyError:
+ enum = Enum(node.name)
+ node.spec.enums[node.name] = enum
+ setattr(enum, self.name, self.value)
class Composite(Type, Coded):
@@ -450,6 +465,7 @@ class Spec(Node):
self.commands = {}
self.structs = {}
self.structs_by_name = {}
+ self.enums = {}
def encoding(self, klass):
if Spec.ENCODINGS.has_key(klass):