def handle_post(self, email): if self.request.get("trip_entity_key"): trip_key = ndb.Key(urlsafe=self.request.get("trip_entity_key")) trip = trip_key.get() else: trip = Trip(parent=utils.get_parent_key_for_email(email)) trip.state = self.request.get("state") trip.city = self.request.get("city") trip.start_date = self.request.get("arrival-date") trip.end_date = self.request.get("departure-date") trip.description = self.request.get("description") # last touch modified time update? or nah? # image if self.get_uploads() and len(self.get_uploads()) == 1: logging.info("Received an image blob with this trip.") media_blob = self.get_uploads()[0] trip.media_blob_key = media_blob.key() else: logging.info("This is a trip without an image attachment.") trip.put() self.redirect(self.request.referer)
def post(self): errors = [] output = "" user = users.get_current_user() authz = Authz(user) self.response.headers["Content-type"] = "application/json" # check for authorization to create new trips & verify this is in fact # a request to create a new trip try: # user allowed to create trips? authz.createTrip() except PermissionError as e: # this permission error could have come from authz or locally errors.append({"message": e.args}) # bail if we hit authz errors if len(errors) > 0: self.response.set_status(400) output = json.dumps({"error": errors}) self.response.out.write(output) return # user is allowed, so go ahead and try to create this thing #logging.debug(self.request.body) data = TripUnpacker().unpack_post(self.request) #logging.debug(data) if data['name'] == "" or data['password'] == "": errors.append({"message": "Trip name and password are required."}) else: try: trip = Trip(name=data['name'], password=data['password'], owner=user) # get traveler names raw_travelers = data['travelers'] if len(raw_travelers) > Config.limits.travelers_per_trip: logging.warning('Attempt to add too many travelers: %s', user.nickname) raw_travelers = raw_travelers[:Config.limits. travelers_per_trip] travelers = [] for traveler in raw_travelers: if traveler.strip() != "": travelers.append(traveler.strip()) trip.travelers = travelers # get dates # TODO: validation that these dates are sane and properly ordered start_date = dateparse(data['start_date']) end_date = dateparse(data['end_date']) trip.start_date = start_date.date() #logging.debug("start date = " + str(start_date.date())) trip.end_date = end_date.date() #logging.debug("end date = " + str(end_date.date())) trip.put() output = GqlEncoder().encode({ "id": "%s" % trip.key(), 'modify_date': trip.modify_date, 'start_date': trip.start_date, 'end_date': trip.end_date, }) except Exception as e: logging.exception(e) errors.append({"message": "Unexpected error creating trip"}) if len(errors) > 0: self.response.set_status(400) output = json.dumps({"error": errors}) self.response.out.write(output)
def post(self): errors = [] output = "" user = users.get_current_user() authz = Authz(user) self.response.headers["Content-type"] = "application/json" # check for authorization to create new trips & verify this is in fact # a request to create a new trip try: # user allowed to create trips? authz.createTrip() except PermissionError as e: # this permission error could have come from authz or locally errors.append({"message": e.args}) # bail if we hit authz errors if len(errors) > 0: self.response.set_status(400) output = json.dumps({"error": errors}) self.response.out.write(output) return # user is allowed, so go ahead and try to create this thing # logging.debug(self.request.body) data = TripUnpacker().unpack_post(self.request) # logging.debug(data) if data["name"] == "" or data["password"] == "": errors.append({"message": "Trip name and password are required."}) else: try: trip = Trip(name=data["name"], password=data["password"], owner=user) # get traveler names raw_travelers = data["travelers"] if len(raw_travelers) > Config.limits.travelers_per_trip: logging.warning("Attempt to add too many travelers: %s", user.nickname) raw_travelers = raw_travelers[: Config.limits.travelers_per_trip] travelers = [] for traveler in raw_travelers: if traveler.strip() != "": travelers.append(traveler.strip()) trip.travelers = travelers # get dates # TODO: validation that these dates are sane and properly ordered start_date = dateparse(data["start_date"]) end_date = dateparse(data["end_date"]) trip.start_date = start_date.date() # logging.debug("start date = " + str(start_date.date())) trip.end_date = end_date.date() # logging.debug("end date = " + str(end_date.date())) trip.put() output = GqlEncoder().encode( { "id": "%s" % trip.key(), "modify_date": trip.modify_date, "start_date": trip.start_date, "end_date": trip.end_date, } ) except Exception as e: logging.exception(e) errors.append({"message": "Unexpected error creating trip"}) if len(errors) > 0: self.response.set_status(400) output = json.dumps({"error": errors}) self.response.out.write(output)