Prepend a magic number to bootstrap setup to identify them as valid bootstrap setups
This commit is contained in:
@@ -7,9 +7,9 @@ from django.db import models
|
||||
from django.core import serializers
|
||||
from django.utils.datastructures import SortedDict
|
||||
|
||||
from .exceptions import ExistingData
|
||||
from .exceptions import ExistingData, NotABootstrapSetup
|
||||
from .literals import (FIXTURE_TYPE_PK_NULLIFIER, FIXTURE_TYPE_MODEL_PROCESS,
|
||||
FIXTURE_METADATA_REMARK_CHARACTER)
|
||||
FIXTURE_METADATA_REMARK_CHARACTER, BOOTSTRAP_SETUP_MAGIC_NUMBER)
|
||||
from .utils import toposort2
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -38,6 +38,15 @@ class BootstrapModel(object):
|
||||
"""
|
||||
_registry = SortedDict()
|
||||
|
||||
@classmethod
|
||||
def get_magic_number(cls):
|
||||
return '%s %s' % (FIXTURE_METADATA_REMARK_CHARACTER, BOOTSTRAP_SETUP_MAGIC_NUMBER)
|
||||
|
||||
@classmethod
|
||||
def check_magic_number(cls, data):
|
||||
if not data.startswith(cls.get_magic_number()):
|
||||
raise NotABootstrapSetup
|
||||
|
||||
@classmethod
|
||||
def check_for_data(cls):
|
||||
for model in cls.get_all():
|
||||
|
||||
@@ -8,3 +8,11 @@ class ExistingData(Exception):
|
||||
bootstrap's fixture.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class NotABootstrapSetup(Exception):
|
||||
"""
|
||||
Raised when an attempting to import a bootstrap setup without a proper
|
||||
magic number metadata
|
||||
"""
|
||||
pass
|
||||
|
||||
@@ -74,3 +74,5 @@ FIXTURE_METADATA_NAME = 'name'
|
||||
FIXTURE_METADATA_SLUG = 'slug'
|
||||
FIXTURE_METADATA_DESCRIPTION = 'description'
|
||||
BOOTSTRAP_EXTENSION = 'txt'
|
||||
|
||||
BOOTSTRAP_SETUP_MAGIC_NUMBER = 'bootstrap setup'
|
||||
|
||||
@@ -8,8 +8,7 @@ from django.db import models
|
||||
from django.core import serializers
|
||||
|
||||
from .classes import BootstrapModel, FixtureMetadata
|
||||
from .literals import (FIXTURE_TYPE_FIXTURE_PROCESS, FIXTURE_TYPE_EMPTY_FIXTURE,
|
||||
DEFAULT_REPOSITORY)
|
||||
from .literals import (FIXTURE_TYPE_FIXTURE_PROCESS, FIXTURE_TYPE_EMPTY_FIXTURE)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -30,6 +29,7 @@ class BootstrapSetupManager(models.Manager):
|
||||
return FIXTURE_TYPE_FIXTURE_PROCESS[serialization_format]('\n'.join(result))
|
||||
|
||||
def import_setup(self, file_data):
|
||||
BootstrapModel.check_magic_number(file_data)
|
||||
metadata = FixtureMetadata.read_all(file_data)
|
||||
instance = self.model(fixture=file_data, **metadata)
|
||||
instance.save(update_metadata=False)
|
||||
|
||||
@@ -91,7 +91,8 @@ class BootstrapSetup(models.Model):
|
||||
def save(self, *args, **kwargs):
|
||||
update_metadata = kwargs.pop('update_metadata', True)
|
||||
if update_metadata:
|
||||
self.fixture = '%s\n%s' % (
|
||||
self.fixture = '%s\n%s\n%s' % (
|
||||
BootstrapModel.get_magic_number(),
|
||||
self.get_metadata_string(),
|
||||
self.cleaned_fixture
|
||||
)
|
||||
|
||||
@@ -20,7 +20,7 @@ from .permissions import (PERMISSION_BOOTSTRAP_VIEW, PERMISSION_BOOTSTRAP_CREATE
|
||||
PERMISSION_BOOTSTRAP_EXPORT, PERMISSION_BOOTSTRAP_IMPORT)
|
||||
from .forms import (BootstrapSetupForm, BootstrapSetupForm_view, BootstrapSetupForm_dump,
|
||||
BootstrapSetupForm_edit, BootstrapFileImportForm, BootstrapURLImportForm)
|
||||
from .exceptions import ExistingData
|
||||
from .exceptions import ExistingData, NotABootstrapSetup
|
||||
|
||||
|
||||
def bootstrap_setup_list(request):
|
||||
@@ -239,6 +239,8 @@ def bootstrap_setup_import_from_file(request):
|
||||
BootstrapSetup.objects.import_from_file(request.FILES['file'])
|
||||
messages.success(request, _(u'Bootstrap setup imported successfully.'))
|
||||
return HttpResponseRedirect(reverse('bootstrap_setup_list'))
|
||||
except NotABootstrapSetup:
|
||||
messages.error(request, _(u'File is not a bootstrap setup.'))
|
||||
except Exception as exception:
|
||||
messages.error(request, exception)
|
||||
return HttpResponseRedirect(previous)
|
||||
@@ -265,6 +267,8 @@ def bootstrap_setup_import_from_url(request):
|
||||
BootstrapSetup.objects.import_from_url(form.cleaned_data['url'])
|
||||
messages.success(request, _(u'Bootstrap setup imported successfully.'))
|
||||
return HttpResponseRedirect(reverse('bootstrap_setup_list'))
|
||||
except NotABootstrapSetup:
|
||||
messages.error(request, _(u'Data from URL is not a bootstrap setup.'))
|
||||
except Exception as exception:
|
||||
messages.error(request, exception)
|
||||
return HttpResponseRedirect(previous)
|
||||
|
||||
Reference in New Issue
Block a user