From f8c63454f35a359c8e7592b1f514ee4616e4698a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 7 Oct 2012 03:44:56 -0400 Subject: [PATCH] Enable new serializer for the bootstrap app, add per fixture type empyt checking, model fixture processing and final fixture processing --- apps/bootstrap/classes.py | 4 +++- apps/bootstrap/literals.py | 26 +++++++++++++++++++++++++- apps/bootstrap/managers.py | 6 ++++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/apps/bootstrap/classes.py b/apps/bootstrap/classes.py index ba0224ac24..b03fe52036 100644 --- a/apps/bootstrap/classes.py +++ b/apps/bootstrap/classes.py @@ -7,7 +7,7 @@ from django.core import serializers from django.utils.datastructures import SortedDict from .exceptions import ExistingData -from .literals import FIXTURE_TYPE_PK_NULLIFIER +from .literals import FIXTURE_TYPE_PK_NULLIFIER, FIXTURE_TYPE_MODEL_PROCESS logger = logging.getLogger(__name__) @@ -70,4 +70,6 @@ class BootstrapModel(object): if self.sanitize: # Remove primary key values result = FIXTURE_TYPE_PK_NULLIFIER[serialization_format](result) + # Do any clean up required on the fixture + result = FIXTURE_TYPE_MODEL_PROCESS[serialization_format](result) return result diff --git a/apps/bootstrap/literals.py b/apps/bootstrap/literals.py index 479acee4db..cf302be70d 100644 --- a/apps/bootstrap/literals.py +++ b/apps/bootstrap/literals.py @@ -12,11 +12,11 @@ from django.utils.translation import ugettext_lazy as _ FIXTURE_TYPE_JSON = 'json' FIXTURE_TYPE_YAML = 'yaml' +FIXTURE_TYPE_BETTER_YAML = 'better_yaml' FIXTURE_TYPE_XML = 'xml' FIXTURE_TYPES_CHOICES = ( (FIXTURE_TYPE_JSON, _(u'JSON')), - #(FIXTURE_TYPE_YAML, _(u'YAML')), # Disabing XML until a way to specify a null pk is found #(FIXTURE_TYPE_XML, _(u'XML')), ) @@ -24,16 +24,40 @@ FIXTURE_TYPES_CHOICES = ( FIXTURE_FILE_TYPE = { FIXTURE_TYPE_JSON: 'json', FIXTURE_TYPE_YAML: 'yaml', + FIXTURE_TYPE_BETTER_YAML: 'better_yaml', FIXTURE_TYPE_XML: 'xml', } FIXTURE_TYPE_PK_NULLIFIER = { FIXTURE_TYPE_JSON: lambda x: re.sub('"pk": [0-9]{1,5}', '"pk": null', x), FIXTURE_TYPE_YAML: lambda x: re.sub('pk: [0-9]{1,5}', 'pk: null', x), + FIXTURE_TYPE_BETTER_YAML: lambda x: re.sub('pk: [0-9]{1,5}', 'pk: null', x), FIXTURE_TYPE_XML: lambda x: re.sub('pk="[0-9]{1,5}"', 'pk=null', x), } +FIXTURE_TYPE_EMPTY_FIXTURE = { + FIXTURE_TYPE_JSON: lambda x: '[]' in x or x == ',', + FIXTURE_TYPE_YAML: lambda x: '[]' in x, + FIXTURE_TYPE_BETTER_YAML: lambda x: '{}' in x, + FIXTURE_TYPE_XML: lambda x: x, +} + +FIXTURE_TYPE_MODEL_PROCESS = { + FIXTURE_TYPE_JSON: lambda x: '%s,' % x[2:-2], + FIXTURE_TYPE_YAML: lambda x: x, + FIXTURE_TYPE_BETTER_YAML: lambda x: x, + FIXTURE_TYPE_XML: lambda x: x, +} + +FIXTURE_TYPE_FIXTURE_PROCESS = { + FIXTURE_TYPE_JSON: lambda x: '[\n%s\n]' % x, + FIXTURE_TYPE_YAML: lambda x: x, + FIXTURE_TYPE_BETTER_YAML: lambda x: x, + FIXTURE_TYPE_XML: lambda x: x, +} + COMMAND_LOADDATA = 'loaddata' if YAML_AVAILABLE: FIXTURE_TYPES_CHOICES += (FIXTURE_TYPE_YAML, _(u'YAML')), + FIXTURE_TYPES_CHOICES += (FIXTURE_TYPE_BETTER_YAML, _(u'Better YAML')), diff --git a/apps/bootstrap/managers.py b/apps/bootstrap/managers.py index 6e9a457911..d046266cfd 100644 --- a/apps/bootstrap/managers.py +++ b/apps/bootstrap/managers.py @@ -6,6 +6,7 @@ from django.db import models from django.core import serializers from .classes import BootstrapModel +from .literals import FIXTURE_TYPE_FIXTURE_PROCESS, FIXTURE_TYPE_EMPTY_FIXTURE logger = logging.getLogger(__name__) @@ -22,6 +23,7 @@ class BootstrapSetupManager(models.Manager): result = [] for bootstrap_model in BootstrapModel.get_all(): model_fixture = bootstrap_model.dump(serialization_format) - if '[]' not in model_fixture and '{}' not in model_fixture: + # Only add non empty model fixtures + if not FIXTURE_TYPE_EMPTY_FIXTURE[serialization_format](model_fixture): result.append(model_fixture) - return '\n'.join(result) + return FIXTURE_TYPE_FIXTURE_PROCESS[serialization_format]('\n'.join(result))