def user_edit(user_id=None): form = UserForm() form.submit.label.text = 'Update' if form.validate_on_submit(): # check that old_password matches the current user's if bcrypt.check_password_hash(current_user.user.password, form.old_password.data): return user_submit(form, user_id) else: flash('Current password incorrect!') else: logging.info('loading current values because: {}'.format(form.errors)) old_user = users.GetUser(u.GetUserRequest(_id=user_id)) # All of this fuckery is needed because the proto object validates field types, # so we can't just change the field to a datetime object but need a new object user_dict = MessageToDict(message=old_user, preserving_proto_field_name=True) # Have to delete _id since it's not a valid field for a namedtuple del user_dict['_id'] user_obj = namedtuple("User", user_dict.keys()) (*user_dict.values()) form = UserForm(obj=user_obj) return render_template('user_edit.html', form=form, view='Edit User')