Пример #1
0
    def on_get(self, req, resp, rid, related):
        """ Find the related model & serialize it back

        If the parent resource of the related model doesn't
        exist then abort on a 404.
        """

        signals.pre_req.send(self.model)
        signals.pre_req_find.send(self.model)

        if not hasattr(self.model, related):
            abort(InvalidURL(**{
                'detail': 'The "%s" resource does not have a related '
                          'resource named "%s". This is an error, check '
                          'your spelling & retry.' % (self.rtype, related)
            }))

        model = find(self.model, rid)
        try:
            model_related = getattr(model, related).load()
        except AttributeError:
            model_related = None

        if isinstance(model_related, list):
            props = to_rest_models(model_related, includes=req.includes)
        elif model:
            props = to_rest_model(model_related, includes=req.includes)
        else:
            props = model_related

        resp.serialize(props)

        signals.post_req.send(self.model)
        signals.post_req_find.send(self.model)
Пример #2
0
    def on_post(self, req, resp, rid):
        """ Deserialize the file upload & save it to S3

        File uploads are associated with a model of some
        kind. Ensure the associating model exists first &
        foremost.
        """

        signals.pre_req.send(self.model)
        signals.pre_req_upload.send(self.model)

        props = req.deserialize(self.mimetypes)
        model = find(self.model, rid)

        signals.pre_upload.send(self.model, model=model)

        try:
            conn = s3_connect(self.key, self.secret)
            path = self._gen_s3_path(model, props)
            s3_url = s3_upload(self.acl, self.bucket, conn, props['content'],
                               props['content-type'], path)
        except IOError:
            abort(ServiceUnavailable(**{
                'detail': 'The upload attempt failed unexpectedly',
            }))
        else:
            signals.post_upload.send(self.model, model=model, url=s3_url)

            resp.location = s3_url
            resp.status = falcon.HTTP_201

            resp.serialize({'data': {'url': s3_url}})

            signals.post_req.send(self.model)
            signals.post_req_upload.send(self.model)
Пример #3
0
def on_get(resc, req, resp, rid):
    """ Find the model by id & serialize it back """

    signals.pre_req.send(resc.model)
    signals.pre_req_find.send(resc.model)

    model = find(resc.model, rid)
    props = to_rest_model(model, includes=req.includes)

    resp.last_modified = model.updated
    resp.serialize(props)

    signals.post_req.send(resc.model)
    signals.post_req_find.send(resc.model)
Пример #4
0
def on_delete(resc, req, resp, rid):  # pylint: disable=unused-argument
    """ Delete the single item

    Upon a successful deletion an empty bodied 204
    is returned.
    """

    signals.pre_req.send(resc.model)
    signals.pre_req_delete.send(resc.model)

    model = find(resc.model, rid)
    goldman.sess.store.delete(model)

    resp.status = falcon.HTTP_204

    signals.post_req.send(resc.model)
    signals.post_req_delete.send(resc.model)
Пример #5
0
def on_patch(resc, req, resp, rid):
    """ Deserialize the payload & update the single item """

    signals.pre_req.send(resc.model)
    signals.pre_req_update.send(resc.model)

    props = req.deserialize()
    model = find(resc.model, rid)

    from_rest(model, props)
    goldman.sess.store.update(model)

    props = to_rest_model(model, includes=req.includes)
    resp.last_modified = model.updated
    resp.serialize(props)

    signals.post_req.send(resc.model)
    signals.post_req_update.send(resc.model)