Proper unicode support for metadata. Json doesn't need it

This commit is contained in:
Sandy Walsh 2014-05-29 20:13:51 +00:00
parent 90b6a5baef
commit 40c3ac1920
1 changed files with 9 additions and 0 deletions

View File

@ -83,6 +83,11 @@ class Version1(Version0):
self.header_schema = "iii"
self.header_size = struct.calcsize(self.header_schema)
def _encode(self, s):
if isinstance(s, unicode):
return s.encode('utf-8')
return s
def pack(self, notification, metadata):
nsize = len(notification)
raw_block_schema = "i%ds" % nsize
@ -91,12 +96,16 @@ class Version1(Version0):
metadata_items = ["i"] # appended with N "%ds"'s
metadata_values = [len(metadata) * 4] # [n]=key, [n+1]=value
for key, value in metadata.iteritems():
key = self._encode(key)
value = self._encode(value)
metadata_items.append("i")
metadata_items.append("i")
metadata_values.append(len(key))
metadata_values.append(len(value))
for key, value in metadata.iteritems():
key = self._encode(key)
value = self._encode(value)
metadata_items.append("%ds" % len(key))
metadata_values.append(key)
metadata_items.append("%ds" % len(value))