Merged in enhancement/errors (pull request #54)

Enhancement/errors
develop
Ensar Sarajcic 2018-11-03 17:25:36 +00:00
commit 78dc506586
5 changed files with 36 additions and 27 deletions

View File

@ -121,7 +121,6 @@ def create_token(username, password):
raise ValueError("Invalid credentials") raise ValueError("Invalid credentials")
if not account.confirmed: if not account.confirmed:
print('ACCOUNT NOT CONFIRMED?')
raise ValueError("Email not confirmed") raise ValueError("Email not confirmed")
return account.create_auth_token() return account.create_auth_token()

View File

@ -1,5 +1,6 @@
from flask_restful import Api from flask_restful import Api
from marshmallow import ValidationError from marshmallow import ValidationError
from app.errors import NotPresentError
from flask import Blueprint, jsonify from flask import Blueprint, jsonify
@ -89,6 +90,12 @@ def handle_value_error(e):
return jsonify({'status': 'error', 'message': str(e)}), 422 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(Exception) @api_bp.errorhandler(Exception)
@api_bp.errorhandler(500) @api_bp.errorhandler(500)
def handle_unknown_errors(e): def handle_unknown_errors(e):

View File

@ -86,24 +86,21 @@ class AccountListResource(Resource):
@use_args(UserSchema(), locations=('json',)) @use_args(UserSchema(), locations=('json',))
@swag_from('swagger/create_account_spec.yaml') @swag_from('swagger/create_account_spec.yaml')
def post(self, args): def post(self, args):
try: created_account, emailtoken = accounts.create_account(
created_account, emailtoken = accounts.create_account( args['username'],
args['username'], args['email'],
args['email'], args['password'])
args['password']) confirm_url = api.url_for(
confirm_url = api.url_for( AccountEmailTokenResource,
AccountEmailTokenResource, token=emailtoken, _external=True)
token=emailtoken, _external=True) html = render_template(
html = render_template( 'activate_mail.html',
'activate_mail.html', confirm_url=confirm_url)
confirm_url=confirm_url) send_email_task.delay(
send_email_task.delay( args['email'],
args['email'], 'ETF IoT Email confirmation',
'ETF IoT Email confirmation', html)
html) return UserSchema().dump(created_account), 201
return UserSchema().dump(created_account), 201
except ValueError:
abort(422, message='Account already exists', status='error')
class AccountEmailTokenResource(Resource): class AccountEmailTokenResource(Resource):

View File

@ -11,6 +11,7 @@ from .models import (Device,
AccessLevel) AccessLevel)
from itsdangerous import URLSafeSerializer from itsdangerous import URLSafeSerializer
from app.core import app from app.core import app
from app.errors import NotPresentError
from app.jsonql import api as jsonql from app.jsonql import api as jsonql
@ -110,7 +111,7 @@ def get_device_recordings(device_id):
:raises: ValueError if device does not exist :raises: ValueError if device does not exist
""" """
if not Device.exists(id=device_id): if not Device.exists(id=device_id):
raise ValueError("Device with id %s does not exist" % device_id) raise NotPresentError("Device with id %s does not exist" % device_id)
return Recording.get_many(device_id=device_id) return Recording.get_many(device_id=device_id)
@ -134,7 +135,7 @@ def get_device_recordings_filtered(device_id, record_type=None,
:raises: ValueError if device does not exist :raises: ValueError if device does not exist
""" """
if not Device.exists(id=device_id): if not Device.exists(id=device_id):
raise ValueError("Device with id %s does not exist" % device_id) raise NotPresentError("Device with id %s does not exist" % device_id)
return Recording.get_many_filtered(device_id, record_type, return Recording.get_many_filtered(device_id, record_type,
start_date, end_date) start_date, end_date)
@ -282,7 +283,7 @@ def create_recording_and_return(device_id, raw_json,
:raises: ValueError if parsing fails or device does not exist :raises: ValueError if parsing fails or device does not exist
""" """
if not Device.exists(id=device_id): if not Device.exists(id=device_id):
raise ValueError("Device does not exist!") raise NotPresentError("Device does not exist!")
if not authenticated: if not authenticated:
validate_hmac_in_message(device_id, raw_json) validate_hmac_in_message(device_id, raw_json)
@ -303,7 +304,7 @@ def create_recording(device_id, raw_json):
:raises: ValueError if parsing fails or device does not exist :raises: ValueError if parsing fails or device does not exist
""" """
if not Device.exists(id=device_id): if not Device.exists(id=device_id):
raise ValueError("Device does not exist!") raise NotPresentError("Device does not exist!")
validate_hmac_in_message(device_id, raw_json) validate_hmac_in_message(device_id, raw_json)
recording = parse_raw_json_recording(device_id, raw_json) recording = parse_raw_json_recording(device_id, raw_json)
@ -326,9 +327,9 @@ def create_targeted_device_sharing_token(
:raises: ValueError if device does not exist :raises: ValueError if device does not exist
""" """
if not Device.exists(id=device_id): if not Device.exists(id=device_id):
raise ValueError("Device does not exist!") raise NotPresentError("Device does not exist!")
if not AccessLevel.exists(id=access_level_id): if not AccessLevel.exists(id=access_level_id):
raise ValueError("AccessLevel does not exist!") raise NotPresentError("AccessLevel does not exist!")
data_to_serialize = { data_to_serialize = {
'device_id': device_id, 'device_id': device_id,
@ -363,7 +364,7 @@ def activate_device_sharing_token(account_id, token):
return False return False
if not Device.exists(id=device_id): if not Device.exists(id=device_id):
raise ValueError("Device does not exist!") raise NotPresentError("Device does not exist!")
device_association = DeviceAssociation(device_id, account_id, device_association = DeviceAssociation(device_id, account_id,
access_level_id) access_level_id)
@ -376,7 +377,7 @@ def run_custom_query(device_id, request):
Runs custom query as defined by jsonql module Runs custom query as defined by jsonql module
""" """
if not Device.exists(id=device_id): if not Device.exists(id=device_id):
raise ValueError("Device does not exist!") raise NotPresentError("Device does not exist!")
def recording_field_provider(name): def recording_field_provider(name):
if name == 'record_value': if name == 'record_value':

5
app/errors.py 100644
View File

@ -0,0 +1,5 @@
class NotPresentError(Exception):
pass
class BadRequestError(Exception):
pass