From 6c7d6bb6b084aef666c54c1d0b9f5a09dcee9035 Mon Sep 17 00:00:00 2001 From: j Date: Tue, 15 Jan 2019 13:20:11 +0530 Subject: [PATCH] for update --- oml/item/api.py | 4 +++- oml/item/models.py | 7 +++++-- oml/media/pdf.py | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/oml/item/api.py b/oml/item/api.py index 6385e7f..857dcf9 100644 --- a/oml/item/api.py +++ b/oml/item/api.py @@ -146,13 +146,15 @@ def edit(data): ids = [ids] edited = [] for id in ids: - item = models.Item.get(id) + state.db.session.begin(subtransactions=True) + item = models.Item.get(id, for_update=True) if item and item.json().get('mediastate') == 'available': item.edit(data) response = item.json() edited.append(id) else: logger.info('can only edit available items %s', id) + state.db.session.commit() if len(ids) > 1: response = data response['id'] = edited diff --git a/oml/item/models.py b/oml/item/models.py index f936838..b2d5c3a 100644 --- a/oml/item/models.py +++ b/oml/item/models.py @@ -75,10 +75,13 @@ class Item(db.Model): self.meta = {} @classmethod - def get(cls, id): + def get(cls, id, for_update=False): if isinstance(id, list): id = base64.b32encode(hashlib.sha1(''.join(id)).digest()) - return cls.query.filter_by(id=id).first() + qs = cls.query.filter_by(id=id) + if for_update: + qs = qs.with_for_update() + return qs.first() @classmethod def get_or_create(cls, id, info=None): diff --git a/oml/media/pdf.py b/oml/media/pdf.py index fdf5a01..c4e9719 100644 --- a/oml/media/pdf.py +++ b/oml/media/pdf.py @@ -209,7 +209,7 @@ def info(pdf): if settings.server['extract_text']: text = extract_text(pdf) data['textsize'] = len(text) - if not 'isbn' in data: + if 'isbn' not in data: isbn = extract_isbn(text) if isbn: data['isbn'] = isbn