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