diff --git a/pandora/archive/tasks.py b/pandora/archive/tasks.py index b9f379d2..a2aa3d8e 100644 --- a/pandora/archive/tasks.py +++ b/pandora/archive/tasks.py @@ -4,7 +4,6 @@ from glob import glob from celery.task import task from django.conf import settings -from django.db import transaction from django.db.models import Q from item.models import Item @@ -249,8 +248,7 @@ def move_media(data, user): if old_item and old_item.files.count() == 0 and i.files.count() == len(data['ids']): for a in old_item.annotations.all().order_by('id'): a.item = i - with transaction.atomic(): - a.set_public_id() + a.set_public_id() Annotation.objects.filter(id=a.id).update(item=i, public_id=a.public_id) old_item.clips.all().update(item=i, sort=i.sort) diff --git a/pandora/document/fulltext.py b/pandora/document/fulltext.py index 1872b9ce..d58e3751 100644 --- a/pandora/document/fulltext.py +++ b/pandora/document/fulltext.py @@ -1,4 +1,3 @@ -import os import subprocess import tempfile @@ -19,11 +18,10 @@ def extract_text(pdf, page=None): # split page from pdf and ocr fd, page_pdf = tempfile.mkstemp('.pdf') cmd = ['pdfseparate', '-f', page, '-l', page, pdf, page_pdf] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() text = ocr_image(page_pdf) os.unlink(page_pdf) - os.close(fd) return text else: return ocr_image(pdf) diff --git a/pandora/item/models.py b/pandora/item/models.py index e0aebbd4..6279948d 100644 --- a/pandora/item/models.py +++ b/pandora/item/models.py @@ -478,8 +478,7 @@ class Item(models.Model): for a in self.annotations.all().order_by('id'): a.item = other - with transaction.atomic(): - a.set_public_id() + a.set_public_id() Annotation.objects.filter(id=a.id).update(item=other, public_id=a.public_id) try: other_sort = other.sort @@ -523,7 +522,6 @@ class Item(models.Model): cmd, stdout=open('/dev/null', 'w'), stderr=open('/dev/null', 'w'), close_fds=True) p.wait() os.unlink(tmp_output_txt) - os.close(fd) return True else: return None @@ -1911,12 +1909,13 @@ class AnnotationSequence(models.Model): @classmethod def nextid(cls, item): - s, created = cls.objects.get_or_create(item=item) - if created: - nextid = s.value - else: - cursor = connection.cursor() - sql = "UPDATE %s SET value = value + 1 WHERE item_id = %s RETURNING value" % (cls._meta.db_table, item.id) - cursor.execute(sql) - nextid = cursor.fetchone()[0] + with transaction.atomic(): + s, created = cls.objects.get_or_create(item=item) + if created: + nextid = s.value + else: + cursor = connection.cursor() + sql = "UPDATE %s SET value = value + 1 WHERE item_id = %s RETURNING value" % (cls._meta.db_table, item.id) + cursor.execute(sql) + nextid = cursor.fetchone()[0] return "%s/%s" % (item.public_id, ox.toAZ(nextid))