diff options
-rw-r--r-- | src/lib/Bcfg2/Reporting/Compat.py | 18 | ||||
-rw-r--r-- | src/lib/Bcfg2/Reporting/Storage/DjangoORM.py | 4 | ||||
-rw-r--r-- | src/lib/Bcfg2/Reporting/urls.py | 2 | ||||
-rwxr-xr-x | src/lib/Bcfg2/Reporting/utils.py | 2 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Admin.py | 4 | ||||
-rwxr-xr-x | src/lib/Bcfg2/Server/Encryption.py | 6 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Reports/reports/models.py | 10 | ||||
-rwxr-xr-x | tools/upgrade/1.3/migrate_dbstats.py | 8 |
8 files changed, 37 insertions, 17 deletions
diff --git a/src/lib/Bcfg2/Reporting/Compat.py b/src/lib/Bcfg2/Reporting/Compat.py new file mode 100644 index 000000000..57261970d --- /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 ImportError: + # 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 f6f46ee12..c223c3c73 100644 --- a/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py +++ b/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py @@ -14,12 +14,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.py b/src/lib/Bcfg2/Server/Admin.py index 6a56657cf..207106596 100644 --- a/src/lib/Bcfg2/Server/Admin.py +++ b/src/lib/Bcfg2/Server/Admin.py @@ -912,8 +912,8 @@ if HAS_REPORTS: # Bcfg2.DBSettings has been populated, Django gets a null # configuration, and subsequent updates to # Bcfg2.DBSettings won't help. - from django.db.transaction import commit_on_success - self.run = commit_on_success(self.run) + from Bcfg2.Reporting.Compat import transaction + self.run = transaction.atomic(self.run) def run(self, _): # pylint: disable=E0202 # Cleanup unused entries diff --git a/src/lib/Bcfg2/Server/Encryption.py b/src/lib/Bcfg2/Server/Encryption.py index f30144d13..f8b602d90 100755 --- a/src/lib/Bcfg2/Server/Encryption.py +++ b/src/lib/Bcfg2/Server/Encryption.py @@ -444,7 +444,7 @@ class PropertiesDecryptor(Decryptor, PropertiesCryptoMixin): default_xpath = '//*[@encrypted]' def decrypt(self): - decrypted = False + decrypted_any = False xdata = lxml.etree.XML(self.data, parser=XMLParser) for elt in self._get_elements(xdata): try: @@ -456,7 +456,7 @@ class PropertiesDecryptor(Decryptor, PropertiesCryptoMixin): decrypted = ssl_decrypt(elt.text, passphrase).strip() elt.text = decrypted.encode('ascii', 'xmlcharrefreplace') elt.set("encrypted", pname) - decrypted = True + decrypted_any = True except (EVPError, TypeError): self.logger.error("Could not decrypt %s, skipping" % print_xml(elt)) @@ -468,7 +468,7 @@ class PropertiesDecryptor(Decryptor, PropertiesCryptoMixin): # a different key, and wound up with gibberish. self.logger.warning("Decrypted %s to gibberish, skipping" % elt.tag) - if decrypted: + if decrypted_any: return xdata else: raise DecryptError("Failed to decrypt any data in %s" % diff --git a/src/lib/Bcfg2/Server/Reports/reports/models.py b/src/lib/Bcfg2/Server/Reports/reports/models.py index c7105fdd9..ac4c8eac4 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'), @@ -294,7 +296,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() @@ -311,7 +313,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() @@ -340,7 +342,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() diff --git a/tools/upgrade/1.3/migrate_dbstats.py b/tools/upgrade/1.3/migrate_dbstats.py index ed514289a..de8aef973 100755 --- a/tools/upgrade/1.3/migrate_dbstats.py +++ b/tools/upgrade/1.3/migrate_dbstats.py @@ -9,10 +9,10 @@ import time import Bcfg2.Logger import Bcfg2.Options from django.db import connection, transaction, backend - from Bcfg2.Server.Admin import UpdateReports from Bcfg2.Reporting import models as new_models from Bcfg2.Reporting.utils import BatchFetch +from Bcfg2.Reporting.Compat import transaction from Bcfg2.Server.Reports.reports import models as legacy_models logger = logging.getLogger(__name__) @@ -36,7 +36,7 @@ def _quote(value): return _our_backend.quote_name(value) -@transaction.commit_on_success +@transaction.atomic def _migrate_perms(): """helper""" @@ -55,7 +55,7 @@ def _migrate_perms(): return fperms -@transaction.commit_on_success +@transaction.atomic def _migrate_transaction(inter, entries, fperms): """helper""" @@ -185,7 +185,7 @@ def _shove(old_table, new_table, columns): cursor.close() -@transaction.commit_on_success +@transaction.atomic def migrate_stage1(): logger.info("Migrating clients") try: |