Пример #1
0
        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
Пример #2
0
 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
Пример #3
0
        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)}",
                },
            }]
Пример #4
0
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)),
    )
Пример #5
0
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()
Пример #6
0
 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
Пример #7
0
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)),
    )
Пример #8
0
 def to_params(self) -> Dict[str, str]:
     return encode_get_request_params(data=self.to_dict())