示例#1
0
    def update(self, entry, metadata=None, msg=None):
        """
        Update a message and/or metadata.

        @param entry: The existing metadata entry
        @param metadata: Updates to metadata.  These are merged with the existing dictionary entries.
        @param msg: If specified, a new message object to store in place of the current one.
        """
        old_blob_id = None
        if msg:
            buf = StringIO.StringIO()
            msg.serialize(buf)
            v = buf.getvalue()
            new_msg_id = self.fs.put(v)
            old_blob_id = entry['blob_id']
            entry['blob_id'] = new_msg_id
        if metadata:
            entry.update(metadata)
        self.coll.save(entry, safe=True)
        if old_blob_id:
            self.fs.delete(old_blob_id)
    def update(self, entry, metadata=None, msg=None):
        """
        Update a message and/or metadata.

        @param entry: The existing metadata entry
        @param metadata: Updates to metadata.  These are merged with the existing dictionary entries.
        @param msg: If specified, a new message object to store in place of the current one.
        """
        old_blob_id = None
        if msg:
            buf = StringIO.StringIO()
            msg.serialize(buf)
            v = buf.getvalue()
            new_msg_id = self.fs.put(v)
            old_blob_id = entry["blob_id"]
            entry["blob_id"] = new_msg_id
        if metadata:
            entry.update(metadata)
        self.coll.save(entry, safe=True)
        if old_blob_id:
            self.fs.delete(old_blob_id)
示例#3
0
    def publish(self, id, msg, islog=False):
        buff = StringIO()
        buff.seek(11)
        l = msg.serialize(buff)
        buff.seek(0)
        struct_data = struct.Struct("<B")
        buff.write(struct_data.pack(0xFF))
        buff.write(struct_data.pack(NodeHandle.PROTOCOL_VER))
        buff.write(struct_data.pack((l >> 0) & 0xFF))
        buff.write(struct_data.pack((l >> 8) & 0xFF))
        buff.write(struct_data.pack((l >> 16) & 0xFF))
        buff.write(struct_data.pack((l >> 24) & 0xFF))
        chk = 255 - ((((l >> 0) & 0xFF) + ((l >> 8) & 0xFF) +
                      ((l >> 16) & 0xFF) + ((l >> 24) & 0xFF)) % 256)
        buff.write(struct_data.pack(chk))
        buff.write(struct_data.pack((id >> 0) & 0xFF))
        buff.write(struct_data.pack((id >> 8) & 0xFF))
        buff.write(struct_data.pack((id >> 16) & 0xFF))
        buff.write(struct_data.pack((id >> 24) & 0xFF))

        buff.seek(7)
        x = buff.read()
        size = len(x)
        chk = 0
        for i in range(0, size):
            (data, ) = struct_data.unpack(x[i:i + 1])
            chk += data
        chk = 255 - (chk % 256)
        buff.seek(l + 11)
        buff.write(struct_data.pack(chk))
        buff.seek(0)

        if l <= NodeHandleBase.OUTPUT_SIZE:
            l = -1
            if not islog:
                if self.hardware_ != None:
                    l = self.hardware_.write(buff.read())
            else:
                if self.loghd_ != None:
                    l = self.loghd_.write(buff.read())
            return l
        else:
            return -2
示例#4
0
def message_serialize(msg):
    buf = cStringIO.StringIO()
    msg.serialize(buf)
    return buf.getvalue().encode('hex_codec')
示例#5
0
def message_serialize(msg):
    buf = cStringIO.StringIO()
    msg.serialize(buf)
    return buf.getvalue().encode('hex_codec')