summaryrefslogtreecommitdiff
path: root/python/qpid/codec010.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/qpid/codec010.py')
-rw-r--r--python/qpid/codec010.py401
1 files changed, 0 insertions, 401 deletions
diff --git a/python/qpid/codec010.py b/python/qpid/codec010.py
deleted file mode 100644
index 94a1cd4263..0000000000
--- a/python/qpid/codec010.py
+++ /dev/null
@@ -1,401 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-import datetime, string
-from packer import Packer
-from datatypes import serial, timestamp, RangedSet, Struct, UUID
-from ops import Compound, PRIMITIVE, COMPOUND
-
-class CodecException(Exception): pass
-
-def direct(t):
- return lambda x: t
-
-def map_str(s):
- for c in s:
- if ord(c) >= 0x80:
- return "vbin16"
- return "str16"
-
-class Codec(Packer):
-
- ENCODINGS = {
- bool: direct("boolean"),
- unicode: direct("str16"),
- str: map_str,
- buffer: direct("vbin32"),
- int: direct("int64"),
- long: direct("int64"),
- float: direct("double"),
- None.__class__: direct("void"),
- list: direct("list"),
- tuple: direct("list"),
- dict: direct("map"),
- timestamp: direct("datetime"),
- datetime.datetime: direct("datetime"),
- UUID: direct("uuid"),
- Compound: direct("struct32")
- }
-
- def encoding(self, obj):
- enc = self._encoding(obj.__class__, obj)
- if enc is None:
- raise CodecException("no encoding for %r" % obj)
- return PRIMITIVE[enc]
-
- def _encoding(self, klass, obj):
- if self.ENCODINGS.has_key(klass):
- return self.ENCODINGS[klass](obj)
- for base in klass.__bases__:
- result = self._encoding(base, obj)
- if result != None:
- return result
-
- def read_primitive(self, type):
- return getattr(self, "read_%s" % type.NAME)()
- def write_primitive(self, type, v):
- getattr(self, "write_%s" % type.NAME)(v)
-
- def read_void(self):
- return None
- def write_void(self, v):
- assert v == None
-
- def read_bit(self):
- return True
- def write_bit(self, b):
- if not b: raise ValueError(b)
-
- def read_uint8(self):
- return self.unpack("!B")
- def write_uint8(self, n):
- if n < 0 or n > 255:
- raise CodecException("Cannot encode %d as uint8" % n)
- return self.pack("!B", n)
-
- def read_int8(self):
- return self.unpack("!b")
- def write_int8(self, n):
- if n < -128 or n > 127:
- raise CodecException("Cannot encode %d as int8" % n)
- self.pack("!b", n)
-
- def read_char(self):
- return self.unpack("!c")
- def write_char(self, c):
- self.pack("!c", c)
-
- def read_boolean(self):
- return self.read_uint8() != 0
- def write_boolean(self, b):
- if b: n = 1
- else: n = 0
- self.write_uint8(n)
-
-
- def read_uint16(self):
- return self.unpack("!H")
- def write_uint16(self, n):
- if n < 0 or n > 65535:
- raise CodecException("Cannot encode %d as uint16" % n)
- self.pack("!H", n)
-
- def read_int16(self):
- return self.unpack("!h")
- def write_int16(self, n):
- if n < -32768 or n > 32767:
- raise CodecException("Cannot encode %d as int16" % n)
- self.pack("!h", n)
-
-
- def read_uint32(self):
- return self.unpack("!L")
- def write_uint32(self, n):
- if n < 0 or n > 4294967295:
- raise CodecException("Cannot encode %d as uint32" % n)
- self.pack("!L", n)
-
- def read_int32(self):
- return self.unpack("!l")
- def write_int32(self, n):
- if n < -2147483648 or n > 2147483647:
- raise CodecException("Cannot encode %d as int32" % n)
- self.pack("!l", n)
-
- def read_float(self):
- return self.unpack("!f")
- def write_float(self, f):
- self.pack("!f", f)
-
- def read_sequence_no(self):
- return serial(self.read_uint32())
- def write_sequence_no(self, n):
- self.write_uint32(n.value)
-
-
- def read_uint64(self):
- return self.unpack("!Q")
- def write_uint64(self, n):
- self.pack("!Q", n)
-
- def read_int64(self):
- return self.unpack("!q")
- def write_int64(self, n):
- self.pack("!q", n)
-
- def read_datetime(self):
- return timestamp(self.read_uint64())
- def write_datetime(self, t):
- if isinstance(t, datetime.datetime):
- t = timestamp(t)
- self.write_uint64(t)
-
- def read_double(self):
- return self.unpack("!d")
- def write_double(self, d):
- self.pack("!d", d)
-
- def read_vbin8(self):
- return self.read(self.read_uint8())
- def write_vbin8(self, b):
- if isinstance(b, buffer):
- b = str(b)
- self.write_uint8(len(b))
- self.write(b)
-
- def read_str8(self):
- return self.read_vbin8().decode("utf8")
- def write_str8(self, s):
- self.write_vbin8(s.encode("utf8"))
-
- def read_str16(self):
- return self.read_vbin16().decode("utf8")
- def write_str16(self, s):
- self.write_vbin16(s.encode("utf8"))
-
- def read_str16_latin(self):
- return self.read_vbin16().decode("iso-8859-15")
- def write_str16_latin(self, s):
- self.write_vbin16(s.encode("iso-8859-15"))
-
-
- def read_vbin16(self):
- return self.read(self.read_uint16())
- def write_vbin16(self, b):
- if isinstance(b, buffer):
- b = str(b)
- self.write_uint16(len(b))
- self.write(b)
-
- def read_sequence_set(self):
- result = RangedSet()
- size = self.read_uint16()
- nranges = size/8
- while nranges > 0:
- lower = self.read_sequence_no()
- upper = self.read_sequence_no()
- result.add(lower, upper)
- nranges -= 1
- return result
- def write_sequence_set(self, ss):
- size = 8*len(ss.ranges)
- self.write_uint16(size)
- for range in ss.ranges:
- self.write_sequence_no(range.lower)
- self.write_sequence_no(range.upper)
-
- def read_vbin32(self):
- return self.read(self.read_uint32())
- def write_vbin32(self, b):
- if isinstance(b, buffer):
- b = str(b)
- self.write_uint32(len(b))
- self.write(b)
-
- def read_map(self):
- sc = StringCodec(self.read_vbin32())
- if not sc.encoded:
- return None
- count = sc.read_uint32()
- result = {}
- while sc.encoded:
- k = sc.read_str8()
- code = sc.read_uint8()
- type = PRIMITIVE[code]
- v = sc.read_primitive(type)
- result[k] = v
- return result
-
- def _write_map_elem(self, k, v):
- type = self.encoding(v)
- sc = StringCodec()
- sc.write_str8(k)
- sc.write_uint8(type.CODE)
- sc.write_primitive(type, v)
- return sc.encoded
-
- def write_map(self, m):
- sc = StringCodec()
- if m is not None:
- sc.write_uint32(len(m))
- sc.write(string.joinfields(map(self._write_map_elem, m.keys(), m.values()), ""))
- self.write_vbin32(sc.encoded)
-
- def read_array(self):
- sc = StringCodec(self.read_vbin32())
- if not sc.encoded:
- return None
- type = PRIMITIVE[sc.read_uint8()]
- count = sc.read_uint32()
- result = []
- while count > 0:
- result.append(sc.read_primitive(type))
- count -= 1
- return result
- def write_array(self, a):
- sc = StringCodec()
- if a is not None:
- if len(a) > 0:
- type = self.encoding(a[0])
- else:
- type = self.encoding(None)
- sc.write_uint8(type.CODE)
- sc.write_uint32(len(a))
- for o in a:
- sc.write_primitive(type, o)
- self.write_vbin32(sc.encoded)
-
- def read_list(self):
- sc = StringCodec(self.read_vbin32())
- if not sc.encoded:
- return None
- count = sc.read_uint32()
- result = []
- while count > 0:
- type = PRIMITIVE[sc.read_uint8()]
- result.append(sc.read_primitive(type))
- count -= 1
- return result
- def write_list(self, l):
- sc = StringCodec()
- if l is not None:
- sc.write_uint32(len(l))
- for o in l:
- type = self.encoding(o)
- sc.write_uint8(type.CODE)
- sc.write_primitive(type, o)
- self.write_vbin32(sc.encoded)
-
- def read_struct32(self):
- size = self.read_uint32()
- code = self.read_uint16()
- cls = COMPOUND[code]
- op = cls()
- self.read_fields(op)
- return op
- def write_struct32(self, value):
- self.write_compound(value)
-
- def read_compound(self, cls):
- size = self.read_size(cls.SIZE)
- if cls.CODE is not None:
- code = self.read_uint16()
- assert code == cls.CODE
- op = cls()
- self.read_fields(op)
- return op
- def write_compound(self, op):
- sc = StringCodec()
- if op.CODE is not None:
- sc.write_uint16(op.CODE)
- sc.write_fields(op)
- self.write_size(op.SIZE, len(sc.encoded))
- self.write(sc.encoded)
-
- def read_fields(self, op):
- flags = 0
- for i in range(op.PACK):
- flags |= (self.read_uint8() << 8*i)
-
- for i in range(len(op.FIELDS)):
- f = op.FIELDS[i]
- if flags & (0x1 << i):
- if COMPOUND.has_key(f.type):
- value = self.read_compound(COMPOUND[f.type])
- else:
- value = getattr(self, "read_%s" % f.type)()
- setattr(op, f.name, value)
- def write_fields(self, op):
- flags = 0
- for i in range(len(op.FIELDS)):
- f = op.FIELDS[i]
- value = getattr(op, f.name)
- if f.type == "bit":
- present = value
- else:
- present = value != None
- if present:
- flags |= (0x1 << i)
- for i in range(op.PACK):
- self.write_uint8((flags >> 8*i) & 0xFF)
- for i in range(len(op.FIELDS)):
- f = op.FIELDS[i]
- if flags & (0x1 << i):
- if COMPOUND.has_key(f.type):
- enc = self.write_compound
- else:
- enc = getattr(self, "write_%s" % f.type)
- value = getattr(op, f.name)
- enc(value)
-
- def read_size(self, width):
- if width > 0:
- attr = "read_uint%d" % (width*8)
- return getattr(self, attr)()
- def write_size(self, width, n):
- if width > 0:
- attr = "write_uint%d" % (width*8)
- getattr(self, attr)(n)
-
- def read_uuid(self):
- return UUID(bytes=self.unpack("16s"))
- def write_uuid(self, s):
- if isinstance(s, UUID):
- s = s.bytes
- self.pack("16s", s)
-
- def read_bin128(self):
- return self.unpack("16s")
- def write_bin128(self, b):
- self.pack("16s", b)
-
-
-
-class StringCodec(Codec):
-
- def __init__(self, encoded = ""):
- self.encoded = encoded
-
- def read(self, n):
- result = self.encoded[:n]
- self.encoded = self.encoded[n:]
- return result
-
- def write(self, s):
- self.encoded += s