def post(self): """ Permet d'ajouter un message à la base de données avec le format de json suivant: { "sender":"alb", "to":"a", "message":"Albert a accepté votre demande de covoiturage", "refParcour": 54531213213215 } """ try: msg_dict_in = json.loads(self.request.body) cle_sender = ndb.Key("User", msg_dict_in["sender"]) cle_receiver = ndb.Key("User", msg_dict_in["to"]) if cle_sender.get() is None or cle_receiver.get() is None: self.error(400) return msg = Messages() msg.sender = msg_dict_in["sender"] msg.to = msg_dict_in["to"] msg.message = msg_dict_in["message"] msg.refParcour = msg_dict_in["refParcour"] cle = msg.put() self.response.set_status(200) self.response.headers["Content-Type"] = "application/json;" + " charset=utf-8" msg_dict_in["id"] = cle.id() json_data = json.dumps(msg_dict_in, default=serialiser_pour_json) self.response.out.write(json_data) except (db.BadValueError, ValueError, KeyError): logging.error("%s", traceback.format_exc()) self.error(400) except Exception: logging.error("%s", traceback.format_exc()) self.error(500)
def put(self, login, idParcours, idTrajet): try: cle_user_initiator = ndb.Key("User", login) cle_parcours = ndb.Key("Parcours", long(idParcours)) cle_trajet = ndb.Key("Trajet", long(idTrajet)) user_initiator = cle_user_initiator.get() parcours = cle_parcours.get() trajet = cle_trajet.get() if user_initiator is None or parcours is None or trajet is None: self.error(400) return cle_user_target = ndb.Key("User", trajet.idAuthor) user_target = cle_user_target.get() msg_dict_out = {} """ Ajouter une nouvelle demande""" if ( idTrajet not in user_initiator.listeDemandesTrajet and idParcours not in user_target.listDemandesParcours and not trajet.booked ): user_target.listDemandesParcours.append(idParcours) msg = Messages() msg.sender = login msg.to = trajet.idAuthor msg.message = user_initiator.firstName + u" vous a envoyé une demande de covoiturage" msg.refParcour = long(idParcours) msg.refTrajet = long(idTrajet) cle = msg.put() user_target.put() msg_dict_out["id"] = cle.id() msg_dict_out["succes"] = "La demande de covoiturage a été envoyé avec succès." elif ( idTrajet in user_initiator.listeDemandesTrajet and len(parcours.trajets) < parcours.nbPlaces and idTrajet not in parcours.trajets and not trajet.booked ): """ Accepter une demande et ajouté un trajet à un parcours""" parcours.trajets.append(long(idTrajet)) user_initiator.listeDemandesTrajet.remove(idTrajet) msg = Messages() msg.sender = login msg.to = trajet.idAuthor msg.message = user_initiator.firstName + u" a accepté votre demande de covoiturage" msg.refParcour = long(idParcours) msg.refTrajet = long(idTrajet) cle = msg.put() trajet.booked = True parcours.put() trajet.put() user_initiator.put() self.response.set_status(200) msg_dict_out["succes"] = "Le trajet a été ajouté avec succès" elif len(parcours.trajets) >= parcours.nbPlaces or trajet.booked: if idTrajet in user_initiator.listeDemandesTrajet: user_initiator.listeDemandesTrajet.remove(idTrajet) user_initiator.put() msg_dict_out["erreur"] = "Impossible d'ajouté un trajet. Le parcours est complet" else: msg_dict_out[ "erreur" ] = "Impossible de compléter votre requête. Votre demande est déjà envoyé ou la requête manque des données" self.response.set_status(400) self.response.headers["Content-Type"] = "application/json;" + " charset=utf-8" response_json = json.dumps(msg_dict_out, default=serialiser_pour_json) self.response.out.write(response_json) except (db.BadValueError, ValueError, KeyError): logging.error("%s", traceback.format_exc()) self.error(400) except Exception: logging.error("%s", traceback.format_exc()) self.error(500)