def edit_about(userId): """ Profile post method to edit about """ edit_about_form = EditAbout() if edit_about_form.validate_on_submit(): birthday = edit_about_form.birthday.data political_spectrum = edit_about_form.political_spectrum.data political_party = edit_about_form.political_party.data favourite_news_websites = edit_about_form.favourite_news_websites.data allow_location_detection = edit_about_form.allow_location_detection.data profile = Profile.query.filter_by(user_id=userId).first() if profile: # update profile if profile.birthday != birthday: profile.birthday = birthday db.session.flush() if profile.political_spectrum != political_spectrum: profile.political_spectrum = political_spectrum db.session.flush() if profile.political_party != political_party: profile.political_party = political_party db.session.flush() if profile.favourite_news_websites != ",".join( favourite_news_websites): profile.favourite_news_websites = ",".join( favourite_news_websites) db.session.flush() if profile.allow_location_detection == True and allow_location_detection == 'no' or profile.allow_location_detection == False and allow_location_detection == 'yes': if allow_location_detection == 'yes': profile.allow_location_detection = True else: profile.allow_location_detection = False db.session.flush() else: # create new profile # convert allow_location_detection to bool allow_bool = None if allow_location_detection == 'yes': allow_bool = True else: allow_bool = False profile = Profile(userId, birthday, political_spectrum, political_party, favourite_news_websites, allow_bool, None, None, None) db.session.add(profile) db.session.flush() # if allow_location_detection, get location if profile.allow_location_detection == True: g = geocoder.ip('me') if profile.location != g.city + ", " + g.country or profile.lat != g.latlng[ 0] or profile.lon != g.latlng[1]: # add location profile.lat = g.latlng[0] profile.lon = g.latlng[1] profile.location = g.city + ", " + g.country db.session.flush() db.session.commit() return redirect(url_for('about'))