def register_user(): """User register.""" form = UserForm() resp_message = 'Invalid payload.' if not form.validate(): return BadRequest(resp_message) username = form.username.data email = form.email.data password = form.password.data user = User.query.filter( or_(User.username == username, User.email == email)).first() if not user: with db.auto_commit(resp_message): new_user = User(username, email, password) db.session.add(new_user) # generate auth token auth_token = new_user.encode_auth_token() response_object = { 'status': 'success', 'message': 'Successfully registered.', 'auth_token': auth_token.decode() } return jsonify(response_object), 201 else: return BadRequest('Sorry, that user already existing.')
def auto_commit(self, exp_descp=None): try: yield db.session.commit() except Exception: db.session.rollback() raise BadRequest(exp_descp)
def add_article(): """Add a new article.""" form = ArticleForm() resp_msg = 'Invalid payload.' if not form.validate(): return BadRequest(resp_msg) title = form.title.data body = form.body.data category = form.category.data article = Article.query.filter_by(title=title).count() if article > 0: return BadRequest('The article already exists') article = Article(title=title, body=body, category_id=category) with db.auto_commit(resp_msg): db.session.add(article) resp_obj = {'status': 'success', 'message': f'article: {title} was added.'} return jsonify(resp_obj), 201
def add_category(): """Add a new category.""" form = CategoryForm() resp_msg = 'Invalid payload.' if not form.validate(): return BadRequest(resp_msg) name = form.name.data category = Category.query.filter_by(name=name).first() if category: return BadRequest('The category already exists.') with db.auto_commit(resp_msg): category = Category(name=name) db.session.add(category) resp_pbj = { 'status': 'success', 'message': f'category: {name} was added.' } return jsonify(resp_pbj), 201
def add_user(): """Add a new user, you must have permissions""" form = UserForm() resp_message = 'Invalid payload.' if not form.validate(): return BadRequest(resp_message) username = form.username.data email = form.email.data password = form.password.data user = User.query.filter_by(email=email).first() if not user: with db.auto_commit(resp_message): user = User(username, email, password) db.session.add(user) response_object = { 'status': 'success', 'message': f'{email} was added' } return jsonify(response_object), 201 else: return BadRequest('Sorry, the email is already existing.')
def get_single_category_by(cate_id): """Get Category by category's id.""" resp_message = 'Invalid payload.' try: cate_id = int(cate_id) except ValueError: return BadRequest(resp_message) category = Category.query.get_or_404(cate_id, resp_message) resp_obj = { 'status': 'success', 'data': toDict(category) } return jsonify(resp_obj), 200
def delete_single_category(cate_id): """Delete category by id.""" resp_message = 'Invalid payload.' try: cate_id = int(cate_id) except ValueError: return BadRequest(resp_message) category = Category.query.get_or_404(cate_id, resp_message) with db.auto_commit(): db.session.delete(category) resp_obj = { 'status': 'success', 'message': f'{category.id}: {category.name} is already deleted.' } # we need return message, so not for 204 # the http status maybe not properly return jsonify(resp_obj), 202
def update_single_article(): """Update singel article by `form.aid.data`.""" form = ArticleForm() resp_msg = 'Invalid payload.' if not form.validate(): return BadRequest(resp_msg) aid = form.aid.data title = form.title.data body = form.body.data category = form.category.data article = Article.query.get_or_404(aid, description=resp_msg) with db.auto_commit(resp_msg): article.title = title article.body = body article.category_id = category resp_obj = { 'status': 'success', 'message': f'{aid}: article is already updated.' } return jsonify(resp_obj), 200
def login_user(): """User log in.""" form = LoginForm() if not form.validate(): return BadRequest('Invalid payload.') email = form.email.data password = form.password.data user = User.query.filter_by(email=email).first() if user and bcrypt.check_password_hash(user.password, password): auth_token = user.encode_auth_token() response_object = { 'status': 'success', 'message': 'Successfully logged in.', 'auth_token': auth_token.decode() } return jsonify(response_object), 200 else: return NotFound('User does not exists, or password error.')
def convert_to_int_for(ident, description='Invalid payload.'): try: ident = int(ident) except ValueError: return BadRequest(description) return ident