def _process_compare(self, compare: Optional[Union[str, bool]]) -> bool: if isinstance(compare, bool): return compare elif isinstance(compare, str): return str_to_bool(compare) else: return False
def _filter_request(self, request: request.Request, queryset: QuerySet) -> QuerySet: filters = request.GET.dict() for key in filters: if key == "saved": if str_to_bool(request.GET["saved"]): queryset = queryset.filter( Q(saved=True) | Q(dashboard__isnull=False)) else: queryset = queryset.filter(Q(saved=False)) elif key == "user": queryset = queryset.filter(created_by=request.user) elif key == "favorited": queryset = queryset.filter(Q(favorited=True)) elif key == "date_from": queryset = queryset.filter(updated_at__gt=relative_date_parse( request.GET["date_from"])) elif key == "date_to": queryset = queryset.filter( updated_at__lt=relative_date_parse(request.GET["date_to"])) elif key == INSIGHT: queryset = queryset.filter( filters__insight=request.GET[INSIGHT]) elif key == "search": queryset = queryset.filter( name__icontains=request.GET["search"]) return queryset
def get_serializer_class(self) -> Type[serializers.BaseSerializer]: if (self.action == "list" or self.action == "retrieve") and str_to_bool( self.request.query_params.get("basic", "0"), ): return InsightBasicSerializer return super().get_serializer_class()
def process_bool(bool_to_test: Optional[Union[str, bool]]) -> bool: if isinstance(bool_to_test, bool): return bool_to_test elif isinstance(bool_to_test, str): return str_to_bool(bool_to_test) else: return False
def cast_str_to_desired_type(str_value: str, target_type: type) -> Any: if target_type == int: return int(str_value) if target_type == bool: return str_to_bool(str_value) return str_value
def _filter_request(self, request: request.Request, queryset: QuerySet) -> QuerySet: filters = request.GET.dict() for key in filters: if key == "after": queryset = queryset.filter(created_at__gt=request.GET["after"]) elif key == "before": queryset = queryset.filter( created_at__lt=request.GET["before"]) elif key == "dashboardItemId": queryset = queryset.filter( dashboard_item_id=request.GET["dashboardItemId"]) elif key == "scope": queryset = queryset.filter(scope=request.GET["scope"]) elif key == "apply_all": queryset_method = queryset.exclude if str_to_bool( request.GET["apply_all"]) else queryset.filter queryset = queryset_method(scope="dashboard_item") elif key == "deleted": queryset = queryset.filter( deleted=str_to_bool(request.GET["deleted"])) return queryset
def _filter_request(self, request: request.Request, queryset: QuerySet) -> QuerySet: filters = request.GET.dict() for key in filters: if key == "saved": if str_to_bool(request.GET["saved"]): queryset = queryset.filter(Q(saved=True) | Q(dashboard__isnull=False)) else: queryset = queryset.filter(Q(saved=False)) elif key == "user": queryset = queryset.filter(created_by=request.user) elif key == INSIGHT: queryset = queryset.filter(filters__insight=request.GET[INSIGHT]) return queryset
def get_queryset(self) -> QuerySet: queryset = super().get_queryset() filters = self.request.GET.dict() if self.action == "list" and "deleted" not in filters: queryset = queryset.filter(deleted=False) for key in filters: if key == "insight": queryset = queryset.filter(insight_id=filters["insight"]) if key == "dashboard": queryset = queryset.filter(dashboard_id=filters["dashboard"]) elif key == "deleted": queryset = queryset.filter(deleted=str_to_bool(filters["deleted"])) return queryset
def drop_off(self) -> Optional[bool]: drop_off_raw = self._data.get(DROP_OFF) return str_to_bool(str(drop_off_raw)) if drop_off_raw is not None else None