def get(self, query_id): q = get_object_or_404(models.Query.get_by_id_and_org, query_id, self.current_org) require_access(q.groups, self.current_user, view_only) result = q.to_dict(with_visualizations=True) result['can_edit'] = can_modify(q, self.current_user) return result
def get(self, visualization_id): """ Retrieve a visualization. :param visualization_id: ID of visualization to fetch Responds with the :ref:`visualization <visualization-response-label>` contents. """ vis = get_object_or_404(models.Visualization.get_by_id, visualization_id) require_access(vis.query_rel, self.current_user, view_only) result = serialize_visualization(vis, True) api_key = models.ApiKey.get_by_object(vis) if api_key: result['api_key'] = api_key.api_key result['can_edit'] = can_modify(vis, self.current_user) self.record_event({ 'action': 'view', 'object_id': visualization_id, 'object_type': 'query', }) return result
def get(self, dashboard_slug=None): """ Retrieves a dashboard. :qparam string slug: Slug of dashboard to retrieve. .. _dashboard-response-label: :>json number id: Dashboard ID :>json string name: :>json string slug: :>json number user_id: ID of the dashboard creator :>json string created_at: ISO format timestamp for dashboard creation :>json string updated_at: ISO format timestamp for last dashboard modification :>json number version: Revision number of dashboard :>json boolean dashboard_filters_enabled: Whether filters are enabled or not :>json boolean is_archived: Whether this dashboard has been removed from the index or not :>json boolean is_draft: Whether this dashboard is a draft or not. :>json array layout: Array of arrays containing widget IDs, corresponding to the rows and columns the widgets are displayed in :>json array widgets: Array of arrays containing :ref:`widget <widget-response-label>` data .. _widget-response-label: Widget structure: :>json number widget.id: Widget ID :>json number widget.width: Widget size :>json object widget.options: Widget options :>json number widget.dashboard_id: ID of dashboard containing this widget :>json string widget.text: Widget contents, if this is a text-box widget :>json object widget.visualization: Widget contents, if this is a visualization widget :>json string widget.created_at: ISO format timestamp for widget creation :>json string widget.updated_at: ISO format timestamp for last widget modification """ dashboard = get_object_or_404(models.Dashboard.get_by_slug_and_org, dashboard_slug, self.current_org) response = serialize_dashboard(dashboard, with_widgets=True, user=self.current_user) api_key = models.ApiKey.get_by_object(dashboard) if api_key: response["public_url"] = url_for( "redash.public_dashboard", token=api_key.api_key, org_slug=self.current_org.slug, _external=True, ) response["api_key"] = api_key.api_key response["can_edit"] = can_modify(dashboard, self.current_user) self.record_event({ "action": "view", "object_id": dashboard.id, "object_type": "dashboard" }) return response
def get(self, query_id): """ Retrieve a query. :param query_id: ID of query to fetch Responds with the :ref:`query <query-response-label>` contents. """ data = json_loads(query_id) if type(data).__name__ != "list": q = get_object_or_404(models.Query.get_by_id_and_org, query_id, self.current_org) require_access(q, self.current_user, view_only) result = QuerySerializer(q, with_visualizations=True).serialize() result["can_edit"] = can_modify(q, self.current_user) self.record_event({ "action": "view", "object_id": query_id, "object_type": "query" }) return result else: results = [] for query_id in data: q = get_object_or_404(models.Query.get_by_id_and_org, query_id, self.current_org) require_access(q, self.current_user, view_only) result = QuerySerializer(q, with_visualizations=True).serialize() result["can_edit"] = can_modify(q, self.current_user) self.record_event({ "action": "view", "object_id": query_id, "object_type": "query" }) results.append(result) return results
def get(self, dashboard_slug=None): dashboard = get_object_or_404(models.Dashboard.get_by_slug_and_org, dashboard_slug, self.current_org) response = dashboard.to_dict(with_widgets=True, user=self.current_user) api_key = models.ApiKey.get_by_object(dashboard) if api_key: response['public_url'] = url_for('redash.public_dashboard', token=api_key.api_key, org_slug=self.current_org.slug, _external=True) response['api_key'] = api_key.api_key response['can_edit'] = can_modify(dashboard, self.current_user) return response
def get(self, dashboard_slug=None): """ Retrieves a dashboard. :qparam string slug: Slug of dashboard to retrieve. .. _dashboard-response-label: :>json number id: Dashboard ID :>json string name: :>json string slug: :>json number user_id: ID of the dashboard creator :>json string created_at: ISO format timestamp for dashboard creation :>json string updated_at: ISO format timestamp for last dashboard modification :>json number version: Revision number of dashboard :>json boolean dashboard_filters_enabled: Whether filters are enabled or not :>json boolean is_archived: Whether this dashboard has been removed from the index or not :>json boolean is_draft: Whether this dashboard is a draft or not. :>json array layout: Array of arrays containing widget IDs, corresponding to the rows and columns the widgets are displayed in :>json array widgets: Array of arrays containing :ref:`widget <widget-response-label>` data .. _widget-response-label: Widget structure: :>json number widget.id: Widget ID :>json number widget.width: Widget size :>json object widget.options: Widget options :>json number widget.dashboard_id: ID of dashboard containing this widget :>json string widget.text: Widget contents, if this is a text-box widget :>json object widget.visualization: Widget contents, if this is a visualization widget :>json string widget.created_at: ISO format timestamp for widget creation :>json string widget.updated_at: ISO format timestamp for last widget modification """ dashboard = get_object_or_404(models.Dashboard.get_by_slug_and_org, dashboard_slug, self.current_org) response = serialize_dashboard(dashboard, with_widgets=True, user=self.current_user) api_key = models.ApiKey.get_by_object(dashboard) if api_key: response['public_url'] = url_for('redash.public_dashboard', token=api_key.api_key, org_slug=self.current_org.slug, _external=True) response['api_key'] = api_key.api_key response['can_edit'] = can_modify(dashboard, self.current_user) self.record_event({ 'action': 'view', 'object_id': dashboard.id, 'object_type': 'dashboard', }) return response
def get(self, query_id): """ Retrieve a query. :param query_id: ID of query to fetch Responds with the :ref:`query <query-response-label>` contents. """ q = get_object_or_404(models.Query.get_by_id_and_org, query_id, self.current_org) require_access(q.groups, self.current_user, view_only) result = q.to_dict(with_visualizations=True) result['can_edit'] = can_modify(q, self.current_user) return result
def get(self, query_id): """ Retrieve a query. :param query_id: ID of query to fetch Responds with the :ref:`query <query-response-label>` contents. """ q = get_object_or_404(models.Query.get_by_id_and_org, query_id, self.current_org) search_term = request.args.get('q') if search_term: results = models.Query.search_by_user(search_term, self.current_user) else: results = models.Query.by_user(self.current_user) results = filter_by_tags(results, models.Query.tags) ordered_results = order_results(results, fallback=not bool(search_term)) page = request.args.get('page', 1, type=int) page_size = request.args.get('page_size', 25, type=int) response = paginate( ordered_results, page, page_size, QuerySerializer, with_stats=True, with_last_modified_by=False, ) ids = [] for r in response['results']: ids.append(r['id']) if q.id not in ids: require_access(q, self.current_user, view_only) result = QuerySerializer(q, with_visualizations=True).serialize() result['can_edit'] = can_modify(q, self.current_user) self.record_event({ 'action': 'view', 'object_id': query_id, 'object_type': 'query', }) return result
def get(self, query_id): """ Retrieve a query. :param query_id: ID of query to fetch Responds with the :ref:`query <query-response-label>` contents. """ q = get_object_or_404(models.Query.get_by_id_and_org, query_id, self.current_org) require_access(q.groups, self.current_user, view_only) result = QuerySerializer(q, with_visualizations=True).serialize() result['can_edit'] = can_modify(q, self.current_user) self.record_event({ 'action': 'view', 'object_id': query_id, 'object_type': 'query', }) return result
def get(self, dashboard_slug=None): """ Retrieves a dashboard. :qparam string slug: Slug of dashboard to retrieve. .. _dashboard-response-label: :>json number id: Dashboard ID :>json string name: :>json string slug: :>json number user_id: ID of the dashboard creator :>json string created_at: ISO format timestamp for dashboard creation :>json string updated_at: ISO format timestamp for last dashboard modification :>json number version: Revision number of dashboard :>json boolean dashboard_filters_enabled: Whether filters are enabled or not :>json boolean is_archived: Whether this dashboard has been removed from the index or not :>json boolean is_draft: Whether this dashboard is a draft or not. :>json array layout: Array of arrays containing widget IDs, corresponding to the rows and columns the widgets are displayed in :>json array widgets: Array of arrays containing :ref:`widget <widget-response-label>` data .. _widget-response-label: Widget structure: :>json number widget.id: Widget ID :>json number widget.width: Widget size :>json object widget.options: Widget options :>json number widget.dashboard_id: ID of dashboard containing this widget :>json string widget.text: Widget contents, if this is a text-box widget :>json object widget.visualization: Widget contents, if this is a visualization widget :>json string widget.created_at: ISO format timestamp for widget creation :>json string widget.updated_at: ISO format timestamp for last widget modification """ dashboard = get_object_or_404(models.Dashboard.get_by_slug_and_org, dashboard_slug, self.current_org) response = serialize_dashboard(dashboard, with_widgets=True, user=self.current_user) api_key = models.ApiKey.get_by_object(dashboard) if api_key: response['public_url'] = url_for('redash.public_dashboard', token=api_key.api_key, org_slug=self.current_org.slug, _external=True) response['api_key'] = api_key.api_key response['can_edit'] = can_modify(dashboard, self.current_user) for group_id in self.current_user.group_ids: group = get_object_or_404(models.Group.get_by_id_and_org, group_id, self.current_org) manage_boards = (models.Dashboard.query .join(models.ManageBoardGroup) .filter(models.ManageBoardGroup.group == group)) ds_dict = [ds.to_dict(with_permissions_for=group) for ds in manage_boards] for item in ds_dict: if item['id'] == response['id']: response['can_edit'] = True self.record_event({ 'action': 'view', 'object_id': dashboard.id, 'object_type': 'dashboard', }) if response['can_edit'] == True: return response else: abort(403)
def get(self, dashboard_slug=None): """ Retrieves a dashboard. :qparam string slug: Slug of dashboard to retrieve. .. _dashboard-response-label: :>json number id: Dashboard ID :>json string name: :>json string slug: :>json number user_id: ID of the dashboard creator :>json string created_at: ISO format timestamp for dashboard creation :>json string updated_at: ISO format timestamp for last dashboard modification :>json number version: Revision number of dashboard :>json boolean dashboard_filters_enabled: Whether filters are enabled or not :>json boolean is_archived: Whether this dashboard has been removed from the index or not :>json boolean is_draft: Whether this dashboard is a draft or not. :>json array layout: Array of arrays containing widget IDs, corresponding to the rows and columns the widgets are displayed in :>json array widgets: Array of arrays containing :ref:`widget <widget-response-label>` data .. _widget-response-label: Widget structure: :>json number widget.id: Widget ID :>json number widget.width: Widget size :>json object widget.options: Widget options :>json number widget.dashboard_id: ID of dashboard containing this widget :>json string widget.text: Widget contents, if this is a text-box widget :>json object widget.visualization: Widget contents, if this is a visualization widget :>json string widget.created_at: ISO format timestamp for widget creation :>json string widget.updated_at: ISO format timestamp for last widget modification dashboard = get_object_or_404(models.Dashboard.get_by_slug_and_org, dashboard_slug, self.current_org) response = dashboard.to_dict(with_widgets=True, user=self.current_user) api_key = models.ApiKey.get_by_object(dashboard) if api_key: response['public_url'] = url_for('redash.public_dashboard', token=api_key.api_key, org_slug=self.current_org.slug, _external=True) response['api_key'] = api_key.api_key response['can_edit'] = can_modify(dashboard, self.current_user) """ dashboard = get_object_or_404(models.Dashboard.get_by_slug_and_org, dashboard_slug, models.Organization) us= models.User() us.id =1 us.email="*****@*****.**" us.name="admin" m_list=models.MutableList() m_list.append(1) m_list.append(2) us.group_ids=m_list us._profile_image_url= "https://www.gravatar.com/avatar/b8e8fe9f3c0bd7e69d86d52033f27460?s=40&d=identicon" us.updated_at= datetime.strptime('2018-6-2 18:19:59', '%Y-%m-%d %H:%M:%S') us.created_at= datetime.strptime('2018-6-1 18:19:59', '%Y-%m-%d %H:%M:%S') if(type(self.current_user)!= models.AnonymousUser): response = dashboard.to_dict(with_widgets=True, user=self.current_user) response['can_edit'] = can_modify(dashboard, self.current_user) else: response = dashboard.to_dict(with_widgets=True, user=us) response['can_edit'] = True api_key = models.ApiKey.get_by_object(dashboard) if api_key: response['public_url'] = url_for('redash.public_dashboard', token=api_key.api_key, org_slug=self.current_org.slug, _external=True) response['api_key'] = api_key.api_key return response