From 40c3ac19208d97a28f4f14b4b67315b1746675da Mon Sep 17 00:00:00 2001 From: Sandy Walsh Date: Thu, 29 May 2014 20:13:51 +0000 Subject: [PATCH] Proper unicode support for metadata. Json doesn't need it --- shoebox/disk_storage.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/shoebox/disk_storage.py b/shoebox/disk_storage.py index 07dd0c7..6234152 100644 --- a/shoebox/disk_storage.py +++ b/shoebox/disk_storage.py @@ -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))