def get(self, request, organization): """ Retrieve an Organization's Dashboards ````````````````````````````````````` Retrieve a list of dashboards that are associated with the given organization. If on the first page, this endpoint will also include any pre-built dashboards that haven't been replaced or removed. :pparam string organization_slug: the slug of the organization the dashboards belongs to. :qparam string query: the title of the dashboard being searched for. :auth: required """ if not features.has("organizations:dashboards-basic", organization, actor=request.user): return Response(status=404) dashboards = Dashboard.objects.filter( organization_id=organization.id).select_related("created_by") query = request.GET.get("query") if query: dashboards = dashboards.filter(title__icontains=query) dashboards = dashboards.order_by("title") prebuilt = Dashboard.get_prebuilt_list(organization, query) list_serializer = DashboardListSerializer() def handle_results(results): serialized = [] dashboards = [] for item in results: if isinstance(item, dict): cloned = item.copy() widgets = cloned.pop("widgets", []) cloned["widgetDisplay"] = [ w["displayType"] for w in widgets ] serialized.append(cloned) else: dashboards.append(item) serialized.extend( serialize(dashboards, request.user, serializer=list_serializer)) return serialized return self.paginate( request=request, sources=[prebuilt, dashboards], paginator_cls=ChainPaginator, on_results=handle_results, )
def test_get_default_overview_has_widget_preview_field(self): response = self.do_request("get", self.url) assert response.status_code == 200, response.content assert "default-overview" == response.data[0]["id"] default_overview_data = Dashboard.get_prebuilt("default-overview") default_overview = response.data[0] assert default_overview["widgetPreview"] == [{ "displayType": w["displayType"], "layout": None } for w in default_overview_data["widgets"]]
def get(self, request, organization): """ Retrieve an Organization's Dashboards ````````````````````````````````````` Retrieve a list of dashboards that are associated with the given organization. If on the first page, this endpoint will also include any pre-built dashboards that haven't been replaced or removed. :pparam string organization_slug: the slug of the organization the dashboards belongs to. :qparam string query: the title of the dashboard being searched for. :auth: required """ dashboards = Dashboard.objects.filter(organization_id=organization.id) query = request.GET.get("query") if query: dashboards = dashboards.filter(title__icontains=query) dashboards = dashboards.order_by("title") prebuilt = Dashboard.get_prebuilt_list(organization, query) list_serializer = DashboardListSerializer() def handle_results(results): serialized = [] for item in results: if isinstance(item, dict): cloned = item.copy() del cloned["widgets"] serialized.append(cloned) else: serialized.append( serialize(item, request.user, serializer=list_serializer)) return serialized return self.paginate( request=request, sources=[prebuilt, dashboards], paginator_cls=ChainPaginator, on_results=handle_results, )
def _get_dashboard(self, request, organization, dashboard_id): prebuilt = Dashboard.get_prebuilt(dashboard_id) if prebuilt: return prebuilt return Dashboard.objects.get(id=dashboard_id, organization_id=organization.id)
def get(self, request, organization): """ Retrieve an Organization's Dashboards ````````````````````````````````````` Retrieve a list of dashboards that are associated with the given organization. If on the first page, this endpoint will also include any pre-built dashboards that haven't been replaced or removed. :pparam string organization_slug: the slug of the organization the dashboards belongs to. :qparam string query: the title of the dashboard being searched for. :auth: required """ if not features.has("organizations:dashboards-basic", organization, actor=request.user): return Response(status=404) dashboards = Dashboard.objects.filter(organization_id=organization.id).select_related( "created_by" ) query = request.GET.get("query") if query: dashboards = dashboards.filter(title__icontains=query) prebuilt = Dashboard.get_prebuilt_list(organization, query) sort_by = request.query_params.get("sort") if sort_by and sort_by.startswith("-"): sort_by, desc = sort_by[1:], True else: desc = False if sort_by == "title": order_by = [ "-title" if desc else "title", "-date_added", ] elif sort_by == "dateCreated": order_by = "-date_added" if desc else "date_added" elif sort_by == "mostPopular": order_by = [ "visits" if desc else "-visits", "-date_added", ] elif sort_by == "recentlyViewed": order_by = "last_visited" if desc else "-last_visited" elif sort_by == "mydashboards": order_by = [ Case(When(created_by_id=request.user.id, then=-1), default="created_by_id"), "-date_added", ] elif sort_by == "myDashboardsAndRecentlyViewed": order_by = [ Case(When(created_by_id=request.user.id, then=-1), default=1), "-last_visited", ] else: order_by = "title" if not isinstance(order_by, list): order_by = [order_by] dashboards = dashboards.order_by(*order_by) list_serializer = DashboardListSerializer() def handle_results(results): serialized = [] dashboards = [] for item in results: if isinstance(item, dict): cloned = item.copy() widgets = cloned.pop("widgets", []) cloned["widgetDisplay"] = [w["displayType"] for w in widgets] serialized.append(cloned) else: dashboards.append(item) serialized.extend(serialize(dashboards, request.user, serializer=list_serializer)) return serialized return self.paginate( request=request, sources=[prebuilt, dashboards], paginator_cls=ChainPaginator, on_results=handle_results, )