diff --git a/mayan/apps/bootstrap/classes.py b/mayan/apps/bootstrap/classes.py index f8d701a1ef..b3d9555457 100644 --- a/mayan/apps/bootstrap/classes.py +++ b/mayan/apps/bootstrap/classes.py @@ -1,10 +1,10 @@ from __future__ import absolute_import -import logging from itertools import chain +import logging -from django.db import models from django.core import serializers +from django.db import models from django.utils.datastructures import SortedDict from .exceptions import ExistingData, NotABootstrapSetup @@ -40,7 +40,7 @@ class BootstrapModel(object): @classmethod def get_magic_number(cls): - return '%s %s' % (FIXTURE_METADATA_REMARK_CHARACTER, BOOTSTRAP_SETUP_MAGIC_NUMBER) + return '%s %s' % (FIXTURE_METADATA_REMARK_CHARACTER, BOOTSTRAP_SETUP_MAGIC_NUMBER) @classmethod def check_magic_number(cls, data): @@ -102,7 +102,7 @@ class BootstrapModel(object): app_name_splitted = None if '.' in model_name: app_name_splitted, model_name = model_name.split('.') - + self.app_name = app_name_splitted or app_name if not self.app_name: raise Exception('Pass either a dotted app plus model name or a model name and a separate app name') @@ -157,7 +157,7 @@ class FixtureMetadata(object): self.property_name = property_name self.read_function = read_function or (lambda x: x) self.__class__._registry[id(self)] = self - + def get_with_remark(self): return '%s %s' % (FIXTURE_METADATA_REMARK_CHARACTER, self.literal) @@ -169,4 +169,4 @@ class FixtureMetadata(object): for line in fixture_data.splitlines(False): if line.startswith(self.get_with_remark()): # TODO: replace the "+ 4" with a space and next character finding algo - return self.read_function(line[len(self.literal) + 4:]) + return self.read_function(line[len(self.literal) + 4:]) diff --git a/mayan/apps/bootstrap/exceptions.py b/mayan/apps/bootstrap/exceptions.py index 09698c6397..dbe4be6955 100644 --- a/mayan/apps/bootstrap/exceptions.py +++ b/mayan/apps/bootstrap/exceptions.py @@ -4,7 +4,7 @@ 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 + existing data that would be corrupted or damaged by the loading the bootstrap's fixture. """ pass diff --git a/mayan/apps/bootstrap/forms.py b/mayan/apps/bootstrap/forms.py index 30621a81a9..44a6478712 100644 --- a/mayan/apps/bootstrap/forms.py +++ b/mayan/apps/bootstrap/forms.py @@ -17,8 +17,7 @@ class BootstrapSetupForm(forms.ModelForm): model = BootstrapSetup widgets = { 'description': forms.widgets.Textarea(attrs={ - 'rows': 5, 'cols': 80, - } + 'rows': 5, 'cols': 80} ) } @@ -28,11 +27,11 @@ class BootstrapSetupForm_view(DetailForm): model = BootstrapSetup widgets = { 'description': forms.widgets.Textarea(attrs={ - 'rows': 5, 'cols': 80, - } + 'rows': 5, 'cols': 80} ) } + class BootstrapSetupForm_edit(BootstrapSetupForm): class Meta(BootstrapSetupForm.Meta): model = BootstrapSetup diff --git a/mayan/apps/bootstrap/links.py b/mayan/apps/bootstrap/links.py index 63e51dfa29..3057c7bfd9 100644 --- a/mayan/apps/bootstrap/links.py +++ b/mayan/apps/bootstrap/links.py @@ -13,7 +13,7 @@ link_bootstrap_setup_list = {'text': _(u'bootstrap setup list'), 'view': 'bootst link_bootstrap_setup_create = {'text': _(u'create new bootstrap setup'), 'view': 'bootstrap_setup_create', 'famfam': 'lightning_add', 'permissions': [PERMISSION_BOOTSTRAP_CREATE]} link_bootstrap_setup_edit = {'text': _(u'edit'), 'view': 'bootstrap_setup_edit', 'args': 'object.pk', 'famfam': 'pencil', 'permissions': [PERMISSION_BOOTSTRAP_EDIT]} link_bootstrap_setup_delete = {'text': _(u'delete'), 'view': 'bootstrap_setup_delete', 'args': 'object.pk', 'famfam': 'lightning_delete', 'permissions': [PERMISSION_BOOTSTRAP_DELETE]} -link_bootstrap_setup_view = {'text': _(u'details'), 'view': 'bootstrap_setup_view', 'args': 'object.pk', 'famfam': 'lightning', 'permissions': [PERMISSION_BOOTSTRAP_VIEW]} +link_bootstrap_setup_view = {'text': _(u'details'), 'view': 'bootstrap_setup_view', 'args': 'object.pk', 'famfam': 'lightning', 'permissions': [PERMISSION_BOOTSTRAP_VIEW]} link_bootstrap_setup_execute = {'text': _(u'execute'), 'view': 'bootstrap_setup_execute', 'args': 'object.pk', 'famfam': 'lightning_go', 'permissions': [PERMISSION_BOOTSTRAP_EXECUTE]} link_bootstrap_setup_dump = {'text': _(u'dump current setup'), 'view': 'bootstrap_setup_dump', 'famfam': 'arrow_down', 'permissions': [PERMISSION_BOOTSTRAP_DUMP]} link_bootstrap_setup_export = {'text': _(u'export'), 'view': 'bootstrap_setup_export', 'args': 'object.pk', 'famfam': 'disk', 'permissions': [PERMISSION_BOOTSTRAP_EXPORT]} diff --git a/mayan/apps/bootstrap/literals.py b/mayan/apps/bootstrap/literals.py index c85577d1de..e352bb051c 100644 --- a/mayan/apps/bootstrap/literals.py +++ b/mayan/apps/bootstrap/literals.py @@ -19,7 +19,7 @@ FIXTURE_TYPE_XML = 'xml' FIXTURE_TYPES_CHOICES = ( (FIXTURE_TYPE_JSON, _(u'JSON')), # Disabing XML until a way to specify a null pk is found - #(FIXTURE_TYPE_XML, _(u'XML')), + # (FIXTURE_TYPE_XML, _(u'XML')), ) FIXTURE_FILE_TYPE = { diff --git a/mayan/apps/bootstrap/management/commands/erase_data.py b/mayan/apps/bootstrap/management/commands/erase_data.py index c53164cbfc..b8df71810e 100644 --- a/mayan/apps/bootstrap/management/commands/erase_data.py +++ b/mayan/apps/bootstrap/management/commands/erase_data.py @@ -2,11 +2,10 @@ from __future__ import absolute_import from optparse import make_option -from django.db import models, router, connections, DEFAULT_DB_ALIAS -from django.core.management import call_command from django.core.management.base import NoArgsCommand, CommandError from django.core.management.color import no_style from django.core.management.sql import emit_post_sync_signal +from django.db import models, router, connections, DEFAULT_DB_ALIAS from ...classes import Cleanup diff --git a/mayan/apps/bootstrap/management/commands/execute_bootstrap.py b/mayan/apps/bootstrap/management/commands/execute_bootstrap.py index d61c1ade3c..79a5799d04 100644 --- a/mayan/apps/bootstrap/management/commands/execute_bootstrap.py +++ b/mayan/apps/bootstrap/management/commands/execute_bootstrap.py @@ -1,7 +1,5 @@ from __future__ import absolute_import -from optparse import make_option - from django.core.management.base import BaseCommand, CommandError from ...models import BootstrapSetup diff --git a/mayan/apps/bootstrap/managers.py b/mayan/apps/bootstrap/managers.py index b5e0bea331..4c4d1eb272 100644 --- a/mayan/apps/bootstrap/managers.py +++ b/mayan/apps/bootstrap/managers.py @@ -4,11 +4,9 @@ import logging import requests -from django.db import models -from django.core import serializers -from django.utils.simplejson import loads -from django.db import IntegrityError +from django.db import IntegrityError, models from django.db.models import Q +from django.utils.simplejson import loads from .classes import BootstrapModel, FixtureMetadata from .literals import (FIXTURE_TYPE_FIXTURE_PROCESS, FIXTURE_TYPE_EMPTY_FIXTURE, @@ -56,7 +54,7 @@ class BootstrapSetupManager(models.Manager): def import_from_file(self, files): file_data = files.read() self.import_setup(file_data) - + def import_from_url(self, url, **kwargs): response = requests.get(url) if response.status_code == requests.codes.ok: @@ -72,4 +70,3 @@ class BootstrapSetupManager(models.Manager): self.import_from_url(bootstrap_setup_url, overwrite=True) else: response.raise_for_status() - diff --git a/mayan/apps/bootstrap/models.py b/mayan/apps/bootstrap/models.py index 990f73da4c..5c5e7a767e 100644 --- a/mayan/apps/bootstrap/models.py +++ b/mayan/apps/bootstrap/models.py @@ -1,9 +1,9 @@ from __future__ import absolute_import -import os -import tempfile -import re import datetime +import os +import re +import tempfile import slugify @@ -12,15 +12,15 @@ try: except ImportError: from StringIO import StringIO -from django.db import models -from django.utils.translation import ugettext_lazy as _ from django.core import management from django.core.files.uploadedfile import SimpleUploadedFile +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from .classes import BootstrapModel, FixtureMetadata from .literals import (FIXTURE_TYPES_CHOICES, FIXTURE_FILE_TYPE, COMMAND_LOADDATA, BOOTSTRAP_EXTENSION, FIXTURE_METADATA_REMARK_CHARACTER) from .managers import BootstrapSetupManager -from .classes import BootstrapModel, FixtureMetadata class BootstrapSetup(models.Model): @@ -59,7 +59,7 @@ class BootstrapSetup(models.Model): with open(filepath, 'w') as file_handle: file_handle.write(self.cleaned_fixture) - + content = StringIO() management.call_command(COMMAND_LOADDATA, filepath, verbosity=0, stderr=content) content.seek(0, os.SEEK_END) diff --git a/mayan/apps/bootstrap/utils.py b/mayan/apps/bootstrap/utils.py index fe331dcbc7..51b026aac1 100644 --- a/mayan/apps/bootstrap/utils.py +++ b/mayan/apps/bootstrap/utils.py @@ -1,23 +1,23 @@ -## {{{ http://code.activestate.com/recipes/578272/ (r1) +# {{{ http://code.activestate.com/recipes/578272/ (r1) def toposort2(data): """Dependencies are expressed as a dictionary whose keys are items -and whose values are a set of dependent items. Output is a list of -sets in topological order. The first set consists of items with no -dependences, each subsequent set consists of items that depend upon -items in the preceeding sets. + and whose values are a set of dependent items. Output is a list of + sets in topological order. The first set consists of items with no + dependences, each subsequent set consists of items that depend upon + items in the preceeding sets. ->>> print '\\n'.join(repr(sorted(x)) for x in toposort2({ -... 2: set([11]), -... 9: set([11,8]), -... 10: set([11,3]), -... 11: set([7,5]), -... 8: set([7,3]), -... }) ) -[3, 5, 7] -[8, 11] -[2, 9, 10] + >>> print '\\n'.join(repr(sorted(x)) for x in toposort2({ + ... 2: set([11]), + ... 9: set([11,8]), + ... 10: set([11,3]), + ... 11: set([7,5]), + ... 8: set([7,3]), + ... }) ) + [3, 5, 7] + [8, 11] + [2, 9, 10] -""" + """ from functools import reduce @@ -39,4 +39,4 @@ items in the preceeding sets. if item not in ordered: data[item] = dep - ordered assert not data, "Cyclic dependencies exist among these items:\n%s" % '\n'.join(repr(x) for x in data.iteritems()) -## end of http://code.activestate.com/recipes/578272/ }}} +# end of http://code.activestate.com/recipes/578272/ }}} diff --git a/mayan/apps/bootstrap/views.py b/mayan/apps/bootstrap/views.py index 1112afb309..8764205d9a 100644 --- a/mayan/apps/bootstrap/views.py +++ b/mayan/apps/bootstrap/views.py @@ -1,26 +1,27 @@ from __future__ import absolute_import -from django.utils.translation import ugettext_lazy as _ +from django.contrib import messages +from django.core.exceptions import PermissionDenied +from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext -from django.contrib import messages -from django.core.urlresolvers import reverse -from django.core.files import File +from django.utils.translation import ugettext_lazy as _ from filetransfers.api import serve_file +from acls.models import AccessEntry from permissions.models import Permission +from .classes import Cleanup +from .exceptions import ExistingData, NotABootstrapSetup +from .forms import (BootstrapSetupForm, BootstrapSetupForm_view, BootstrapSetupForm_dump, + BootstrapSetupForm_edit, BootstrapFileImportForm, BootstrapURLImportForm) from .models import BootstrapSetup -from .classes import Cleanup, BootstrapModel from .permissions import (PERMISSION_BOOTSTRAP_VIEW, PERMISSION_BOOTSTRAP_CREATE, PERMISSION_BOOTSTRAP_EDIT, PERMISSION_BOOTSTRAP_DELETE, PERMISSION_BOOTSTRAP_EXECUTE, PERMISSION_NUKE_DATABASE, PERMISSION_BOOTSTRAP_DUMP, PERMISSION_BOOTSTRAP_EXPORT, PERMISSION_BOOTSTRAP_IMPORT, PERMISSION_BOOTSTRAP_REPOSITORY_SYNC) -from .forms import (BootstrapSetupForm, BootstrapSetupForm_view, BootstrapSetupForm_dump, - BootstrapSetupForm_edit, BootstrapFileImportForm, BootstrapURLImportForm) -from .exceptions import ExistingData, NotABootstrapSetup def bootstrap_setup_list(request): @@ -218,7 +219,7 @@ def bootstrap_setup_export(request, bootstrap_setup_pk): Permission.objects.check_permissions(request.user, [PERMISSION_BOOTSTRAP_EXPORT]) except PermissionDenied: AccessEntry.objects.check_access(PERMISSION_BOOTSTRAP_EXPORT, request.user, bootstrap) - + return serve_file( request, bootstrap.as_file(), @@ -316,7 +317,7 @@ def erase_database_view(request): def bootstrap_setup_repository_sync(request): Permission.objects.check_permissions(request.user, [PERMISSION_BOOTSTRAP_REPOSITORY_SYNC]) - + post_action_redirect = reverse('bootstrap_setup_list') previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/')))