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

44 lines
1.4 KiB
Python

from flask_restful import Resource, reqparse, abort
import app.accounts as accounts
def user(user_dict):
"""
Type definition of user object required as a parameter
Required keys:
* username - string
* password - string
* email - string
:returns user dictionary with required keys
:rtype dict
:raises ValueError if parameter is not dict or is missing required keys
"""
if not isinstance(user_dict, dict):
raise ValueError("User should contain username, password and email")
if ('username' not in user_dict or
'password' not in user_dict or
'email' not in user_dict):
raise ValueError("User should contain username, password and email")
return user_dict
class AccountResource(Resource):
parser = reqparse.RequestParser(bundle_errors=True)
parser.add_argument('user', location='json', type=user,
help='User is not valid. Error: {error_msg}',
required=True)
def post(self):
try:
args = AccountResource.parser.parse_args()['user']
success = accounts.create_account(
args['username'],
args['email'],
args['password'])
if success:
return '', 201
except ValueError:
abort(422, message='Account already exists', status='error')