[svn] commit: r85 - in /experiments/graff-ccapi/python: ISC/CC/__init__.py ISC/CC/message.py ISC/CC/session.py test.py

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Oct 12 15:39:24 UTC 2009


Author: mgraff
Date: Mon Oct 12 15:39:24 2009
New Revision: 85

Log:
classless

Modified:
    experiments/graff-ccapi/python/ISC/CC/__init__.py
    experiments/graff-ccapi/python/ISC/CC/message.py
    experiments/graff-ccapi/python/ISC/CC/session.py
    experiments/graff-ccapi/python/test.py

Modified: experiments/graff-ccapi/python/ISC/CC/__init__.py
==============================================================================
--- experiments/graff-ccapi/python/ISC/CC/__init__.py (original)
+++ experiments/graff-ccapi/python/ISC/CC/__init__.py Mon Oct 12 15:39:24 2009
@@ -1,2 +1,2 @@
-from message import *
+import message
 from session import *

Modified: experiments/graff-ccapi/python/ISC/CC/message.py
==============================================================================
--- experiments/graff-ccapi/python/ISC/CC/message.py (original)
+++ experiments/graff-ccapi/python/ISC/CC/message.py Mon Oct 12 15:39:24 2009
@@ -18,178 +18,177 @@
 
 class DecodeError(Exception): pass
 
-class Message:
-    PROTOCOL_VERSION = 0x536b616e
+PROTOCOL_VERSION = 0x536b616e
 
-    _ITEM_DATA = 0x01
-    _ITEM_HASH = 0x02
-    _ITEM_LIST = 0x03
-    _ITEM_NULL = 0x04
-    _ITEM_MASK = 0x0f
+_ITEM_DATA = 0x01
+_ITEM_HASH = 0x02
+_ITEM_LIST = 0x03
+_ITEM_NULL = 0x04
+_ITEM_MASK = 0x0f
 
-    _ITEM_LENGTH_32   = 0x00
-    _ITEM_LENGTH_16   = 0x10
-    _ITEM_LENGTH_8    = 0x20
-    _ITEM_LENGTH_MASK = 0x30
+_ITEM_LENGTH_32   = 0x00
+_ITEM_LENGTH_16   = 0x10
+_ITEM_LENGTH_8    = 0x20
+_ITEM_LENGTH_MASK = 0x30
 
-    def to_wire(self, items):
-        """Encode a dict into wire format.
-        >>> cc = Message()
-        ... wire = to_wire({"a": "b"})
-        """
-        ret = []
-        ret.append(struct.pack(">I", self.PROTOCOL_VERSION))
-        ret.append(self._encode_hash(items))
-        return (''.join(ret))
+def to_wire(items):
+    """Encode a dict into wire format.
+    >>> cc = Message()
+    ... wire = to_wire({"a": "b"})
+    """
+    ret = []
+    ret.append(struct.pack(">I", PROTOCOL_VERSION))
+    ret.append(_encode_hash(items))
+    return (''.join(ret))
 
-    def _encode_tag(self, tag):
-        """Encode a single UTF-8 tag.
-        >>> cc = Message()
-        ... wire_partial = cc._encode_tag('this')
-        """
-        return(struct.pack(">B", len(str(tag))) + str(tag))
+def _encode_tag(tag):
+    """Encode a single UTF-8 tag.
+    >>> cc = Message()
+    ... wire_partial = cc._encode_tag('this')
+    """
+    return(struct.pack(">B", len(str(tag))) + str(tag))
 
