From 9ff1b5f48b6155b770e0c5329da5b96e5d03943c Mon Sep 17 00:00:00 2001 From: hurturk Date: Mon, 14 Apr 2014 23:17:04 -0500 Subject: [PATCH 1/2] enforcing pickle to use copy of dict while serializing extra context of the notification --- feedly/serializers/activity_serializer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feedly/serializers/activity_serializer.py b/feedly/serializers/activity_serializer.py index 3f08bfa7..fc1f88ea 100644 --- a/feedly/serializers/activity_serializer.py +++ b/feedly/serializers/activity_serializer.py @@ -29,7 +29,7 @@ def dumps(self, activity): extra_context = activity.extra_context.copy() pickle_string = '' if extra_context: - pickle_string = pickle.dumps(activity.extra_context) + pickle_string = pickle.dumps(extra_context) parts += [activity_time, pickle_string] serialized_activity = ','.join(map(str, parts)) return serialized_activity From 1191a649118be8b15a709a291cb657f096e48aee Mon Sep 17 00:00:00 2001 From: hurturk Date: Mon, 26 May 2014 22:40:31 +0300 Subject: [PATCH 2/2] forcing pickle to generate same letter sequence --- feedly/serializers/activity_serializer.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/feedly/serializers/activity_serializer.py b/feedly/serializers/activity_serializer.py index fc1f88ea..616db68f 100644 --- a/feedly/serializers/activity_serializer.py +++ b/feedly/serializers/activity_serializer.py @@ -28,6 +28,13 @@ def dumps(self, activity): activity.object_id, activity.target_id or 0] extra_context = activity.extra_context.copy() pickle_string = '' + + # dictionaries are unsorted data structures + # however, using pickled dictionary as a key still differs by letter sequence + # this is a temporary solution works in our case + import operator + extra_context = dict(sorted(extra_context.iteritems(), key=operator.itemgetter(1))) + if extra_context: pickle_string = pickle.dumps(extra_context) parts += [activity_time, pickle_string]