From 310c69aeff675a8da05f38ed22d1d65a6c660dbd Mon Sep 17 00:00:00 2001 From: Ekaterina Fedorova Date: Mon, 5 May 2014 18:59:41 +0400 Subject: [PATCH] Resolve pep8 import issues * H301 one import per line * H302 import only modules * H306 imports not in alphabetical order Change-Id: I75d6f63515b6f5d6dc92d8cafd2176e0415c23f5 --- manage.py | 4 +- muranodashboard/catalog/panel.py | 3 +- muranodashboard/catalog/urls.py | 44 ++++++------ muranodashboard/catalog/views.py | 16 ++--- muranodashboard/common/cache.py | 4 +- muranodashboard/dashboard.py | 4 +- muranodashboard/dynamic_ui/fields.py | 69 ++++++++++--------- muranodashboard/dynamic_ui/forms.py | 4 +- muranodashboard/dynamic_ui/services.py | 21 +++--- muranodashboard/environments/api.py | 20 +++--- muranodashboard/environments/consts.py | 2 +- muranodashboard/environments/forms.py | 9 +-- muranodashboard/environments/panel.py | 3 +- muranodashboard/environments/tables.py | 40 +++++------ muranodashboard/environments/tabs.py | 9 +-- muranodashboard/environments/topology.py | 14 ++-- muranodashboard/environments/urls.py | 54 +++++++-------- muranodashboard/environments/views.py | 32 +++++---- muranodashboard/environments/workflows.py | 2 +- muranodashboard/images/forms.py | 15 ++-- muranodashboard/images/panel.py | 3 +- muranodashboard/images/tables.py | 2 +- muranodashboard/images/urls.py | 19 +++-- muranodashboard/images/views.py | 24 ++++--- muranodashboard/middleware.py | 13 ++-- muranodashboard/packages/forms.py | 24 ++++--- muranodashboard/packages/panel.py | 3 +- muranodashboard/packages/tables.py | 9 +-- muranodashboard/packages/urls.py | 22 +++--- muranodashboard/packages/views.py | 18 ++--- muranodashboard/settings.py | 4 +- muranodashboard/stats/models.py | 4 +- muranodashboard/stats/panel.py | 3 +- muranodashboard/stats/tabs.py | 3 +- muranodashboard/stats/urls.py | 7 +- .../templatetags/custom_filters.py | 4 +- tox.ini | 28 ++++++-- 37 files changed, 301 insertions(+), 258 deletions(-) diff --git a/manage.py b/manage.py index e14ea977e..4df70c774 100755 --- a/manage.py +++ b/manage.py @@ -1,10 +1,10 @@ #!/usr/bin/env python -import sys import os +import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "muranodashboard.settings") - from django.core.management import execute_from_command_line + from django.core.management import execute_from_command_line # noqa execute_from_command_line(sys.argv) diff --git a/muranodashboard/catalog/panel.py b/muranodashboard/catalog/panel.py index 8fb7bb795..8e6a09187 100644 --- a/muranodashboard/catalog/panel.py +++ b/muranodashboard/catalog/panel.py @@ -12,8 +12,9 @@ # License for the specific language governing permissions and limitations # under the License. -import horizon from django.utils.translation import ugettext_lazy as _ +import horizon + from muranodashboard import dashboard diff --git a/muranodashboard/catalog/urls.py b/muranodashboard/catalog/urls.py index 38eb6a0a4..b3c1972b4 100644 --- a/muranodashboard/catalog/urls.py +++ b/muranodashboard/catalog/urls.py @@ -12,7 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. -from django.conf.urls import patterns, url +from django.conf import urls from muranodashboard.catalog import views from muranodashboard.dynamic_ui import services @@ -22,26 +22,26 @@ VIEW_MOD = 'muranodashboard.catalog.views' wizard_view = views.Wizard.as_view( services.get_app_forms, condition_dict=services.condition_getter) -urlpatterns = patterns( +urlpatterns = urls.patterns( VIEW_MOD, - url(r'^index$', views.IndexView.as_view(), name='index'), - url(r'^index/(?P[^/]+)/(?P\d+)$', - views.IndexView.as_view(), - name='index'), - url(r'^switch_environment/(?P[^/]+)$', - 'switch', - name='switch_env'), - url(r'^add/(?P[^/]+)/(?P[^/]+)$', - wizard_view, - name='add'), - url(r'^add/(?P[^/]+)/(?P[^/]+)/' - r'(?P[^/]+)/(?P[^/]+)$', - wizard_view, - name='add_many'), - url(r'^quick-add/(?P[^/]+)$', - 'quick_deploy', - name='quick_add'), - url(r'^details/(?P[^/]+)$', - views.AppDetailsView.as_view(), name='application_details'), - url(r'^images/(?P[^/]*)', 'get_image', name="images") + urls.url(r'^index$', views.IndexView.as_view(), name='index'), + urls.url(r'^index/(?P[^/]+)/(?P\d+)$', + views.IndexView.as_view(), + name='index'), + urls.url(r'^switch_environment/(?P[^/]+)$', + 'switch', + name='switch_env'), + urls.url(r'^add/(?P[^/]+)/(?P[^/]+)$', + wizard_view, + name='add'), + urls.url(r'^add/(?P[^/]+)/(?P[^/]+)/' + r'(?P[^/]+)/(?P[^/]+)$', + wizard_view, + name='add_many'), + urls.url(r'^quick-add/(?P[^/]+)$', + 'quick_deploy', + name='quick_add'), + urls.url(r'^details/(?P[^/]+)$', + views.AppDetailsView.as_view(), name='application_details'), + urls.url(r'^images/(?P[^/]*)', 'get_image', name="images") ) diff --git a/muranodashboard/catalog/views.py b/muranodashboard/catalog/views.py index e2d32ac59..58b4297ed 100644 --- a/muranodashboard/catalog/views.py +++ b/muranodashboard/catalog/views.py @@ -23,17 +23,17 @@ from django.conf import settings from django.contrib import auth from django.contrib.auth import decorators as auth_dec from django.contrib.formtools.wizard import views as wizard_views -from django.core import urlresolvers as url +from django.core.urlresolvers import reverse from django import http from django import shortcuts from django.utils import decorators as django_dec from django.utils import http as http_utils -from django.utils.translation import ugettext_lazy as _ # noqa +from django.utils.translation import ugettext_lazy as _ from django.views.generic import list as list_view +from horizon import exceptions +from horizon.forms import views from horizon import messages from horizon import tabs -from horizon.forms import views -from horizon import exceptions from muranoclient.common import exceptions as exc from muranodashboard.catalog import tabs as catalog_tabs @@ -214,8 +214,8 @@ class Wizard(views.ModalFormMixin, LazyWizard): def done(self, form_list, **kwargs): environment_id = kwargs.get('environment_id') - env_url = url.reverse('horizon:murano:environments:services', - args=(environment_id,)) + env_url = reverse('horizon:murano:environments:services', + args=(environment_id,)) app_name = services.get_service_name(self.request, kwargs.get('app_id')) @@ -233,7 +233,7 @@ class Wizard(views.ModalFormMixin, LazyWizard): else: do_redirect = self.get_wizard_flag('do_redirect') - fail_url = url.reverse("horizon:murano:environments:index") + fail_url = reverse("horizon:murano:environments:index") try: srv = api.service_create(self.request, environment_id, attributes) except exc.HTTPForbidden: @@ -266,7 +266,7 @@ class Wizard(views.ModalFormMixin, LazyWizard): return response else: ns_url = 'horizon:murano:catalog:index' - return http.HttpResponseRedirect(url.reverse(ns_url)) + return http.HttpResponseRedirect(reverse(ns_url)) def get_form_initial(self, step): init_dict = {'request': self.request, diff --git a/muranodashboard/common/cache.py b/muranodashboard/common/cache.py index df6b2854d..4c0dc690f 100644 --- a/muranodashboard/common/cache.py +++ b/muranodashboard/common/cache.py @@ -17,11 +17,11 @@ import functools import logging import os -from muranodashboard.environments.consts import CACHE_DIR +from muranodashboard.environments import consts LOG = logging.getLogger(__name__) -OBJS_PATH = os.path.join(CACHE_DIR, 'apps') +OBJS_PATH = os.path.join(consts.CACHE_DIR, 'apps') if not os.path.exists(OBJS_PATH): os.makedirs(OBJS_PATH) diff --git a/muranodashboard/dashboard.py b/muranodashboard/dashboard.py index d2913ce8e..5fc00eb0b 100644 --- a/muranodashboard/dashboard.py +++ b/muranodashboard/dashboard.py @@ -11,8 +11,10 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -import horizon + from django.utils.translation import ugettext_lazy as _ +import horizon + from muranodashboard import exceptions # prevent pyflakes from fail assert exceptions diff --git a/muranodashboard/dynamic_ui/fields.py b/muranodashboard/dynamic_ui/fields.py index f4c133c4d..f890abcc9 100644 --- a/muranodashboard/dynamic_ui/fields.py +++ b/muranodashboard/dynamic_ui/fields.py @@ -12,27 +12,28 @@ # License for the specific language governing permissions and limitations # under the License. -import json import copy +import json import logging - +import netaddr import re -from django import forms -from django.core.validators import RegexValidator, validate_ipv4_address -from netaddr import all_matching_cidrs, IPNetwork, IPAddress -from django.utils.translation import ugettext_lazy as _ -from django.utils.encoding import smart_text -from muranodashboard.environments import api -from horizon import exceptions, messages -from openstack_dashboard.api import glance -from openstack_dashboard.api.nova import novaclient -from django.template.defaultfilters import pluralize -import horizon.tables as tables -import horizon.forms as hz_forms -import floppyforms -from django.template.loader import render_to_string -from muranoclient.common import exceptions as muranoclient_exc +from django.core import validators as django_validator +from django import forms +from django.template import defaultfilters +from django.template import loader +from django.utils.encoding import smart_text +from django.utils.translation import ugettext_lazy as _ +import floppyforms +from horizon import exceptions +from horizon import forms as hz_forms +from horizon import messages +from horizon import tables +from openstack_dashboard.api import glance +from openstack_dashboard.api import nova + +from muranoclient.common import exceptions as muranoclient_exc +from muranodashboard.environments import api LOG = logging.getLogger(__name__) @@ -75,7 +76,7 @@ def make_yaql_validator(field, form, key, validator_property): def get_regex_validator(expr): try: validator = expr['validators'][0] - if isinstance(validator, RegexValidator): + if isinstance(validator, django_validator.RegexValidator): return validator except (TypeError, KeyError, IndexError): pass @@ -194,7 +195,7 @@ class PasswordField(CharField): password_re = re.compile('^.*(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[%s]).*$' % special_characters) has_clone = False - validate_password = RegexValidator( + validate_password = django_validator.RegexValidator( password_re, _('The password must contain at least one letter, one \ number and one special character'), 'invalid') @@ -208,7 +209,7 @@ class PasswordField(CharField): # do not run compare for hidden fields (they are not required) if form_data.get(name) != form_data.get(self.get_clone_name(name)): raise forms.ValidationError(_(u"{0}{1} don't match").format( - self.label, pluralize(2))) + self.label, defaultfilters.pluralize(2))) class PasswordInput(forms.PasswordInput): class Media: @@ -271,7 +272,7 @@ class Column(tables.Column): 'row_index': str(datum.id), 'table_name': table_name, 'column_name': self.name} - return render_to_string(self.template_name, context) + return loader.render_to_string(self.template_name, context) _transform.__name__ = transform transform = _transform super(Column, self).__init__(transform, **kwargs) @@ -456,7 +457,7 @@ class FlavorChoiceField(ChoiceField): @with_request def update(self, request, **kwargs): self.choices = [(flavor.name, flavor.name) for flavor in - novaclient(request).flavors.list()] + nova.novaclient(request).flavors.list()] for flavor in self.choices: if 'medium' in flavor[1]: self.initial = flavor[0] @@ -468,7 +469,7 @@ class KeyPairChoiceField(ChoiceField): @with_request def update(self, request, **kwargs): self.choices = [('', _('No keypair'))] - for keypair in novaclient(request).keypairs.list(): + for keypair in nova.novaclient(request).keypairs.list(): self.choices.append((keypair.name, keypair.name)) @@ -510,8 +511,8 @@ class AZoneChoiceField(ChoiceField): @with_request def update(self, request, **kwargs): try: - availability_zones = novaclient(request).availability_zones.\ - list(detailed=False) + availability_zones = nova.novaclient( + request).availability_zones.list(detailed=False) except Exception: availability_zones = [] exceptions.handle(request, @@ -552,12 +553,12 @@ class ClusterIPField(CharField): @staticmethod def make_nova_validator(request, ip_ranges): def perform_checking(ip): - validate_ipv4_address(ip) - if not all_matching_cidrs(ip, ip_ranges) and ip_ranges: + django_validator.validate_ipv4_address(ip) + if not netaddr.all_matching_cidrs(ip, ip_ranges) and ip_ranges: raise forms.ValidationError(_('Specified Cluster Static IP is' ' not in valid IP range')) try: - ip_info = novaclient(request).fixed_ips.get(ip) + ip_info = nova.novaclient(request).fixed_ips.get(ip) except exceptions.UNAUTHORIZED: LOG.error("Error to get information about IP address" " using novaclient") @@ -584,12 +585,13 @@ class ClusterIPField(CharField): def make_neutron_validator(self): def perform_checking(ip): - validate_ipv4_address(ip) + django_validator.validate_ipv4_address(ip) if not self.existing_subnet: raise forms.ValidationError( _('Cannot get allowed subnet for the environment, ' 'consult your admin')) - elif not IPAddress(ip) in IPNetwork(self.existing_subnet): + elif not netaddr.IPAddress(ip) in netaddr.IPNetwork( + self.existing_subnet): raise forms.ValidationError( _('Specified IP address should belong to {0} ' 'subnet').format(self.existing_subnet)) @@ -602,7 +604,7 @@ class ClusterIPField(CharField): if self.network_topology == 'nova': try: - network_list = novaclient(request).networks.list() + network_list = nova.novaclient(request).networks.list() ip_ranges = [network.cidr for network in network_list] ranges = ', '.join(ip_ranges) except StandardError: @@ -621,11 +623,12 @@ class ClusterIPField(CharField): self.validators = [self.make_neutron_validator()] else: # 'flat' topology raise NotImplementedError('Flat topology is not implemented yet') - self.error_messages['invalid'] = validate_ipv4_address.message + self.error_messages['invalid'] = \ + django_validator.validate_ipv4_address.message class DatabaseListField(CharField): - validate_mssql_identifier = RegexValidator( + validate_mssql_identifier = django_validator.RegexValidator( re.compile(r'^[a-zA-z_][a-zA-Z0-9_$#@]*$'), _((u'First symbol should be latin letter or underscore. Subsequent ' + u'symbols can be latin letter, numeric, underscore, at sign, ' + diff --git a/muranodashboard/dynamic_ui/forms.py b/muranodashboard/dynamic_ui/forms.py index 26a37af38..b7877b754 100644 --- a/muranodashboard/dynamic_ui/forms.py +++ b/muranodashboard/dynamic_ui/forms.py @@ -12,7 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. -import collections +from collections import defaultdict import logging import types @@ -29,7 +29,7 @@ from muranodashboard.dynamic_ui import yaql_functions LOG = logging.getLogger(__name__) -class AnyFieldDict(collections.defaultdict): +class AnyFieldDict(defaultdict): def __missing__(self, key): return fields.make_select_cls(key) diff --git a/muranodashboard/dynamic_ui/services.py b/muranodashboard/dynamic_ui/services.py index 728d1ebcf..bcdfd49d5 100644 --- a/muranodashboard/dynamic_ui/services.py +++ b/muranodashboard/dynamic_ui/services.py @@ -12,29 +12,29 @@ # License for the specific language governing permissions and limitations # under the License. - import logging import os import re import yaml import yaql +from muranodashboard.catalog import forms as catalog_forms +from muranodashboard.common import cache from muranodashboard.dynamic_ui import helpers -from .helpers import decamelize -from muranodashboard.environments.consts import CACHE_DIR from muranodashboard.dynamic_ui import version from muranodashboard.dynamic_ui import yaql_expression from muranodashboard.dynamic_ui import yaql_functions -from muranodashboard.catalog import forms as catalog_forms -from muranodashboard.common import cache +from muranodashboard.environments import consts LOG = logging.getLogger(__name__) -if not os.path.exists(CACHE_DIR): - os.mkdir(CACHE_DIR) - LOG.info('Creating cache directory located at {dir}'.format(dir=CACHE_DIR)) -LOG.info('Using cache directory located at {dir}'.format(dir=CACHE_DIR)) +if not os.path.exists(consts.CACHE_DIR): + os.mkdir(consts.CACHE_DIR) + LOG.info('Creating cache directory located at {dir}'.format( + dir=consts.CACHE_DIR)) +LOG.info('Using cache directory located at {dir}'.format( + dir=consts.CACHE_DIR)) class Service(object): @@ -178,7 +178,8 @@ def import_app(request, app_id): ui_desc = _get(request, app_id) version.check_version(ui_desc.pop('Version', 1)) - service = dict((decamelize(k), v) for (k, v) in ui_desc.iteritems()) + service = dict( + (helpers.decamelize(k), v) for (k, v) in ui_desc.iteritems()) services[app_id] = Service(**service) app = services[app_id] diff --git a/muranodashboard/environments/api.py b/muranodashboard/environments/api.py index 0d28007ac..27f5b9658 100644 --- a/muranodashboard/environments/api.py +++ b/muranodashboard/environments/api.py @@ -20,13 +20,13 @@ from django.contrib.messages import api as msg_api from django.utils.encoding import force_unicode from django.utils.translation import ugettext_lazy as _ from horizon import exceptions -from openstack_dashboard.api.base import url_for +from openstack_dashboard.api import base + import muranoclient.client as client -from muranoclient.common.exceptions import HTTPForbidden, HTTPNotFound -from consts import STATUS_ID_READY, STATUS_ID_NEW from muranoclient.common import exceptions as exc -from muranodashboard.environments import topology from muranodashboard.common import utils +from muranodashboard.environments import consts +from muranodashboard.environments import topology LOG = logging.getLogger(__name__) @@ -76,7 +76,7 @@ def get_endpoint(request): if not endpoint: try: - endpoint = url_for(request, 'murano') + endpoint = base.url_for(request, 'murano') except exceptions.ServiceCatalogException: endpoint = 'http://localhost:8082' LOG.warning('Murano API location could not be found in Service ' @@ -102,7 +102,7 @@ def get_status_messages_for_service(request, service_id, environment_id): LOG.debug('Deployment::List {0}'.format(deployments)) result = '\n' - #TODO(efedorova): Add updated time to logs + # TODO(efedorova): Add updated time to logs if deployments: for deployment in reversed(deployments): reports = muranoclient(request).deployments.reports(environment_id, @@ -163,7 +163,7 @@ class Session(object): try: session_data = \ muranoclient(request).sessions.get(environment_id, id) - except HTTPForbidden: + except exc.HTTPForbidden: del sessions[environment_id] LOG.debug("The environment is deploying by other user." "Creating a new session " @@ -218,8 +218,8 @@ def environments_list(request): environments[index].has_services = True break if not environments[index].has_services: - if environments[index].status == STATUS_ID_READY: - environments[index].status = STATUS_ID_NEW + if environments[index].status == consts.STATUS_ID_READY: + environments[index].status = consts.STATUS_ID_NEW return environments @@ -271,7 +271,7 @@ def services_list(request, environment_id): try: reports = muranoclient(request).environments.last_status( environment_id, session_id) - except HTTPNotFound: + except exc.HTTPNotFound: reports = {} for service_item in environment.services: diff --git a/muranodashboard/environments/consts.py b/muranodashboard/environments/consts.py index 9d653fae7..d65bd64db 100644 --- a/muranodashboard/environments/consts.py +++ b/muranodashboard/environments/consts.py @@ -12,9 +12,9 @@ # License for the specific language governing permissions and limitations # under the License. +import os import tempfile -import os from django.conf import settings diff --git a/muranodashboard/environments/forms.py b/muranodashboard/environments/forms.py index fccf35b55..3cd4f8b48 100644 --- a/muranodashboard/environments/forms.py +++ b/muranodashboard/environments/forms.py @@ -13,8 +13,9 @@ # under the License. import logging -from muranodashboard.dynamic_ui.fields import get_murano_images, \ - ImageChoiceField + +from muranodashboard.dynamic_ui import fields + LOG = logging.getLogger(__name__) @@ -22,7 +23,7 @@ def filter_service_by_image_type(service, request): def find_image_field(): for form_cls in service.forms: for field in form_cls.base_fields.itervalues(): - if isinstance(field, ImageChoiceField): + if isinstance(field, fields.ImageChoiceField): return field return None @@ -38,7 +39,7 @@ def filter_service_by_image_type(service, request): return filtered, message registered_murano_images = [] - available_images = get_murano_images(request) + available_images = fields.get_murano_images(request) for image in available_images: registered_murano_images.append(image.murano_property.get('type')) diff --git a/muranodashboard/environments/panel.py b/muranodashboard/environments/panel.py index 0300480e6..a2754c858 100644 --- a/muranodashboard/environments/panel.py +++ b/muranodashboard/environments/panel.py @@ -12,8 +12,9 @@ # License for the specific language governing permissions and limitations # under the License. -import horizon from django.utils.translation import ugettext_lazy as _ +import horizon + from muranodashboard import dashboard diff --git a/muranodashboard/environments/tables.py b/muranodashboard/environments/tables.py index 772e77a8d..898e32701 100644 --- a/muranodashboard/environments/tables.py +++ b/muranodashboard/environments/tables.py @@ -13,21 +13,16 @@ # under the License. from django.core.urlresolvers import reverse -from django.utils.translation import ugettext_lazy as _ from django import shortcuts +from django.utils.translation import ugettext_lazy as _ from horizon import exceptions -from horizon import tables from horizon import messages +from horizon import tables from muranodashboard.environments import api from muranodashboard.environments import consts from muranodashboard.openstack.common import timeutils -from consts import STATUS_ID_DEPLOYING -from consts import STATUS_CHOICES -from consts import STATUS_DISPLAY_CHOICES -from consts import STATUS_ID_NEW -from consts import DEPLOYMENT_STATUS_DISPLAY_CHOICES def creation_allowed(self, request, environment): @@ -35,7 +30,7 @@ def creation_allowed(self, request, environment): env = api.environment_get(request, environment_id) status = getattr(env, 'status', None) - if status not in [STATUS_ID_DEPLOYING]: + if status not in [consts.STATUS_ID_DEPLOYING]: return True return False @@ -75,7 +70,7 @@ class DeleteEnvironment(tables.DeleteAction): def allowed(self, request, environment): if environment: environment = api.environment_get(request, environment.id) - if environment.status == STATUS_ID_DEPLOYING: + if environment.status == consts.STATUS_ID_DEPLOYING: deployment = api.deployments_list(request, environment.id)[0] last_action = timeutils.parse_strtime( deployment.started.replace(' ', 'T'), @@ -95,7 +90,7 @@ class EditEnvironment(tables.LinkAction): def allowed(self, request, environment): status = getattr(environment, 'status', None) - if status not in [STATUS_ID_DEPLOYING]: + if status not in [consts.STATUS_ID_DEPLOYING]: return True else: return False @@ -110,7 +105,7 @@ class DeleteService(tables.DeleteAction): env = api.environment_get(request, environment_id) status = getattr(env, 'status', None) - return False if status == STATUS_ID_DEPLOYING else True + return False if status == consts.STATUS_ID_DEPLOYING else True def action(self, request, service_id): try: @@ -136,7 +131,7 @@ class DeployEnvironment(tables.BatchAction): def allowed(self, request, environment): status = getattr(environment, 'status', None) - if status == STATUS_ID_DEPLOYING: + if status == consts.STATUS_ID_DEPLOYING: return False if environment.version == 0 and not environment.has_services: return False @@ -163,7 +158,7 @@ class DeployThisEnvironment(tables.Action): status = getattr(env, 'status', None) version = getattr(env, 'version', None) - if status == STATUS_ID_DEPLOYING: + if status == consts.STATUS_ID_DEPLOYING: return False services = self.table.data if version == 0 and not services: @@ -215,7 +210,7 @@ class ShowDeployments(tables.LinkAction): url = 'horizon:murano:environments:deployments' def allowed(self, request, environment): - return environment.status != STATUS_ID_NEW + return environment.status != consts.STATUS_ID_NEW class EnvironmentsTable(tables.DataTable): @@ -226,8 +221,8 @@ class EnvironmentsTable(tables.DataTable): status = tables.Column('status', verbose_name=_('Status'), status=True, - status_choices=STATUS_CHOICES, - display_choices=STATUS_DISPLAY_CHOICES) + status_choices=consts.STATUS_CHOICES, + display_choices=consts.STATUS_DISPLAY_CHOICES) class Meta: name = 'murano' @@ -259,8 +254,8 @@ class ServicesTable(tables.DataTable): status = tables.Column(lambda datum: datum['?'].get('status'), verbose_name=_('Status'), status=True, - status_choices=STATUS_CHOICES, - display_choices=STATUS_DISPLAY_CHOICES) + status_choices=consts.STATUS_CHOICES, + display_choices=consts.STATUS_DISPLAY_CHOICES) operation = tables.Column('operation', verbose_name=_('Last operation')) operation_updated = tables.Column('operation_updated', @@ -299,10 +294,11 @@ class DeploymentsTable(tables.DataTable): finished = tables.Column('finished', verbose_name=_('Time Finished')) - status = tables.Column('state', - verbose_name=_('Status'), - status=True, - display_choices=DEPLOYMENT_STATUS_DISPLAY_CHOICES) + status = tables.Column( + 'state', + verbose_name=_('Status'), + status=True, + display_choices=consts.DEPLOYMENT_STATUS_DISPLAY_CHOICES) class Meta: name = 'deployments' diff --git a/muranodashboard/environments/tabs.py b/muranodashboard/environments/tabs.py index cfe151ab7..513e32f09 100644 --- a/muranodashboard/environments/tabs.py +++ b/muranodashboard/environments/tabs.py @@ -15,14 +15,15 @@ import logging from django.core.urlresolvers import reverse -from django.utils.translation import ugettext_lazy as _ from django.utils.datastructures import SortedDict +from django.utils.translation import ugettext_lazy as _ from horizon import exceptions from horizon import tabs + from muranoclient.common import exceptions as exc from muranodashboard.environments import api from muranodashboard.environments import consts -from muranodashboard.environments.tables import EnvConfigTable, ServicesTable +from muranodashboard.environments import tables LOG = logging.getLogger(__name__) @@ -105,7 +106,7 @@ class EnvLogsTab(tabs.Tab): class EnvConfigTab(tabs.TableTab): name = _("Configuration") slug = "env_config" - table_classes = (EnvConfigTable,) + table_classes = (tables.EnvConfigTable,) template_name = 'horizon/common/_detail_table.html' preload = False @@ -132,7 +133,7 @@ class EnvironmentTopologyTab(tabs.Tab): class EnvironmentServicesTab(tabs.TableTab): name = _("Components") slug = "serviceslist" - table_classes = (ServicesTable,) + table_classes = (tables.ServicesTable,) template_name = "services/_service_list.html" preload = False diff --git a/muranodashboard/environments/topology.py b/muranodashboard/environments/topology.py index aa6c7e0e2..22bb7ad2c 100644 --- a/muranodashboard/environments/topology.py +++ b/muranodashboard/environments/topology.py @@ -13,10 +13,10 @@ # under the License. import json - import types -from django.template.loader import render_to_string + from django.contrib.staticfiles.templatetags.staticfiles import static +from django.template import loader def _get_environment_status_message(entity): @@ -58,8 +58,8 @@ def _application_info(application, app_image, status): 'type': _truncate_type(application['?']['type'], 45), 'status': status, 'app_image': app_image} - return render_to_string('services/_application_info.html', - context) + return loader.render_to_string('services/_application_info.html', + context) def _unit_info(unit, unit_image): @@ -68,14 +68,14 @@ def _unit_info(unit, unit_image): context = {'data': data, 'unit_image': unit_image} - return render_to_string('services/_unit_info.html', context) + return loader.render_to_string('services/_unit_info.html', context) def _environment_info(environment, status): context = {'name': environment.name, 'status': status} - return render_to_string('services/_environment_info.html', - context) + return loader.render_to_string('services/_environment_info.html', + context) def _create_empty_node(): diff --git a/muranodashboard/environments/urls.py b/muranodashboard/environments/urls.py index 44aa6aba9..fe751ac00 100644 --- a/muranodashboard/environments/urls.py +++ b/muranodashboard/environments/urls.py @@ -12,46 +12,46 @@ # License for the specific language governing permissions and limitations # under the License. -from django.conf.urls import patterns, url +from django.conf import urls +from openstack_dashboard.dashboards.project.instances import views as inst_view -from views import IndexView, DeploymentDetailsView -from views import JSONView, EnvironmentDetails -from views import CreateEnvironmentView -from views import DetailServiceView -from views import DeploymentsView -from views import EditEnvironmentView -from openstack_dashboard.dashboards.project.instances.views import DetailView +from muranodashboard.environments import views VIEW_MOD = 'muranodashboard.environments.views' ENVIRONMENT_ID = r'^(?P[^/]+)' -urlpatterns = patterns( +urlpatterns = urls.patterns( VIEW_MOD, - url(r'^environments$', IndexView.as_view(), name='index'), + urls.url(r'^environments$', views.IndexView.as_view(), name='index'), - url(r'^create_environment$', CreateEnvironmentView.as_view(), - name='create_environment'), + urls.url(r'^create_environment$', views.CreateEnvironmentView.as_view(), + name='create_environment'), - url(ENVIRONMENT_ID + r'/update_environment$', - EditEnvironmentView.as_view(), - name='update_environment'), + urls.url(ENVIRONMENT_ID + r'/update_environment$', + views.EditEnvironmentView.as_view(), + name='update_environment'), - url(ENVIRONMENT_ID + r'/services$', EnvironmentDetails.as_view(), - name='services'), + urls.url(ENVIRONMENT_ID + r'/services$', + views.EnvironmentDetails.as_view(), + name='services'), - url(ENVIRONMENT_ID + r'/services/get_d3_data$', - JSONView.as_view(), name='d3_data'), + urls.url(ENVIRONMENT_ID + r'/services/get_d3_data$', + views.JSONView.as_view(), name='d3_data'), - url(ENVIRONMENT_ID + r'/(?P[^/]+)/$', - DetailServiceView.as_view(), - name='service_details'), + urls.url(ENVIRONMENT_ID + r'/(?P[^/]+)/$', + views.DetailServiceView.as_view(), + name='service_details'), - url(r'^(?P[^/]+)/$', DetailView.as_view(), name='detail'), + urls.url(r'^(?P[^/]+)/$', + inst_view.DetailView.as_view(), + name='detail'), - url(ENVIRONMENT_ID + r'/deployments$', - DeploymentsView.as_view(), name='deployments'), + urls.url(ENVIRONMENT_ID + r'/deployments$', + views.DeploymentsView.as_view(), + name='deployments'), - url(ENVIRONMENT_ID + r'/deployments/(?P[^/]+)$', - DeploymentDetailsView.as_view(), name='deployment_details'), + urls.url(ENVIRONMENT_ID + r'/deployments/(?P[^/]+)$', + views.DeploymentDetailsView.as_view(), + name='deployment_details'), ) diff --git a/muranodashboard/environments/views.py b/muranodashboard/environments/views.py index f85150085..b97a6b7a6 100644 --- a/muranodashboard/environments/views.py +++ b/muranodashboard/environments/views.py @@ -14,18 +14,20 @@ import logging -from django.core import urlresolvers as url -from django.utils.translation import ugettext_lazy as _ # noqa -from django.http import HttpResponse +from django.core.urlresolvers import reverse +from django.core.urlresolvers import reverse_lazy +from django import http +from django.utils.translation import ugettext_lazy as _ from django.views import generic from horizon import exceptions -from horizon import tabs from horizon import tables +from horizon import tabs from horizon import workflows + from muranoclient.common import exceptions as exc from muranodashboard.environments import api -from muranodashboard.environments import tabs as env_tabs from muranodashboard.environments import tables as env_tables +from muranodashboard.environments import tabs as env_tabs from muranodashboard.environments import workflows as env_workflows @@ -68,7 +70,7 @@ class EnvironmentDetails(tabs.TabbedTableView): except Exception: msg = _("Sorry, this environment doesn't exist anymore") - redirect = url.reverse("horizon:murano:environments:index") + redirect = reverse("horizon:murano:environments:index") exceptions.handle(self.request, msg, redirect=redirect) return context @@ -96,7 +98,7 @@ class DetailServiceView(tabs.TabView): exceptions.handle(self.request) except exc.HTTPForbidden: - redirect = url.reverse('horizon:murano:environments:index') + redirect = reverse('horizon:murano:environments:index') exceptions.handle(self.request, _('Unable to retrieve details for ' 'service'), @@ -124,7 +126,7 @@ class CreateEnvironmentView(workflows.WorkflowView): class EditEnvironmentView(workflows.WorkflowView): workflow_class = env_workflows.UpdateEnvironment template_name = 'environments/update.html' - success_url = url.reverse_lazy("horizon:murano:environments:index") + success_url = reverse_lazy("horizon:murano:environments:index") def get_context_data(self, **kwargs): context = super(EditEnvironmentView, self).get_context_data(**kwargs) @@ -138,7 +140,7 @@ class EditEnvironmentView(workflows.WorkflowView): self._object = \ api.environment_get(self.request, environment_id) except Exception: - redirect = url.reverse("horizon:murano:environments:index") + redirect = reverse("horizon:murano:environments:index") msg = _('Unable to retrieve environment details.') exceptions.handle(self.request, msg, redirect=redirect) return self._object @@ -162,7 +164,7 @@ class DeploymentsView(tables.DataTableView): context['environment_name'] = env.name except Exception: msg = _("Sorry, this environment doesn't exist anymore") - redirect = url.reverse("horizon:murano:environments:index") + redirect = reverse("horizon:murano:environments:index") exceptions.handle(self.request, msg, redirect=redirect) return context @@ -176,13 +178,13 @@ class DeploymentsView(tables.DataTableView): except exc.HTTPForbidden: msg = _('Unable to retrieve list of deployments') - exceptions.handle(self.request, msg, redirect=url.reverse(ns_url)) + exceptions.handle(self.request, msg, redirect=reverse(ns_url)) except exc.HTTPInternalServerError: msg = _("Environment with id %s doesn't exist anymore") exceptions.handle(self.request, msg % self.environment_id, - redirect=url.reverse(ns_url)) + redirect=reverse(ns_url)) return deployments @@ -210,7 +212,7 @@ class DeploymentDetailsView(tabs.TabbedTableView): self.deployment_id) except (exc.HTTPInternalServerError, exc.HTTPNotFound): msg = _("Deployment with id %s doesn't exist anymore") - redirect = url.reverse("horizon:murano:environments:deployments") + redirect = reverse("horizon:murano:environments:deployments") exceptions.handle(self.request, msg % self.deployment_id, redirect=redirect) @@ -224,7 +226,7 @@ class DeploymentDetailsView(tabs.TabbedTableView): self.deployment_id) except (exc.HTTPInternalServerError, exc.HTTPNotFound): msg = _('Deployment with id %s doesn\'t exist anymore') - redirect = url.reverse("horizon:murano:environments:deployments") + redirect = reverse("horizon:murano:environments:deployments") exceptions.handle(self.request, msg % self.deployment_id, redirect=redirect) @@ -244,4 +246,4 @@ class JSONView(generic.View): @staticmethod def get(request, **kwargs): data = api.load_environment_data(request, kwargs['environment_id']) - return HttpResponse(data, content_type='application/json') + return http.HttpResponse(data, content_type='application/json') diff --git a/muranodashboard/environments/workflows.py b/muranodashboard/environments/workflows.py index 8677a0fe3..69294d6dd 100644 --- a/muranodashboard/environments/workflows.py +++ b/muranodashboard/environments/workflows.py @@ -15,7 +15,7 @@ import logging from django.core import validators -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from horizon import exceptions from horizon import forms diff --git a/muranodashboard/images/forms.py b/muranodashboard/images/forms.py index ec5e0a254..ec3b846d2 100644 --- a/muranodashboard/images/forms.py +++ b/muranodashboard/images/forms.py @@ -12,13 +12,14 @@ # License for the specific language governing permissions and limitations # under the License. -import logging import json +import logging + from django import forms from django.utils.translation import ugettext_lazy as _ -from django.forms import ValidationError -from horizon.forms import SelfHandlingForm -from horizon import messages, exceptions +from horizon import exceptions +from horizon import forms as horizon_forms +from horizon import messages from openstack_dashboard.api import glance LOG = logging.getLogger(__name__) @@ -44,7 +45,7 @@ def filter_murano_images(images, request=None): return marked_images -class MarkImageForm(SelfHandlingForm): +class MarkImageForm(horizon_forms.SelfHandlingForm): _metadata = { 'windows.2012': ' Windows Server 2012', 'linux': 'Generic Linux', @@ -94,7 +95,7 @@ class MarkImageForm(SelfHandlingForm): title = cleaned_data.get('title') existing_titles = self.fields['existing_titles'].initial if title in existing_titles: - raise ValidationError(_('Specified title already in use.' - ' Please choose another one.')) + raise forms.ValidationError(_('Specified title already in use.' + ' Please choose another one.')) return title diff --git a/muranodashboard/images/panel.py b/muranodashboard/images/panel.py index 20e617aa3..95760d64b 100644 --- a/muranodashboard/images/panel.py +++ b/muranodashboard/images/panel.py @@ -12,8 +12,9 @@ # License for the specific language governing permissions and limitations # under the License. -import horizon from django.utils.translation import ugettext_lazy as _ +import horizon + from muranodashboard import dashboard diff --git a/muranodashboard/images/tables.py b/muranodashboard/images/tables.py index 3587e6e3f..4642e1701 100644 --- a/muranodashboard/images/tables.py +++ b/muranodashboard/images/tables.py @@ -11,8 +11,8 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _ from horizon import exceptions from horizon import tables from openstack_dashboard.api import glance diff --git a/muranodashboard/images/urls.py b/muranodashboard/images/urls.py index 9b8c07e73..c8a91e50b 100644 --- a/muranodashboard/images/urls.py +++ b/muranodashboard/images/urls.py @@ -12,20 +12,19 @@ # License for the specific language governing permissions and limitations # under the License. -from django.conf.urls import patterns, url - -from .views import MarkedImagesView, MarkImageView +from django.conf import urls +from muranodashboard.images import views -urlpatterns = patterns( +urlpatterns = urls.patterns( '', - url(r'^$', MarkedImagesView.as_view(), - name='index'), + urls.url(r'^$', views.MarkedImagesView.as_view(), + name='index'), - url(r'^mark_image$', MarkImageView.as_view(), - name='mark_image'), + urls.url(r'^mark_image$', views.MarkImageView.as_view(), + name='mark_image'), - url(r'^remove_metadata$', MarkedImagesView.as_view(), - name='remove_metadata'), + urls.url(r'^remove_metadata$', views.MarkedImagesView.as_view(), + name='remove_metadata'), ) diff --git a/muranodashboard/images/views.py b/muranodashboard/images/views.py index b8cefc947..70e619f06 100644 --- a/muranodashboard/images/views.py +++ b/muranodashboard/images/views.py @@ -12,19 +12,21 @@ # License for the specific language governing permissions and limitations # under the License. -from django.core.urlresolvers import reverse, reverse_lazy +from django.core.urlresolvers import reverse +from django.core.urlresolvers import reverse_lazy from django.utils.translation import ugettext_lazy as _ -from openstack_dashboard.api import glance from horizon import exceptions -from horizon import tables -from horizon.forms.views import ModalFormView -from .tables import MarkedImagesTable -from .forms import MarkImageForm, filter_murano_images +from horizon.forms import views +from horizon import tables as horizon_tables +from openstack_dashboard.api import glance + +from muranodashboard.images import forms +from muranodashboard.images import tables -class MarkedImagesView(tables.DataTableView): - table_class = MarkedImagesTable +class MarkedImagesView(horizon_tables.DataTableView): + table_class = tables.MarkedImagesTable template_name = 'images/index.html' def get_data(self): @@ -36,11 +38,11 @@ class MarkedImagesView(tables.DataTableView): uri = reverse('horizon:murano:images:index') exceptions.handle(self.request, msg, redirect=uri) - return filter_murano_images(images, request=self.request) + return forms.filter_murano_images(images, request=self.request) -class MarkImageView(ModalFormView): - form_class = MarkImageForm +class MarkImageView(views.ModalFormView): + form_class = forms.MarkImageForm template_name = 'images/mark.html' context_object_name = 'image' success_url = reverse_lazy('horizon:murano:images:index') diff --git a/muranodashboard/middleware.py b/muranodashboard/middleware.py index d0199dcc6..2262fe9c0 100644 --- a/muranodashboard/middleware.py +++ b/muranodashboard/middleware.py @@ -11,17 +11,20 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -from horizon.middleware import HorizonMiddleware -from horizon.exceptions import Http302 -import traceback + import logging +import traceback + +from horizon import exceptions +from horizon import middleware + logger = logging.getLogger(__name__) -class ExceptionMiddleware(HorizonMiddleware): +class ExceptionMiddleware(middleware.HorizonMiddleware): def process_exception(self, request, exception): - if not isinstance(exception, Http302): + if not isinstance(exception, exceptions.Http302): logger.error(traceback.format_exc()) return super(ExceptionMiddleware, self).process_exception( request, exception) diff --git a/muranodashboard/packages/forms.py b/muranodashboard/packages/forms.py index 4cc3834cb..048a3dc19 100644 --- a/muranodashboard/packages/forms.py +++ b/muranodashboard/packages/forms.py @@ -11,19 +11,21 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. + import logging -from django import forms -from django.core.files import uploadedfile -from django.utils.translation import ugettext_lazy as _ -from django.core.urlresolvers import reverse from django.conf import settings -from horizon.forms import SelfHandlingForm +from django.core.files import uploadedfile +from django.core.urlresolvers import reverse +from django import forms +from django.utils.translation import ugettext_lazy as _ from horizon import exceptions +from horizon import forms as horizon_forms from horizon import messages -from muranoclient.common.exceptions import HTTPException -from muranodashboard.environments import api + +from muranoclient.common import exceptions as exc from muranodashboard.catalog import views +from muranodashboard.environments import api LOG = logging.getLogger(__name__) @@ -45,7 +47,7 @@ def split_post_data(post): return data, files -class UploadPackageForm(SelfHandlingForm): +class UploadPackageForm(horizon_forms.SelfHandlingForm): package = forms.FileField(label=_('Application .zip package'), required=True) categories = forms.MultipleChoiceField(label=_('Application Category'), @@ -80,7 +82,7 @@ class UploadPackageForm(SelfHandlingForm): return _handle(request, app_id=package.id) - except HTTPException: + except exc.HTTPException: LOG.exception(_('Uploading package failed')) redirect = reverse('horizon:murano:packages:index') exceptions.handle(request, @@ -96,7 +98,7 @@ class CheckboxInput(forms.CheckboxInput): css = {'all': ('muranodashboard/css/checkbox.css',)} -class ModifyPackageForm(SelfHandlingForm): +class ModifyPackageForm(horizon_forms.SelfHandlingForm): name = forms.CharField(label=_('Name')) categories = forms.MultipleChoiceField(label=_('Categories')) tags = forms.CharField(label=_('Tags'), required=False) @@ -125,7 +127,7 @@ class ModifyPackageForm(SelfHandlingForm): result = api.muranoclient(request).packages.update(app_id, data) messages.success(request, _('Package modified.')) return result - except HTTPException: + except exc.HTTPException: LOG.exception(_('Modifying package failed')) redirect = reverse('horizon:murano:packages:index') exceptions.handle(request, diff --git a/muranodashboard/packages/panel.py b/muranodashboard/packages/panel.py index 7e8979cf4..4d1c5fa98 100644 --- a/muranodashboard/packages/panel.py +++ b/muranodashboard/packages/panel.py @@ -12,8 +12,9 @@ # License for the specific language governing permissions and limitations # under the License. -import horizon from django.utils.translation import ugettext_lazy as _ +import horizon + from muranodashboard import dashboard diff --git a/muranodashboard/packages/tables.py b/muranodashboard/packages/tables.py index 0f5956537..51745faf4 100644 --- a/muranodashboard/packages/tables.py +++ b/muranodashboard/packages/tables.py @@ -14,13 +14,14 @@ import logging -from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse -from django.http import HttpResponse +from django import http from django.template import defaultfilters +from django.utils.translation import ugettext_lazy as _ from horizon import exceptions -from horizon import tables from horizon import messages +from horizon import tables + from muranoclient.common import exceptions as exc from muranodashboard.environments import api @@ -63,7 +64,7 @@ class DownloadPackage(tables.Action): body = api.muranoclient(request).packages.download(app_id) content_type = 'application/octet-stream' - response = HttpResponse(body, content_type=content_type) + response = http.HttpResponse(body, content_type=content_type) response['Content-Disposition'] = 'filename={name}.package'.format( name=self.get_package_name(data_table, app_id)) return response diff --git a/muranodashboard/packages/urls.py b/muranodashboard/packages/urls.py index 6b630200c..4c3077176 100644 --- a/muranodashboard/packages/urls.py +++ b/muranodashboard/packages/urls.py @@ -12,23 +12,21 @@ # License for the specific language governing permissions and limitations # under the License. -from django.conf.urls import patterns, url +from django.conf import urls -from .views import PackageDefinitionsView -from .views import UploadPackageView -from .views import ModifyPackageView +from muranodashboard.packages import views -urlpatterns = patterns( +urlpatterns = urls.patterns( '', - url(r'^$', PackageDefinitionsView.as_view(), - name='index'), + urls.url(r'^$', views.PackageDefinitionsView.as_view(), + name='index'), - url(r'^upload$', UploadPackageView.as_view(), - name='upload'), + urls.url(r'^upload$', views.UploadPackageView.as_view(), + name='upload'), - url(r'^modify/(?P[^/]+)?$', - ModifyPackageView.as_view(), - name='modify'), + urls.url(r'^modify/(?P[^/]+)?$', + views.ModifyPackageView.as_view(), + name='modify'), ) diff --git a/muranodashboard/packages/views.py b/muranodashboard/packages/views.py index f44c3cecc..53ed360c4 100644 --- a/muranodashboard/packages/views.py +++ b/muranodashboard/packages/views.py @@ -15,16 +15,18 @@ import logging from django.core.urlresolvers import reverse_lazy -from horizon import tables -from horizon.forms.views import ModalFormView -from .tables import PackageDefinitionsTable -from muranodashboard.packages import forms +from horizon.forms import views +from horizon import tables as horizon_tables + from muranodashboard.environments import api +from muranodashboard.packages import forms +from muranodashboard.packages import tables + LOG = logging.getLogger(__name__) -class PackageDefinitionsView(tables.DataTableView): - table_class = PackageDefinitionsTable +class PackageDefinitionsView(horizon_tables.DataTableView): + table_class = tables.PackageDefinitionsTable template_name = 'packages/index.html' def get_data(self): @@ -37,7 +39,7 @@ class PackageDefinitionsView(tables.DataTableView): return pkgs -class UploadPackageView(ModalFormView): +class UploadPackageView(views.ModalFormView): form_class = forms.UploadPackageForm template_name = 'packages/upload_package.html' context_object_name = 'packages' @@ -45,7 +47,7 @@ class UploadPackageView(ModalFormView): failure_url = reverse_lazy('horizon:murano:packages:index') -class ModifyPackageView(ModalFormView): +class ModifyPackageView(views.ModalFormView): form_class = forms.ModifyPackageForm template_name = 'packages/modify_package.html' success_url = reverse_lazy('horizon:murano:packages:index') diff --git a/muranodashboard/settings.py b/muranodashboard/settings.py index 691306491..d1d03d0d2 100644 --- a/muranodashboard/settings.py +++ b/muranodashboard/settings.py @@ -1,7 +1,7 @@ import logging import os -import tempfile import sys +import tempfile from openstack_dashboard import exceptions @@ -137,6 +137,8 @@ SESSION_COOKIE_HTTPONLY = True SESSION_EXPIRE_AT_BROWSER_CLOSE = True SESSION_COOKIE_SECURE = False +SECRET_KEY = 'some_random_value' + gettext_noop = lambda s: s LANGUAGES = ( ('en', gettext_noop('English')), diff --git a/muranodashboard/stats/models.py b/muranodashboard/stats/models.py index 153cd9ee4..56efb9c1f 100644 --- a/muranodashboard/stats/models.py +++ b/muranodashboard/stats/models.py @@ -11,10 +11,12 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. + import logging + +from muranodashboard.common import utils from muranodashboard.environments import api from muranodashboard.environments import consts -from muranodashboard.common import utils LOG = logging.getLogger(__name__) diff --git a/muranodashboard/stats/panel.py b/muranodashboard/stats/panel.py index 9233e9aca..7bf2cc7f8 100644 --- a/muranodashboard/stats/panel.py +++ b/muranodashboard/stats/panel.py @@ -12,8 +12,9 @@ # License for the specific language governing permissions and limitations # under the License. -import horizon from django.utils.translation import ugettext_lazy as _ +import horizon + from muranodashboard import dashboard diff --git a/muranodashboard/stats/tabs.py b/muranodashboard/stats/tabs.py index 59da060c0..e51af1de2 100644 --- a/muranodashboard/stats/tabs.py +++ b/muranodashboard/stats/tabs.py @@ -12,8 +12,9 @@ # License for the specific language governing permissions and limitations # under the License. -from horizon import tabs from django.utils.translation import ugettext_lazy as _ +from horizon import tabs + from muranodashboard.stats import models diff --git a/muranodashboard/stats/urls.py b/muranodashboard/stats/urls.py index 9326fc97e..dd38404cb 100644 --- a/muranodashboard/stats/urls.py +++ b/muranodashboard/stats/urls.py @@ -12,12 +12,13 @@ # License for the specific language governing permissions and limitations # under the License. -from django.conf.urls import patterns, url +from django.conf import urls + from muranodashboard.stats import views VIEW_MOD = "muranodashboard.stats.views" -urlpatterns = patterns( +urlpatterns = urls.patterns( VIEW_MOD, - url(r'^view$', views.StatsView.as_view(), name="index")) + urls.url(r'^view$', views.StatsView.as_view(), name="index")) diff --git a/muranodashboard/templatetags/custom_filters.py b/muranodashboard/templatetags/custom_filters.py index bcba35752..363659f49 100644 --- a/muranodashboard/templatetags/custom_filters.py +++ b/muranodashboard/templatetags/custom_filters.py @@ -1,12 +1,12 @@ +from django import forms from django import template -from django.forms import CheckboxInput register = template.Library() @register.filter(name='is_checkbox') def is_checkbox(field): - return isinstance(field.field.widget, CheckboxInput) + return isinstance(field.field.widget, forms.CheckboxInput) @register.filter(name='firsthalf') diff --git a/tox.ini b/tox.ini index 180e16d81..e6ae8733c 100644 --- a/tox.ini +++ b/tox.ini @@ -12,6 +12,7 @@ setenv = VIRTUAL_ENV={envdir} NOSE_OPENSTACK_RED=0.05 NOSE_OPENSTACK_YELLOW=0.025 NOSE_OPENSTACK_SHOW_ELAPSED=1 + DJANGO_SETTINGS_MODULE=muranodashboard.settings deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt http://tarballs.openstack.org/horizon/horizon-stable-icehouse.tar.gz @@ -36,11 +37,28 @@ commands = flake8 downloadcache = ~/cache/pip [flake8] -# H301 one import per line -# H302 import only modules -# H306 imports not in alphabetical order # H701 Empty localization string -ignore = H301,H302,H306,H701 +ignore = H701 show-source = true builtins = _ -exclude=.build,.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,tools +exclude=.build,.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,tools,*/local/*,horizon + +[hacking] +import_exceptions = collections.defaultdict, + django.conf.settings, + django.contrib.staticfiles.templatetags.staticfiles.static, + django.core.urlresolvers.reverse, + django.core.urlresolvers.reverse_lazy, + django.template.loader.render_to_string, + django.test.utils.override_settings, + django.utils.datastructures.SortedDict, + django.utils.encoding.force_unicode, + django.utils.encoding.smart_text, + django.utils.html.escape, + django.utils.http.urlencode, + django.utils.safestring.mark_safe, + django.utils.translation.pgettext_lazy, + django.utils.translation.ugettext_lazy, + django.utils.translation.ungettext_lazy, + operator.attrgetter, + StringIO.StringIO