diff --git a/snippets/base/models.py b/snippets/base/models.py index 24d1c8dfc..9dd74d627 100644 --- a/snippets/base/models.py +++ b/snippets/base/models.py @@ -139,6 +139,7 @@ def key(self): # being sent. key_properties = ['{id}-{date}'.format(id=snippet.id, date=snippet.modified.isoformat()) for snippet in self.snippets] + key_properties.extend([ self.client.startpage_version, self.client.locale, @@ -148,8 +149,8 @@ def key(self): SNIPPET_FETCH_TEMPLATE_HASH, ]) - key_string = u'_'.join(unicode(prop) for prop in key_properties) - return hashlib.sha1(key_string).hexdigest() + key_string = u'_'.join(key_properties) + return hashlib.sha1(key_string.encode('utf-8')).hexdigest() @property def cache_key(self): diff --git a/snippets/base/tests/test_models.py b/snippets/base/tests/test_models.py index 293a00367..a75c8ef86 100644 --- a/snippets/base/tests/test_models.py +++ b/snippets/base/tests/test_models.py @@ -384,6 +384,14 @@ def test_key_snippets(self): self.assertNotEqual(bundle1.key, bundle2.key) + def test_key_funny_characters(self): + """ + bundle.key should generate even when client contains strange unicode + characters + """ + client = self._client(channel=u'release-cck- \xe2\x80\x9cubuntu\xe2\x80\x9d') + SnippetBundle(client).key + def test_key_startpage_version(self): """ bundle.key must be different between bundles if they have