Add code to check if there is existing data before executing a bootstrap setup

This commit is contained in:
Roberto Rosario
2012-09-27 01:45:52 -04:00
parent b42a43bafd
commit 3b895d7560
4 changed files with 26 additions and 0 deletions

View File

@@ -1,5 +1,9 @@
from __future__ import absolute_import
from django.db import models
from .exceptions import ExistingData
class Cleanup(object):
"""
@@ -25,6 +29,13 @@ class BootstrapModel(object):
"""
_registry = {}
@classmethod
def check_for_data(cls):
for model in cls.get_all():
model_instance = models.get_model(model.app_name, model.model_name)
if model_instance.objects.all().count():
raise ExistingData
@classmethod
def get_all(cls):
return cls._registry.values()

View File

@@ -0,0 +1,10 @@
from __future__ import absolute_import
class ExistingData(Exception):
"""
Raised when an attempt to execute a bootstrap setup is made and there is
existing data that would be corrupted or damaged by the loading the
bootstrap's fixture
"""
pass

View File

@@ -10,6 +10,7 @@ from django.core import management
from .literals import (FIXTURE_TYPES_CHOICES, FIXTURE_FILE_TYPE,
FIXTURE_TYPE_PK_NULLIFIER, COMMAND_LOADDATA)
from .managers import BootstrapSetupManager
from .classes import BootstrapModel
class BootstrapSetup(models.Model):
@@ -30,6 +31,7 @@ class BootstrapSetup(models.Model):
return FIXTURE_FILE_TYPE[self.type]
def execute(self):
BootstrapModel.check_for_data()
handle, filepath = tempfile.mkstemp()
# Just need the filepath, close the file description
os.close(handle)

View File

@@ -16,6 +16,7 @@ from .permissions import (PERMISSION_BOOTSTRAP_VIEW, PERMISSION_BOOTSTRAP_CREATE
PERMISSION_BOOTSTRAP_EXECUTE, PERMISSION_NUKE_DATABASE, PERMISSION_BOOTSTRAP_DUMP)
from .icons import icon_bootstrap_setup_execute, icon_nuke_database, icon_bootstrap_setup_delete
from .forms import BootstrapSetupForm, BootstrapSetupForm_view, BootstrapSetupForm_dump
from .exceptions import ExistingData
def bootstrap_setup_list(request):
@@ -155,6 +156,8 @@ def bootstrap_setup_execute(request, bootstrap_setup_pk):
if request.method == 'POST':
try:
bootstrap_setup.execute()
except ExistingData:
messages.error(request, _(u'Cannot execute bootstrap setup, there is existing data. Erase database and try again.'))
except Exception, exc:
messages.error(request, _(u'Error executing bootstrap setup; %s') % exc)
else: