def favorite_tour(): ''' Togggles whether a tour is favorited for a user. Returns "removed" or "created". Returns 422 if incorrect JSON arguments are provided. <u>JSON Args:</u> user_id, tour_id ''' if not checkLogin(): return notAuthorizedResponse() data = request.get_json() user_id = data.get("user_id") tour_id = data.get("tour_id") if user_id is None or tour_id is None: return "must supply tour_id and user_id", 422 query = get_session().query(FavoritesClass).filter( and_(FavoritesClass.user_id == user_id, FavoritesClass.tour_id == tour_id)) fav = safe_call(query, "first", None) deleted = False print(fav) if fav is None: fav = FavoritesClass() fav.user_id = user_id fav.tour_id = tour_id get_session().add(fav) else: get_session().delete(fav) deleted = True print(deleted) commitSession() return ("removed" if deleted else "created")
def upload_profile_image(self, file, tourid): s = file.filename.split('.') extension = s[-1] url = 'https://s3.amazonaws.com/silktours-media/' + 'tour/profile/' + tourid + '.' + extension self.upload_to_s3(file, tourid + '.' + extension) self.profile_image = url commitSession(self) return self.serialize()
def clear_pending_review(eventId): """ Clears the pending review for the tour event. """ if not checkLogin(): return notAuthorizedResponse() event = safe_call(get_session().query(TourEvent), "get", eventId) event.pending_review = False commitSession(event) return "Success"
def compute_tour_event(eventId): """ Marks the given tour event as completed. Also creates a pending review. """ if not checkLogin(): return notAuthorizedResponse() event = safe_call(get_session().query(TourEvent), "get", eventId) event.state = "C" event.pending_review = True commitSession(event)
def edit_tourevent(eventid): """ Edits a tour event. Takes the usual tour event JSON. """ if not checkLogin(): return notAuthorizedResponse() data = request.get_json() event = safe_call(get_session().query(TourEvent), "get", eventid) event.set_props(data) commitSession(event) return jsonify(event.serialize())
def create(data, id_tour=None): result = None if "id_stop" in data: result = get_session().query(Stop).get(data["id_stop"]) if result is None: result = Stop() result.set_props(data.get("id_tour"), data.get("lat"), data.get("lon")) if id_tour is not None: result.id_tour = id_tour commitSession(result) return result
def set_tourevent(): """ Create a new tour event. Takes the usual tour event JSON. """ if not checkLogin(): return notAuthorizedResponse() data = request.get_json() event = TourEvent() event.set_props(data) commitSession(event) return jsonify(event.serialize())
def create(data, id_tour=None): result = None if "id_tour_guide" in data: result = get_session().query(TourGuidesClass).get( data["id_tour_guide"]) if result is None: result = TourGuidesClass() result.set_props(data) if id_tour is not None: result.id_tour = id_tour commitSession(result) return result
def create(data, id_tour=None, id_user=None): result = None if "id_tourEvent" in data: result = get_session().query(TourEvent).get(data["id_tourEvent"]) if result is None: result = TourEvent() result.set_props(data) if id_tour is not None: result.id_tour = id_tour if id_user is not None: result.id_user = id_user commitSession(result) return result
def create(data, id_tour=None, id_user=None): result = None if "id_interestList" in data: result = get_session().query(Interests).get( data["id_interestList"]) if result is None: result = Interests() result.set_props(data) if id_tour is not None: result.id_tour = id_tour if id_user is not None: result.id_user = id_user commitSession(result) return result
def create(data, id_tour=None): result = None if "tour_hours_id" in data: result = get_session().query(TourHoursSpecial).get( data["tour_hours_special_id"]) if result is None: result = TourHoursSpecial() result.set_props(data.get("tour_id"), data.get("date"), data.get("open_time"), data.get("close_time"), data.get("overrides")) if id_tour is not None: result.tour_id = id_tour commitSession(result) return result
def create_extras(self, data): for key in data: if key == "stops": for item in data[key]: Stop.create(item, self.id_tour) # self.stops = [Stop.create(item, self.id_tour) for item in data[key]] elif key == "interests": for item in data[key]: Interests.create(item, self.id_tour) # self.interests = [Interests.create(item, self.id_tour) for item in data[key]] elif key == "guides": for item in data[key]: TourGuidesClass.create(item, self.id_tour) elif key == "address": address = Address.create(data[key]) self.address_id = address.id_address commitSession(self)
def create(data, id_tour=None): result = None if "tour_hours_id" in data: result = get_session().query(TourHours).get(data["tour_hours_id"]) if result is None: result = TourHours() result.set_props( data.get("tour_id"), data.get("day_of_week"), data.get("open_time"), data.get("close_time"), data.get("start_time"), data.get("end_time")) if id_tour is not None: result.tour_id = id_tour commitSession(result) return result
def edit_user_profile(userid): """ Uploads and sets a user's profile image <u>JSON fields:</u> file=base 64 string, name=the filename """ if not checkLogin(): return notAuthorizedResponse() data = request.get_json() file_data = data['file'] filename = data['name'] media = Media() result = media.upload(file_data, filename, userid=userid) user = safe_call(get_session().query(User), "get", userid) user.profile_picture = result["url"] # TODO set profile image size in db commitSession(user) return jsonify(result)
def edit_tour_profile(tourid): """ Uploads and sets a tour's profile image. <u>JSON fields:</u>file=base64 encoded file, name=filename """ if not checkLogin(): return notAuthorizedResponse() data = request.get_json() file_data = data['file'] filename = data['name'] media = Media() result = media.upload(file_data, filename, tourid=tourid) tour = safe_call(get_session().query(Tour), "get", tourid) tour.profile_image = result["url"] # TODO set profile image size in db commitSession(tour) return jsonify(result)
def add_stop(): """ Adds a new stop to a tour. Stops can also be set with POST /tour. <u>JSON fields:</u> id_tour, lat, lon """ if not checkLogin(): return notAuthorizedResponse() data = request.get_json() stop = Stop() id_tour = data["id_tour"] lat = float(data["lat"]) lon = float(data["lon"]) stop.set_props(id_tour, lat, lon) commitSession(stop) return "Success"
def add_rating(): """ Adds a new raing to the tour. <u>JSON fields:</u> id_user_rated=the raters id, id_tour_rated=the tour to rate, rating=rating from 1-5, comment=string comment """ if not checkLogin(): return notAuthorizedResponse() data = request.get_json() rating = Rating() id_user_rated = data["id_user_rated"] id_tour_rated = data["id_tour_rated"] rating_value = float(data["rating"]) comment = data["comment"] rating.set_props(rating_value, comment, id_tour_rated, id_user_rated) tour = get_session().query(Tour).get(int(id_tour_rated)) tour.average_rating = ( (tour.average_rating * tour.rating_count + rating_value) / (tour.rating_count + 1)) tour.rating_count += 1 get_session().add(tour) get_session().add(rating) commitSession() return "Success"
def createOrEdit(self, data): self.set_props(data) commitSession(self) self.create_extras(data) commitSession(self)
def setProps(self, data): for key in data: setattr(self, key, data[key]) createSession() get_session().add(self) commitSession()