-    def _encode_length_and_type(self, data, datatype):
-        """Helper method to handle the length encoding in one place."""
-        if data == None:
-            return(struct.pack(">B", self._ITEM_NULL))
-        length = len(data)
-        if length < 0x0000100:
-            return(struct.pack(">B B", datatype | self._ITEM_LENGTH_8, length)
-                   + data)
-        elif length < 0x00010000:
-            return(struct.pack(">B H", datatype | self._ITEM_LENGTH_16, length)
-                   + data)
-        else:
-            return(struct.pack(">B I", datatype, length) + data)
+def _encode_length_and_type(data, datatype):
+    """Helper method to handle the length encoding in one place."""
+    if data == None:
+        return(struct.pack(">B", _ITEM_NULL))
+    length = len(data)
+    if length < 0x0000100:
+        return(struct.pack(">B B", datatype | _ITEM_LENGTH_8, length)
+               + data)
+    elif length < 0x00010000:
+        return(struct.pack(">B H", datatype | _ITEM_LENGTH_16, length)
+               + data)
+    else:
+        return(struct.pack(">B I", datatype, length) + data)
 
-    def _pack_string(self, item):
-        """Pack a string (data) and its type/length prefix."""
-        return (self._encode_length_and_type(item, self._ITEM_DATA))
+def _pack_string(item):
+    """Pack a string (data) and its type/length prefix."""
+    return (_encode_length_and_type(item, _ITEM_DATA))
 
-    def _pack_array(self, item):
-        """Pack a list (array) and its type/length prefix."""
-        return (self._encode_length_and_type(self._encode_array(item),
-                                             self._ITEM_LIST))
+def _pack_array(item):
+    """Pack a list (array) and its type/length prefix."""
+    return (_encode_length_and_type(_encode_array(item),
+                                         _ITEM_LIST))
 
-    def _pack_hash(self, item):
-        """Pack a dict (hash) and its type/length prefix."""
-        data = self._encode_hash(item)
-        return (self._encode_length_and_type(data, self._ITEM_HASH))
+def _pack_hash(item):
+    """Pack a dict (hash) and its type/length prefix."""
+    data = _encode_hash(item)
+    return (_encode_length_and_type(data, _ITEM_HASH))
 
-    def _encode_string(self, item):
-        """Encode a string.  More or less identity."""
-        return (item)
+def _encode_string(item):
+    """Encode a string.  More or less identity."""
+    return (item)
 
-    def _pack_nil(self):
-        """Encode a nil (NULL, None) item."""
-        return self._encode_length_and_type(None, None)
+def _pack_nil():
+    """Encode a nil (NULL, None) item."""
+    return _encode_length_and_type(None, None)
 
-    def _encode_item(self, item):
-        """Encode each item depending on its type"""
-        if item == None:
-            return (self._pack_nil())
-        elif type(item) == dict:
-            return (self._pack_hash(item))
-        elif type(item) == list:
-            return (self._pack_array(item))
-        else:
-            return (self._pack_string(str(item)))
+def _encode_item(item):
+    """Encode each item depending on its type"""
+    if item == None:
+        return (_pack_nil())
+    elif type(item) == dict:
+        return (_pack_hash(item))
+    elif type(item) == list:
+        return (_pack_array(item))
+    else:
+        return (_pack_string(str(item)))
 
-    def _encode_array(self, item):
-        """Encode an array, where each value is encoded recursively"""
-        ret = []
-        for i in item:
-            ret.append(self._encode_item(i))
-        return (''.join(ret))
+def _encode_array(item):
+    """Encode an array, where each value is encoded recursively"""
+    ret = []
+    for i in item:
+        ret.append(_encode_item(i))
+    return (''.join(ret))
 
-    def _encode_hash(self, item):
-        """Encode a hash, where each value is encoded recursively"""
+def _encode_hash(item):
+    """Encode a hash, where each value is encoded recursively"""
 
-        ret = []
-        for key, value in item.items():
-            ret.append(self._encode_tag(key))
-            ret.append(self._encode_item(value))
-        return (''.join(ret))
+    ret = []
+    for key, value in item.items():
+        ret.append(_encode_tag(key))
+        ret.append(_encode_item(value))
+    return (''.join(ret))
 
-    #
-    # decode methods
-    #
+#
+# decode methods
+#
 
