from flask_restful import Api from marshmallow import ValidationError from app.errors import NotPresentError, BadRequestError from flask import Blueprint, jsonify api_bp = Blueprint('api', __name__) api = Api(api_bp) def add_resources(): from .resources.account import (AccountResource, AccountListResource, AccountRoleResource, RoleResource, RolesResource, AccountEmailTokenResource, AccountEmailTokenResendResource) from .resources.token import TokenResource, ValidateTokenResource from .resources.device import (DeviceResource, DeviceRecordingResource, DeviceLatestRecordingResource, DeviceRecordingQueryResource, DeviceListResource, DeviceTypeResource, DeviceTypeListResource, DeviceConfigurationResource, DeviceDocumentationResource, DeviceSecretResource, DeviceSecretResetResource, DeviceShareResource, DeviceShareActivationResource) from .resources.dashboard import (DashboardResource, DashboardListResource, DashboardWidgetResource, DashboardWidgetListResource) from .resources.app import MqttConfigResource, AppConfigResource api.add_resource(AccountResource, '/v1/accounts/') api.add_resource(AccountListResource, '/v1/accounts') api.add_resource(AccountRoleResource, '/v1/accounts//role') api.add_resource(AccountEmailTokenResource, '/v1/email/confirm/') api.add_resource(AccountEmailTokenResendResource, '/v1/email/resend') api.add_resource(RoleResource, '/v1/roles/') api.add_resource(RolesResource, '/v1/roles') api.add_resource(TokenResource, '/v1/token') api.add_resource(ValidateTokenResource, '/v1/token/validate') api.add_resource(DeviceResource, '/v1/devices/') api.add_resource(DeviceRecordingResource, '/v1/devices//recordings') api.add_resource(DeviceLatestRecordingResource, '/v1/devices//recordings/latest') api.add_resource(DeviceRecordingQueryResource, '/v1/devices//recordings/jsonql') api.add_resource(DeviceListResource, '/v1/devices') api.add_resource(DeviceTypeResource, '/v1/devices/types/') api.add_resource(DeviceTypeListResource, '/v1/devices/types') api.add_resource(DeviceConfigurationResource, '/v1/devices//configuration') api.add_resource(DeviceDocumentationResource, '/v1/devices//documentation') api.add_resource(DeviceSecretResource, '/v1/devices//secret') api.add_resource(DeviceSecretResetResource, '/v1/devices//secret/reset') api.add_resource(DeviceShareResource, '/v1/devices//share') api.add_resource( DeviceShareActivationResource, '/v1/devices//share/activate/') api.add_resource(DashboardResource, '/v1/dashboards/') api.add_resource(DashboardListResource, '/v1/dashboards') api.add_resource( DashboardWidgetResource, '/v1/dashboards//widgets/') api.add_resource(DashboardWidgetListResource, '/v1/dashboards//widgets') api.add_resource(MqttConfigResource, '/v1/config/mqtt') api.add_resource(AppConfigResource, '/v1/config') add_resources() @api_bp.errorhandler(ValidationError) @api_bp.errorhandler(422) def handle_validation_error(e): return jsonify({'status': 'error', 'message': str(e)}), 422 @api_bp.errorhandler(ValueError) def handle_value_error(e): return jsonify({'status': 'error', 'message': str(e)}), 422 @api_bp.errorhandler(NotPresentError) @api_bp.errorhandler(404) def handle_not_present_error(e): return jsonify({'status': 'error', 'message': str(e)}), 404 @api_bp.errorhandler(BadRequestError) @api_bp.errorhandler(400) def handle_bad_request_error(e): return jsonify({'status': 'error', 'message': str(e)}), 400 @api_bp.errorhandler(Exception) @api_bp.errorhandler(500) def handle_unknown_errors(e): return jsonify({ 'status': 'failed', 'message': 'Unknown error has occurred! ({0})'.format(str(e)) }), 500