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)
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
def message_serialize(msg): buf = cStringIO.StringIO() msg.serialize(buf) return buf.getvalue().encode('hex_codec')