コード例 #1
0
    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)
コード例 #2
0
    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))
コード例 #3
0
 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)})