def _serialize_breakdown(self, entity: Entity, filter: Filter, team_id: int): if isinstance(filter.breakdown, list) and "all" in filter.breakdown: result = [] filter.breakdown = filter.breakdown if filter.breakdown and isinstance(filter.breakdown, list) else [] filter.breakdown.remove("all") # handle breakdown by all and by specific props separately if filter.breakdown: result.extend(self._format_breakdown_query(entity, filter, team_id)) filter.breakdown = ["all"] all_result = self._format_breakdown_query(entity, filter, team_id) result.extend(all_result) else: result = self._format_breakdown_query(entity, filter, team_id) return result
def _serialize_entity(self, entity: Entity, filter: Filter, team: Team) -> List[Dict[str, Any]]: serialized: Dict[str, Any] = { "action": entity.to_dict(), "label": entity.name, "count": 0, "data": [], "labels": [], "days": [], } if filter.breakdown: if "all" in filter.breakdown and isinstance( filter.breakdown, list): result = [] filter.breakdown = filter.breakdown if filter.breakdown and isinstance( filter.breakdown, list) else [] filter.breakdown.remove("all") if filter.breakdown: result.extend( self._format_breakdown_query(entity, filter, team)) filter.breakdown = ["all"] all_result = self._format_breakdown_query(entity, filter, team) result.extend(all_result) else: result = self._format_breakdown_query(entity, filter, team) else: result = self._format_normal_query(entity, filter, team) serialized_data = [] for queried_metric in result: serialized_copy = copy.deepcopy(serialized) serialized_copy.update(queried_metric) serialized_data.append(serialized_copy) if filter.display == TRENDS_CUMULATIVE: serialized_data = self._handle_cumulative(serialized_data) return serialized_data