university-final-iot-backend/app/api/resources/dashboard.py

53 lines
1.9 KiB
Python
Raw Normal View History

2018-09-19 23:42:37 +00:00
from flask import g
from flask_restful import abort
from marshmallow import fields
2018-09-19 23:42:37 +00:00
from webargs.flaskparser import use_args
from flasgger import swag_from
import app.dashboards.api as dashboard
from app.api.auth_protection import ProtectedResource
from app.api.schemas import BaseResourceSchema
2018-09-19 23:42:37 +00:00
class DashboardSchema(BaseResourceSchema):
2018-09-19 23:42:37 +00:00
id = fields.Integer(dump_only=True)
dashboard_data = fields.Raw()
class DashboardResource(ProtectedResource):
@swag_from('swagger/get_dashboard_spec.yaml')
def get(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')
return DashboardSchema().dump(requested_dashboard), 200
2018-09-19 23:42:37 +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):
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-09-19 23:42:37 +00:00
success = dashboard.update_dashboard(
dashboard_id,
args['dashboard_data'])
if success:
return '', 204
class DashboardListResource(ProtectedResource):
@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):
return DashboardSchema().dump(
dashboard.get_dashboards(g.current_account.id), many=True), 200