2018-10-15 17:51:51 +00:00
|
|
|
from flask import g, request
|
2018-09-20 13:19:41 +00:00
|
|
|
from flask_restful import abort
|
2018-10-15 17:51:51 +00:00
|
|
|
from marshmallow import fields, Schema
|
2018-09-19 23:42:37 +00:00
|
|
|
from webargs.flaskparser import use_args
|
|
|
|
from flasgger import swag_from
|
2018-10-06 11:46:32 +00:00
|
|
|
import app.dashboards.api as dashboard
|
2018-10-06 12:07:40 +00:00
|
|
|
from app.api.auth_protection import ProtectedResource
|
2018-10-08 19:50:34 +00:00
|
|
|
from app.api.schemas import BaseResourceSchema
|
2018-09-19 23:42:37 +00:00
|
|
|
|
|
|
|
|
2018-10-08 19:50:34 +00:00
|
|
|
class DashboardSchema(BaseResourceSchema):
|
2018-09-19 23:42:37 +00:00
|
|
|
id = fields.Integer(dump_only=True)
|
2018-10-15 17:51:51 +00:00
|
|
|
active = fields.Boolean(required=False)
|
2018-09-19 23:42:37 +00:00
|
|
|
dashboard_data = fields.Raw()
|
|
|
|
|
|
|
|
|
2018-10-15 17:51:51 +00:00
|
|
|
class DashboardIdSchema(Schema):
|
|
|
|
id = fields.Integer()
|
|
|
|
|
|
|
|
|
2018-09-19 23:42:37 +00:00
|
|
|
class DashboardResource(ProtectedResource):
|
|
|
|
@swag_from('swagger/get_dashboard_spec.yaml')
|
|
|
|
def get(self, dashboard_id):
|
2018-09-20 13:19:41 +00:00
|
|
|
requested_dashboard = dashboard.get_dashboard(dashboard_id)
|
|
|
|
if requested_dashboard.account_id != g.current_account.id:
|
|
|
|
abort(403, message='You are not allowed to access this dashboard',
|
|
|
|
status='error')
|
2018-10-08 19:50:34 +00:00
|
|
|
return DashboardSchema().dump(requested_dashboard), 200
|
2018-09-19 23:42:37 +00:00
|
|
|
|
2018-10-08 19:50:34 +00:00
|
|
|
@use_args(DashboardSchema(), locations=('json',))
|
2018-09-19 23:42:37 +00:00
|
|
|
@swag_from('swagger/update_dashboard_spec.yaml')
|
2018-09-23 13:04:02 +00:00
|
|
|
def put(self, args, dashboard_id):
|
2018-09-20 13:19:41 +00:00
|
|
|
requested_dashboard = dashboard.get_dashboard(dashboard_id)
|
|
|
|
if requested_dashboard.account_id != g.current_account.id:
|
|
|
|
abort(403, message='You are not allowed to access this dashboard',
|
|
|
|
status='error')
|
2018-10-15 17:51:51 +00:00
|
|
|
if args.get('dashboard_data') is None:
|
|
|
|
abort(400, message='Missing dashboard_data', status='error')
|
|
|
|
if args.get('active') is None:
|
|
|
|
abort(400, message='Missing active', status='error')
|
|
|
|
success = dashboard.patch_dashboard(
|
|
|
|
g.current_account.id,
|
|
|
|
dashboard_id,
|
|
|
|
args['dashboard_data'],
|
|
|
|
args['active'])
|
|
|
|
if success:
|
|
|
|
return '', 204
|
|
|
|
|
|
|
|
@use_args(DashboardSchema(), locations=('json',))
|
|
|
|
@swag_from('swagger/update_dashboard_spec.yaml')
|
|
|
|
def patch(self, args, dashboard_id):
|
|
|
|
requested_dashboard = dashboard.get_dashboard(dashboard_id)
|
|
|
|
if requested_dashboard.account_id != g.current_account.id:
|
|
|
|
abort(403, message='You are not allowed to access this dashboard',
|
|
|
|
status='error')
|
|
|
|
success = dashboard.patch_dashboard(
|
|
|
|
g.current_account.id,
|
2018-09-19 23:42:37 +00:00
|
|
|
dashboard_id,
|
2018-10-15 17:51:51 +00:00
|
|
|
args.get('dashboard_data'),
|
|
|
|
args.get('active'))
|
2018-09-19 23:42:37 +00:00
|
|
|
if success:
|
|
|
|
return '', 204
|
|
|
|
|
2018-10-10 20:19:13 +00:00
|
|
|
@swag_from('swagger/delete_dashboard_spec.yaml')
|
|
|
|
def delete(self, dashboard_id):
|
|
|
|
requested_dashboard = dashboard.get_dashboard(dashboard_id)
|
|
|
|
if requested_dashboard.account_id != g.current_account.id:
|
|
|
|
abort(403, message='You are not allowed to access this dashboard',
|
|
|
|
status='error')
|
|
|
|
dashboard.delete_dashboard(dashboard_id)
|
|
|
|
return '', 204
|
|
|
|
|
2018-09-19 23:42:37 +00:00
|
|
|
|
|
|
|
class DashboardListResource(ProtectedResource):
|
2018-10-08 19:50:34 +00:00
|
|
|
@use_args(DashboardSchema(), locations=('json',))
|
2018-09-19 23:42:37 +00:00
|
|
|
@swag_from('swagger/create_dashboard_spec.yaml')
|
|
|
|
def post(self, args):
|
|
|
|
success = dashboard.create_dashboard(
|
|
|
|
args['dashboard_data'],
|
|
|
|
g.current_account.id)
|
|
|
|
if success:
|
|
|
|
return '', 201
|
|
|
|
|
|
|
|
@swag_from('swagger/get_dashboards_spec.yaml')
|
|
|
|
def get(self):
|
2018-10-15 17:51:51 +00:00
|
|
|
request_args = request.args
|
2018-10-08 19:50:34 +00:00
|
|
|
return DashboardSchema().dump(
|
2018-10-15 17:51:51 +00:00
|
|
|
dashboard.get_dashboards(
|
|
|
|
g.current_account.id,
|
|
|
|
request_args.get('active')), many=True), 200
|