summaryrefslogtreecommitdiff
path: root/python/qpid/codec010.py
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2008-03-10 19:12:09 +0000
committerRafael H. Schloming <rhs@apache.org>2008-03-10 19:12:09 +0000
commit713c0c114f8d344beb58d5f99d0cb602485399cf (patch)
treeda91f2d82f9bce5f5939d18db3526851ffd2ff95 /python/qpid/codec010.py
parentaeb6df01fad88c3202c9e30205ec60801d672d9c (diff)
downloadqpid-python-713c0c114f8d344beb58d5f99d0cb602485399cf.tar.gz
renamed datatypes.Struct.type -> datatypes.Struct._type; this avoids naming conflicts with metadata-driven fields; moved argument validation -> datatypes.Struct and improved error checking; improved datatypes.Struct.__repr__
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@635660 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/qpid/codec010.py')
-rw-r--r--python/qpid/codec010.py27
1 files changed, 16 insertions, 11 deletions
diff --git a/python/qpid/codec010.py b/python/qpid/codec010.py
index 27df9db974..60adbdc2e4 100644
--- a/python/qpid/codec010.py
+++ b/python/qpid/codec010.py
@@ -18,7 +18,7 @@
#
from packer import Packer
-from datatypes import RangedSet
+from datatypes import RangedSet, Struct
class CodecException(Exception): pass
@@ -184,27 +184,32 @@ class Codec(Packer):
def read_struct32(self):
size = self.read_uint32()
code = self.read_uint16()
- struct = self.spec.structs[code]
- return struct.decode_fields(self)
+ type = self.spec.structs[code]
+ fields = type.decode_fields(self)
+ return Struct(type, **fields)
def write_struct32(self, value):
sc = StringCodec(self.spec)
- sc.write_uint16(value.type.code)
- value.type.encode_fields(sc, value)
+ sc.write_uint16(value._type.code)
+ value._type.encode_fields(sc, value)
self.write_vbin32(sc.encoded)
def read_control(self):
cntrl = self.spec.controls[self.read_uint16()]
return cntrl.decode(self)
- def write_control(self, type, ctrl):
+ def write_control(self, ctrl):
+ type = ctrl._type
self.write_uint16(type.code)
type.encode(self, ctrl)
def read_command(self):
- cmd = self.spec.commands[self.read_uint16()]
- return cmd.decode(self)
- def write_command(self, type, cmd):
- self.write_uint16(type.code)
- type.encode(self, cmd)
+ type = self.spec.commands[self.read_uint16()]
+ hdr = self.spec["session.header"].decode(self)
+ cmd = type.decode(self)
+ return hdr, cmd
+ def write_command(self, hdr, cmd):
+ self.write_uint16(cmd._type.code)
+ hdr._type.encode(self, hdr)
+ cmd._type.encode(self, cmd)
def read_size(self, width):
if width > 0: