def post(self, obj_id=None): """ Post room(s) Create a new room/ Update a room --- tags: - rooms parameters: - in: path name: obj_id - in: body name: body schema: id: Room required: - number properties: number: type: integer description: room number responses: 201: description: Room created """ data = self.prepare_data() form = RoomForm(data, csrf_enabled=False) if form.validate(): if obj_id: room = Room.get_by_id(int(obj_id)) if not room: abort(404, message="Room with key ({}) not found".format(obj_id)) room.is_booked = form.is_booked.data if form.is_booked.data else room.is_booked room.put() output = self.output_fields output.update(self.resource_fields) return marshal(room, output), 200 room = Room(number=form.number.data, is_booked=form.is_booked.data) room.put() room.id = str(room.key.id()) room.put() output = self.output_fields output.update(self.resource_fields) return marshal(room, output), 201 error_data = self.prepare_errors(form.errors) raise CustomException(code=400, name='Validation Failed', data=error_data)
def get(self, obj_id=None): """ Gets room(s). Returns all rooms if no obj_id is passed --- tags: - rooms parameters: - in: path name: obj_id definitions: - schema: id: Room required: - number optional: - is_booked properties: number: type: string description: the room's number responses: 200: description: Returns the specified room or a list of rooms $ref: '#/definitions/Room' """ if not obj_id: query = Room.query().fetch() output = self.output_fields output.update(self.resource_fields) resp = { 'results': marshal(query, output), 'count': len(query) } return resp, 200 try: room = Room.get_by_id(int(obj_id)) if not room: abort(404, message="Room with key ({}) not found".format(obj_id)) output = self.output_fields output.update(self.resource_fields) return marshal(room, output), 200 except Exception: abort(404, message="Room with key ({}) not found".format(obj_id))
def delete(self, obj_id): """ DELETE room Delete a room --- tags: - rooms parameters: - in: path name: obj_id schema: id: Room responses: 204: description: Room deleted """ try: room = Room.get_by_id(int(obj_id)) room.key.delete() return True, 204 except Exception: raise CustomException(code=400, name='Validation Failed', data={"message": 'DELETE failed for Room with ' 'key {}'.format(obj_id)})