def get_many_from_database(self, missing_keys): ''' Return a dictionary with the serialized values for the missing keys ''' database_results = {} if missing_keys: from entity.models import Love ids = [k.split(',') for k in missing_keys] love_ids = [int(love_id) for verb_id, love_id in ids] values = Love.objects.filter(id__in=love_ids).values_list( 'id', 'user_id', 'created_at', 'entity_id', 'influencer_id') for value_tuple in values: love_id = int(value_tuple[0]) user_id, created_at, entity_id, influencer_id = value_tuple[1:] # influencer_id can sometimes be none if influencer_id: influencer_id = int(influencer_id) love = Love(user_id=int(user_id), created_at=created_at, entity_id=entity_id, id=love_id, influencer_id=influencer_id) activity = love.create_activity() serializer = LoveActivitySerializer() serialized_activity = serializer.dumps(activity) key = ','.join(map(str, [LoveVerb.id, love_id])) database_results[key] = serialized_activity return database_results
def get_many_from_database(self, missing_keys): ''' Return a dictionary with the serialized values for the missing keys ''' database_results = {} if missing_keys: from entity.models import Love ids = [k.split(',') for k in missing_keys] love_ids = [int(love_id) for verb_id, love_id in ids] values = Love.objects.filter(id__in=love_ids).values_list( 'id', 'user_id', 'created_at', 'entity_id', 'influencer_id') for value_tuple in values: love_id = int(value_tuple[0]) user_id, created_at, entity_id, influencer_id = value_tuple[1:] # influencer_id can sometimes be none if influencer_id: influencer_id = int(influencer_id) love = Love(user_id=int(user_id), created_at=created_at, entity_id=entity_id, id=love_id, influencer_id=influencer_id) activity = love.create_activity() serializer = LoveActivitySerializer() serialized_activity = serializer.dumps(activity) key = ','.join(map(str, [LoveVerb.id, love_id])) database_results[key] = serialized_activity return database_results
def set_item_cache(cls, activity): ''' Called outside the normal add cycle to make sure we only do this once during a fanout event ''' key = activity.serialization_id serializer = LoveActivitySerializer() value = serializer.dumps(activity) item_cache = LoveFeedItemCache('global') item_cache.set(key, value)
def set_item_cache(cls, activity): ''' Called outside the normal add cycle to make sure we only do this once during a fanout event ''' key = activity.serialization_id serializer = LoveActivitySerializer() value = serializer.dumps(activity) item_cache = LoveFeedItemCache('global') item_cache.set(key, value)
def loads(self, serialized_aggregated): try: serialized_aggregated = serialized_aggregated[2:] parts = serialized_aggregated.split(';;') # start with the group group = parts[0] aggregated = self.aggregated_class(group) # get the date and activities date_dict = dict(zip(self.date_fields, parts[1:5])) for k, v in date_dict.items(): date_value = None if v != '-1': date_value = epoch_to_datetime(float(v)) setattr(aggregated, k, date_value) # write the activities serializations = parts[5].split(';') activities = [LoveActivitySerializer.loads(self, s) for s in serializations] aggregated.activities = activities # write the minimized activities minimized = int(parts[6]) aggregated.minimized_activities = minimized return aggregated except Exception, e: msg = unicode(e) raise SerializationException(msg)
def dumps(self, aggregated): #start by storing the group parts = [aggregated.group] check_reserved(aggregated.group, [';;']) #store the dates for date_field in self.date_fields: value = getattr(aggregated, date_field) epoch = datetime_to_epoch(value) if value is not None else -1 parts += [epoch] # add the activities serialization serialized_activities = [] for activity in aggregated.activities: serialized = LoveActivitySerializer.dumps(self, activity) check_reserved(serialized, [';', ';;']) serialized_activities.append(serialized) serialized_activities_part = ';'.join(serialized_activities) parts.append(serialized_activities_part) # add the minified activities parts.append(aggregated.minimized_activities) # stick everything together serialized_aggregated = ';;'.join(map(str, parts)) serialized = '%s%s' % (self.identifier, serialized_aggregated) return serialized
def loads(self, serialized_aggregated): try: serialized_aggregated = serialized_aggregated[2:] parts = serialized_aggregated.split(';;') # start with the group group = parts[0] aggregated = self.aggregated_class(group) # get the date and activities date_dict = dict(zip(self.date_fields, parts[1:5])) for k, v in date_dict.items(): date_value = None if v != '-1': date_value = epoch_to_datetime(float(v)) setattr(aggregated, k, date_value) # write the activities serializations = parts[5].split(';') activities = [ LoveActivitySerializer.loads(self, s) for s in serializations ] aggregated.activities = activities # write the minimized activities minimized = int(parts[6]) aggregated.minimized_activities = minimized return aggregated except Exception, e: msg = unicode(e) raise SerializationException(msg)
def dumps(self, aggregated): #start by storing the group parts = [aggregated.group] check_reserved(aggregated.group, [';;']) #store the dates for date_field in self.date_fields: value = getattr(aggregated, date_field) epoch = datetime_to_epoch(value) if value is not None else -1 parts += [epoch] # add the activities serialization serialized_activities = [] for activity in aggregated.activities: serialized = LoveActivitySerializer.dumps(self, activity) check_reserved(serialized, [';', ';;']) serialized_activities.append(serialized) serialized_activities_part = ';'.join(serialized_activities) parts.append(serialized_activities_part) # add the minified activities parts.append(aggregated.minimized_activities) # stick everything together serialized_aggregated = ';;'.join(map(str, parts)) serialized = '%s%s' % (self.identifier, serialized_aggregated) return serialized
def loads(self, serialized_aggregated): aggregated_kwargs = serialized_aggregated.__dict__.copy() serializations = pickle.loads(aggregated_kwargs.pop('aggregated_activities')) aggregated = self.aggregated_class(aggregated_kwargs.pop('group')) aggregated.__dict__.update(aggregated_kwargs) activities = [LoveActivitySerializer.loads(self, s) for s in serializations] aggregated.activities = activities return aggregated
def test_love_activity_serializer(self): love_serializer = LoveActivitySerializer() self._test_activity_serializer(love_serializer)