Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)