From b7479fa7dc6d87135fb328dbf9ba4bcd81a5db53 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Mon, 11 Nov 2013 21:36:50 +0100 Subject: Fix compatibility with Django 1.6. --- src/lib/Bcfg2/Reporting/Compat.py | 18 ++++++++++++++++++ src/lib/Bcfg2/Reporting/Storage/DjangoORM.py | 4 ++-- src/lib/Bcfg2/Reporting/urls.py | 2 +- src/lib/Bcfg2/Reporting/utils.py | 2 +- src/lib/Bcfg2/Server/Admin/Reports.py | 4 ++-- src/lib/Bcfg2/Server/Hostbase/hostbase/urls.py | 2 +- src/lib/Bcfg2/Server/Hostbase/urls.py | 2 +- src/lib/Bcfg2/Server/Reports/reports/models.py | 10 ++++++---- 8 files changed, 32 insertions(+), 12 deletions(-) create mode 100644 src/lib/Bcfg2/Reporting/Compat.py (limited to 'src/lib') diff --git a/src/lib/Bcfg2/Reporting/Compat.py b/src/lib/Bcfg2/Reporting/Compat.py new file mode 100644 index 000000000..d8f439e22 --- /dev/null +++ b/src/lib/Bcfg2/Reporting/Compat.py @@ -0,0 +1,18 @@ +""" Compatibility imports for Django. """ + +from django import VERSION +from django.db import transaction + +# Django 1.6 deprecated commit_on_success() and introduced atomic() with +# similar semantics. +if VERSION[0] == 1 and VERSION[1] < 6: + transaction.atomic = transaction.commit_on_success + +try: + # Django < 1.6 + from django.conf.urls import defaults + django_urls = defaults +except: + # Django > 1.6 + from django.conf import urls + django_urls = urls diff --git a/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py b/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py index aea5e9d4b..ef1e92103 100644 --- a/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py +++ b/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py @@ -18,12 +18,12 @@ from django.core import management from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned from django.db.models import FieldDoesNotExist from django.core.cache import cache -from django.db import transaction #Used by GetCurrentEntry import difflib from Bcfg2.Compat import b64decode from Bcfg2.Reporting.models import * +from Bcfg2.Reporting.Compat import transaction class DjangoORM(StorageBase): @@ -256,7 +256,7 @@ class DjangoORM(StorageBase): entry.tag) return None - @transaction.commit_on_success + @transaction.atomic def _import_interaction(self, interaction): """Real import function""" hostname = interaction['hostname'] diff --git a/src/lib/Bcfg2/Reporting/urls.py b/src/lib/Bcfg2/Reporting/urls.py index 8330fef7b..a9e5690be 100644 --- a/src/lib/Bcfg2/Reporting/urls.py +++ b/src/lib/Bcfg2/Reporting/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from Bcfg2.Reporting.Compat.django_urls import * from django.core.urlresolvers import reverse, NoReverseMatch from django.http import HttpResponsePermanentRedirect from Bcfg2.Reporting.utils import filteredUrls, paginatedUrls, timeviewUrls diff --git a/src/lib/Bcfg2/Reporting/utils.py b/src/lib/Bcfg2/Reporting/utils.py index 619501d8b..d9b8213b1 100755 --- a/src/lib/Bcfg2/Reporting/utils.py +++ b/src/lib/Bcfg2/Reporting/utils.py @@ -1,5 +1,5 @@ """Helper functions for reports""" -from django.conf.urls.defaults import * +from Bcfg2.Reporting.Compat.django_urls import * import re """List of filters provided by filteredUrls""" diff --git a/src/lib/Bcfg2/Server/Admin/Reports.py b/src/lib/Bcfg2/Server/Admin/Reports.py index 849df8025..eb97123f7 100644 --- a/src/lib/Bcfg2/Server/Admin/Reports.py +++ b/src/lib/Bcfg2/Server/Admin/Reports.py @@ -19,11 +19,11 @@ sys.path.pop() # Set DJANGO_SETTINGS_MODULE appropriately. os.environ['DJANGO_SETTINGS_MODULE'] = '%s.settings' % project_name -from django.db import transaction from Bcfg2.Reporting.models import Client, Interaction, \ Performance, Bundle, Group, FailureEntry, PathEntry, \ PackageEntry, ServiceEntry, ActionEntry +from Bcfg2.Reporting.Compat import transaction def printStats(fn): @@ -136,7 +136,7 @@ class Reports(Bcfg2.Server.Admin.Mode): else: self.errExit("Unknown command: %s" % args[0]) - @transaction.commit_on_success + @transaction.atomic def scrub(self): ''' Perform a thorough scrub and cleanup of the database ''' diff --git a/src/lib/Bcfg2/Server/Hostbase/hostbase/urls.py b/src/lib/Bcfg2/Server/Hostbase/hostbase/urls.py index 0ee204abe..a03d2c919 100644 --- a/src/lib/Bcfg2/Server/Hostbase/hostbase/urls.py +++ b/src/lib/Bcfg2/Server/Hostbase/hostbase/urls.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from django.conf.urls.defaults import * +from Bcfg2.Reporting.Compat.django_urls import * from django.contrib.auth.decorators import login_required from django.core.urlresolvers import reverse from django.views.generic.create_update import create_object, update_object, delete_object diff --git a/src/lib/Bcfg2/Server/Hostbase/urls.py b/src/lib/Bcfg2/Server/Hostbase/urls.py index 01fe97d4f..4a0c33f98 100644 --- a/src/lib/Bcfg2/Server/Hostbase/urls.py +++ b/src/lib/Bcfg2/Server/Hostbase/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from Bcfg2.Reporting.Compat.django_urls import * from django.conf import settings from django.views.generic.simple import direct_to_template from django.contrib import admin diff --git a/src/lib/Bcfg2/Server/Reports/reports/models.py b/src/lib/Bcfg2/Server/Reports/reports/models.py index 73adaaaaf..c43c3cee7 100644 --- a/src/lib/Bcfg2/Server/Reports/reports/models.py +++ b/src/lib/Bcfg2/Server/Reports/reports/models.py @@ -9,11 +9,13 @@ except ImproperlyConfigured: print("Reports: unable to import django models: %s" % e) sys.exit(1) -from django.db import connection, transaction +from django.db import connection from django.db.models import Q from datetime import datetime, timedelta from time import strptime +from Bcfg2.Reporting.Compat import transaction + KIND_CHOICES = ( #These are the kinds of config elements ('Package', 'Package'), @@ -288,7 +290,7 @@ class Reason(models.Model): return rv @staticmethod - @transaction.commit_on_success + @transaction.atomic def prune_orphans(): '''Prune oprhaned rows... no good way to use the ORM''' cursor = connection.cursor() @@ -305,7 +307,7 @@ class Entries(models.Model): return self.name @staticmethod - @transaction.commit_on_success + @transaction.atomic def prune_orphans(): '''Prune oprhaned rows... no good way to use the ORM''' cursor = connection.cursor() @@ -334,7 +336,7 @@ class Performance(models.Model): return self.metric @staticmethod - @transaction.commit_on_success + @transaction.atomic def prune_orphans(): '''Prune oprhaned rows... no good way to use the ORM''' cursor = connection.cursor() -- cgit v1.2.3-1-g7c22