-    def from_wire(self, data):
-        if len(data) < 5:
-            raise DecodeError("Data is too short to decode")
-        wire_version, data = data[0:4], data[4:]
-        wire_version = struct.unpack(">I", wire_version)[0]
-        if wire_version != self.PROTOCOL_VERSION:
-            raise DecodeError("Incorrect protocol version")
-        return self._decode_hash(data)
+def from_wire(data):
+    if len(data) < 5:
+        raise DecodeError("Data is too short to decode")
+    wire_version, data = data[0:4], data[4:]
+    wire_version = struct.unpack(">I", wire_version)[0]
+    if wire_version != PROTOCOL_VERSION:
+        raise DecodeError("Incorrect protocol version")
+    return _decode_hash(data)
 
-    def _decode_tag(self, data):
-        if len(data) < 1:
+def _decode_tag(data):
+    if len(data) < 1:
+        raise DecodeError("Data underrun while decoding")
+    length = struct.unpack(">B", data[0])[0]
+    if len(data) - 1 < length:
+        raise DecodeError("Data underrun while decoding")
+    return [data[1:length + 1], data[length + 1:]]
+
+def _decode_item(data):
+    if len(data) < 1:
+        raise DecodeError("Data underrun while decoding")
+    type_and_length_format = struct.unpack(">B", data[0])[0]
+    item_type = type_and_length_format & _ITEM_MASK
+    length_format = type_and_length_format & _ITEM_LENGTH_MASK
+
+    if item_type == _ITEM_NULL:
+        data = data[1:]
+    else:
+        if length_format == _ITEM_LENGTH_8:
+            if len(data) - 1 < 1:
+                raise DecodeError("Data underrun while decoding")
+            length = struct.unpack(">B", data[1])[0]
+            data = data[2:]
+        elif length_format == _ITEM_LENGTH_16:
+            if len(data) - 1 < 2:
+                raise DecodeError("Data underrun while decoding")
+            length = struct.unpack(">H", data[1:3])[0]
+            data = data[3:]
+        elif length_format == _ITEM_LENGTH_32:
+            if len(data) - 1 < 4:
+                raise DecodeError("Data underrun while decoding")
+            length = struct.unpack(">I", data[1:5])[0]
+            data = data[5:]
+        if len(data) < length:
             raise DecodeError("Data underrun while decoding")
-        length = struct.unpack(">B", data[0])[0]
-        if len(data) - 1 < length:
-            raise DecodeError("Data underrun while decoding")
-        return [data[1:length + 1], data[length + 1:]]
+        item = data[0:length]
+        data = data[length:]
 
-    def _decode_item(self, data):
-        if len(data) < 1:
-            raise DecodeError("Data underrun while decoding")
-        type_and_length_format = struct.unpack(">B", data[0])[0]
-        item_type = type_and_length_format & self._ITEM_MASK
-        length_format = type_and_length_format & self._ITEM_LENGTH_MASK
+    if item_type == _ITEM_DATA:
+        value = item
+    elif item_type == _ITEM_HASH:
+        value = _decode_hash(item)
+    elif item_type == _ITEM_LIST:
+        value = _decode_array(item)
+    elif item_type == _ITEM_NULL:
+        value = None
+    else:
+        raise DecodeError("Unknown item type in decode: %02x" % item_type)
 
-        if item_type == self._ITEM_NULL:
-            data = data[1:]
-        else:
-            if length_format == self._ITEM_LENGTH_8:
-                if len(data) - 1 < 1:
-                    raise DecodeError("Data underrun while decoding")
-                length = struct.unpack(">B", data[1])[0]
-                data = data[2:]
-            elif length_format == self._ITEM_LENGTH_16:
-                if len(data) - 1 < 2:
-                    raise DecodeError("Data underrun while decoding")
-                length = struct.unpack(">H", data[1:3])[0]
-                data = data[3:]
-            elif length_format == self._ITEM_LENGTH_32:
-                if len(data) - 1 < 4:
-                    raise DecodeError("Data underrun while decoding")
-                length = struct.unpack(">I", data[1:5])[0]
-                data = data[5:]
-            if len(data) < length:
-                raise DecodeError("Data underrun while decoding")
-            item = data[0:length]
-            data = data[length:]
+    return (value, data)
 
