|
@ -14,7 +14,7 @@ |
|
|
* GNU General Public License for more details. |
|
|
* 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 django.db.models import signals |
|
|
|
|
|
|
|
|
from mumble import models |
|
|
from mumble import models |
|
@ -22,31 +22,24 @@ from mumble import models |
|
|
from update_schema import update_schema |
|
|
from update_schema import update_schema |
|
|
from server_detect import find_existing_instances |
|
|
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 ); |
|
|
signals.post_syncdb.connect( update_schema, sender=models ); |
|
|
|
|
|
|
|
|
else: |
|
|
else: |
|
|
transaction.rollback() |
|
|
|
|
|
signals.post_syncdb.connect( find_existing_instances, sender=models ); |
|
|
signals.post_syncdb.connect( find_existing_instances, sender=models ); |
|
|
|
|
|
|
|
|
finally: |
|
|
|
|
|
if not managed_before: |
|
|
|
|
|
transaction.managed(False) |
|
|
|
|
|
transaction.leave_transaction_management() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|