diff --git a/apps/history/api.py b/apps/history/api.py index 3f0d81a52d..b15e15a13f 100644 --- a/apps/history/api.py +++ b/apps/history/api.py @@ -1,6 +1,13 @@ import pickle import json +try: + from psycopg2 import OperationalError +except ImportError: + class OperationalError(Exception): + pass + +from django.db import transaction from django.db.utils import DatabaseError #from django.utils import simplejson from django.core import serializers @@ -10,7 +17,7 @@ from django.db import models from history.models import HistoryType, History from history.runtime_data import history_types_dict - +@transaction.commit_manually def register_history_type(history_type_dict): namespace = history_type_dict['namespace'] name = history_type_dict['name'] @@ -29,8 +36,14 @@ def register_history_type(history_type_dict): 'expressions': history_type_dict.get('expressions', []), } except DatabaseError: - #Special case for ./manage.py syncdb - pass + transaction.rollback() + # Special case for ./manage.py syncdb + except OperationalError: + transaction.rollback() + # Special for DjangoZoom, which executes collectstatic media + # doing syncdb and creating the database tables + else: + transaction.commit() def create_history(history_type_dict, source_object=None, data=None): diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index 366c84ad8a..42d691f7df 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -1,3 +1,10 @@ +try: + from psycopg2 import OperationalError +except ImportError: + class OperationalError(Exception): + pass + +from django.db import transaction from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext from django.db.utils import DatabaseError @@ -65,14 +72,22 @@ register_tool(all_document_ocr_cleanup, namespace='ocr', title=_(u'OCR')) #Menus register_top_menu('ocr', link={'text': _('OCR'), 'famfam': 'hourglass', 'view': 'queue_document_list'}, children_path_regex=[r'^ocr/']) -try: - default_queue, created = DocumentQueue.objects.get_or_create(name='default') - if created: - default_queue.label = ugettext(u'Default') - default_queue.save() -except DatabaseError: - #syncdb - pass +@transaction.commit_manually +def create_default_queue(): + try: + default_queue, created = DocumentQueue.objects.get_or_create(name='default') + if created: + default_queue.label = ugettext(u'Default') + default_queue.save() + except DatabaseError: + transaction.rollback() + # Special case for ./manage.py syncdb + except OperationalError: + transaction.rollback() + # Special for DjangoZoom, which executes collectstatic media + # doing syncdb and creating the database tables + else: + transaction.commit() def document_post_save(sender, instance, **kwargs): @@ -82,4 +97,6 @@ def document_post_save(sender, instance, **kwargs): post_save.connect(document_post_save, sender=Document) +create_default_queue() + register_interval_job('task_process_document_queues', _(u'Checks the OCR queue for pending documents.'), task_process_document_queues, seconds=QUEUE_PROCESSING_INTERVAL) diff --git a/apps/permissions/api.py b/apps/permissions/api.py index ac30aa43a5..d2a860ebc7 100644 --- a/apps/permissions/api.py +++ b/apps/permissions/api.py @@ -1,9 +1,15 @@ +try: + from psycopg2 import OperationalError +except ImportError: + class OperationalError(Exception): + pass + +from django.db import transaction from django.db.utils import DatabaseError from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext from django.core.exceptions import PermissionDenied from django.utils.translation import ugettext_lazy as _ -from django.db import transaction from permissions import PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT, \ PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE, \ @@ -29,7 +35,11 @@ def register_permission(permission): permission_obj.save() except DatabaseError: transaction.rollback() - #Special case for ./manage.py syncdb + # Special case for ./manage.py syncdb + except OperationalError: + transaction.rollback() + # Special for DjangoZoom, which executes collectstatic media + # doing syncdb and creating the database tables else: transaction.commit()