From 8c09edeee76e872e0d747c9a88b5cff5ab52fdf8 Mon Sep 17 00:00:00 2001 From: Michael Ziegler Date: Sun, 21 Feb 2010 14:20:53 +0100 Subject: [PATCH] properly detect if an upgrade is necessary using Django's DB introspection. --- pyweb/mumble/management/__init__.py | 35 ++++++++++++----------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/pyweb/mumble/management/__init__.py b/pyweb/mumble/management/__init__.py index 21cc8a1..d66da50 100644 --- a/pyweb/mumble/management/__init__.py +++ b/pyweb/mumble/management/__init__.py @@ -14,7 +14,7 @@ * GNU General Public License for more details. """ -from django.db import connection, transaction +from django.db import connection from django.db.models import signals from mumble import models @@ -22,31 +22,24 @@ from mumble import models from update_schema import update_schema from server_detect import find_existing_instances +cursor = connection.cursor() -if not transaction.is_managed(): - managed_before = False - transaction.enter_transaction_management(True) - transaction.managed(True) -else: - managed_before = True - +tablename = models.Mumble._meta.db_table -cursor = connection.cursor() -try: - cursor.execute( "SELECT server_id FROM mumble_mumble;" ) +uptodate = False +if tablename in connection.introspection.get_table_list(cursor): + fields = connection.introspection.get_table_description(cursor, tablename) + for entry in fields: + if entry[0] == "server_id": + uptodate = True + break +else: + # Table doesn't yet exist, so syncdb will create it properly + uptodate = True -except cursor.db.connection.Error: - # server_id field does not exist -> DB needs to be updated. - transaction.rollback() +if not uptodate: signals.post_syncdb.connect( update_schema, sender=models ); - else: - transaction.rollback() signals.post_syncdb.connect( find_existing_instances, sender=models ); -finally: - if not managed_before: - transaction.managed(False) - transaction.leave_transaction_management() -