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)
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)
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)
def on_post(resc, req, resp): """ Deserialize the payload & create the new single item """ signals.pre_req.send(resc.model) signals.pre_req_create.send(resc.model) props = req.deserialize() model = resc.model() from_rest(model, props) goldman.sess.store.create(model) props = to_rest_model(model, includes=req.includes) resp.last_modified = model.updated resp.location = '%s/%s' % (req.path, model.rid_value) resp.status = falcon.HTTP_201 resp.serialize(props) signals.post_req.send(resc.model) signals.post_req_create.send(resc.model)