44 lines
1.4 KiB
Python
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')
|