예제 #1
0
    def handle_post(self, email, account_info):
        if self.request.get("trip_entity_key"):
            trip = self.request.get("trip_entity_key").get()
            trip.capacity_left = int(self.request.get("capacity"))
        else:
            trip = Trip(parent=trip_utils.get_parent_key_from_username(
                account_info.rose_username))

        if self.request.get("role_radio_group") == "driver":
            trip.driver = account_info.key
        elif self.request.get("role_radio_group") == "passenger":
            trip.passengers.append(account_info.key)
        else:
            raise Exception("wrong value")

        trip.origin = self.request.get("origin")
        trip.destination = self.request.get("destination")
        pick_up_time = date_utils.get_utc_datetime_from_user_input(
            account_info.time_zone, self.request.get("pick_up_time"))
        trip.pick_up_time = pick_up_time
        trip.price = self.request.get("price")
        if self.request.get("capacity"):
            trip.capacity_left = int(self.request.get("capacity"))
        else:
            trip.capacity_left = 0

        trip.put()
        trip_utils.send_email(email, account_info, trip.origin,
                              trip.destination, trip.pick_up_time, False,
                              False, True)

        self.redirect("/find-trip")
예제 #2
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)
예제 #3
0
 def post(self):
     '''
     Adds trip to datastore
     '''
     
     _,id,_,_ = self.get_user()
     
     #TODO some checking      
     trip = Trip(parent=helper.trip_key(id))
     trip.trip_name = self.request.get('trip_name')
     
     trip.description = self.request.get('description')
     trip.cities =  self.get_cities(self.request.get('cities'))
     avatar = self.request.get('img')
     if  avatar:
         trip.trip_avatar = avatar
     
     
     try:
         trip.from_date = datetime.strptime( self.request.get('from_date'), '%d/%m/%Y')  
         trip.to_date = datetime.strptime(self.request.get('to_date'), '%d/%m/%Y')
     except:
         try:
             trip.from_date = datetime.strptime( self.request.get('from_date'), '%Y-%m-%d')  
             trip.to_date = datetime.strptime(self.request.get('to_date'), '%Y-%m-%d')
         except:
             trip.from_date = datetime.strptime( '2000-01-01', '%Y-%m-%d')  
             trip.to_date = datetime.strptime('2000-01-01', '%Y-%m-%d')
     
     if self.request.get('visibility') == 'True':
         trip.visibility = True
     else:
         trip.visibility = False
     
     #create statistic for trip 
     trip.trip_statistic = TrackStatistic(name="Trip Stat",total_distance=0,total_time="",
                                          avr_speed=0,total_climb=0,max_elev=-100)
     
     #crete tags for trip
     locationl = helper.creatList(self.request.get('location'))
     typel = helper.creatList(self.request.get('type'))
     seasonl = helper.creatList(self.request.get('season'))
     trip.trip_tags = Tags(location=locationl,type=typel,season=seasonl)
     
     trip.put()
            
     #put new tags in users tags
     tags_query = Tags.query(ancestor=helper.trip_key(id))
     tags = tags_query.fetch(1)
     if tags:
         tags = tags[0]
         tags.location = helper.union(tags.location,locationl)
         tags.type = helper.union(tags.type,typel)
         tags.season = helper.union(tags.season,seasonl)
                   
     else:
         new_loc_tags = locationl
         new_type_tags = typel
         new_seasion_tags = seasonl
         tags = Tags(parent=helper.trip_key(id),location=new_loc_tags,type=new_type_tags,season=new_seasion_tags)
     
     tags.put()
     
     #redirect to mytrips because showing all tips will only be consistent in scope of user
     # and only eventually consistent for whole datastore  
     self.redirect('/tripmanager')
예제 #4
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)
예제 #5
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)