-        if item_type == self._ITEM_DATA:
-            value = item
-        elif item_type == self._ITEM_HASH:
-            value = self._decode_hash(item)
-        elif item_type == self._ITEM_LIST:
-            value = self._decode_array(item)
-        elif item_type == self._ITEM_NULL:
-            value = None
-        else:
-            raise DecodeError("Unknown item type in decode: %02x" % item_type)
+def _decode_hash(data):
+    ret = {}
+    while len(data) > 0:
+        tag, data = _decode_tag(data)
+        value, data = _decode_item(data)
+        ret[tag] = value
+    return ret
 
-        return (value, data)
-
-    def _decode_hash(self, data):
-        ret = {}
-        while len(data) > 0:
-            tag, data = self._decode_tag(data)
-            value, data = self._decode_item(data)
-            ret[tag] = value
-        return ret
-
-    def _decode_array(self, data):
-        ret = []
-        while len(data) > 0:
-            value, data = self._decode_item(data)
-            ret.append(value)
-        return ret
+def _decode_array(data):
+    ret = []
+    while len(data) > 0:
+        value, data = _decode_item(data)
+        ret.append(value)
+    return ret
 
 if __name__ == "__main__":
     import doctest

Modified: experiments/graff-ccapi/python/ISC/CC/session.py
==============================================================================
--- experiments/graff-ccapi/python/ISC/CC/session.py (original)
+++ experiments/graff-ccapi/python/ISC/CC/session.py Mon Oct 12 15:39:24 2009
@@ -17,7 +17,7 @@
 import socket
 import struct
 
-from message import Message
+import message
 
 class ProtocolError(Exception): pass
 
@@ -45,8 +45,7 @@
 
     def sendmsg(self, msg):
         if type(msg) == dict:
-            m = Message()
-            msg = m.to_wire(msg)
+            msg = message.to_wire(msg)
         self._socket.setblocking(1)
         self._socket.send(struct.pack("!I", len(msg)))
         self._socket.send(msg)
@@ -54,8 +53,7 @@
     def recvmsg(self, nonblock = True):
         data = self._receive_full_buffer(nonblock)
         if data:
-            m = Message()
-            return m.from_wire(data)
+            return message.from_wire(data)
         return None
 
     def _receive_full_buffer(self, nonblock):
@@ -110,7 +108,6 @@
         })
 
     def group_sendmsg(self, msg, group, instance = "*", to = "*"):
-        m = Message()
         self.sendmsg({
             "type": "send",
             "from": self._lname,
@@ -118,15 +115,14 @@
             "group": group,
             "instance": instance,
             "seq": self._next_sequence(),
-            "msg": m.to_wire(msg),
+            "msg": message.to_wire(msg),
         })
 
     def group_recvmsg(self, nonblock = True):
         msg = self.recvmsg(nonblock)
         if msg == None:
             return None
-        m = Message()
-        data = m.from_wire(msg["msg"])
+        data = message.from_wire(msg["msg"])
         return (data, msg)
 
 if __name__ == "__main__":

Modified: experiments/graff-ccapi/python/test.py
==============================================================================
--- experiments/graff-ccapi/python/test.py (original)
+++ experiments/graff-ccapi/python/test.py Mon Oct 12 15:39:24 2009
@@ -1,16 +1,14 @@
 import ISC
-
-m = ISC.CC.Message()
 
 ss = { "list": [ 1, 2, 3 ],
        "hash": { "hash1": 1, "hash2": 2 },
        "none": None,
        "string": "samplestring" }
 
-s = m.to_wire(ss)
+s = ISC.CC.message.to_wire(ss)
 ISC.Util.hexdump(s)
 
-print m.from_wire(s)
+print ISC.CC.message.from_wire(s)
 
 tcp = ISC.CC.Session()
 print tcp.lname




More information about the bind10-changes mailing list