def post(self): if self.redirected: # The call was redirected in the __init__ -- do not do anything in this # handler -- just return return if not self.google_user: # The __init__ definitions in the base classes should redirect to authentication, so this should never # happen. However, we include this check if somehow this get handler is invoked but the user is not # authenticated raise UnauthorizedException( "/edit_profile invoked but user has not been authenticated. " + "Unable to handle request.") elif not self.application_user: # The __init__ definitions in the base classes should redirect to /register_user, so this should never # happen. However, we include this check if somehow this get handler is invoked but the user is # not registered. raise NotRegisteredException( "/edit_profile invoked but the user has not registered. " + "Unable to handle request.") continue_to = self.request.get('after_editing_profile_continue_to') if continue_to is None or re.match(r"^\s*$", continue_to): continue_to = '/' continue_to = str(continue_to) google_user = self.google_user application_user = self.application_user first_name = self.request.get('first_name') middle_name = self.request.get('middle_name') last_name = self.request.get('last_name') if first_name is not None: first_name = first_name.strip() if last_name is not None: last_name = last_name.strip() if middle_name is not None: middle_name = middle_name.strip() application_user_changed = False feedback = None feedback_status = None if first_name is not None and not re.match(r"^\s*$", first_name): if first_name != application_user.first_name: application_user.first_name = first_name application_user_changed = True if last_name is not None and not re.match(r"^\s*$", last_name): if last_name != application_user.last_name: application_user.last_name = last_name application_user_changed = True if middle_name is None or middle_name == '': if application_user.middle_name is not None and not re.match( r"^\s*$", application_user.middle_name): application_user.middle_name = None application_user_changed = True else: if application_user.middle_name is None or re.match( r"^\s*$", application_user.middle_name): application_user.middle_name = middle_name application_user_changed = True elif application_user.middle_name != application_user.middle_name: application_user.middle_name = middle_name application_user_changed = True if application_user_changed: update_success = True try: application_user.put() except: update_success = False if update_success: feedback = 'Successfully updated your registration.' feedback_status = 'Success' else: feedback = 'Attempt to update your registration failed.' feedback_status = 'Failure' edit_profile_url = self.request.application_url if not re.match(r"^.*$", edit_profile_url): edit_profile_url += '/' edit_profile_url += 'edit_profile' feedback = urllib.quote(feedback, safe='') feedback_status = urllib.quote(feedback_status, safe='') return self.redirect(edit_profile_url + '?feedback=' + feedback + '&feedback_status=' + feedback_status) bio = self.request.get('bio') if bio is not None: bio = bio.strip() if bio == '' or re.match(r"^\s*$", bio): bio = None application_user_id = application_user.application_user_id profile_unique_display_name = self.request.get( 'profile_unique_display_name') profile_unique_display_name = profile_unique_display_name.strip() profile_obj_for_user = Profile.get_profile_by_application_user_id( application_user_id) profile_obj_for_profile_name = Profile.get_profile_by_profile_unique_name( profile_unique_display_name) if profile_obj_for_profile_name is not None: # There is already a profile for the given profile unique display name: if profile_obj_for_profile_name.application_user_id != application_user_id: # The profile that already exists is not for this user but is for another user: feedback = "Cannot setup your profile, the profile name '%s' is already in use." % \ profile_unique_display_name feedback_status = 'Failure' edit_profile_url = self.request.application_url if not re.match(r"^.*$", edit_profile_url): edit_profile_url += '/' edit_profile_url += 'edit_profile' feedback = urllib.quote(feedback, safe='') feedback_status = urllib.quote(feedback_status, safe='') return self.redirect(edit_profile_url + '?feedback=' + feedback + '&feedback_status=' + feedback_status) else: # The profile already exists and is for this user: profile_changed = False if bio is None and profile_obj_for_profile_name.bio is not None: profile_obj_for_profile_name.bio = None profile_changed = True if profile_changed: update_success = True try: profile_obj_for_profile_name.put() except: update_success = False if update_success: feedback = 'Successfully updated your profile.' feedback_status = 'Success' else: feedback = 'Attempt to update your profile failed.' feedback_status = 'Failure' elif feedback is None: feedback = 'Your profile information is unchanged.' feedback_status = 'No_Change' edit_profile_url = self.request.application_url if not re.match(r"^.*$", edit_profile_url): edit_profile_url += '/' edit_profile_url += 'edit_profile' feedback = urllib.quote(feedback, safe='') feedback_status = urllib.quote(feedback_status, safe='') return self.redirect(edit_profile_url + '?feedback=' + feedback + '&feedback_status=' + feedback_status) elif profile_obj_for_user is not None: # The user has a profile object profile_unique_name = Profile.get_profile_unique_name_from_profile_display_name( profile_unique_display_name) if profile_unique_name != profile_obj_for_user.profile_unique_name: # Request to change the profile unique name: # First, delete the existing profile object: delete_sucess = True try: profile_obj_for_user.key.delete() except: delete_sucess = False if not delete_sucess: feedback = 'Attempt to update your profile failed.' feedback_status = 'Failure' else: # Next, create a new profile object using the new profile unique name: new_profile_success = True try: new_profile_obj = Profile.add_profile( profile_unique_display_name, application_user_id, bio=bio) except: new_profile_success = False if new_profile_success: feedback = 'Successfully updated your profile.' feedback_status = 'Success' else: feedback = 'Attempt to update your profile failed.' feedback_status = 'Failure' else: feedback = 'Your profile information is unchanged.' feedback_status = 'No_Change' edit_profile_url = self.request.application_url if not re.match(r"^.*$", edit_profile_url): edit_profile_url += '/' edit_profile_url += 'edit_profile' feedback = urllib.quote(feedback, safe='') feedback_status = urllib.quote(feedback_status, safe='') return self.redirect(edit_profile_url + '?feedback=' + feedback + '&feedback_status=' + feedback_status) else: # Create a new profile for this user: new_profile_success = True try: new_profile_obj = Profile.add_profile( profile_unique_display_name, application_user_id, bio=bio) except: new_profile_success = False if new_profile_success: feedback = 'Successfully created your profile.' feedback_status = 'Success' else: feedback = 'Attempt to create your profile failed.' feedback_status = 'Failure' edit_profile_url = self.request.application_url if not re.match(r"^.*$", edit_profile_url): edit_profile_url += '/' edit_profile_url += 'edit_profile' feedback = urllib.quote(feedback, safe='') feedback_status = urllib.quote(feedback_status, safe='') return self.redirect(edit_profile_url + '?feedback=' + feedback + '&feedback_status=' + feedback_status)
def post(self): if self.redirected: # The call was redirected in the __init__ -- do not do anything in this # handler -- just return return if not self.google_user: # The __init__ definitions in the base classes should redirect to authentication, so this should never # happen. However, we include this check if somehow this get handler is invoked but the user is not # authenticated raise UnauthorizedException("/edit_profile invoked but user has not been authenticated. " + "Unable to handle request.") elif not self.application_user: # The __init__ definitions in the base classes should redirect to /register_user, so this should never # happen. However, we include this check if somehow this get handler is invoked but the user is # not registered. raise NotRegisteredException("/edit_profile invoked but the user has not registered. " + "Unable to handle request.") continue_to = self.request.get('after_editing_profile_continue_to') if continue_to is None or re.match(r"^\s*$", continue_to): continue_to = '/' continue_to = str(continue_to) google_user = self.google_user application_user = self.application_user first_name = self.request.get('first_name') middle_name = self.request.get('middle_name') last_name = self.request.get('last_name') if first_name is not None: first_name = first_name.strip() if last_name is not None: last_name = last_name.strip() if middle_name is not None: middle_name = middle_name.strip() application_user_changed = False feedback = None feedback_status = None if first_name is not None and not re.match(r"^\s*$", first_name): if first_name != application_user.first_name: application_user.first_name = first_name application_user_changed = True if last_name is not None and not re.match(r"^\s*$", last_name): if last_name != application_user.last_name: application_user.last_name = last_name application_user_changed = True if middle_name is None or middle_name == '': if application_user.middle_name is not None and not re.match(r"^\s*$", application_user.middle_name): application_user.middle_name = None application_user_changed = True else: if application_user.middle_name is None or re.match(r"^\s*$", application_user.middle_name): application_user.middle_name = middle_name application_user_changed = True elif application_user.middle_name != application_user.middle_name: application_user.middle_name = middle_name application_user_changed = True if application_user_changed: update_success = True try: application_user.put() except: update_success = False if update_success: feedback = 'Successfully updated your registration.' feedback_status = 'Success' else: feedback = 'Attempt to update your registration failed.' feedback_status = 'Failure' edit_profile_url = self.request.application_url if not re.match(r"^.*$", edit_profile_url): edit_profile_url += '/' edit_profile_url += 'edit_profile' feedback = urllib.quote(feedback, safe='') feedback_status = urllib.quote(feedback_status, safe='') return self.redirect(edit_profile_url + '?feedback=' + feedback + '&feedback_status=' + feedback_status) bio = self.request.get('bio') if bio is not None: bio = bio.strip() if bio == '' or re.match(r"^\s*$", bio): bio = None application_user_id = application_user.application_user_id profile_unique_display_name = self.request.get('profile_unique_display_name') profile_unique_display_name = profile_unique_display_name.strip() profile_obj_for_user = Profile.get_profile_by_application_user_id(application_user_id) profile_obj_for_profile_name = Profile.get_profile_by_profile_unique_name(profile_unique_display_name) if profile_obj_for_profile_name is not None: # There is already a profile for the given profile unique display name: if profile_obj_for_profile_name.application_user_id != application_user_id: # The profile that already exists is not for this user but is for another user: feedback = "Cannot setup your profile, the profile name '%s' is already in use." % \ profile_unique_display_name feedback_status = 'Failure' edit_profile_url = self.request.application_url if not re.match(r"^.*$", edit_profile_url): edit_profile_url += '/' edit_profile_url += 'edit_profile' feedback = urllib.quote(feedback, safe='') feedback_status = urllib.quote(feedback_status, safe='') return self.redirect(edit_profile_url + '?feedback=' + feedback + '&feedback_status=' + feedback_status) else: # The profile already exists and is for this user: profile_changed = False if bio is None and profile_obj_for_profile_name.bio is not None: profile_obj_for_profile_name.bio = None profile_changed = True if profile_changed: update_success = True try: profile_obj_for_profile_name.put() except: update_success = False if update_success: feedback = 'Successfully updated your profile.' feedback_status = 'Success' else: feedback = 'Attempt to update your profile failed.' feedback_status = 'Failure' elif feedback is None: feedback = 'Your profile information is unchanged.' feedback_status = 'No_Change' edit_profile_url = self.request.application_url if not re.match(r"^.*$", edit_profile_url): edit_profile_url += '/' edit_profile_url += 'edit_profile' feedback = urllib.quote(feedback, safe='') feedback_status = urllib.quote(feedback_status, safe='') return self.redirect(edit_profile_url + '?feedback=' + feedback + '&feedback_status=' + feedback_status) elif profile_obj_for_user is not None: # The user has a profile object profile_unique_name = Profile.get_profile_unique_name_from_profile_display_name(profile_unique_display_name) if profile_unique_name != profile_obj_for_user.profile_unique_name: # Request to change the profile unique name: # First, delete the existing profile object: delete_sucess = True try: profile_obj_for_user.key.delete() except: delete_sucess = False if not delete_sucess: feedback = 'Attempt to update your profile failed.' feedback_status = 'Failure' else: # Next, create a new profile object using the new profile unique name: new_profile_success = True try: new_profile_obj = Profile.add_profile(profile_unique_display_name, application_user_id, bio=bio) except: new_profile_success = False if new_profile_success: feedback = 'Successfully updated your profile.' feedback_status = 'Success' else: feedback = 'Attempt to update your profile failed.' feedback_status = 'Failure' else: feedback = 'Your profile information is unchanged.' feedback_status = 'No_Change' edit_profile_url = self.request.application_url if not re.match(r"^.*$", edit_profile_url): edit_profile_url += '/' edit_profile_url += 'edit_profile' feedback = urllib.quote(feedback, safe='') feedback_status = urllib.quote(feedback_status, safe='') return self.redirect(edit_profile_url + '?feedback=' + feedback + '&feedback_status=' + feedback_status) else: # Create a new profile for this user: new_profile_success = True try: new_profile_obj = Profile.add_profile(profile_unique_display_name, application_user_id, bio=bio) except: new_profile_success = False if new_profile_success: feedback = 'Successfully created your profile.' feedback_status = 'Success' else: feedback = 'Attempt to create your profile failed.' feedback_status = 'Failure' edit_profile_url = self.request.application_url if not re.match(r"^.*$", edit_profile_url): edit_profile_url += '/' edit_profile_url += 'edit_profile' feedback = urllib.quote(feedback, safe='') feedback_status = urllib.quote(feedback_status, safe='') return self.redirect(edit_profile_url + '?feedback=' + feedback + '&feedback_status=' + feedback_status)