def get_member_for_trip(trip_key, email_address): standardized_email_address = standardize_email_address(email_address) tripMember = memcache.get("trip_id:" + str(trip_key.id()) + "key_name:" + standardized_email_address, namespace='Member') if tripMember: logging.info('Memcache: Retrieved Member for ' + "trip_id:" + str(trip_key.id()) + "key_name:" + standardized_email_address) if not tripMember: key = db.Key.from_path('Trip', trip_key.id(), 'Member', standardized_email_address) tripMember = db.get(key) if tripMember: logging.info('Datastore: Retrieved Member for ' + "trip_id:" + str(trip_key.id()) + "key_name:" + standardized_email_address) tripMember.cache_set() else: # Consider: I'm not sure that creating a new member is the way to do this!!! # Consider: Changing this to returning null and then check for side effects. # # Let me explain what happen in this bug here instead of issue tracker (because I'm on a plane) # # I added [email protected] and added a transaction for him. # Then Scott deleted [email protected] and added [email protected] # This left an orphan transaction for the email address [email protected] # The leaderboard_handler then got the display name for [email protected] for that transaction # Scott was the person logged in at the time. # When this code ran it logging.info('New: Created Member for ' + "trip_id:" + str(trip_key.id()) + "key_name:" + standardized_email_address) tripEntity = trip.get_trip(trip_key.id()) tripMember = tripEntity.create_member(standardized_email_address) return tripMember
def post(self): userPreference = userprefs.get_userprefs() try: idSelected = self.request.get('current-trip-select') if idSelected != 0: newCurrentTrip = trip.get_trip(int(idSelected)) userPreference.current_trip = newCurrentTrip userPreference.put() except: # User entered a value that wasn't legal. Ignore for now. logging.warning("Error: Trip not set") self.redirect('/options')
def post(self): currentUserprefs = userprefs.get_userprefs() current_trip_name = self.request.get('trip_name') if len(current_trip_name) == 0: current_trip_name = 'Empty trip name' trip_key_id = int(self.request.get('trip_key_id', default_value=0)) if trip_key_id != 0: current_trip = trip.get_trip(trip_key_id) current_trip.trip_name = current_trip_name current_trip.delete_non_creator_members() else: current_trip = trip.Trip(trip_name = current_trip_name) current_trip.put() currentUserprefs.current_trip = current_trip currentUserprefs.put() # Update the creator Member data creatorMember = member.get_member_for_trip(current_trip.key(), current_trip.created_by_user.email()) creatorMember.display_name = self.request.get('creator_display_name') creatorMember.email_address = member.standardize_email_address(self.request.get('creator_email_address', default_value='')) creatorMember.phone_number = member.standardize_phone_number(self.request.get('creator_phone_number')) creatorMember.put() displayNameValues=self.request.get_all('display_name') emailAddressValues=self.request.get_all('email_address') phoneNumberValues=self.request.get_all('phone_number') for i in range(len(displayNameValues)): try: if len(emailAddressValues[i]) == 0: continue # Make the key name the email address standardized_email_address = member.standardize_email_address(emailAddressValues[i]) newMember = member.get_member_for_trip(current_trip.key(), standardized_email_address) newMember.display_name = displayNameValues[i] newMember.email_address = standardized_email_address newMember.phone_number = member.standardize_phone_number(phoneNumberValues[i]) newMember.put(); # logging.info("Successfully added member.") # logging.info("i=" + str(i) + " displayName = " + displayNameValues[i]) # logging.info("i=" + str(i) + " emailAddressValues = " + emailAddressValues[i].lower()) # logging.info("i=" + str(i) + " phoneNumberValues = " + phoneNumberValues[i]) except: logging.info("Error: Did not add member at index " + str(i) + ".") # TODO: Clean up the transactions!!!! # If an email address got removed then the transactions for the deleted email must go! # That is one solution to this problem. self.redirect('/options')
def get(self): self.response.headers['Content-Type'] = 'text/html' user = users.get_current_user() # Set default values for the template data (that will be used if this is a new trip) creator_name = user.nickname() creator_email = member.standardize_email_address(user.email()) creator_phone = "" trip_name = "" trip_key_id = 0 trip_members = [] can_delete = False # Determine if this is an edit or a new trip tripId = self.request.get('id') if tripId and int(tripId) != 0: # Shouldn't ever send 0, but just in case my other code glitches :) editTrip = trip.get_trip(int(tripId)) if editTrip.is_a_member(): # OK you are indeed in the requested trip id, you may edit. Just checking. # Fill in fields with existing data trip_name = editTrip.trip_name trip_key_id = editTrip.key().id() can_delete = editTrip.created_by_user == user tripCreatorMember = member.get_member_for_trip(editTrip.key(), member.standardize_email_address(editTrip.created_by_user.email())) creator_name = tripCreatorMember.display_name creator_email = tripCreatorMember.email_address creator_phone = tripCreatorMember.phone_number allMembers = editTrip.get_all_members() for aMember in allMembers: if aMember.email_address != member.standardize_email_address(editTrip.created_by_user.email()): trip_members.append(aMember) else: self.response.out.write("You do not appear to have access to modify Trip id " + tripId) return values = {'creator_name': creator_name, 'creator_email': creator_email, 'creator_phone': creator_phone, 'trip_name': trip_name, 'trip_key_id': trip_key_id, 'trip_members': trip_members, 'can_delete': can_delete} self.response.out.write(template.render('templates/trip.html', values))
def edit_trip(trip_id): if not auth.is_logged_in(session): return redirect_to_login(STRINGS['SIGNED_OUT']) if not trip.belongs_to(trip_id, session['user_id']): return redirect_to_home(STRINGS['NOT_AUTHORIZED']) city_name = trip.get_city(trip_id)['city'] app.logger.debug("city_name: %s" % city_name) attraction_id = trip.get_attraction_id(city_name) now = dt.datetime.now().date( ) # Thanks https://stackoverflow.com/a/3279015/5434744 trip_ref = trip.get_trip(trip_id) trip_start = trip_ref['start_date'] trip_in_past = now > trip_start return render_template("trips/edit_trip.html", session=session, trip=trip_ref, attractions=attraction_id, trip_in_past=trip_in_past, activities=trip.get_activities(trip_id))