def run(cls, filter: SessionsFilter, team: Team, *args, **kwargs) -> Tuple[List[Dict], Optional[Dict]]: "Sessions queries do post-filtering based on session recordings. This makes sure we return some data every page" limit = kwargs.get("limit", SESSIONS_LIST_DEFAULT_LIMIT) results = [] while True: page, pagination = cls(filter, team, limit=limit).fetch_page() results.extend(page) if len(results) >= limit or pagination is None: return results, pagination filter = filter.with_data({"pagination": pagination})
def set_default_dates(filter: SessionsFilter) -> SessionsFilter: data = {} if filter.session != SESSION_AVG and filter.session != SESSION_DIST: date_from = filter.date_from if not filter._date_from: date_from = timezone.now().replace(hour=0, minute=0, second=0, microsecond=0) data.update({"date_from": date_from}) if not filter._date_to: data.update( {"date_to": cast(datetime, date_from) + relativedelta(days=1)}) else: if not filter._date_from: data.update({"date_from": relative_date_parse("-7d")}) if not filter._date_to: data.update({"date_to": timezone.now()}) return filter.with_data({**data, "user_id": filter.user_id})