now returning bad request when wrong parameters are supplied for room / recorder creation

This commit is contained in:
Tobias Kurze
2020-08-05 07:51:13 +02:00
parent dc142bca0c
commit 16e4231807
7 changed files with 129 additions and 15 deletions

View File

@@ -2,6 +2,7 @@
from flask import Blueprint, abort
from flask_restx import Api, Namespace
from werkzeug.exceptions import InternalServerError
api_authorizations = {
'apikey': {
@@ -73,6 +74,19 @@ from .virtual_command_api import *
# from .group_api import *
"""
@api_v1.errorhandler(InternalServerError)
def handle_500(e):
original = getattr(e, "original_exception", None)
if original is None:
# direct 500 error, such as abort(500)
api_v1.abort(500)
# wrapped unhandled error
#return render_template("500_unhandled.html", e=original), 500
api_v1.abort(500)
"""
@api_bp.route('/<path:path>')
def catch_all_api(path):

View File

@@ -2,19 +2,21 @@
"""
This module provides functions related to recorders through the API.
"""
import logging
from datetime import datetime
from pprint import pprint
from flask_jwt_extended import jwt_required
from flask_restx import fields, Resource, inputs
from backend import db, app
from backend import db, app, LrcException
from backend.api import api_recorder
from backend.api.models import recorder_model, recorder_model_model, recorder_command_model
from backend.models.recorder_model import Recorder, RecorderModel, RecorderCommand
from backend.models.room_model import Room
import backend.recorder_adapters as r_a
logger = logging.getLogger("lrc.api.recorder")
# ==
@@ -116,10 +118,14 @@ class RecorderList(Resource):
else:
return "specified recorder model (id: {}) does not exist!".format(
api_recorder.payload["recorder_model_id"]), 404
recorder = Recorder(**api_recorder.payload)
db.session.add(recorder)
db.session.commit()
return recorder
try:
recorder = Recorder(**api_recorder.payload)
db.session.add(recorder)
db.session.commit()
return recorder
except LrcException as e:
logger.error(e)
return api_recorder.abort(400, str(e))
@api_recorder.route('/model/<int:id>')

View File

@@ -5,15 +5,20 @@ For example: listing of available auth providers or registration of users.
Login through API does not start a new session, but instead returns JWT.
"""
import logging
from flask_jwt_extended import jwt_required
from flask_restx import fields, Resource
from sqlalchemy import exc
from backend import db, app
from backend import db, app, LrcException
from backend.api import api_room
from backend.models.room_model import Room
from backend.models.recorder_model import Recorder
logger = logging.getLogger("lrc.api.room")
room_model = api_room.model('Room', {
'id': fields.String(required=False, description='The room\'s identifier'),
'created_at': fields.DateTime(required=False, description='Creation date of the room info'),
@@ -80,8 +85,8 @@ class RoomResource(Resource):
room.recorder = api_room.payload["recorder"]
else:
num_rows_matched = Room.query.filter_by(id=id).update(api_room.payload)
db.session.commit()
return "ok"
db.session.commit()
return "ok"
api_room.abort(404)
@@ -112,11 +117,15 @@ class RoomList(Resource):
else:
return "specified recorder (id: {}) does not exist!".format(api_room.payload["recorder_id"]), 404
del api_room.payload["recorder_id"]
room = Room(**api_room.payload)
db.session.add(room)
try:
db.session.commit()
return room
except exc.IntegrityError as e:
db.session.rollback()
return str(e.detail), 400
room = Room(**api_room.payload)
db.session.add(room)
try:
db.session.commit()
return room
except exc.IntegrityError as e:
db.session.rollback()
return str(e.detail), 400
except LrcException as e:
logger.error(e)
return api_room.abort(400, str(e))