diff --git a/oml/user/models.py b/oml/user/models.py index 9679a00..ad75f0d 100644 --- a/oml/user/models.py +++ b/oml/user/models.py @@ -42,8 +42,11 @@ class User(db.Model): return self.id @classmethod - def get(cls, id): - user = cls.query.filter_by(id=id).first() + def get(cls, id, for_update=False): + qs = cls.query.filter_by(id=id) + if for_update: + qs = qs.with_for_update() + user = qs.first() if user and not user.info: user.info = {} return user @@ -596,13 +599,13 @@ def export_list(data): def update_user_peering(user_id, peered, username=None): with db.session(): - u = User.get(user_id) + u = User.get(user_id, for_update=True) if u: u.update_peering(peered, username) def remove_local_info(id): with db.session(): - u = User.get(id) + u = User.get(id, for_update=True) if u and 'local' in u.info: del u.info['local'] u.save() @@ -610,7 +613,7 @@ def remove_local_info(id): def add_local_info(data): with db.session(): - u = User.get(data['id']) + u = User.get(data['id'], for_update=True) if u: if u.info['username'] != data['username']: u.info['username'] = data['username']