Skip to content

Commit

Permalink
escape semicolons when serializing aggregated activities
Browse files Browse the repository at this point in the history
  • Loading branch information
izhan committed Jul 22, 2015
1 parent 85fdd54 commit c181fcd
Showing 1 changed file with 6 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from stream_framework.utils import epoch_to_datetime, datetime_to_epoch
from stream_framework.serializers.base import BaseAggregatedSerializer
import six
import re


class AggregatedActivitySerializer(BaseAggregatedSerializer):
Expand All @@ -23,7 +24,6 @@ class AggregatedActivitySerializer(BaseAggregatedSerializer):
#: indicates if dumps returns dehydrated aggregated activities
dehydrate = True
identifier = 'v3'
reserved_characters = [';', ',', ';;']
date_fields = ['created_at', 'updated_at', 'seen_at', 'read_at']

activity_serializer_class = ActivitySerializer
Expand Down Expand Up @@ -55,7 +55,8 @@ def dumps(self, aggregated):
else:
for activity in aggregated.activities:
serialized = activity_serializer.dumps(activity)
check_reserved(serialized, [';', ';;'])
# we use semicolons as delimiter, so need to escape
serialized = serialized.replace(";", "\;")
serialized_activities.append(serialized)

serialized_activities_part = ';'.join(serialized_activities)
Expand Down Expand Up @@ -86,8 +87,10 @@ def loads(self, serialized_aggregated):
date_value = epoch_to_datetime(float(v))
setattr(aggregated, k, date_value)

# looks for ; not \;
unescaped_semicolons_regex = re.compile("(?<=[^\\\]);")
# write the activities
serializations = parts[5].split(';')
serializations = unescaped_semicolons_regex.split(parts[5])
if self.dehydrate:
activity_ids = list(map(int, serializations))
aggregated._activity_ids = activity_ids
Expand Down

0 comments on commit c181fcd

Please sign in to comment.