Add support for automatic bootstrap setup fixture metadata creation
This commit is contained in:
@@ -73,3 +73,30 @@ class BootstrapModel(object):
|
|||||||
# Do any clean up required on the fixture
|
# Do any clean up required on the fixture
|
||||||
result = FIXTURE_TYPE_MODEL_PROCESS[serialization_format](result)
|
result = FIXTURE_TYPE_MODEL_PROCESS[serialization_format](result)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
class FixtureMetadata(object):
|
||||||
|
_registry = {}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_all(cls):
|
||||||
|
return cls._registry.values()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def generate_all(cls, fixture_instance):
|
||||||
|
result = []
|
||||||
|
for fixture_metadata in cls.get_all():
|
||||||
|
result.append(fixture_metadata.generate(fixture_instance))
|
||||||
|
|
||||||
|
return '\n'.join(result)
|
||||||
|
|
||||||
|
def __init__(self, literal, generate_function):
|
||||||
|
self.literal = literal
|
||||||
|
self.generate_function = generate_function
|
||||||
|
self.__class__._registry[id(self)] = self
|
||||||
|
|
||||||
|
def generate(self, fixture_instance):
|
||||||
|
return '# %s: %s' % (self.literal, self.generate_function(fixture_instance))
|
||||||
|
|
||||||
|
def read_value(self, fixture_data):
|
||||||
|
return [line[line.find(self.literal) + len(self.literal) + 2:] for line in fixture_data.splitlines(False) if line.find(self.literal)]
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import yaml
|
import yaml
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@@ -61,3 +62,9 @@ COMMAND_LOADDATA = 'loaddata'
|
|||||||
if YAML_AVAILABLE:
|
if YAML_AVAILABLE:
|
||||||
FIXTURE_TYPES_CHOICES += (FIXTURE_TYPE_YAML, _(u'YAML')),
|
FIXTURE_TYPES_CHOICES += (FIXTURE_TYPE_YAML, _(u'YAML')),
|
||||||
FIXTURE_TYPES_CHOICES += (FIXTURE_TYPE_BETTER_YAML, _(u'Better YAML')),
|
FIXTURE_TYPES_CHOICES += (FIXTURE_TYPE_BETTER_YAML, _(u'Better YAML')),
|
||||||
|
|
||||||
|
FIXTURE_METADATA_EDITED = 'edited'
|
||||||
|
FIXTURE_METADATA_MAYAN_VERSION = 'mayan_edms_version'
|
||||||
|
FIXTURE_METADATA_FORMAT = 'format'
|
||||||
|
FIXTURE_METADATA_NAME = 'name'
|
||||||
|
FIXTURE_METADATA_DESCRIPTION = 'description'
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import logging
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.core import serializers
|
from django.core import serializers
|
||||||
|
|
||||||
from .classes import BootstrapModel
|
from .classes import BootstrapModel, FixtureMetadata
|
||||||
from .literals import FIXTURE_TYPE_FIXTURE_PROCESS, FIXTURE_TYPE_EMPTY_FIXTURE
|
from .literals import FIXTURE_TYPE_FIXTURE_PROCESS, FIXTURE_TYPE_EMPTY_FIXTURE
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -19,11 +19,19 @@ class BootstrapSetupManager(models.Manager):
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def dump(self, serialization_format):
|
def dump(self, serialization_format, instance):
|
||||||
|
metadata_text = []
|
||||||
|
# Add fixture metadata
|
||||||
|
metadata_text.append(FixtureMetadata.generate_all(instance))
|
||||||
|
metadata_text.append('\n')
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
for bootstrap_model in BootstrapModel.get_all():
|
for bootstrap_model in BootstrapModel.get_all():
|
||||||
model_fixture = bootstrap_model.dump(serialization_format)
|
model_fixture = bootstrap_model.dump(serialization_format)
|
||||||
# Only add non empty model fixtures
|
# Only add non empty model fixtures
|
||||||
if not FIXTURE_TYPE_EMPTY_FIXTURE[serialization_format](model_fixture):
|
if not FIXTURE_TYPE_EMPTY_FIXTURE[serialization_format](model_fixture):
|
||||||
result.append(model_fixture)
|
result.append(model_fixture)
|
||||||
return FIXTURE_TYPE_FIXTURE_PROCESS[serialization_format]('\n'.join(result))
|
return '%s\n%s' % (
|
||||||
|
'\n'.join(metadata_text),
|
||||||
|
FIXTURE_TYPE_FIXTURE_PROCESS[serialization_format]('\n'.join(result))
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,12 +1,24 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
from time import gmtime, strftime
|
||||||
|
|
||||||
from navigation.api import register_links
|
from navigation.api import register_links
|
||||||
|
from main import __version__
|
||||||
|
|
||||||
from .links import (link_bootstrap_setup_create, link_bootstrap_setup_execute,
|
from .links import (link_bootstrap_setup_create, link_bootstrap_setup_execute,
|
||||||
link_bootstrap_setup_list, link_bootstrap_setup_edit, link_bootstrap_setup_delete,
|
link_bootstrap_setup_list, link_bootstrap_setup_edit, link_bootstrap_setup_delete,
|
||||||
link_bootstrap_setup_view, link_bootstrap_setup_dump)
|
link_bootstrap_setup_view, link_bootstrap_setup_dump)
|
||||||
from .models import BootstrapSetup
|
from .models import BootstrapSetup
|
||||||
|
from .classes import FixtureMetadata
|
||||||
|
from .literals import (FIXTURE_METADATA_EDITED, FIXTURE_METADATA_MAYAN_VERSION,
|
||||||
|
FIXTURE_METADATA_FORMAT, FIXTURE_METADATA_NAME, FIXTURE_METADATA_DESCRIPTION)
|
||||||
|
|
||||||
register_links([BootstrapSetup], [link_bootstrap_setup_view, link_bootstrap_setup_edit, link_bootstrap_setup_delete, link_bootstrap_setup_execute])
|
register_links([BootstrapSetup], [link_bootstrap_setup_view, link_bootstrap_setup_edit, link_bootstrap_setup_delete, link_bootstrap_setup_execute])
|
||||||
register_links([BootstrapSetup], [link_bootstrap_setup_list, link_bootstrap_setup_create, link_bootstrap_setup_dump], menu_name='secondary_menu')
|
register_links([BootstrapSetup], [link_bootstrap_setup_list, link_bootstrap_setup_create, link_bootstrap_setup_dump], menu_name='secondary_menu')
|
||||||
register_links(['bootstrap_setup_list', 'bootstrap_setup_create', 'bootstrap_setup_dump'], [link_bootstrap_setup_list, link_bootstrap_setup_create, link_bootstrap_setup_dump], menu_name='secondary_menu')
|
register_links(['bootstrap_setup_list', 'bootstrap_setup_create', 'bootstrap_setup_dump'], [link_bootstrap_setup_list, link_bootstrap_setup_create, link_bootstrap_setup_dump], menu_name='secondary_menu')
|
||||||
|
|
||||||
|
FixtureMetadata(FIXTURE_METADATA_EDITED, generate_function=lambda fixture_instance: strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()))
|
||||||
|
FixtureMetadata(FIXTURE_METADATA_MAYAN_VERSION, generate_function=lambda fixture_instance: __version__)
|
||||||
|
FixtureMetadata(FIXTURE_METADATA_FORMAT, generate_function=lambda fixture_instance: fixture_instance.type)
|
||||||
|
FixtureMetadata(FIXTURE_METADATA_NAME, generate_function=lambda fixture_instance: fixture_instance.name)
|
||||||
|
FixtureMetadata(FIXTURE_METADATA_DESCRIPTION, generate_function=lambda fixture_instance: fixture_instance.description)
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ def bootstrap_setup_dump(request):
|
|||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
bootstrap = form.save(commit=False)
|
bootstrap = form.save(commit=False)
|
||||||
try:
|
try:
|
||||||
bootstrap.fixture = BootstrapSetup.objects.dump(serialization_format=bootstrap.type)
|
bootstrap.fixture = BootstrapSetup.objects.dump(serialization_format=bootstrap.type, instance=bootstrap)
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
messages.error(request, _(u'Error dumping bootstrap setup; %s') % exception)
|
messages.error(request, _(u'Error dumping bootstrap setup; %s') % exception)
|
||||||
raise
|
raise
|
||||||
|
|||||||
Reference in New Issue
Block a user