def _parse(result: List) -> List: parsed_results = [] for idx, stats in enumerate(result): result_descriptors = self._breakdown_result_descriptors( stats[1], filter, entity) filter_params = filter.to_params() extra_params = { "entity_id": entity.id, "entity_type": entity.type, "breakdown_value": result_descriptors["breakdown_value"], "breakdown_type": filter.breakdown_type or "event", } parsed_params: Dict[str, str] = encode_get_request_params({ **filter_params, **extra_params }) parsed_result = { "aggregated_value": stats[0], "filter": filter_params, "persons": { "filter": extra_params, "url": f"api/projects/{self.team_id}/actions/people/?{urllib.parse.urlencode(parsed_params)}", }, **result_descriptors, **additional_values, } parsed_results.append(parsed_result) return parsed_results
def _get_persons_url( self, filter: Filter, entity: Entity, team_id: int, dates: List[str], breakdown_value: Union[str, int]) -> List[Dict[str, Any]]: persons_url = [] for date in dates: filter_params = filter.to_params() extra_params = { "entity_id": entity.id, "entity_type": entity.type, "entity_math": entity.math, "date_from": filter.date_from if filter.display == TRENDS_CUMULATIVE else date, "date_to": date, "breakdown_value": breakdown_value, "breakdown_type": filter.breakdown_type or "event", } parsed_params: Dict[str, str] = encode_get_request_params({ **filter_params, **extra_params }) persons_url.append({ "filter": extra_params, "url": f"api/projects/{team_id}/actions/people/?{urllib.parse.urlencode(parsed_params)}", }) return persons_url
def _parse(result: List) -> List: _, seconds_in_interval, _ = get_time_diff(filter.interval, filter.date_from, filter.date_to, team_id=team_id) time_range = enumerate_time_range(filter, seconds_in_interval) filter_params = filter.to_params() extra_params = { "entity_id": entity.id, "entity_type": entity.type, "entity_math": entity.math } parsed_params: Dict[str, str] = encode_get_request_params({ **filter_params, **extra_params }) return [{ "aggregated_value": result[0][0] if result and len(result) else 0, "days": time_range, "filter": filter_params, "persons": { "filter": extra_params, "url": f"api/projects/{team_id}/actions/people/?{urllib.parse.urlencode(parsed_params)}", }, }]
def get_retention_people(client: Client, team_id: int, request: RetentionRequest): return client.get( f"/api/person/retention/", # NOTE: for get requests we need to JSON encode non-scalars data=encode_get_request_params(asdict(request)), )
def get_stickiness_people_ok(client: Client, team_id: int, request: Dict[str, Any]): response = get_stickiness_people( client=client, team_id=team_id, request=encode_get_request_params(data=request)) assert response.status_code == 200 return response.json()
def _get_persons_url(self, filter: StickinessFilter, entity: Entity) -> List[Dict[str, Any]]: persons_url = [] for interval_idx in range(1, filter.total_intervals): filter_params = filter.to_params() extra_params = { "stickiness_days": interval_idx, "entity_id": entity.id, "entity_type": entity.type, "entity_math": entity.math, } parsed_params: Dict[str, str] = encode_get_request_params({ **filter_params, **extra_params }) persons_url.append({ "filter": extra_params, "url": f"api/person/stickiness/?{urllib.parse.urlencode(parsed_params)}", }) return persons_url
def get_retention(client: Client, team_id: int, request: RetentionRequest): return client.get( f"/api/projects/{team_id}/insights/retention/", # NOTE: for get requests we need to JSON encode non-scalars data=encode_get_request_params(asdict(request)), )
def to_params(self) -> Dict[str, str]: return encode_get_request_params(data=self.to_dict())