use with_for_update for User class too
This commit is contained in:
parent
469cdf8fb7
commit
a576de8a82
1 changed files with 8 additions and 5 deletions
|
@ -42,8 +42,11 @@ class User(db.Model):
|
||||||
return self.id
|
return self.id
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, id):
|
def get(cls, id, for_update=False):
|
||||||
user = cls.query.filter_by(id=id).first()
|
qs = cls.query.filter_by(id=id)
|
||||||
|
if for_update:
|
||||||
|
qs = qs.with_for_update()
|
||||||
|
user = qs.first()
|
||||||
if user and not user.info:
|
if user and not user.info:
|
||||||
user.info = {}
|
user.info = {}
|
||||||
return user
|
return user
|
||||||
|
@ -596,13 +599,13 @@ def export_list(data):
|
||||||
|
|
||||||
def update_user_peering(user_id, peered, username=None):
|
def update_user_peering(user_id, peered, username=None):
|
||||||
with db.session():
|
with db.session():
|
||||||
u = User.get(user_id)
|
u = User.get(user_id, for_update=True)
|
||||||
if u:
|
if u:
|
||||||
u.update_peering(peered, username)
|
u.update_peering(peered, username)
|
||||||
|
|
||||||
def remove_local_info(id):
|
def remove_local_info(id):
|
||||||
with db.session():
|
with db.session():
|
||||||
u = User.get(id)
|
u = User.get(id, for_update=True)
|
||||||
if u and 'local' in u.info:
|
if u and 'local' in u.info:
|
||||||
del u.info['local']
|
del u.info['local']
|
||||||
u.save()
|
u.save()
|
||||||
|
@ -610,7 +613,7 @@ def remove_local_info(id):
|
||||||
|
|
||||||
def add_local_info(data):
|
def add_local_info(data):
|
||||||
with db.session():
|
with db.session():
|
||||||
u = User.get(data['id'])
|
u = User.get(data['id'], for_update=True)
|
||||||
if u:
|
if u:
|
||||||
if u.info['username'] != data['username']:
|
if u.info['username'] != data['username']:
|
||||||
u.info['username'] = data['username']
|
u.info['username'] = data['username']
|
||||||
|
|
Loading…
Reference in a new issue