예제 #1
0
def public_widget(widget_id):
    logging.debug(
        "/api/public/widgets/<widget_id> - WidgetResource/public_widget(id)")

    widget = get_object_or_404(models.Widget.get_by_id, widget_id)
    response = serialize_widget(widget)
    return json_response(response)
예제 #2
0
    def post(self):
        """
        Add a widget to a dashboard.

        :<json number dashboard_id: The ID for the dashboard being added to
        :<json visualization_id: The ID of the visualization to put in this widget
        :<json object options: Widget options
        :<json string text: Text box contents
        :<json number width: Width for widget display

        :>json object widget: The created widget
        """
        widget_properties = request.get_json(force=True)
        dashboard = models.Dashboard.get_by_id_and_org(widget_properties.pop('dashboard_id'), self.current_org)
        require_object_modify_permission(dashboard, self.current_user)

        widget_properties['options'] = json.dumps(widget_properties['options'])
        widget_properties.pop('id', None)
        widget_properties['dashboard'] = dashboard

        visualization_id = widget_properties.pop('visualization_id')
        if visualization_id:
            visualization = models.Visualization.get_by_id_and_org(visualization_id, self.current_org)
            require_access(visualization.query_rel.groups, self.current_user, view_only)
        else:
            visualization = None

        widget_properties['visualization'] = visualization

        widget = models.Widget(**widget_properties)
        models.db.session.add(widget)
        models.db.session.commit()

        models.db.session.commit()
        return serialize_widget(widget)
예제 #3
0
    def post(self):
        """
        Add a widget to a dashboard.

        :<json number dashboard_id: The ID for the dashboard being added to
        :<json visualization_id: The ID of the visualization to put in this widget
        :<json object options: Widget options
        :<json string text: Text box contents
        :<json number width: Width for widget display

        :>json object widget: The created widget
        """
        widget_properties = request.get_json(force=True)
        dashboard = models.Dashboard.get_by_id_and_org(
            widget_properties.get('dashboard_id'), self.current_org)

        flag = True
        manage_boards = models.Dashboard.queries(self.current_org,
                                                 self.current_user.group_ids,
                                                 self.current_user.id)
        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)
            try:
                d = [
                    ds.to_dict(with_permissions_for=group)
                    for ds in manage_boards
                ]
                for item in d:
                    if item['view_only'] == False and item[
                            'id'] == dashboard.id:
                        flag = False
            except:
                pass

        if flag:
            require_object_modify_permission(dashboard, self.current_user)

        widget_properties['options'] = json_dumps(widget_properties['options'])
        widget_properties.pop('id', None)

        visualization_id = widget_properties.pop('visualization_id')
        if visualization_id:
            visualization = models.Visualization.get_by_id_and_org(
                visualization_id, self.current_org)
            require_access(visualization.query_rel, self.current_user,
                           view_only)
        else:
            visualization = None

        widget_properties['visualization'] = visualization

        widget = models.Widget(**widget_properties)
        models.db.session.add(widget)
        models.db.session.commit()

        models.db.session.commit()
        return serialize_widget(widget)
예제 #4
0
    def post(self, widget_id):
        """
        Updates a widget in a dashboard.
        This method currently handles Text Box widgets only.

        :param number widget_id: The ID of the widget to modify

        :<json string text: The new contents of the text box
        """
        widget = models.Widget.get_by_id_and_org(widget_id, self.current_org)
        require_object_modify_permission(widget.dashboard, self.current_user)
        widget_properties = request.get_json(force=True)
        widget.text = widget_properties['text']
        widget.options = json.dumps(widget_properties['options'])
        models.db.session.commit()
        return serialize_widget(widget)
예제 #5
0
    def post(self, widget_id):
        """
        Updates a widget in a dashboard.
        This method currently handles Text Box widgets only.

        :param number widget_id: The ID of the widget to modify

        :<json string text: The new contents of the text box
        """
        widget = models.Widget.get_by_id_and_org(widget_id, self.current_org)

        flag = True
        manage_boards = models.Dashboard.queries(self.current_org,
                                                 self.current_user.group_ids,
                                                 self.current_user.id)
        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)
            try:
                d = [
                    ds.to_dict(with_permissions_for=group)
                    for ds in manage_boards
                ]
                for item in d:
                    if item['view_only'] == False and item[
                            'id'] == widget.dashboard.id:
                        flag = False
            except:
                pass

        if flag:
            require_object_modify_permission(widget.dashboard,
                                             self.current_user)

        widget_properties = request.get_json(force=True)
        widget.text = widget_properties['text']
        widget.options = json_dumps(widget_properties['options'])
        models.db.session.commit()
        return serialize_widget(widget)