Enable E128 check for line indentation
E127/E128 checks helps us to keep code more readable, so these rules should be allowed, when pep8 runs. Enabled check E128 - continuation line under-indented for visual indent. Change-Id: Ic17a7ba47d555183ff26a5dc5f6ec27c0461725a
This commit is contained in:
parent
772aafbce6
commit
e85b19e619
3
tox.ini
3
tox.ini
@ -32,10 +32,9 @@ downloadcache = ~/cache/pip
|
||||
[flake8]
|
||||
builtins = _
|
||||
exclude = .venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,panel_template,dash_template,local_settings.py
|
||||
# E128 continuation line under-indented for visual indent
|
||||
# F403 'from <smth> import *' used; unable to detect undefined names
|
||||
# F999 syntax error in doctest
|
||||
# H4xx docstrings
|
||||
# H701 empty localization string
|
||||
# H702 Formatting operation should be outside of localization method call
|
||||
ignore = E128,F403,F999,H4,H701,H702
|
||||
ignore = F403,F999,H4,H701,H702
|
||||
|
@ -47,11 +47,13 @@ def tuskarclient(request):
|
||||
|
||||
def baremetalclient(request):
|
||||
def create_remote_nova_client_baremetal():
|
||||
nc = nova.nova_client.Client(REMOTE_NOVA_BAREMETAL_CREDS['user'],
|
||||
REMOTE_NOVA_BAREMETAL_CREDS['password'],
|
||||
REMOTE_NOVA_BAREMETAL_CREDS['tenant'],
|
||||
auth_url=REMOTE_NOVA_BAREMETAL_CREDS['auth_url'],
|
||||
bypass_url=REMOTE_NOVA_BAREMETAL_CREDS['bypass_url'])
|
||||
nc = nova.nova_client.Client(
|
||||
REMOTE_NOVA_BAREMETAL_CREDS['user'],
|
||||
REMOTE_NOVA_BAREMETAL_CREDS['password'],
|
||||
REMOTE_NOVA_BAREMETAL_CREDS['tenant'],
|
||||
auth_url=REMOTE_NOVA_BAREMETAL_CREDS['auth_url'],
|
||||
bypass_url=REMOTE_NOVA_BAREMETAL_CREDS['bypass_url'],
|
||||
)
|
||||
return nc
|
||||
|
||||
def create_nova_client_baremetal():
|
||||
@ -205,7 +207,7 @@ class BaremetalNode(StringIdAPIResourceWrapper):
|
||||
node.ip_address_other = (", "
|
||||
.join([addr['addr'] for addr in addresses]))
|
||||
node.status = (nova_instance._apiresource.
|
||||
_info['OS-EXT-STS:vm_state'])
|
||||
_info['OS-EXT-STS:vm_state'])
|
||||
node.power_management = ""
|
||||
if node.pm_user:
|
||||
node.power_management = node.pm_user + "/********"
|
||||
@ -452,7 +454,7 @@ class Rack(StringIdAPIResourceWrapper):
|
||||
def list_baremetal_nodes(self):
|
||||
if not hasattr(self, '_baremetal_nodes'):
|
||||
self._baremetal_nodes = [node.nova_baremetal_node
|
||||
for node in self.list_nodes]
|
||||
for node in self.list_nodes]
|
||||
return self._baremetal_nodes
|
||||
|
||||
@property
|
||||
@ -739,8 +741,9 @@ class ResourceClass(StringIdAPIResourceWrapper):
|
||||
def aggregated_alerts(self):
|
||||
# FIXME: for now return only list of racks (particular alerts are not
|
||||
# used)
|
||||
return [rack for rack in self.list_racks if (rack.alerts +
|
||||
rack.aggregated_alerts)]
|
||||
return [rack
|
||||
for rack in self.list_racks
|
||||
if rack.alerts + rack.aggregated_alerts]
|
||||
|
||||
@property
|
||||
def has_provisioned_rack(self):
|
||||
|
@ -17,6 +17,7 @@ from django.conf.urls import defaults
|
||||
from tuskar_ui.infrastructure.overview import views
|
||||
|
||||
|
||||
urlpatterns = defaults.patterns('',
|
||||
urlpatterns = defaults.patterns(
|
||||
'',
|
||||
defaults.url(r'^$', views.IndexView.as_view(), name='index'),
|
||||
)
|
||||
|
@ -36,7 +36,8 @@ class FlavorForm(forms.Form):
|
||||
name = forms.RegexField(label=_("Name"),
|
||||
max_length=25,
|
||||
regex=r'^[\w\.\- ]+$',
|
||||
error_messages={'invalid': _('Name may only '
|
||||
error_messages={'invalid': _(
|
||||
'Name may only '
|
||||
'contain letters, numbers, underscores, '
|
||||
'periods and hyphens.')},
|
||||
widget=forms.TextInput(attrs={
|
||||
|
@ -63,6 +63,7 @@ class FlavorsTests(test.BaseAdminViewTests):
|
||||
args=[resource_class.id, flavor.id])
|
||||
res = self.client.get(url)
|
||||
|
||||
self.assertRedirectsNoFollow(res,
|
||||
self.assertRedirectsNoFollow(
|
||||
res,
|
||||
urlresolvers.reverse('horizon:infrastructure:resource_management:'
|
||||
'index'))
|
||||
|
@ -21,7 +21,8 @@ from tuskar_ui.infrastructure.resource_management.flavors import views
|
||||
VIEW_MOD = 'tuskar_ui.infrastructure.' \
|
||||
'resource_management.flavors.views'
|
||||
|
||||
urlpatterns = defaults.patterns(VIEW_MOD,
|
||||
urlpatterns = defaults.patterns(
|
||||
VIEW_MOD,
|
||||
defaults.url(r'^(?P<flavor_id>[^/]+)/$',
|
||||
views.DetailView.as_view(),
|
||||
name='detail')
|
||||
|
@ -19,27 +19,33 @@ import tuskar_ui.forms
|
||||
|
||||
|
||||
class NodeForm(django.forms.Form):
|
||||
id = django.forms.IntegerField(required=False,
|
||||
id = django.forms.IntegerField(
|
||||
required=False,
|
||||
widget=django.forms.HiddenInput())
|
||||
|
||||
service_host = django.forms.CharField(label=_("Service Host"),
|
||||
service_host = django.forms.CharField(
|
||||
label=_("Service Host"),
|
||||
widget=django.forms.TextInput(attrs={'class': 'input input-mini'}),
|
||||
required=True)
|
||||
mac_address = tuskar_ui.forms.MACField(label=_("MAC Address"),
|
||||
mac_address = tuskar_ui.forms.MACField(
|
||||
label=_("MAC Address"),
|
||||
widget=django.forms.TextInput(attrs={'class': 'input input-mini'}),
|
||||
required=True)
|
||||
|
||||
# Hardware Specifications
|
||||
cpus = django.forms.IntegerField(label=_("CPUs"), required=True,
|
||||
cpus = django.forms.IntegerField(
|
||||
label=_("CPUs"), required=True,
|
||||
min_value=1, widget=tuskar_ui.forms.NumberInput(attrs={
|
||||
'class': 'input number_input_slim',
|
||||
}))
|
||||
memory_mb = django.forms.IntegerField(label=_("Memory"),
|
||||
required=True, min_value=1, widget=tuskar_ui.forms.NumberInput(attrs={
|
||||
memory_mb = django.forms.IntegerField(
|
||||
label=_("Memory"), required=True, min_value=1,
|
||||
widget=tuskar_ui.forms.NumberInput(attrs={
|
||||
'class': 'input number_input_slim',
|
||||
}))
|
||||
local_gb = django.forms.IntegerField(label=_("Local Disk (GB)"),
|
||||
min_value=1, widget=tuskar_ui.forms.NumberInput(attrs={
|
||||
local_gb = django.forms.IntegerField(
|
||||
label=_("Local Disk (GB)"), min_value=1,
|
||||
widget=tuskar_ui.forms.NumberInput(attrs={
|
||||
'class': 'input number_input_slim',
|
||||
}), required=True)
|
||||
|
||||
@ -47,15 +53,19 @@ class NodeForm(django.forms.Form):
|
||||
pm_address = django.forms.GenericIPAddressField(
|
||||
widget=django.forms.TextInput(attrs={'class': 'input input-mini'}),
|
||||
label=_("Power Management IP"), required=False)
|
||||
pm_user = django.forms.CharField(label=_("Power Management User"),
|
||||
pm_user = django.forms.CharField(
|
||||
label=_("Power Management User"),
|
||||
widget=django.forms.TextInput(attrs={'class': 'input input-mini'}),
|
||||
required=False)
|
||||
pm_password = django.forms.CharField(label=_("Power Management Password"),
|
||||
required=False, widget=django.forms.PasswordInput(render_value=False,
|
||||
pm_password = django.forms.CharField(
|
||||
label=_("Power Management Password"),
|
||||
required=False, widget=django.forms.PasswordInput(
|
||||
render_value=False,
|
||||
attrs={'class': 'input input-mini'}))
|
||||
|
||||
# Access
|
||||
terminal_port = django.forms.IntegerField(label=_("Terminal Port"),
|
||||
terminal_port = django.forms.IntegerField(
|
||||
label=_("Terminal Port"),
|
||||
required=False, min_value=0, max_value=1024,
|
||||
widget=tuskar_ui.forms.NumberInput(attrs={
|
||||
'class': 'input number_input_slim',
|
||||
@ -84,5 +94,5 @@ class BaseNodeFormSet(django.forms.formsets.BaseFormSet):
|
||||
values[field][value] = form
|
||||
|
||||
|
||||
NodeFormset = django.forms.formsets.formset_factory(NodeForm, extra=1,
|
||||
can_delete=True, formset=BaseNodeFormSet)
|
||||
NodeFormset = django.forms.formsets.formset_factory(
|
||||
NodeForm, extra=1, can_delete=True, formset=BaseNodeFormSet)
|
||||
|
@ -32,8 +32,8 @@ class DeleteNodes(tables.DeleteAction):
|
||||
node = tuskar.Node.get(request, obj_id)
|
||||
rack = node.rack
|
||||
nodes = [{'id': node_id}
|
||||
for node_id in rack.node_ids
|
||||
if node_id != obj_id]
|
||||
for node_id in rack.node_ids
|
||||
if node_id != obj_id]
|
||||
tuskar.Rack.update(request, rack.id, {'nodes': nodes})
|
||||
except Exception:
|
||||
exceptions.handle(request, _("Error deleting node."))
|
||||
@ -54,7 +54,7 @@ class NodesTable(tables.DataTable):
|
||||
link=("horizon:infrastructure:resource_management:nodes:detail"))
|
||||
mac_address = tables.Column("mac_address", verbose_name=_("MAC Address"))
|
||||
pm_address = tables.Column("pm_address",
|
||||
verbose_name=_("Management Address"))
|
||||
verbose_name=_("Management Address"))
|
||||
status = tables.Column("status", verbose_name=_("Status"))
|
||||
usage = tables.Column("usage", verbose_name=_("Usage"))
|
||||
|
||||
@ -87,13 +87,13 @@ class NodesFormsetTable(tuskar_ui.tables.FormsetDataTable):
|
||||
local_gb = tables.Column('local_gb', verbose_name=_("Local Disk (GB)"))
|
||||
|
||||
pm_address = tables.Column('pm_address',
|
||||
verbose_name=_("Power Management IP"))
|
||||
verbose_name=_("Power Management IP"))
|
||||
pm_user = tables.Column('pm_user', verbose_name=_("Power Management User"))
|
||||
pm_password = tables.Column('pm_password',
|
||||
verbose_name=_("Power Management Password"))
|
||||
verbose_name=_("Power Management Password"))
|
||||
|
||||
terminal_port = tables.Column('terminal_port',
|
||||
verbose_name=_("Terminal Port"))
|
||||
verbose_name=_("Terminal Port"))
|
||||
|
||||
# This is needed for the formset with can_delete=True
|
||||
DELETE = tables.Column('DELETE', verbose_name=_("Delete"))
|
||||
|
@ -32,7 +32,8 @@ class OverviewTab(tabs.Tab):
|
||||
running_instances = len(node.running_virtual_machines)
|
||||
except requests.exceptions.ConnectionError:
|
||||
running_instances = _("Unknown")
|
||||
messages.warning(request,
|
||||
messages.warning(
|
||||
request,
|
||||
_("Can't retrieve the running instances from the overcloud."))
|
||||
return {
|
||||
'node': node,
|
||||
|
@ -34,8 +34,9 @@ class NodeViewTests(test.BaseAdminViewTests):
|
||||
self.mox.ReplayAll()
|
||||
|
||||
res = self.client.get(self.unracked_page)
|
||||
self.assertTemplateUsed(res,
|
||||
'infrastructure/resource_management/nodes/unracked.html')
|
||||
self.assertTemplateUsed(
|
||||
res,
|
||||
'infrastructure/resource_management/nodes/unracked.html')
|
||||
|
||||
unracked_nodes_table = res.context['unracked_nodes_table'].data
|
||||
self.assertItemsEqual(unracked_nodes_table, unracked_nodes)
|
||||
@ -86,6 +87,7 @@ class NodeViewTests(test.BaseAdminViewTests):
|
||||
args=[node.id])
|
||||
res = self.client.get(url)
|
||||
|
||||
self.assertRedirectsNoFollow(res,
|
||||
self.assertRedirectsNoFollow(
|
||||
res,
|
||||
urlresolvers.reverse('horizon:infrastructure:resource_management:'
|
||||
'index'))
|
||||
|
@ -21,7 +21,8 @@ NODES = r'^(?P<node_id>[^/]+)/%s$'
|
||||
VIEW_MOD = 'tuskar_ui.infrastructure.resource_management.nodes.views'
|
||||
|
||||
|
||||
urlpatterns = defaults.patterns(VIEW_MOD,
|
||||
urlpatterns = defaults.patterns(
|
||||
VIEW_MOD,
|
||||
defaults.url(NODES % 'detail', views.DetailView.as_view(), name='detail'),
|
||||
defaults.url(r'^unracked/$',
|
||||
views.UnrackedView.as_view(),
|
||||
|
@ -77,7 +77,7 @@ class UploadRack(forms.SelfHandlingForm):
|
||||
racks = CSVRack.from_str(base64.b64decode(racks_str))
|
||||
# get the resource class ids by resource class names
|
||||
rclass_ids = dict((rc.name, rc.id) for rc in
|
||||
tuskar.ResourceClass.list(request))
|
||||
tuskar.ResourceClass.list(request))
|
||||
for rack in racks:
|
||||
try:
|
||||
tuskar.Rack.create(
|
||||
|
@ -117,7 +117,7 @@ class RackViewTests(test.BaseAdminViewTests):
|
||||
self.mox.ReplayAll()
|
||||
|
||||
url = urlresolvers.reverse('horizon:infrastructure:'
|
||||
'resource_management:racks:edit', args=[1])
|
||||
'resource_management:racks:edit', args=[1])
|
||||
res = self.client.get(url)
|
||||
self.assertEqual(res.status_code, 200)
|
||||
self.assertTemplateUsed(res, 'infrastructure/_workflow_base.html')
|
||||
@ -232,12 +232,12 @@ class RackViewTests(test.BaseAdminViewTests):
|
||||
rack = self.client.get(url)
|
||||
|
||||
self.assertEqual(rack.status_code, 200)
|
||||
self.assertTemplateUsed(rack,
|
||||
'infrastructure/resource_management/racks/upload.html')
|
||||
self.assertTemplateUsed(
|
||||
rack, 'infrastructure/resource_management/racks/upload.html')
|
||||
|
||||
def test_upload_rack_upload(self):
|
||||
csv_data = ('Rack1,rclass1,192.168.111.0/24,regionX,f0:dd:f1:da:f9:b5 '
|
||||
'f2:de:f1:da:f9:66 f2:de:ff:da:f9:67')
|
||||
'f2:de:f1:da:f9:66 f2:de:ff:da:f9:67')
|
||||
temp_file = tempfile.TemporaryFile()
|
||||
temp_file.write(csv_data)
|
||||
temp_file.flush()
|
||||
@ -247,37 +247,37 @@ class RackViewTests(test.BaseAdminViewTests):
|
||||
url = urlresolvers.reverse('horizon:infrastructure:'
|
||||
'resource_management:racks:upload')
|
||||
resp = self.client.post(url, data)
|
||||
self.assertTemplateUsed(resp,
|
||||
'infrastructure/resource_management/racks/upload.html')
|
||||
self.assertTemplateUsed(
|
||||
resp, 'infrastructure/resource_management/racks/upload.html')
|
||||
self.assertNoFormErrors(resp)
|
||||
self.assertEqual(resp.context['form']['uploaded_data'].value(),
|
||||
base64.b64encode(csv_data))
|
||||
base64.b64encode(csv_data))
|
||||
|
||||
def test_upload_rack_upload_with_error(self):
|
||||
data = {'upload': '1'}
|
||||
url = urlresolvers.reverse('horizon:infrastructure:'
|
||||
'resource_management:racks:upload')
|
||||
resp = self.client.post(url, data)
|
||||
self.assertTemplateUsed(resp,
|
||||
'infrastructure/resource_management/racks/upload.html')
|
||||
self.assertTemplateUsed(
|
||||
resp, 'infrastructure/resource_management/racks/upload.html')
|
||||
self.assertFormErrors(resp, 1)
|
||||
self.assertEqual(resp.context['form']['uploaded_data'].value(),
|
||||
None)
|
||||
None)
|
||||
|
||||
@test.create_stubs({tuskar.Rack: ('create',),
|
||||
tuskar.ResourceClass: ('list',)})
|
||||
def test_upload_rack_create(self):
|
||||
tuskar.Rack.create(mox.IsA(http.HttpRequest),
|
||||
name='Rack1',
|
||||
resource_class_id='1',
|
||||
location='regionX',
|
||||
subnet='192.168.111.0/24').AndReturn(None)
|
||||
name='Rack1',
|
||||
resource_class_id='1',
|
||||
location='regionX',
|
||||
subnet='192.168.111.0/24').AndReturn(None)
|
||||
tuskar.ResourceClass.list(
|
||||
mox.IsA(http.HttpRequest)).AndReturn(
|
||||
self.tuskar_resource_classes.list())
|
||||
self.mox.ReplayAll()
|
||||
csv_data = ('Rack1,rclass1,192.168.111.0/24,regionX,f0:dd:f1:da:f9:b5 '
|
||||
'f2:de:f1:da:f9:66 f2:de:ff:da:f9:67')
|
||||
'f2:de:f1:da:f9:66 f2:de:ff:da:f9:67')
|
||||
|
||||
data = {'uploaded_data': base64.b64encode(csv_data), 'add_racks': '1'}
|
||||
url = urlresolvers.reverse('horizon:infrastructure:'
|
||||
@ -369,7 +369,7 @@ class RackViewTests(test.BaseAdminViewTests):
|
||||
|
||||
@test.create_stubs({
|
||||
tuskar.Rack: ('get', 'list_nodes', 'list_flavors', 'update',
|
||||
'node_ids'),
|
||||
'node_ids'),
|
||||
tuskar.ResourceClass: ('get',),
|
||||
tuskar.Node: ('get',),
|
||||
tuskar.BaremetalNode: ('get',),
|
||||
@ -387,12 +387,13 @@ class RackViewTests(test.BaseAdminViewTests):
|
||||
|
||||
tuskar.Rack.get(mox.IsA(http.HttpRequest), rack.id).AndReturn(rack)
|
||||
tuskar.Node.get(mox.IsA(http.HttpRequest),
|
||||
baremetal_node.id).AndReturn(tuskar_node)
|
||||
baremetal_node.id).AndReturn(tuskar_node)
|
||||
tuskar.Rack.get(None, rack.id).AndReturn(rack) # called by node.rack
|
||||
tuskar.Rack.update(mox.IsA(http.HttpRequest), rack.id,
|
||||
{'nodes': [{'id': node_id}
|
||||
for node_id in tuskar.Rack.node_ids
|
||||
if node_id != baremetal_node.id]}).AndReturn(rack)
|
||||
{'nodes': [{'id': node_id}
|
||||
for node_id in tuskar.Rack.node_ids
|
||||
if node_id != baremetal_node.id]}
|
||||
).AndReturn(rack)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
url = urlresolvers.reverse(
|
||||
|
@ -20,7 +20,8 @@ RACKS = r'^(?P<rack_id>[^/]+)/%s$'
|
||||
VIEW_MOD = 'tuskar_ui.infrastructure.resource_management.racks.views'
|
||||
|
||||
|
||||
urlpatterns = urls.patterns(VIEW_MOD,
|
||||
urlpatterns = urls.patterns(
|
||||
VIEW_MOD,
|
||||
urls.url(r'^create/$', views.CreateView.as_view(), name='create'),
|
||||
urls.url(r'^upload/$', views.UploadView.as_view(), name='upload'),
|
||||
urls.url(r'^usage_data$',
|
||||
|
@ -33,7 +33,8 @@ class RackCreateInfoAction(workflows.Action):
|
||||
name = forms.RegexField(label=_("Name"),
|
||||
max_length=25,
|
||||
regex=r'^[\w\.\- ]+$',
|
||||
error_messages={'invalid': _('Name may only '
|
||||
error_messages={'invalid': _(
|
||||
'Name may only '
|
||||
'contain letters, numbers, underscores, '
|
||||
'periods and hyphens.')})
|
||||
location = forms.CharField(label=_("Location"))
|
||||
@ -50,7 +51,7 @@ class RackCreateInfoAction(workflows.Action):
|
||||
except Exception:
|
||||
racks = []
|
||||
exceptions.check_message(['Connection', 'refused'],
|
||||
_("Unable to retrieve rack list."))
|
||||
_("Unable to retrieve rack list."))
|
||||
raise
|
||||
|
||||
# Validations: detect duplicates
|
||||
@ -213,7 +214,8 @@ class CreateRack(workflows.Workflow):
|
||||
node_ids.append({'id': node_id})
|
||||
try:
|
||||
# Then, register the Rack, including the nodes
|
||||
tuskar.Rack.create(request, name=data['name'],
|
||||
tuskar.Rack.create(
|
||||
request, name=data['name'],
|
||||
resource_class_id=data['resource_class_id'],
|
||||
location=data['location'], subnet=data['subnet'],
|
||||
nodes=node_ids)
|
||||
@ -239,7 +241,7 @@ class EditRack(CreateRack):
|
||||
|
||||
def handle(self, request, data):
|
||||
node_ids = [{'id': self.create_or_update_node(node_data)}
|
||||
for node_data in data['nodes']]
|
||||
for node_data in data['nodes']]
|
||||
try:
|
||||
rack_id = self.context['rack_id']
|
||||
data['nodes'] = node_ids
|
||||
|
@ -70,14 +70,15 @@ class ResourcesClassFilterAction(tables.FilterAction):
|
||||
|
||||
|
||||
class ResourceClassesTable(tables.DataTable):
|
||||
name = tables.Column("name", link=("horizon:infrastructure:"
|
||||
"resource_management:resource_classes:detail"),
|
||||
name = tables.Column(
|
||||
"name", link=("horizon:infrastructure:"
|
||||
"resource_management:resource_classes:detail"),
|
||||
verbose_name=_("Class Name"))
|
||||
service_type = tables.Column("service_type", verbose_name=_("Class Type"))
|
||||
racks_count = tables.Column("racks_count", verbose_name=_("Racks"),
|
||||
empty_value="0")
|
||||
empty_value="0")
|
||||
nodes_count = tables.Column("nodes_count", verbose_name=_("Nodes"),
|
||||
empty_value="0")
|
||||
empty_value="0")
|
||||
|
||||
class Meta:
|
||||
name = "resource_classes"
|
||||
@ -130,7 +131,7 @@ class UpdateRacksClass(tables.LinkAction):
|
||||
|
||||
def get_link_url(self, datum=None):
|
||||
url = ("horizon:infrastructure:resource_management:resource_classes:"
|
||||
"update_racks")
|
||||
"update_racks")
|
||||
return "%s?step=%s" % (
|
||||
urlresolvers.reverse(
|
||||
url,
|
||||
@ -145,7 +146,7 @@ class UpdateFlavorsClass(tables.LinkAction):
|
||||
|
||||
def get_link_url(self, datum=None):
|
||||
url = ("horizon:infrastructure:resource_management:resource_classes:"
|
||||
"update_flavors")
|
||||
"update_flavors")
|
||||
resource_class_id = self.table.kwargs.get('resource_class_id')
|
||||
return "%s?step=%s" % (
|
||||
urlresolvers.reverse(url, args=(resource_class_id,)),
|
||||
@ -200,7 +201,7 @@ class FlavorsTable(tables.DataTable):
|
||||
|
||||
|
||||
class FlavorsFormsetTable(tuskar_ui.tables.FormsetDataTableMixin,
|
||||
FlavorsTable):
|
||||
FlavorsTable):
|
||||
|
||||
name = tables.Column(
|
||||
'name',
|
||||
|
@ -56,7 +56,7 @@ class FlavorsTab(tabs.TableTab):
|
||||
name = _("Flavors")
|
||||
slug = "flavors"
|
||||
template_name = ("infrastructure/resource_management/resource_classes/"
|
||||
"_detail_flavors.html")
|
||||
"_detail_flavors.html")
|
||||
|
||||
def get_flavors_table_data(self):
|
||||
try:
|
||||
|
@ -149,7 +149,8 @@ class ResourceClassViewTests(test.BaseAdminViewTests):
|
||||
'racks-MAX_NUM_FORMS': 1000,
|
||||
}
|
||||
res = self.client.post(url, form_data)
|
||||
self.assertRedirectsNoFollow(res,
|
||||
self.assertRedirectsNoFollow(
|
||||
res,
|
||||
("%s?tab=resource_management_tabs__resource_classes_tab" %
|
||||
urlresolvers.
|
||||
reverse("horizon:infrastructure:resource_management:index")))
|
||||
@ -354,7 +355,8 @@ class ResourceClassViewTests(test.BaseAdminViewTests):
|
||||
self.assertItemsEqual(res.context['flavors_table_table'].data, flavors)
|
||||
self.assertItemsEqual(res.context['racks_table_table'].data, racks)
|
||||
self.assertEqual(res.status_code, 200)
|
||||
self.assertTemplateUsed(res,
|
||||
self.assertTemplateUsed(
|
||||
res,
|
||||
'infrastructure/resource_management/resource_classes/detail.html')
|
||||
|
||||
@test.create_stubs({
|
||||
|
@ -63,7 +63,7 @@ class UpdateView(tuskar_workflows.WorkflowView):
|
||||
resource_class_id)
|
||||
except Exception:
|
||||
redirect = urlresolvers.reverse('horizon:infrastructure:'
|
||||
'resource_management:index')
|
||||
'resource_management:index')
|
||||
msg = _('Unable to retrieve resource class details.')
|
||||
exceptions.handle(self.request, msg, redirect=redirect)
|
||||
|
||||
|
@ -65,7 +65,7 @@ class ResourceClassInfoAction(workflows.Action):
|
||||
images, more = glance.image_list_detailed(self.request)
|
||||
except Exception:
|
||||
exceptions.handle(self.request,
|
||||
_('Unable to retrieve image list.'))
|
||||
_('Unable to retrieve image list.'))
|
||||
else:
|
||||
self.fields['image_id'].choices = [
|
||||
(image.id, image.name) for image in images]
|
||||
@ -141,7 +141,7 @@ class CreateResourceClassFlavors(tuskar_ui.workflows.TableStep):
|
||||
except Exception:
|
||||
flavors = []
|
||||
exceptions.handle(self.workflow.request,
|
||||
_('Unable to retrieve resource flavors list.'))
|
||||
_('Unable to retrieve resource flavors list.'))
|
||||
return flavors
|
||||
|
||||
|
||||
|
@ -71,7 +71,7 @@ class RacksTab(ProvisioningInfoMixin, tabs.TableTab):
|
||||
name = _("Racks")
|
||||
slug = "racks_tab"
|
||||
template_name = ("infrastructure/resource_management/"
|
||||
"racks/_index_table.html")
|
||||
"racks/_index_table.html")
|
||||
|
||||
def get_racks_data(self):
|
||||
try:
|
||||
@ -98,7 +98,7 @@ class ResourceClassesTab(ProvisioningInfoMixin, tabs.TableTab):
|
||||
name = _("Classes")
|
||||
slug = "resource_classes_tab"
|
||||
template_name = ("infrastructure/resource_management/"
|
||||
"resource_classes/_index_table.html")
|
||||
"resource_classes/_index_table.html")
|
||||
#preload = False buggy, checkboxes doesn't work wit table actions
|
||||
|
||||
def get_resource_classes_data(self):
|
||||
|
@ -25,7 +25,8 @@ from tuskar_ui.infrastructure.resource_management import views
|
||||
from tuskar_ui.test import urls as test_urls
|
||||
|
||||
|
||||
urlpatterns = defaults.patterns('',
|
||||
urlpatterns = defaults.patterns(
|
||||
'',
|
||||
defaults.url(r'^$', views.IndexView.as_view(), name='index'),
|
||||
defaults.url(r'^provision$', views.ProvisionView.as_view(),
|
||||
name='provision'),
|
||||
@ -39,5 +40,6 @@ urlpatterns = defaults.patterns('',
|
||||
)
|
||||
|
||||
if conf.settings.DEBUG:
|
||||
urlpatterns += defaults.patterns('', defaults.url(r'^qunit$',
|
||||
defaults.include(test_urls, namespace='tests')))
|
||||
urlpatterns += defaults.patterns(
|
||||
'', defaults.url(r'^qunit$',
|
||||
defaults.include(test_urls, namespace='tests')))
|
||||
|
@ -17,6 +17,7 @@ from django.conf.urls import defaults
|
||||
from tuskar_ui.infrastructure.service_management import views
|
||||
|
||||
|
||||
urlpatterns = defaults.patterns('',
|
||||
urlpatterns = defaults.patterns(
|
||||
'',
|
||||
defaults.url(r'^$', views.IndexView.as_view(), name='index'),
|
||||
)
|
||||
|
@ -110,8 +110,8 @@ class FormsetCell(BaseCell):
|
||||
self.field = None
|
||||
else:
|
||||
if self.field.errors:
|
||||
self.attrs['class'] = (self.attrs.get('class', '') +
|
||||
' error control-group')
|
||||
self.attrs['class'] = (
|
||||
'%s error control-group' % self.attrs.get('class', ''))
|
||||
self.attrs['title'] = ' '.join(
|
||||
unicode(error) for error in self.field.errors)
|
||||
|
||||
@ -137,7 +137,7 @@ class FormsetRow(BaseRow):
|
||||
|
||||
def render(self):
|
||||
return loader.render_to_string(self.template_path,
|
||||
{"row": self, "form": self.form})
|
||||
{"row": self, "form": self.form})
|
||||
|
||||
|
||||
class FormsetDataTableMixin(object):
|
||||
|
@ -58,7 +58,8 @@ class TuskarApiTests(test.APITestCase):
|
||||
node = self.baremetalclient_nodes.first()
|
||||
|
||||
self.mox.StubOutWithMock(baremetal.BareMetalNodeManager, 'create')
|
||||
baremetal.BareMetalNodeManager.create('node', 1, 1024, 10,
|
||||
baremetal.BareMetalNodeManager.create(
|
||||
'node', 1, 1024, 10,
|
||||
'aa:bb:cc:dd:ee', None, None, '', None).AndReturn(node)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
|
@ -37,7 +37,7 @@ class FormsetTableTests(test.TestCase):
|
||||
value = django.forms.IntegerField()
|
||||
|
||||
TableFormset = django.forms.formsets.formset_factory(TableForm,
|
||||
extra=0)
|
||||
extra=0)
|
||||
|
||||
class Table(tuskar_ui.tables.FormsetDataTable):
|
||||
formset_class = TableFormset
|
||||
|
@ -16,6 +16,7 @@ from django.conf.urls import defaults
|
||||
from django.views import generic
|
||||
|
||||
|
||||
urlpatterns = defaults.patterns('', defaults.url(r'^$',
|
||||
urlpatterns = defaults.patterns('', defaults.url(
|
||||
r'^$',
|
||||
generic.TemplateView.as_view(template_name="infrastructure/qunit.html"),
|
||||
name='qunit_tests'))
|
||||
|
Loading…
x
Reference in New Issue
Block a user