diff --git a/.idea/backend.iml b/.idea/backend.iml
new file mode 100644
index 0000000..e2503eb
--- /dev/null
+++ b/.idea/backend.iml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..ae2d0bd
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..0284675
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..e066844
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..e81392b
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1556266469460
+
+
+ 1556266469460
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/recorder_api.py b/api/recorder_api.py
index 4ae3ac8..4cc6174 100644
--- a/api/recorder_api.py
+++ b/api/recorder_api.py
@@ -8,25 +8,30 @@ Login through API does not start a new session, but instead returns JWT.
from flask_jwt_extended import jwt_required
from flask_restplus import fields, Resource
-from backend import db
+from backend import db, app
from backend.api import api_recorder
from backend.models.recorder_model import Recorder, RecorderModel, RecorderCommand
+from backend.models.room_model import Room
recorder_model = api_recorder.model('Recorder', {
'id': fields.String(required=False, description='The recorder\'s identifier'),
'created_at': fields.DateTime(required=False, description='Creation date of the recorder'),
- 'name': fields.String(required=True, description='The recorder\'s name'),
+ 'name': fields.String(min_length=3, required=True, description='The recorder\'s name'),
'description': fields.String(required=False, description='The recorder\'s description'),
'ip': fields.String(required=False, description='The recorder\'s IP address'),
'network_name': fields.String(required=False, description='The recorder\'s network name'),
'recorder_model': fields.Nested(api_recorder.model('recorder_model',
{'id': fields.Integer(), 'name': fields.String()}),
required=False,
+ allow_null=True,
+ skip_none=False,
description='Model of the recorder.'),
'room': fields.Nested(api_recorder.model('recorder_room',
{'id': fields.Integer(), 'name': fields.String(),
'number': fields.String(), 'alternate_name': fields.String()}),
required=False,
+ allow_null=True,
+ skip_none=False,
description='Room in which the recorder is located.')
})
@@ -39,7 +44,7 @@ recorder_model = api_recorder.model('Recorder', {
class RecorderResource(Resource):
@jwt_required
@api_recorder.doc('get_recorder')
- @api_recorder.marshal_with(recorder_model)
+ @api_recorder.marshal_with(recorder_model, skip_none=False)
def get(self, id):
"""Fetch a recorder given its identifier"""
recorder = Recorder.query.get(id)
@@ -62,7 +67,6 @@ class RecorderResource(Resource):
@jwt_required
@api_recorder.doc('update_recorder')
@api_recorder.expect(recorder_model)
- @api_recorder.marshal_with(recorder_model)
def put(self, id):
"""Update a recorder given its identifier"""
num_rows_matched = Recorder.query.filter_by(id=id).update(api_recorder.payload)
@@ -72,12 +76,11 @@ class RecorderResource(Resource):
return "ok"
-
@api_recorder.route('')
class RecorderList(Resource):
@jwt_required
@api_recorder.doc('recorders')
- @api_recorder.marshal_list_with(recorder_model)
+ @api_recorder.marshal_list_with(recorder_model, skip_none=False)
def get(self):
"""
List all recorders
@@ -88,8 +91,26 @@ class RecorderList(Resource):
@jwt_required
@api_recorder.doc('create_recorder')
@api_recorder.expect(recorder_model)
- @api_recorder.marshal_with(recorder_model, code=201)
+ @api_recorder.marshal_with(recorder_model, skip_none=False, code=201)
def post(self):
+ if "room_id" in api_recorder.payload:
+ if api_recorder.payload["room_id"] is None:
+ api_recorder.payload["room"] = None
+ else:
+ room = Room.query.get(api_recorder.payload["room_id"])
+ if room is not None:
+ api_recorder.payload["room"] = room
+ else:
+ return "specified room (id: {}) does not exist!".format(api_recorder.payload["room_id"]), 404
+ if "recorder_model_id" in api_recorder.payload:
+ if api_recorder.payload["recorder_model_id"] is None:
+ api_recorder.payload["recorder_model"] = None
+ else:
+ rec_model = RecorderModel.query.get(api_recorder.payload["recorder_model_id"])
+ if rec_model is not None:
+ api_recorder.payload["recorder_model"] = rec_model
+ 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()
@@ -172,6 +193,15 @@ class RecorderModelList(Resource):
@api_recorder.expect(recorder_model_model)
@api_recorder.marshal_with(recorder_model_model, code=201)
def post(self):
+ if "recorders" in api_recorder.payload:
+ if api_recorder.payload["recorders"] is None or len(api_recorder.payload["recorders"]) < 1 :
+ api_recorder.payload["recorders"] = []
+ else:
+ rec_model = RecorderModel.query.get(api_recorder.payload["recorder_model_id"])
+ if rec_model is not None:
+ api_recorder.payload["recorder_model"] = rec_model
+ 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()
diff --git a/api/room_api.py b/api/room_api.py
index a67d77b..9f29f11 100644
--- a/api/room_api.py
+++ b/api/room_api.py
@@ -12,6 +12,7 @@ from sqlalchemy import exc
from backend import db, app
from backend.api import api_room
from backend.models.room_model import Room
+from backend.models.recorder_model import Recorder
room_model = api_room.model('Room', {
'id': fields.String(required=False, description='The room\'s identifier'),
@@ -20,10 +21,14 @@ room_model = api_room.model('Room', {
'alternate_name': fields.String(required=False, description='The room\'s alternate name'),
'comment': fields.String(required=False, description='The room\'s comment'),
'number': fields.String(required=True, description='The room\'s number'),
- 'recorder': fields.List(fields.Nested(api_room.model('room_recorder',
- {'id': fields.Integer(), 'name': fields.String(),
- 'ip': fields.String(), 'network_name': fields.String()})),
- required=False, description='Room members.')
+ 'recorder': fields.Nested(api_room.model('room_recorder',
+ {'id': fields.Integer(), 'name': fields.String(),
+ 'ip': fields.String(), 'network_name': fields.String()}),
+ allow_null=True,
+ skip_none=False,
+ required=False,
+ description='Room recorder.'),
+
})
@@ -33,7 +38,7 @@ room_model = api_room.model('Room', {
class RoomResource(Resource):
@jwt_required
@api_room.doc('get_room')
- @api_room.marshal_with(room_model)
+ @api_room.marshal_with(room_model, skip_none=False)
def get(self, id):
"""Fetch a user given its identifier"""
room = Room.query.get(id)
@@ -56,16 +61,24 @@ class RoomResource(Resource):
@jwt_required
@api_room.doc('update_room')
@api_room.expect(room_model)
- @api_room.marshal_with(room_model)
def put(self, id):
+ app.logger.debug(api_room.payload)
'''Update a task given its identifier'''
- num_rows_matched = Room.query.filter_by(id=id).update(api_room.payload)
+ if "recorder_id" in api_room.payload:
+ if api_room.payload["recorder_id"] is None:
+ api_room.payload["recorder"] = None
+ else:
+ recorder = Recorder.query.get(api_room.payload["recorder_id"])
+ if recorder is not None:
+ api_room.payload["recorder"] = recorder
+ else:
+ return "specified recorder (id: {}) does not exist!".format(api_room.payload["recorder_id"]), 404
+ room = Room.query.get(id)
+ if room is not None:
+ room.recorder = api_room.payload["recorder"]
+ else:
+ num_rows_matched = Room.query.filter_by(id=id).update(api_room.payload)
db.session.commit()
- # if room is not None:
- # app.logger.debug(room)
- # room.update(api_room.payload)
- # db.session.commit()
- # return room
return "ok"
api_room.abort(404)
@@ -74,7 +87,7 @@ class RoomResource(Resource):
class RoomList(Resource):
@jwt_required
@api_room.doc('rooms')
- @api_room.marshal_list_with(room_model)
+ @api_room.marshal_list_with(room_model, skip_none=False)
def get(self):
"""
List all rooms
@@ -85,8 +98,18 @@ class RoomList(Resource):
@jwt_required
@api_room.doc('create_room')
@api_room.expect(room_model)
- @api_room.marshal_with(room_model, code=201)
+ @api_room.marshal_with(room_model, skip_none=False, code=201)
def post(self):
+ if "recorder_id" in api_room.payload:
+ if api_room.payload["recorder_id"] is None:
+ api_room.payload["recorder"] = None
+ else:
+ recorder = Recorder.query.get(api_room.payload["recorder_id"])
+ if recorder is not None:
+ api_room.payload["recorder"] = recorder
+ 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:
diff --git a/app.db b/app.db
index c8e1342..dba5758 100644
Binary files a/app.db and b/app.db differ