Skip to content

Commit 2fdaba1

Browse files
committed
datastore: prevent autoflush
* closes zenodo/zenodo-rdm#590
1 parent 3caced5 commit 2fdaba1

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

invenio_accounts/forms.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from flask import request
1414
from flask_security.forms import NextFormMixin
1515
from flask_wtf import FlaskForm, Recaptcha, RecaptchaField
16+
from invenio_db import db
1617
from invenio_i18n import gettext as _
1718
from wtforms import FormField, HiddenField
1819

@@ -90,7 +91,8 @@ class SendConfirmationEmailView(Form):
9091
"""
9192

9293
def validate(self, extra_validators=None):
93-
self.user = current_datastore.get_user(self.data["email"])
94+
with db.session.no_autoflush:
95+
self.user = current_datastore.get_user(self.data["email"])
9496
# Form is valid if user exists and they are not yet confirmed
9597
if self.user is not None and self.user.confirmed_at is None:
9698
return True

invenio_accounts/views/rest.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,16 @@ def handle_error(self, error, *args, **kwargs):
181181
#
182182
def user_exists(email):
183183
"""Validate that a user exists."""
184-
if not current_datastore.get_user(email):
185-
raise ValidationError(get_message("USER_DOES_NOT_EXIST")[0])
184+
with db.session.no_autoflush:
185+
if not current_datastore.get_user(email):
186+
raise ValidationError(get_message("USER_DOES_NOT_EXIST")[0])
186187

187188

188189
def unique_user_email(email):
189190
"""Validate unique user email."""
190-
if current_datastore.get_user(email) is not None:
191-
raise ValidationError(get_message("EMAIL_ALREADY_ASSOCIATED", email=email)[0])
191+
with db.session.no_autoflush:
192+
if current_datastore.get_user(email) is not None:
193+
raise ValidationError(get_message("EMAIL_ALREADY_ASSOCIATED", email=email)[0])
192194

193195

194196
def default_user_payload(user):
@@ -222,7 +224,8 @@ class UserViewMixin(object):
222224

223225
def get_user(self, email=None, **kwargs):
224226
"""Retrieve a user by the provided arguments."""
225-
return current_datastore.get_user(email)
227+
with db.session.no_autoflush:
228+
return current_datastore.get_user(email)
226229

227230

228231
class LoginView(MethodView, UserViewMixin):

0 commit comments

Comments
 (0)