summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2013-11-12 15:47:19 -0500
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2013-11-12 15:47:19 -0500
commit05929147dde2239ee0078359bd62b1ea5a884d86 (patch)
treebeba880dfd02b64c61a58ae196cfdc2cbe4dfa46
parent2b6824857c4ab80e3e791edf82aee3e75e037316 (diff)
parent30882ba70ad627f89ab89af6ffc77cda08de8773 (diff)
downloadbcfg2-05929147dde2239ee0078359bd62b1ea5a884d86.tar.gz
bcfg2-05929147dde2239ee0078359bd62b1ea5a884d86.tar.bz2
bcfg2-05929147dde2239ee0078359bd62b1ea5a884d86.zip
Merge branch 'maint'
Conflicts: src/lib/Bcfg2/Server/Admin/Reports.py src/lib/Bcfg2/Server/Hostbase/hostbase/urls.py src/lib/Bcfg2/Server/Hostbase/urls.py src/sbin/bcfg2-crypt tools/upgrade/1.3/migrate_dbstats.py
-rw-r--r--src/lib/Bcfg2/Reporting/Compat.py18
-rw-r--r--src/lib/Bcfg2/Reporting/Storage/DjangoORM.py4
-rw-r--r--src/lib/Bcfg2/Reporting/urls.py2
-rwxr-xr-xsrc/lib/Bcfg2/Reporting/utils.py2
-rw-r--r--src/lib/Bcfg2/Server/Admin.py4
-rwxr-xr-xsrc/lib/Bcfg2/Server/Encryption.py6
-rw-r--r--src/lib/Bcfg2/Server/Reports/reports/models.py10
-rwxr-xr-xtools/upgrade/1.3/migrate_dbstats.py8
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: