summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/conf.py20
-rw-r--r--doc/source/contributor/topics/code-style.rst2
-rw-r--r--horizon/base.py4
-rw-r--r--horizon/forms/fields.py10
-rw-r--r--horizon/tables/actions.py4
-rw-r--r--horizon/test/test_dashboards/dogs/puppies/tables.py8
-rw-r--r--horizon/test/unit/middleware/test_operation_log.py12
-rw-r--r--horizon/test/unit/tables/test_tables.py53
-rw-r--r--horizon/test/unit/tabs/test_tabs.py2
-rw-r--r--horizon/test/unit/templatetags/test_templatetags.py8
-rw-r--r--horizon/test/unit/test_exceptions.py18
-rw-r--r--horizon/test/unit/utils/test_babel_extract_angular.py36
-rw-r--r--horizon/test/unit/utils/test_filters.py10
-rw-r--r--horizon/utils/babel_extract_angular.py12
-rw-r--r--openstack_dashboard/api/cinder.py2
-rw-r--r--openstack_dashboard/api/neutron.py14
-rw-r--r--openstack_dashboard/api/rest/swift.py8
-rw-r--r--openstack_dashboard/dashboards/admin/aggregates/tables.py8
-rw-r--r--openstack_dashboard/dashboards/admin/aggregates/tests.py10
-rw-r--r--openstack_dashboard/dashboards/admin/flavors/tables.py8
-rw-r--r--openstack_dashboard/dashboards/admin/group_types/specs/tables.py8
-rw-r--r--openstack_dashboard/dashboards/admin/group_types/specs/tests.py6
-rw-r--r--openstack_dashboard/dashboards/admin/group_types/tables.py8
-rw-r--r--openstack_dashboard/dashboards/admin/hypervisors/compute/tables.py18
-rw-r--r--openstack_dashboard/dashboards/admin/info/tables.py6
-rw-r--r--openstack_dashboard/dashboards/admin/instances/tables.py8
-rw-r--r--openstack_dashboard/dashboards/admin/metadata_defs/tables.py8
-rw-r--r--openstack_dashboard/dashboards/admin/networks/agents/tables.py8
-rw-r--r--openstack_dashboard/dashboards/admin/networks/forms.py7
-rw-r--r--openstack_dashboard/dashboards/admin/networks/tables.py4
-rw-r--r--openstack_dashboard/dashboards/admin/networks/tests.py46
-rw-r--r--openstack_dashboard/dashboards/admin/networks/workflows.py2
-rw-r--r--openstack_dashboard/dashboards/admin/overview/tests.py6
-rw-r--r--openstack_dashboard/dashboards/admin/rbac_policies/tables.py8
-rw-r--r--openstack_dashboard/dashboards/admin/volume_types/extras/tables.py8
-rw-r--r--openstack_dashboard/dashboards/admin/volume_types/extras/tests.py6
-rw-r--r--openstack_dashboard/dashboards/admin/volume_types/forms.py4
-rw-r--r--openstack_dashboard/dashboards/admin/volume_types/qos_specs/tables.py8
-rw-r--r--openstack_dashboard/dashboards/admin/volume_types/tables.py24
-rw-r--r--openstack_dashboard/dashboards/admin/volume_types/tests.py48
-rw-r--r--openstack_dashboard/dashboards/admin/volumes/tests.py6
-rw-r--r--openstack_dashboard/dashboards/identity/domains/tables.py24
-rw-r--r--openstack_dashboard/dashboards/identity/groups/tables.py24
-rw-r--r--openstack_dashboard/dashboards/identity/identity_providers/protocols/tables.py8
-rw-r--r--openstack_dashboard/dashboards/identity/identity_providers/tables.py8
-rw-r--r--openstack_dashboard/dashboards/identity/mappings/tables.py8
-rw-r--r--openstack_dashboard/dashboards/identity/projects/tables.py8
-rw-r--r--openstack_dashboard/dashboards/identity/roles/tables.py8
-rw-r--r--openstack_dashboard/dashboards/identity/users/tables.py24
-rw-r--r--openstack_dashboard/dashboards/identity/users/tests.py12
-rw-r--r--openstack_dashboard/dashboards/project/api_access/tests.py2
-rw-r--r--openstack_dashboard/dashboards/project/backups/tables.py20
-rw-r--r--openstack_dashboard/dashboards/project/floating_ips/tables.py14
-rw-r--r--openstack_dashboard/dashboards/project/images/images/tables.py30
-rw-r--r--openstack_dashboard/dashboards/project/images/images/tests.py46
-rw-r--r--openstack_dashboard/dashboards/project/images/tests.py16
-rw-r--r--openstack_dashboard/dashboards/project/instances/audit_tables.py38
-rw-r--r--openstack_dashboard/dashboards/project/instances/tables.py264
-rw-r--r--openstack_dashboard/dashboards/project/instances/tests.py64
-rw-r--r--openstack_dashboard/dashboards/project/key_pairs/tables.py8
-rw-r--r--openstack_dashboard/dashboards/project/networks/ports/extensions/allowed_address_pairs/tables.py8
-rw-r--r--openstack_dashboard/dashboards/project/networks/ports/tables.py20
-rw-r--r--openstack_dashboard/dashboards/project/networks/subnets/tables.py8
-rw-r--r--openstack_dashboard/dashboards/project/networks/tables.py20
-rw-r--r--openstack_dashboard/dashboards/project/networks/tests.py32
-rw-r--r--openstack_dashboard/dashboards/project/networks/workflows.py9
-rw-r--r--openstack_dashboard/dashboards/project/routers/extensions/extraroutes/tables.py8
-rw-r--r--openstack_dashboard/dashboards/project/routers/ports/tables.py22
-rw-r--r--openstack_dashboard/dashboards/project/routers/tables.py24
-rw-r--r--openstack_dashboard/dashboards/project/routers/views.py2
-rw-r--r--openstack_dashboard/dashboards/project/security_groups/tables.py20
-rw-r--r--openstack_dashboard/dashboards/project/security_groups/tests.py8
-rw-r--r--openstack_dashboard/dashboards/project/snapshots/tables.py8
-rw-r--r--openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.js10
-rw-r--r--openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.spec.js16
-rw-r--r--openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.html52
-rw-r--r--openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.spec.js2
-rw-r--r--openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/port-details.html18
-rw-r--r--openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.controller.js90
-rw-r--r--openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.html165
-rw-r--r--openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.spec.js45
-rw-r--r--openstack_dashboard/dashboards/project/vg_snapshots/tables.py14
-rw-r--r--openstack_dashboard/dashboards/project/volume_groups/tables.py10
-rw-r--r--openstack_dashboard/dashboards/project/volumes/forms.py2
-rw-r--r--openstack_dashboard/dashboards/project/volumes/tables.py48
-rw-r--r--openstack_dashboard/dashboards/project/volumes/tests.py98
-rw-r--r--openstack_dashboard/locale/en_GB/LC_MESSAGES/djangojs.po8
-rw-r--r--openstack_dashboard/locale/id/LC_MESSAGES/djangojs.po8
-rw-r--r--openstack_dashboard/locale/tr_TR/LC_MESSAGES/django.po2
-rw-r--r--openstack_dashboard/management/commands/update_catalog.py8
-rw-r--r--openstack_dashboard/management/commands/upgrade_check.py6
-rw-r--r--openstack_dashboard/templates/500.html2
-rw-r--r--openstack_dashboard/test/integration_tests/tests/test_volumes.py4
-rw-r--r--openstack_dashboard/test/test_data/cinder_data.py24
-rw-r--r--openstack_dashboard/test/test_data/glance_data.py48
-rw-r--r--openstack_dashboard/test/test_data/keystone_data.py2
-rw-r--r--openstack_dashboard/test/test_data/neutron_data.py34
-rw-r--r--openstack_dashboard/test/test_data/nova_data.py26
-rw-r--r--openstack_dashboard/test/test_data/swift_data.py38
-rw-r--r--openstack_dashboard/test/unit/api/rest/test_swift.py46
-rw-r--r--openstack_dashboard/test/unit/api/test_glance.py24
-rw-r--r--openstack_dashboard/test/unit/api/test_nova.py4
-rw-r--r--openstack_dashboard/test/unit/utils/test_config_types.py2
-rw-r--r--releasenotes/notes/launch-instance-admin-password-68e7e4b7af239bae.yaml5
-rw-r--r--releasenotes/source/conf.py14
-rw-r--r--releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po22
-rw-r--r--releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po18
-rw-r--r--tox.ini4
108 files changed, 1175 insertions, 1055 deletions
diff --git a/doc/source/conf.py b/doc/source/conf.py
index 623caae51..b053dfa87 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -106,7 +106,7 @@ source_suffix = '.rst'
master_doc = 'index'
# General information about the project.
-copyright = u'2012, OpenStack Foundation'
+copyright = '2012, OpenStack Foundation'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
@@ -235,8 +235,8 @@ htmlhelp_basename = 'Horizondoc'
# (source start file, target name, title, author, documentclass
# [howto/manual]).
latex_documents = [
- ('index', 'doc-horizon.tex', u'Horizon Documentation',
- u'OpenStack Foundation', 'manual'),
+ ('index', 'doc-horizon.tex', 'Horizon Documentation',
+ 'OpenStack Foundation', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
@@ -273,8 +273,8 @@ latex_use_xindy = False
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
- ('index', 'horizon', u'Horizon Documentation',
- [u'OpenStack'], 1)
+ ('index', 'horizon', 'Horizon Documentation',
+ ['OpenStack'], 1)
]
# If true, show URL addresses after external links.
@@ -287,7 +287,7 @@ man_pages = [
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
- ('index', 'Horizon', u'Horizon Documentation', u'OpenStack',
+ ('index', 'Horizon', 'Horizon Documentation', 'OpenStack',
'Horizon', 'One line description of project.', 'Miscellaneous'),
]
@@ -304,10 +304,10 @@ texinfo_documents = [
# -- Options for Epub output --------------------------------------------------
# Bibliographic Dublin Core info.
-epub_title = u'Horizon'
-epub_author = u'OpenStack'
-epub_publisher = u'OpenStack'
-epub_copyright = u'2012, OpenStack'
+epub_title = 'Horizon'
+epub_author = 'OpenStack'
+epub_publisher = 'OpenStack'
+epub_copyright = '2012, OpenStack'
# The language of the text. It defaults to the language option
# or en if the language is not set.
diff --git a/doc/source/contributor/topics/code-style.rst b/doc/source/contributor/topics/code-style.rst
index b639c9f31..676083f09 100644
--- a/doc/source/contributor/topics/code-style.rst
+++ b/doc/source/contributor/topics/code-style.rst
@@ -338,7 +338,7 @@ Having done a release of an xstatic package:
"include-pypi-link: yes" setting.
2. Pull that patch down so you have the edited upper-constraints.txt file
locally.
-3. Set the environment variable `UPPER_CONSTRAINTS_FILE` to the edited
+3. Set the environment variable `TOX_CONSTRAINTS_FILE` to the edited
upper-constraints.txt file name and run tests or local development server
through tox. This will pull in the precise version of the xstatic package
that you need.
diff --git a/horizon/base.py b/horizon/base.py
index 7d91cfbd8..2bbd0d828 100644
--- a/horizon/base.py
+++ b/horizon/base.py
@@ -114,7 +114,7 @@ class HorizonComponent(object):
% self.__class__)
def __str__(self):
- name = getattr(self, 'name', u"Unnamed %s" % self.__class__.__name__)
+ name = getattr(self, 'name', "Unnamed %s" % self.__class__.__name__)
return name
def _get_default_urlpatterns(self):
@@ -705,7 +705,7 @@ class Site(Registry, HorizonComponent):
urls = 'horizon.site_urls'
def __repr__(self):
- return u"<Site: %s>" % self.slug
+ return "<Site: %s>" % self.slug
@property
def _conf(self):
diff --git a/horizon/forms/fields.py b/horizon/forms/fields.py
index 560581b0d..99c99c9bf 100644
--- a/horizon/forms/fields.py
+++ b/horizon/forms/fields.py
@@ -243,7 +243,7 @@ class SelectWidget(widgets.Widget):
def render_option(self, selected_choices, option_value, option_label):
option_value = force_text(option_value)
- other_html = (u' selected="selected"'
+ other_html = (' selected="selected"'
if option_value in selected_choices else '')
other_html += self.transform_option_html_attrs(option_label)
@@ -254,7 +254,7 @@ class SelectWidget(widgets.Widget):
option_label = self.transform_option_label(option_label)
- return u'<option value="%s"%s>%s</option>' % (
+ return '<option value="%s"%s>%s</option>' % (
html.escape(option_value), other_html, option_label)
def render_options(self, selected_choices):
@@ -424,7 +424,7 @@ class ThemableCheckboxInput(widgets.CheckboxInput):
label_for = attrs['id']
return html.format_html(
- u'<div class="themable-checkbox">{}<label for="{}"></label></div>',
+ '<div class="themable-checkbox">{}<label for="{}"></label></div>',
super().render(name, value, attrs),
label_for
)
@@ -538,8 +538,8 @@ class ThemableCheckboxChoiceInput(ChoiceInput):
label_for = ''
attrs = dict(self.attrs, **attrs) if attrs else self.attrs
return html.format_html(
- u'<div class="themable-checkbox">{}<label{}>' +
- u'<span>{}</span></label></div>',
+ '<div class="themable-checkbox">{}<label{}>' +
+ '<span>{}</span></label></div>',
self.tag(attrs), label_for, self.choice_label
)
diff --git a/horizon/tables/actions.py b/horizon/tables/actions.py
index 28bfb357f..25c452392 100644
--- a/horizon/tables/actions.py
+++ b/horizon/tables/actions.py
@@ -758,7 +758,7 @@ class BatchAction(Action):
datum_display = table.get_object_display(datum) or datum_id
if not table._filter_action(self, request, datum):
action_not_allowed.append(datum_display)
- LOG.warning(u'Permission denied to %(name)s: "%(dis)s"', {
+ LOG.warning('Permission denied to %(name)s: "%(dis)s"', {
'name': self._get_action_name(past=True).lower(),
'dis': datum_display
})
@@ -769,7 +769,7 @@ class BatchAction(Action):
self.update(request, datum)
action_success.append(datum_display)
self.success_ids.append(datum_id)
- LOG.info(u'%(action)s: "%(datum_display)s"',
+ LOG.info('%(action)s: "%(datum_display)s"',
{'action': self._get_action_name(past=True),
'datum_display': datum_display})
except Exception as ex:
diff --git a/horizon/test/test_dashboards/dogs/puppies/tables.py b/horizon/test/test_dashboards/dogs/puppies/tables.py
index cfea9a426..731a39cc5 100644
--- a/horizon/test/test_dashboards/dogs/puppies/tables.py
+++ b/horizon/test/test_dashboards/dogs/puppies/tables.py
@@ -28,8 +28,8 @@ class SellPuppy(tables.DeleteAction):
def action_present(count):
# Translators: test code, don't really have to translate
return ungettext_lazy(
- u"Sell Puppy",
- u"Sell Puppies",
+ "Sell Puppy",
+ "Sell Puppies",
count
)
@@ -37,8 +37,8 @@ class SellPuppy(tables.DeleteAction):
def action_past(count):
# Translators: test code, don't really have to translate
return ungettext_lazy(
- u"Sold Puppy",
- u"Sold Puppies",
+ "Sold Puppy",
+ "Sold Puppies",
count
)
diff --git a/horizon/test/unit/middleware/test_operation_log.py b/horizon/test/unit/middleware/test_operation_log.py
index 136b4bad6..95a7bbad7 100644
--- a/horizon/test/unit/middleware/test_operation_log.py
+++ b/horizon/test/unit/middleware/test_operation_log.py
@@ -29,8 +29,8 @@ from horizon.test import helpers as test
class OperationLogMiddlewareTest(django_test.TestCase):
- http_host = u'test_host'
- http_referer = u'/dashboard/test_http_referer'
+ http_host = 'test_host'
+ http_referer = '/dashboard/test_http_referer'
def setUp(self):
super().setUp()
@@ -48,10 +48,10 @@ class OperationLogMiddlewareTest(django_test.TestCase):
request.META['HTTP_HOST'] = self.http_host
request.META['HTTP_REFERER'] = self.http_referer
request.POST = {
- "username": u"admin",
- "password": u"pass"
+ "username": "admin",
+ "password": "pass"
}
- request.user.username = u'test_user_name'
+ request.user.username = 'test_user_name'
response = HttpResponseRedirect(url)
response.client = self.client
@@ -63,7 +63,7 @@ class OperationLogMiddlewareTest(django_test.TestCase):
request = self.factory.get(url)
request.META['HTTP_HOST'] = self.http_host
request.META['HTTP_REFERER'] = self.http_referer
- request.user.username = u'test_user_name'
+ request.user.username = 'test_user_name'
response = HttpResponseRedirect(url)
response.client = self.client
diff --git a/horizon/test/unit/tables/test_tables.py b/horizon/test/unit/tables/test_tables.py
index d34c9af19..5711250ff 100644
--- a/horizon/test/unit/tables/test_tables.py
+++ b/horizon/test/unit/tables/test_tables.py
@@ -46,15 +46,15 @@ class FakeObject(object):
self.extra = "extra"
def __str__(self):
- return u"%s: %s" % (self.__class__.__name__, self.name)
+ return "%s: %s" % (self.__class__.__name__, self.name)
TEST_DATA = (
FakeObject('1', 'object_1', 'value_1', 'up', 'optional_1', 'excluded_1'),
FakeObject('2', 'object_2', '<strong>evil</strong>', 'down', 'optional_2'),
FakeObject('3', 'object_3', 'value_3', 'up'),
- FakeObject('4', u'öbject_4', u'välue_1', u'üp', u'öptional_1',
- u'exclüded_1'),
+ FakeObject('4', 'öbject_4', 'välue_1', 'üp', 'öptional_1',
+ 'exclüded_1'),
)
TEST_DATA_2 = (
@@ -158,8 +158,8 @@ class MyBatchAction(tables.BatchAction):
def action_present(count):
# Translators: test code, don't really have to translate
return ungettext_lazy(
- u"Batch Item",
- u"Batch Items",
+ "Batch Item",
+ "Batch Items",
count
)
@@ -167,8 +167,8 @@ class MyBatchAction(tables.BatchAction):
def action_past(count):
# Translators: test code, don't really have to translate
return ungettext_lazy(
- u"Batched Item",
- u"Batched Items",
+ "Batched Item",
+ "Batched Items",
count
)
@@ -180,12 +180,12 @@ class MyBatchActionWithHelpText(MyBatchAction):
@staticmethod
def action_present(count):
# No translation
- return u"BatchHelp Item"
+ return "BatchHelp Item"
@staticmethod
def action_past(count):
# No translation
- return u"BatchedHelp Item"
+ return "BatchedHelp Item"
class MyToggleAction(tables.BatchAction):
@@ -195,15 +195,15 @@ class MyToggleAction(tables.BatchAction):
if self.current_present_action:
# Translators: test code, don't really have to translate
return ungettext_lazy(
- u"Up Item",
- u"Up Items",
+ "Up Item",
+ "Up Items",
count
)
else:
# Translators: test code, don't really have to translate
return ungettext_lazy(
- u"Down Item",
- u"Down Items",
+ "Down Item",
+ "Down Items",
count
)
@@ -211,15 +211,15 @@ class MyToggleAction(tables.BatchAction):
if self.current_past_action:
# Translators: test code, don't really have to translate
return ungettext_lazy(
- u"Upped Item",
- u"Upped Items",
+ "Upped Item",
+ "Upped Items",
count
)
else:
# Translators: test code, don't really have to translate
return ungettext_lazy(
- u"Downed Item",
- u"Downed Items",
+ "Downed Item",
+ "Downed Items",
count
)
@@ -419,7 +419,7 @@ class DataTableTests(test.TestCase):
self.assertTrue(self.table._meta.actions_column)
self.assertTrue(self.table._meta.multi_select)
# Test for verbose_name
- self.assertEqual(u"My Table", str(self.table))
+ self.assertEqual("My Table", str(self.table))
# Column ordering and exclusion.
# This should include auto-columns for multi_select and actions,
# but should not contain the excluded column.
@@ -666,7 +666,7 @@ class DataTableTests(test.TestCase):
row = self.table.get_rows()[0]
self.assertEqual(35, len(row.cells['status'].data))
- self.assertEqual(u'A Status that is longer than 35 ch…',
+ self.assertEqual('A Status that is longer than 35 ch…',
row.cells['status'].data)
def test_table_rendering(self):
@@ -830,7 +830,7 @@ class DataTableTests(test.TestCase):
['FakeObject: object_1',
'FakeObject: object_2',
'FakeObject: object_3',
- u'FakeObject: öbject_4'],
+ 'FakeObject: öbject_4'],
transform=str)
# with unknown value it should return empty list
@@ -913,7 +913,7 @@ class DataTableTests(test.TestCase):
handled = self.table.maybe_handle()
self.assertEqual(302, handled.status_code)
self.assertEqual("/my_url/", handled["location"])
- self.assertEqual(u"Downed Item: object_1",
+ self.assertEqual("Downed Item: object_1",
list(req._messages)[0].message)
# Toggle from status 'down' to 'up'
@@ -933,7 +933,7 @@ class DataTableTests(test.TestCase):
handled = self.table.maybe_handle()
self.assertEqual(302, handled.status_code)
self.assertEqual("/my_url/", handled["location"])
- self.assertEqual(u"Upped Item: object_2",
+ self.assertEqual("Upped Item: object_2",
list(req._messages)[0].message)
# there are underscore in object-id.
@@ -1014,7 +1014,7 @@ class DataTableTests(test.TestCase):
['FakeObject: object_1',
'FakeObject: object_2',
'FakeObject: object_3',
- u'FakeObject: öbject_4'],
+ 'FakeObject: öbject_4'],
transform=str)
# Updating and preemptive actions
@@ -1074,7 +1074,7 @@ class DataTableTests(test.TestCase):
['FakeObject: object_1',
'FakeObject: object_2',
'FakeObject: object_3',
- u'FakeObject: öbject_4'],
+ 'FakeObject: öbject_4'],
transform=str)
def test_column_uniqueness(self):
@@ -1166,8 +1166,7 @@ class DataTableTests(test.TestCase):
self.assertEqual(302, handled.status_code)
self.assertEqual("/my_url/", handled["location"])
- self.assertEqual(u"Downed Item: 1",
- list(req._messages)[0].message)
+ self.assertEqual("Downed Item: 1", list(req._messages)[0].message)
mock_get_object_display.assert_called_once_with(
test.IsA(FakeObject))
@@ -1368,7 +1367,7 @@ class DataTableViewTests(test.TestCase):
['FakeObject: object_1',
'FakeObject: object_2',
'FakeObject: object_3',
- u'FakeObject: öbject_4'],
+ 'FakeObject: öbject_4'],
transform=str)
self.assertEqual(req.session.get(self.fil_value_param), 'up')
self.assertEqual(req.session.get(self.fil_field_param), 'status')
diff --git a/horizon/test/unit/tabs/test_tabs.py b/horizon/test/unit/tabs/test_tabs.py
index 0e509d033..35998876f 100644
--- a/horizon/test/unit/tabs/test_tabs.py
+++ b/horizon/test/unit/tabs/test_tabs.py
@@ -296,7 +296,7 @@ class TabTests(test.TestCase):
['FakeObject: object_1',
'FakeObject: object_2',
'FakeObject: object_3',
- u'FakeObject: öbject_4'],
+ 'FakeObject: öbject_4'],
transform=str)
context = tab.get_context_data(self.request)
# Make sure our table is loaded into the context correctly
diff --git a/horizon/test/unit/templatetags/test_templatetags.py b/horizon/test/unit/templatetags/test_templatetags.py
index 926664040..febfcf676 100644
--- a/horizon/test/unit/templatetags/test_templatetags.py
+++ b/horizon/test/unit/templatetags/test_templatetags.py
@@ -63,7 +63,7 @@ class TemplateTagTests(test.TestCase):
size_str = ('5|diskgbformat', '10|diskgbformat',
'5555|mb_float_format', '80|mb_float_format',
'.5|mbformat', '0.005|mbformat', '0.0005|mbformat')
- expected = u' 5GB 10GB 5.4GB 80MB 512KB 5KB 524Bytes '
+ expected = ' 5GB 10GB 5.4GB 80MB 512KB 5KB 524Bytes '
text = ''
for size_filter in size_str:
@@ -76,7 +76,7 @@ class TemplateTagTests(test.TestCase):
def test_size_format_filters_with_string(self):
size_str = ('"test"|diskgbformat', '"limit"|mb_float_format',
'"no limit"|mbformat')
- expected = u' test limit no limit '
+ expected = ' test limit no limit '
text = ''
for size_filter in size_str:
@@ -94,7 +94,7 @@ class TemplateTagTests(test.TestCase):
text = ('{{ test.val1|truncate:1 }}#{{ test.val2|truncate:4 }}#'
'{{ test.val3|truncate:10 }}')
- expected = u' h#h...#four'
+ expected = ' h#h...#four'
rendered_str = self.render_template(tag_require='truncate_filter',
template_text=text,
context={'test': ctx_string})
@@ -108,7 +108,7 @@ class TemplateTagTests(test.TestCase):
text = ('{{ test.val1|quota:"TB" }}#{{ test.val2|quota }}#'
'{{ test.val3|quota }}')
- expected = u' 100 TB Available#1000 Available#(No Limit)'
+ expected = ' 100 TB Available#1000 Available#(No Limit)'
rendered_str = self.render_template(tag_require='horizon',
template_text=text,
diff --git a/horizon/test/unit/test_exceptions.py b/horizon/test/unit/test_exceptions.py
index 172551286..95a353fc3 100644
--- a/horizon/test/unit/test_exceptions.py
+++ b/horizon/test/unit/test_exceptions.py
@@ -18,10 +18,10 @@ from horizon.test import helpers as test
class HandleTests(test.TestCase):
def test_handle_translated(self):
- translated_unicode = u'\u30b3\u30f3\u30c6\u30ca\u30fc\u304c' \
- u'\u7a7a\u3067\u306f\u306a\u3044\u305f' \
- u'\u3081\u3001\u524a\u9664\u3067\u304d' \
- u'\u307e\u305b\u3093\u3002'
+ translated_unicode = '\u30b3\u30f3\u30c6\u30ca\u30fc\u304c' \
+ '\u7a7a\u3067\u306f\u306a\u3044\u305f' \
+ '\u3081\u3001\u524a\u9664\u3067\u304d' \
+ '\u307e\u305b\u3093\u3002'
# Japanese translation of:
# 'Because the container is not empty, it can not be deleted.'
@@ -45,8 +45,8 @@ class HandleTests(test.TestCase):
# tests that if a message is passed to handle that it is treated
# like a recoverable exception
- message = u"Couldn't make the thing"
- exc_msg = u"Exception string"
+ message = "Couldn't make the thing"
+ exc_msg = "Exception string"
req = self.request
req.META['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
@@ -64,7 +64,7 @@ class HandleTests(test.TestCase):
self.assertIn(exc_msg, req.horizon['async_messages'][0][1])
def test_handle_exception_with_empty_details(self):
- message = u"Couldn't make the thing"
+ message = "Couldn't make the thing"
details = ""
expected = ['error', message, '']
req = self.request
@@ -78,8 +78,8 @@ class HandleTests(test.TestCase):
self.assertCountEqual(req.horizon['async_messages'], [expected])
def test_handle_exception_with_details(self):
- message = u"Couldn't make the thing"
- exc_msg = u"Exception string"
+ message = "Couldn't make the thing"
+ exc_msg = "Exception string"
details = "custom detail message"
expected = ['error', message + exceptions.SEPERATOR + details, '']
req = self.request
diff --git a/horizon/test/unit/utils/test_babel_extract_angular.py b/horizon/test/unit/utils/test_babel_extract_angular.py
index ea3659f24..9c9e1e64a 100644
--- a/horizon/test/unit/utils/test_babel_extract_angular.py
+++ b/horizon/test/unit/utils/test_babel_extract_angular.py
@@ -38,8 +38,8 @@ class ExtractAngularTestCase(test.TestCase):
messages = list(extract_angular(buf, default_keys, [], {}))
self.assertEqual(
[
- (1, u'gettext', 'hello world!', []),
- (2, u'gettext', 'hello world!', [])
+ (1, 'gettext', 'hello world!', []),
+ (2, 'gettext', 'hello world!', [])
],
messages)
@@ -150,19 +150,19 @@ class ExtractAngularTestCase(test.TestCase):
messages = list(extract_angular(buf, default_keys, [], {}))
self.assertEqual(
[
- (2, u'gettext', 'hello world1', []),
- (3, u'gettext', 'hello world2', []),
- (4, u'gettext', 'hello world3', []),
- (4, u'gettext', 'hello world4', []),
- (8, u'gettext', '"it\\\'s awesome"', []),
- (9, u'gettext', 'oh \\"hello\\" there', []),
- (10, u'gettext', u'hello colon1', []),
- (11, u'gettext', u'hello colon2', []),
- (12, u'gettext', u'hello colon3', []),
- (13, u'gettext', u'hello colon4', []),
- (13, u'gettext', u'hello colon5', []),
- (17, u'gettext', u'"it\\\'s awesome"', []),
- (18, u'gettext', u'oh \\"hello\\" there', []),
+ (2, 'gettext', 'hello world1', []),
+ (3, 'gettext', 'hello world2', []),
+ (4, 'gettext', 'hello world3', []),
+ (4, 'gettext', 'hello world4', []),
+ (8, 'gettext', '"it\\\'s awesome"', []),
+ (9, 'gettext', 'oh \\"hello\\" there', []),
+ (10, 'gettext', 'hello colon1', []),
+ (11, 'gettext', 'hello colon2', []),
+ (12, 'gettext', 'hello colon3', []),
+ (13, 'gettext', 'hello colon4', []),
+ (13, 'gettext', 'hello colon5', []),
+ (17, 'gettext', '"it\\\'s awesome"', []),
+ (18, 'gettext', 'oh \\"hello\\" there', []),
],
messages)
@@ -196,8 +196,8 @@ class ExtractAngularTestCase(test.TestCase):
messages = list(extract_angular(buf, [], [], {}))
self.assertEqual(
[
- (2, u'gettext', 'To <a href="link">link</a> here', []),
- (3, u'gettext', 'To <!-- a comment!! --> here', []),
- (4, u'gettext', u'To trademark® &#62; &#x3E; here', []),
+ (2, 'gettext', 'To <a href="link">link</a> here', []),
+ (3, 'gettext', 'To <!-- a comment!! --> here', []),
+ (4, 'gettext', 'To trademark® &#62; &#x3E; here', []),
],
messages)
diff --git a/horizon/test/unit/utils/test_filters.py b/horizon/test/unit/utils/test_filters.py
index 4b178098f..6437e976c 100644
--- a/horizon/test/unit/utils/test_filters.py
+++ b/horizon/test/unit/utils/test_filters.py
@@ -29,25 +29,25 @@ class FiltersTests(test.TestCase):
def test_parse_isotime_filter(self):
c = django.template.Context({'time': ''})
t = django.template.Template('{{ time|parse_isotime }}')
- output = u""
+ output = ""
self.assertEqual(output, t.render(c))
c = django.template.Context({'time': 'error'})
t = django.template.Template('{{ time|parse_isotime }}')
- output = u""
+ output = ""
self.assertEqual(output, t.render(c))
c = django.template.Context({'time': 'error'})
t = django.template.Template('{{ time|parse_isotime:"test" }}')
- output = u"test"
+ output = "test"
self.assertEqual(output, t.render(c))
c = django.template.Context({'time': '2007-03-04T21:08:12'})
t = django.template.Template('{{ time|parse_isotime:"test" }}')
- output = u"March 4, 2007, 9:08 p.m."
+ output = "March 4, 2007, 9:08 p.m."
self.assertEqual(output, t.render(c))
@@ -58,7 +58,7 @@ class FiltersTests(test.TestCase):
class TimeSinceNeverFilterTests(test.TestCase):
- default = u"Never"
+ default = "Never"
def test_timesince_or_never_returns_default_for_empty_string(self):
c = django.template.Context({'time': ''})
diff --git a/horizon/utils/babel_extract_angular.py b/horizon/utils/babel_extract_angular.py
index f6ecc5a56..f892b3de5 100644
--- a/horizon/utils/babel_extract_angular.py
+++ b/horizon/utils/babel_extract_angular.py
@@ -30,8 +30,8 @@ filter_regex = re.compile(
# to HTML_ENTITIES as necessary.
HTML_ENTITY_PASSTHROUGH = {'amp', 'gt', 'lt'}
HTML_ENTITY_DECODED = {
- 'reg': u'®',
- 'times': u'×'
+ 'reg': '®',
+ 'times': '×'
}
@@ -92,7 +92,7 @@ class AngularGettextHTMLParser(parser.HTMLParser):
for match in filter_regex.findall(attr[1]):
if match:
self.strings.append(
- (self.line, u'gettext', match[1][1:-1], [])
+ (self.line, 'gettext', match[1][1:-1], [])
)
def handle_data(self, data):
@@ -101,7 +101,7 @@ class AngularGettextHTMLParser(parser.HTMLParser):
else:
for match in filter_regex.findall(data):
self.strings.append(
- (self.line, u'gettext', match[1][1:-1], [])
+ (self.line, 'gettext', match[1][1:-1], [])
)
def handle_entityref(self, name):
@@ -130,10 +130,10 @@ class AngularGettextHTMLParser(parser.HTMLParser):
self.data.strip(),
self.plural_form
)
- func_name = u'ngettext'
+ func_name = 'ngettext'
else:
messages = self.data.strip()
- func_name = u'gettext'
+ func_name = 'gettext'
self.strings.append(
(self.line, func_name, messages, self.comments)
)
diff --git a/openstack_dashboard/api/cinder.py b/openstack_dashboard/api/cinder.py
index d1f52f447..e831ea27b 100644
--- a/openstack_dashboard/api/cinder.py
+++ b/openstack_dashboard/api/cinder.py
@@ -51,7 +51,7 @@ DEFAULT_QUOTA_NAME = 'default'
CONSUMER_CHOICES = (
('back-end', _('back-end')),
('front-end', _('front-end')),
- ('both', pgettext_lazy('Both of front-end and back-end', u'both')),
+ ('both', pgettext_lazy('Both of front-end and back-end', 'both')),
)
VERSIONS = base.APIVersionManager("volume", preferred_version='3')
diff --git a/openstack_dashboard/api/neutron.py b/openstack_dashboard/api/neutron.py
index 0ff9971c1..3ebf76026 100644
--- a/openstack_dashboard/api/neutron.py
+++ b/openstack_dashboard/api/neutron.py
@@ -252,7 +252,7 @@ class SecurityGroupRule(NeutronAPIDictWrapper):
def _get_secgroup_name(self, sg_id, sg_dict):
if not sg_id:
- return u''
+ return ''
if sg_dict is None:
sg_dict = {}
@@ -1765,10 +1765,10 @@ def _server_get_addresses(request, server, ports, floating_ips, network_names):
error_message = _('Unable to parse IP address %s.') % ip
messages.error(request, error_message)
raise
- return {u'OS-EXT-IPS-MAC:mac_addr': mac,
- u'version': version,
- u'addr': ip,
- u'OS-EXT-IPS:type': type}
+ return {'OS-EXT-IPS-MAC:mac_addr': mac,
+ 'version': version,
+ 'addr': ip,
+ 'OS-EXT-IPS:type': type}
addresses = collections.defaultdict(list)
instance_ports = ports.get(server.id, [])
@@ -1780,7 +1780,7 @@ def _server_get_addresses(request, server, ports, floating_ips, network_names):
addresses[network_name].append(
_format_address(port.mac_address,
fixed_ip['ip_address'],
- u'fixed'))
+ 'fixed'))
else:
addresses[network_name] = []
port_fips = floating_ips.get(port.id, [])
@@ -1788,7 +1788,7 @@ def _server_get_addresses(request, server, ports, floating_ips, network_names):
addresses[network_name].append(
_format_address(port.mac_address,
fip.floating_ip_address,
- u'floating'))
+ 'floating'))
return dict(addresses)
diff --git a/openstack_dashboard/api/rest/swift.py b/openstack_dashboard/api/rest/swift.py
index e71655ed2..45834deeb 100644
--- a/openstack_dashboard/api/rest/swift.py
+++ b/openstack_dashboard/api/rest/swift.py
@@ -116,7 +116,7 @@ class Container(generic.View):
return rest_utils.JSONResponse(str(e), 409)
return rest_utils.CreatedResponse(
- u'/api/swift/containers/%s' % container,
+ '/api/swift/containers/%s' % container,
)
@rest_utils.ajax()
@@ -219,7 +219,7 @@ class Object(generic.View):
)
return rest_utils.CreatedResponse(
- u'/api/swift/containers/%s/object/%s' % (container, result.name)
+ '/api/swift/containers/%s/object/%s' % (container, result.name)
)
@rest_utils.ajax()
@@ -293,6 +293,6 @@ class ObjectCopy(generic.View):
except exceptions.AlreadyExists as e:
return rest_utils.JSONResponse(str(e), 409)
return rest_utils.CreatedResponse(
- u'/api/swift/containers/%s/object/%s' % (dest_container,
- result.name)
+ '/api/swift/containers/%s/object/%s' % (dest_container,
+ result.name)
)
diff --git a/openstack_dashboard/dashboards/admin/aggregates/tables.py b/openstack_dashboard/dashboards/admin/aggregates/tables.py
index 443773232..fd27d0d3e 100644
--- a/openstack_dashboard/dashboards/admin/aggregates/tables.py
+++ b/openstack_dashboard/dashboards/admin/aggregates/tables.py
@@ -26,16 +26,16 @@ class DeleteAggregateAction(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Host Aggregate",
- u"Delete Host Aggregates",
+ "Delete Host Aggregate",
+ "Delete Host Aggregates",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Host Aggregate",
- u"Deleted Host Aggregates",
+ "Deleted Host Aggregate",
+ "Deleted Host Aggregates",
count
)
diff --git a/openstack_dashboard/dashboards/admin/aggregates/tests.py b/openstack_dashboard/dashboards/admin/aggregates/tests.py
index 20a0360b9..2b6d66da2 100644
--- a/openstack_dashboard/dashboards/admin/aggregates/tests.py
+++ b/openstack_dashboard/dashboards/admin/aggregates/tests.py
@@ -104,7 +104,7 @@ class CreateAggregateWorkflowTests(BaseAggregateWorkflowTests):
workflow_data['name'] = ''
workflow_data['availability_zone'] = ''
self._test_generic_create_aggregate(workflow_data, aggregate, (), 1,
- u'This field is required')
+ 'This field is required')
def test_create_aggregate_fails_missing_fields_existing_aggregates(self):
aggregate = self.aggregates.first()
@@ -115,14 +115,14 @@ class CreateAggregateWorkflowTests(BaseAggregateWorkflowTests):
self._test_generic_create_aggregate(workflow_data, aggregate,
existing_aggregates, 1,
- u'This field is required')
+ 'This field is required')
def test_create_aggregate_fails_duplicated_name(self):
aggregate = self.aggregates.first()
existing_aggregates = self.aggregates.list()
workflow_data = self._get_create_workflow_data(aggregate)
expected_error_message = html \
- .escape(u'The name "%s" is already used by another host aggregate.'
+ .escape('The name "%s" is already used by another host aggregate.'
% aggregate.name)
self._test_generic_create_aggregate(workflow_data, aggregate,
@@ -254,7 +254,7 @@ class AggregatesViewTests(test.BaseAdminViewTests):
'availability_zone': aggregate.availability_zone}
self._test_generic_update_aggregate(form_data, aggregate, 1,
- u'This field is required')
+ 'This field is required')
def test_update_aggregate_fails_missing_az_field(self):
aggregate = self.aggregates.first()
@@ -264,7 +264,7 @@ class AggregatesViewTests(test.BaseAdminViewTests):
self._test_generic_update_aggregate(
form_data, aggregate, 1,
- u'The new availability zone can&#39;t be empty')
+ 'The new availability zone can&#39;t be empty')
class ManageHostsTests(test.BaseAdminViewTests):
diff --git a/openstack_dashboard/dashboards/admin/flavors/tables.py b/openstack_dashboard/dashboards/admin/flavors/tables.py
index 4cdf680c5..731249b0e 100644
--- a/openstack_dashboard/dashboards/admin/flavors/tables.py
+++ b/openstack_dashboard/dashboards/admin/flavors/tables.py
@@ -34,16 +34,16 @@ class DeleteFlavor(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Flavor",
- u"Delete Flavors",
+ "Delete Flavor",
+ "Delete Flavors",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Flavor",
- u"Deleted Flavors",
+ "Deleted Flavor",
+ "Deleted Flavors",
count
)
diff --git a/openstack_dashboard/dashboards/admin/group_types/specs/tables.py b/openstack_dashboard/dashboards/admin/group_types/specs/tables.py
index a5cabed77..6daf4abfd 100644
--- a/openstack_dashboard/dashboards/admin/group_types/specs/tables.py
+++ b/openstack_dashboard/dashboards/admin/group_types/specs/tables.py
@@ -26,16 +26,16 @@ class GroupTypeSpecDelete(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Spec",
- u"Delete Specs",
+ "Delete Spec",
+ "Delete Specs",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Delete Spec",
- u"Delete Specs",
+ "Delete Spec",
+ "Delete Specs",
count
)
diff --git a/openstack_dashboard/dashboards/admin/group_types/specs/tests.py b/openstack_dashboard/dashboards/admin/group_types/specs/tests.py
index 3dac5afcb..17ecaf458 100644
--- a/openstack_dashboard/dashboards/admin/group_types/specs/tests.py
+++ b/openstack_dashboard/dashboards/admin/group_types/specs/tests.py
@@ -64,8 +64,8 @@ class GroupTypeSpecTests(test.BaseAdminViewTests):
index_url = reverse(
'horizon:admin:group_types:index')
- data = {'key': u'k1',
- 'value': u'v1'}
+ data = {'key': 'k1',
+ 'value': 'v1'}
self.mock_group_type_spec_set.return_value = None
resp = self.client.post(create_url, data)
@@ -101,7 +101,7 @@ class GroupTypeSpecTests(test.BaseAdminViewTests):
args=[group_type.id, key])
index_url = reverse('horizon:admin:group_types:index')
- data = {'value': u'v1'}
+ data = {'value': 'v1'}
specs = {key: data['value']}
self.mock_group_type_spec_list.return_value = specs
diff --git a/openstack_dashboard/dashboards/admin/group_types/tables.py b/openstack_dashboard/dashboards/admin/group_types/tables.py
index 86792d117..ee492fa20 100644
--- a/openstack_dashboard/dashboards/admin/group_types/tables.py
+++ b/openstack_dashboard/dashboards/admin/group_types/tables.py
@@ -63,16 +63,16 @@ class DeleteGroupType(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Group Type",
- u"Delete Group Types",
+ "Delete Group Type",
+ "Delete Group Types",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Group Type",
- u"Deleted Group Types",
+ "Deleted Group Type",
+ "Deleted Group Types",
count
)
policy_rules = (("volume", "group:group_types_manage"),)
diff --git a/openstack_dashboard/dashboards/admin/hypervisors/compute/tables.py b/openstack_dashboard/dashboards/admin/hypervisors/compute/tables.py
index bc085bc76..8564f16d4 100644
--- a/openstack_dashboard/dashboards/admin/hypervisors/compute/tables.py
+++ b/openstack_dashboard/dashboards/admin/hypervisors/compute/tables.py
@@ -55,16 +55,16 @@ class EnableService(policy.PolicyTargetMixin, tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Enable Service",
- u"Enable Services",
+ "Enable Service",
+ "Enable Services",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Enabled Service",
- u"Enabled Services",
+ "Enabled Service",
+ "Enabled Services",
count
)
@@ -103,13 +103,11 @@ class ComputeHostTable(tables.DataTable):
)
STATUS_DISPLAY_CHOICES = (
("enabled", pgettext_lazy("Current status of a Hypervisor",
- u"Enabled")),
+ "Enabled")),
("disabled", pgettext_lazy("Current status of a Hypervisor",
- u"Disabled")),
- ("up", pgettext_lazy("Current state of a Hypervisor",
- u"Up")),
- ("down", pgettext_lazy("Current state of a Hypervisor",
- u"Down")),
+ "Disabled")),
+ ("up", pgettext_lazy("Current state of a Hypervisor", "Up")),
+ ("down", pgettext_lazy("Current state of a Hypervisor", "Down")),
)
host = tables.WrappingColumn('host', verbose_name=_('Host'))
diff --git a/openstack_dashboard/dashboards/admin/info/tables.py b/openstack_dashboard/dashboards/admin/info/tables.py
index 22543a5cb..d9be29697 100644
--- a/openstack_dashboard/dashboards/admin/info/tables.py
+++ b/openstack_dashboard/dashboards/admin/info/tables.py
@@ -111,7 +111,7 @@ class NovaServicesTable(tables.DataTable):
updated_at = tables.Column('updated_at',
verbose_name=pgettext_lazy(
'Time since the last update',
- u'Last Updated'),
+ 'Last Updated'),
filters=(utils_filters.parse_isotime,
filters.timesince))
@@ -135,7 +135,7 @@ class CinderServicesTable(tables.DataTable):
updated_at = tables.Column('updated_at',
verbose_name=pgettext_lazy(
'Time since the last update',
- u'Last Updated'),
+ 'Last Updated'),
filters=(utils_filters.parse_isotime,
filters.timesince))
@@ -209,7 +209,7 @@ class NetworkAgentsTable(tables.DataTable):
heartbeat_timestamp = tables.Column('heartbeat_timestamp',
verbose_name=pgettext_lazy(
'Time since the last update',
- u'Last Updated'),
+ 'Last Updated'),
filters=(utils_filters.parse_isotime,
filters.timesince))
diff --git a/openstack_dashboard/dashboards/admin/instances/tables.py b/openstack_dashboard/dashboards/admin/instances/tables.py
index 3bb147cc7..4cdc13121 100644
--- a/openstack_dashboard/dashboards/admin/instances/tables.py
+++ b/openstack_dashboard/dashboards/admin/instances/tables.py
@@ -56,16 +56,16 @@ class MigrateInstance(policy.PolicyTargetMixin, tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Migrate Instance",
- u"Migrate Instances",
+ "Migrate Instance",
+ "Migrate Instances",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Scheduled migration (pending confirmation) of Instance",
- u"Scheduled migration (pending confirmation) of Instances",
+ "Scheduled migration (pending confirmation) of Instance",
+ "Scheduled migration (pending confirmation) of Instances",
count
)
diff --git a/openstack_dashboard/dashboards/admin/metadata_defs/tables.py b/openstack_dashboard/dashboards/admin/metadata_defs/tables.py
index 0b5a3e649..0625cac7a 100644
--- a/openstack_dashboard/dashboards/admin/metadata_defs/tables.py
+++ b/openstack_dashboard/dashboards/admin/metadata_defs/tables.py
@@ -44,16 +44,16 @@ class DeleteNamespace(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Namespace",
- u"Delete Namespaces",
+ "Delete Namespace",
+ "Delete Namespaces",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Namespace",
- u"Deleted Namespaces",
+ "Deleted Namespace",
+ "Deleted Namespaces",
count
)
diff --git a/openstack_dashboard/dashboards/admin/networks/agents/tables.py b/openstack_dashboard/dashboards/admin/networks/agents/tables.py
index b8961929a..da8c7beb6 100644
--- a/openstack_dashboard/dashboards/admin/networks/agents/tables.py
+++ b/openstack_dashboard/dashboards/admin/networks/agents/tables.py
@@ -32,16 +32,16 @@ class DeleteDHCPAgent(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete DHCP Agent",
- u"Delete DHCP Agents",
+ "Delete DHCP Agent",
+ "Delete DHCP Agents",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted DHCP Agent",
- u"Deleted DHCP Agents",
+ "Deleted DHCP Agent",
+ "Deleted DHCP Agents",
count
)
diff --git a/openstack_dashboard/dashboards/admin/networks/forms.py b/openstack_dashboard/dashboards/admin/networks/forms.py
index 00d5c1fae..1ea5941f0 100644
--- a/openstack_dashboard/dashboards/admin/networks/forms.py
+++ b/openstack_dashboard/dashboards/admin/networks/forms.py
@@ -147,6 +147,11 @@ class CreateNetwork(forms.SelfHandlingForm):
help_text=_("Availability zones where the DHCP agents may be "
"scheduled. Leaving this unset is equivalent to "
"selecting all availability zones"))
+ mtu = forms.IntegerField(
+ label=_("MTU"), required=False, min_value=68,
+ help_text=_("Maximum Transmission Unit. "
+ "Minimum is 68 bytes for the IPv4 subnet "
+ "and 1280 bytes for the IPv6 subnet."))
@classmethod
def _instantiate(cls, request, *args, **kwargs):
@@ -284,6 +289,8 @@ class CreateNetwork(forms.SelfHandlingForm):
data['segmentation_id'])
if 'az_hints' in data and data['az_hints']:
params['availability_zone_hints'] = data['az_hints']
+ if data['mtu']:
+ params['mtu'] = data['mtu']
network = api.neutron.network_create(request, **params)
LOG.debug('Network %s was successfully created.', data['name'])
return network
diff --git a/openstack_dashboard/dashboards/admin/networks/tables.py b/openstack_dashboard/dashboards/admin/networks/tables.py
index 9af7cfdc8..ed3b9d70f 100644
--- a/openstack_dashboard/dashboards/admin/networks/tables.py
+++ b/openstack_dashboard/dashboards/admin/networks/tables.py
@@ -69,8 +69,8 @@ class CreateSubnet(project_tables.CreateSubnet):
DISPLAY_CHOICES = (
- ("up", pgettext_lazy("Admin state of a Network", u"UP")),
- ("down", pgettext_lazy("Admin state of a Network", u"DOWN")),
+ ("up", pgettext_lazy("Admin state of a Network", "UP")),
+ ("down", pgettext_lazy("Admin state of a Network", "DOWN")),
)
diff --git a/openstack_dashboard/dashboards/admin/networks/tests.py b/openstack_dashboard/dashboards/admin/networks/tests.py
index de9be31cd..3c34ad8fa 100644
--- a/openstack_dashboard/dashboards/admin/networks/tests.py
+++ b/openstack_dashboard/dashboards/admin/networks/tests.py
@@ -540,6 +540,52 @@ class NetworkTests(test.BaseAdminViewTests):
**params)
@test.create_mocks({api.neutron: ('network_create',
+ 'is_extension_supported',
+ 'subnetpool_list'),
+ api.keystone: ('tenant_list',)})
+ def test_network_create_post_with_mtu(self):
+ tenants = self.tenants.list()
+ tenant_id = self.tenants.first().id
+ network = self.networks.first()
+
+ self.mock_tenant_list.return_value = [tenants, False]
+ self._stub_is_extension_supported(
+ {'provider': True,
+ 'network_availability_zone': False,
+ 'subnet_allocation': True})
+ self.mock_subnetpool_list.return_value = self.subnetpools.list()
+ self.mock_network_create.return_value = network
+
+ form_data = {'tenant_id': tenant_id,
+ 'name': network.name,
+ 'admin_state': network.admin_state_up,
+ 'external': True,
+ 'shared': True,
+ 'mtu': 1450,
+ 'network_type': 'local'}
+ url = reverse('horizon:admin:networks:create')
+ res = self.client.post(url, form_data)
+
+ self.assertNoFormErrors(res)
+ self.assertRedirectsNoFollow(res, INDEX_URL)
+
+ self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest())
+ self.mock_subnetpool_list.assert_called_once_with(test.IsHttpRequest())
+ params = {'name': network.name,
+ 'tenant_id': tenant_id,
+ 'admin_state_up': network.admin_state_up,
+ 'router:external': True,
+ 'shared': True,
+ 'mtu': 1450,
+ 'provider:network_type': 'local'}
+ self.mock_network_create.assert_called_once_with(test.IsHttpRequest(),
+ **params)
+ self._check_is_extension_supported(
+ {'provider': 3,
+ 'network_availability_zone': 2,
+ 'subnet_allocation': 1})
+
+ @test.create_mocks({api.neutron: ('network_create',
'subnet_create',
'is_extension_supported',
'subnetpool_list'),
diff --git a/openstack_dashboard/dashboards/admin/networks/workflows.py b/openstack_dashboard/dashboards/admin/networks/workflows.py
index 1fa0a97b9..e4bf6f01d 100644
--- a/openstack_dashboard/dashboards/admin/networks/workflows.py
+++ b/openstack_dashboard/dashboards/admin/networks/workflows.py
@@ -42,7 +42,7 @@ class CreateNetworkInfoAction(network_workflows.CreateNetworkInfoAction):
class CreateNetworkInfo(network_workflows.CreateNetworkInfo):
action_class = CreateNetworkInfoAction
- contributes = ("net_name", "admin_state", "with_subnet", "az_hints")
+ contributes = ("net_name", "admin_state", "with_subnet", "az_hints", "mtu")
def __init__(self, workflow):
self.contributes = tuple(workflow.create_network_form.fields.keys())
diff --git a/openstack_dashboard/dashboards/admin/overview/tests.py b/openstack_dashboard/dashboards/admin/overview/tests.py
index 054488828..f53624d06 100644
--- a/openstack_dashboard/dashboards/admin/overview/tests.py
+++ b/openstack_dashboard/dashboards/admin/overview/tests.py
@@ -78,7 +78,7 @@ class UsageViewTests(test.BaseAdminViewTests):
self.assertEqual(nova_stu_enabled,
res.context['simple_tenant_usage_enabled'])
- usage_table = encoding.smart_str(u'''
+ usage_table = encoding.smart_str('''
<tr class="" data-object-id="1" id="global_usage__row__1">
<td class="sortable normal_column">test_tenant</td>
<td class="sortable normal_column">%s</td>
@@ -97,7 +97,7 @@ class UsageViewTests(test.BaseAdminViewTests):
)
# test for deleted project
- usage_table_deleted = encoding.smart_str(u'''
+ usage_table_deleted = encoding.smart_str('''
<tr class="" data-object-id="3" id="global_usage__row__3">
<td class="sortable normal_column">3 (Deleted)</td>
<td class="sortable normal_column">%s</td>
@@ -168,7 +168,7 @@ class UsageViewTests(test.BaseAdminViewTests):
if nova_stu_enabled:
for obj in usage_obj:
- row = u'"{0}","{1}","{2}","{3}","{4:.2f}"\r\n'.format(
+ row = '"{0}","{1}","{2}","{3}","{4:.2f}"\r\n'.format(
obj.project_name,
obj.vcpus,
obj.memory_mb,
diff --git a/openstack_dashboard/dashboards/admin/rbac_policies/tables.py b/openstack_dashboard/dashboards/admin/rbac_policies/tables.py
index 5298b3e72..5aad054c0 100644
--- a/openstack_dashboard/dashboards/admin/rbac_policies/tables.py
+++ b/openstack_dashboard/dashboards/admin/rbac_policies/tables.py
@@ -36,16 +36,16 @@ class DeleteRBACPolicy(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete RBAC Policy",
- u"Delete RBAC Policies",
+ "Delete RBAC Policy",
+ "Delete RBAC Policies",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted RBAC Policy",
- u"Deleted RBAC Policies",
+ "Deleted RBAC Policy",
+ "Deleted RBAC Policies",
count
)
diff --git a/openstack_dashboard/dashboards/admin/volume_types/extras/tables.py b/openstack_dashboard/dashboards/admin/volume_types/extras/tables.py
index 1e6714cb4..843372b9b 100644
--- a/openstack_dashboard/dashboards/admin/volume_types/extras/tables.py
+++ b/openstack_dashboard/dashboards/admin/volume_types/extras/tables.py
@@ -24,16 +24,16 @@ class ExtraSpecDelete(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Extra Spec",
- u"Delete Extra Specs",
+ "Delete Extra Spec",
+ "Delete Extra Specs",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Extra Spec",
- u"Deleted Extra Specs",
+ "Deleted Extra Spec",
+ "Deleted Extra Specs",
count
)
diff --git a/openstack_dashboard/dashboards/admin/volume_types/extras/tests.py b/openstack_dashboard/dashboards/admin/volume_types/extras/tests.py
index caf038bfa..42c8cff74 100644
--- a/openstack_dashboard/dashboards/admin/volume_types/extras/tests.py
+++ b/openstack_dashboard/dashboards/admin/volume_types/extras/tests.py
@@ -65,8 +65,8 @@ class VolTypeExtrasTests(test.BaseAdminViewTests):
'horizon:admin:volume_types:extras:index',
args=[vol_type.id])
- data = {'key': u'k1',
- 'value': u'v1'}
+ data = {'key': 'k1',
+ 'value': 'v1'}
self.mock_volume_type_extra_set.return_value = None
resp = self.client.post(create_url, data)
@@ -103,7 +103,7 @@ class VolTypeExtrasTests(test.BaseAdminViewTests):
index_url = reverse('horizon:admin:volume_types:extras:index',
args=[vol_type.id])
- data = {'value': u'v1'}
+ data = {'value': 'v1'}
extras = {key: data['value']}
self.mock_volume_type_extra_get.return_value = extras
diff --git a/openstack_dashboard/dashboards/admin/volume_types/forms.py b/openstack_dashboard/dashboards/admin/volume_types/forms.py
index b306d8dc0..c73777b12 100644
--- a/openstack_dashboard/dashboards/admin/volume_types/forms.py
+++ b/openstack_dashboard/dashboards/admin/volume_types/forms.py
@@ -112,7 +112,7 @@ class CreateVolumeTypeEncryption(forms.SelfHandlingForm):
def handle(self, request, data):
try:
# Set Cipher to None if empty
- if data['cipher'] == u'':
+ if data['cipher'] == '':
data['cipher'] = None
volume_type_id = data.pop('volume_type_id')
@@ -138,7 +138,7 @@ class UpdateVolumeTypeEncryption(CreateVolumeTypeEncryption):
def handle(self, request, data):
try:
# Set Cipher to None if empty
- if data['cipher'] == u'':
+ if data['cipher'] == '':
data['cipher'] = None
volume_type_id = data.pop('volume_type_id')
diff --git a/openstack_dashboard/dashboards/admin/volume_types/qos_specs/tables.py b/openstack_dashboard/dashboards/admin/volume_types/qos_specs/tables.py
index edd60dab0..6164a175a 100644
--- a/openstack_dashboard/dashboards/admin/volume_types/qos_specs/tables.py
+++ b/openstack_dashboard/dashboards/admin/volume_types/qos_specs/tables.py
@@ -38,16 +38,16 @@ class SpecDeleteKeyValuePair(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Spec",
- u"Delete Specs",
+ "Delete Spec",
+ "Delete Specs",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Spec",
- u"Deleted Specs",
+ "Deleted Spec",
+ "Deleted Specs",
count
)
diff --git a/openstack_dashboard/dashboards/admin/volume_types/tables.py b/openstack_dashboard/dashboards/admin/volume_types/tables.py
index d530fc38a..85dda38f0 100644
--- a/openstack_dashboard/dashboards/admin/volume_types/tables.py
+++ b/openstack_dashboard/dashboards/admin/volume_types/tables.py
@@ -75,16 +75,16 @@ class DeleteVolumeType(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Volume Type",
- u"Delete Volume Types",
+ "Delete Volume Type",
+ "Delete Volume Types",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Volume Type",
- u"Deleted Volume Types",
+ "Deleted Volume Type",
+ "Deleted Volume Types",
count
)
policy_rules = (("volume", "volume_extension:types_manage"),)
@@ -126,16 +126,16 @@ class DeleteVolumeTypeEncryption(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Encryption",
- u"Delete Encryptions",
+ "Delete Encryption",
+ "Delete Encryptions",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Encryption",
- u"Deleted Encryptions",
+ "Deleted Encryption",
+ "Deleted Encryptions",
count
)
@@ -293,16 +293,16 @@ class DeleteQosSpecs(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete QoS Spec",
- u"Delete QoS Specs",
+ "Delete QoS Spec",
+ "Delete QoS Specs",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted QoS Spec",
- u"Deleted QoS Specs",
+ "Deleted QoS Spec",
+ "Deleted QoS Specs",
count
)
policy_rules = (("volume", "volume_extension:types_manage"),)
diff --git a/openstack_dashboard/dashboards/admin/volume_types/tests.py b/openstack_dashboard/dashboards/admin/volume_types/tests.py
index fb6a734e2..24114e66b 100644
--- a/openstack_dashboard/dashboards/admin/volume_types/tests.py
+++ b/openstack_dashboard/dashboards/admin/volume_types/tests.py
@@ -170,13 +170,13 @@ class VolumeTypeTests(test.BaseAdminViewTests):
def test_create_volume_type_encryption(self):
volume_type1 = self.cinder_volume_types.list()[0]
volume_type2 = self.cinder_volume_types.list()[1]
- volume_type1.id = u'1'
- volume_type2.id = u'2'
+ volume_type1.id = '1'
+ volume_type2.id = '2'
volume_type_list = [volume_type1, volume_type2]
- formData = {'name': u'An Encrypted Volume Type',
- 'provider': u'a-provider',
- 'control_location': u'front-end',
- 'cipher': u'a-cipher',
+ formData = {'name': 'An Encrypted Volume Type',
+ 'provider': 'a-provider',
+ 'control_location': 'front-end',
+ 'cipher': 'a-cipher',
'key_size': 512,
'volume_type_id': volume_type1.id}
@@ -194,9 +194,9 @@ class VolumeTypeTests(test.BaseAdminViewTests):
self.mock_volume_type_list.assert_called_once_with(
test.IsHttpRequest())
expected = {
- 'provider': u'a-provider',
- 'control_location': u'front-end',
- 'cipher': u'a-cipher',
+ 'provider': 'a-provider',
+ 'control_location': 'front-end',
+ 'cipher': 'a-cipher',
'key_size': 512,
}
self.mock_volume_encryption_type_create.assert_called_once_with(
@@ -208,7 +208,7 @@ class VolumeTypeTests(test.BaseAdminViewTests):
'volume_type_list',)})
def test_type_encryption_detail_view_unencrypted(self):
volume_type1 = self.cinder_volume_types.list()[0]
- volume_type1.id = u'1'
+ volume_type1.id = '1'
volume_type_list = [volume_type1]
vol_unenc_type = self.cinder_volume_encryption_types.list()[2]
@@ -235,7 +235,7 @@ class VolumeTypeTests(test.BaseAdminViewTests):
'volume_type_list',)})
def test_type_encryption_detail_view_encrypted(self):
volume_type = self.cinder_volume_types.first()
- volume_type.id = u'1'
+ volume_type.id = '1'
volume_type.name = "An Encrypted Volume Name"
volume_type_list = [volume_type]
vol_enc_type = self.cinder_volume_encryption_types.list()[0]
@@ -274,7 +274,7 @@ class VolumeTypeTests(test.BaseAdminViewTests):
'volume_encryption_type_delete',)})
def test_delete_volume_type_encryption(self):
volume_type = self.cinder_volume_types.first()
- volume_type.id = u'1'
+ volume_type.id = '1'
formData = {'action': 'volume_types__delete_encryption__%s' %
volume_type.id}
encryption_list = (self.cinder_volume_encryption_types.list()[0],
@@ -307,12 +307,12 @@ class VolumeTypeTests(test.BaseAdminViewTests):
'volume_type_list')})
def test_update_volume_type_encryption(self):
volume_type = self.cinder_volume_types.first()
- volume_type.id = u'1'
+ volume_type.id = '1'
volume_type_list = [volume_type]
- formData = {'name': u'An Encrypted Volume Type',
- 'provider': u'a-provider',
- 'control_location': u'front-end',
- 'cipher': u'a-cipher',
+ formData = {'name': 'An Encrypted Volume Type',
+ 'provider': 'a-provider',
+ 'control_location': 'front-end',
+ 'cipher': 'a-cipher',
'key_size': 256,
'volume_type_id': volume_type.id}
vol_enc_type = self.cinder_volume_encryption_types.list()[0]
@@ -335,9 +335,9 @@ class VolumeTypeTests(test.BaseAdminViewTests):
self.mock_volume_type_list.assert_called_once_with(
test.IsHttpRequest())
expected = {
- 'provider': u'a-provider',
- 'control_location': u'front-end',
- 'cipher': u'a-cipher',
+ 'provider': 'a-provider',
+ 'control_location': 'front-end',
+ 'cipher': 'a-cipher',
'key_size': 256,
}
self.mock_volume_encryption_type_update.assert_called_once_with(
@@ -352,9 +352,9 @@ class VolumeTypeTests(test.BaseAdminViewTests):
api.keystone: ('tenant_list',)})
def _test_edit_volume_type_access(self, exception=False):
volume_type = self.cinder_volume_types.list()[2]
- volume_type.id = u'1'
+ volume_type.id = '1'
type_access = self.cinder_type_access.list()
- formData = {'member': [u'3'],
+ formData = {'member': ['3'],
'volume_type_id': volume_type.id}
self.mock_tenant_list.return_value = [self.tenants.list(), False]
@@ -379,9 +379,9 @@ class VolumeTypeTests(test.BaseAdminViewTests):
self.mock_volume_type_access_list.assert_called_once_with(
test.IsHttpRequest(), volume_type.id)
self.mock_volume_type_add_project_access.assert_called_once_with(
- test.IsHttpRequest(), volume_type.id, u'3')
+ test.IsHttpRequest(), volume_type.id, '3')
self.mock_volume_type_remove_project_access.assert_called_once_with(
- test.IsHttpRequest(), volume_type.id, u'1')
+ test.IsHttpRequest(), volume_type.id, '1')
def test_edit_volume_type_access(self):
self._test_edit_volume_type_access()
diff --git a/openstack_dashboard/dashboards/admin/volumes/tests.py b/openstack_dashboard/dashboards/admin/volumes/tests.py
index 26af3f32b..b3338ea35 100644
--- a/openstack_dashboard/dashboards/admin/volumes/tests.py
+++ b/openstack_dashboard/dashboards/admin/volumes/tests.py
@@ -209,11 +209,11 @@ class VolumeTests(test.BaseAdminViewTests):
api.cinder: ['extension_supported', 'availability_zone_list',
'volume_type_list', 'volume_manage']})
def test_manage_volume(self):
- metadata = {'key': u'k1',
- 'value': u'v1'}
+ metadata = {'key': 'k1',
+ 'value': 'v1'}
form_data = {'host': 'host-1',
'identifier': 'vol-1',
- 'id_type': u'source-name',
+ 'id_type': 'source-name',
'name': 'name-1',
'description': 'manage a volume',
'volume_type': 'vol_type_1',
diff --git a/openstack_dashboard/dashboards/identity/domains/tables.py b/openstack_dashboard/dashboards/identity/domains/tables.py
index 242481f0c..bd885a695 100644
--- a/openstack_dashboard/dashboards/identity/domains/tables.py
+++ b/openstack_dashboard/dashboards/identity/domains/tables.py
@@ -92,16 +92,16 @@ class DeleteDomainsAction(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Domain",
- u"Delete Domains",
+ "Delete Domain",
+ "Delete Domains",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Domain",
- u"Deleted Domains",
+ "Deleted Domain",
+ "Deleted Domains",
count
)
@@ -126,16 +126,16 @@ class DisableDomainsAction(tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Disable Domain",
- u"Disable Domains",
+ "Disable Domain",
+ "Disable Domains",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Disabled Domain",
- u"Disabled Domains",
+ "Disabled Domain",
+ "Disabled Domains",
count
)
@@ -166,16 +166,16 @@ class EnableDomainsAction(tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Enable Domain",
- u"Enable Domains",
+ "Enable Domain",
+ "Enable Domains",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Enabled Domain",
- u"Enabled Domains",
+ "Enabled Domain",
+ "Enabled Domains",
count
)
diff --git a/openstack_dashboard/dashboards/identity/groups/tables.py b/openstack_dashboard/dashboards/identity/groups/tables.py
index 5899afeb8..fd171d4b3 100644
--- a/openstack_dashboard/dashboards/identity/groups/tables.py
+++ b/openstack_dashboard/dashboards/identity/groups/tables.py
@@ -63,16 +63,16 @@ class DeleteGroupsAction(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Group",
- u"Delete Groups",
+ "Delete Group",
+ "Delete Groups",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Group",
- u"Deleted Groups",
+ "Deleted Group",
+ "Deleted Groups",
count
)
@@ -131,16 +131,16 @@ class RemoveMembers(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Remove User",
- u"Remove Users",
+ "Remove User",
+ "Remove Users",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Removed User",
- u"Removed Users",
+ "Removed User",
+ "Removed Users",
count
)
@@ -207,16 +207,16 @@ class AddMembers(tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Add User",
- u"Add Users",
+ "Add User",
+ "Add Users",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Added User",
- u"Added Users",
+ "Added User",
+ "Added Users",
count
)
diff --git a/openstack_dashboard/dashboards/identity/identity_providers/protocols/tables.py b/openstack_dashboard/dashboards/identity/identity_providers/protocols/tables.py
index 15e5d1e3b..9e6a70cbf 100644
--- a/openstack_dashboard/dashboards/identity/identity_providers/protocols/tables.py
+++ b/openstack_dashboard/dashboards/identity/identity_providers/protocols/tables.py
@@ -38,16 +38,16 @@ class RemoveProtocol(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Protocol",
- u"Delete Protocols",
+ "Delete Protocol",
+ "Delete Protocols",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Protocol",
- u"Deleted Protocols",
+ "Deleted Protocol",
+ "Deleted Protocols",
count
)
diff --git a/openstack_dashboard/dashboards/identity/identity_providers/tables.py b/openstack_dashboard/dashboards/identity/identity_providers/tables.py
index b25ba8b3c..e0e1f4c3e 100644
--- a/openstack_dashboard/dashboards/identity/identity_providers/tables.py
+++ b/openstack_dashboard/dashboards/identity/identity_providers/tables.py
@@ -51,16 +51,16 @@ class DeleteIdPsAction(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Unregister Identity Provider",
- u"Unregister Identity Providers",
+ "Unregister Identity Provider",
+ "Unregister Identity Providers",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Unregistered Identity Provider",
- u"Unregistered Identity Providers",
+ "Unregistered Identity Provider",
+ "Unregistered Identity Providers",
count
)
policy_rules = (("identity", "identity:delete_identity_provider"),)
diff --git a/openstack_dashboard/dashboards/identity/mappings/tables.py b/openstack_dashboard/dashboards/identity/mappings/tables.py
index 9c22285d6..bc9ce2fb9 100644
--- a/openstack_dashboard/dashboards/identity/mappings/tables.py
+++ b/openstack_dashboard/dashboards/identity/mappings/tables.py
@@ -44,16 +44,16 @@ class DeleteMappingsAction(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Mapping",
- u"Delete Mappings",
+ "Delete Mapping",
+ "Delete Mappings",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Mapping",
- u"Deleted Mappings",
+ "Deleted Mapping",
+ "Deleted Mappings",
count
)
policy_rules = (("identity", "identity:delete_mapping"),)
diff --git a/openstack_dashboard/dashboards/identity/projects/tables.py b/openstack_dashboard/dashboards/identity/projects/tables.py
index 0d10526c5..277ed232e 100644
--- a/openstack_dashboard/dashboards/identity/projects/tables.py
+++ b/openstack_dashboard/dashboards/identity/projects/tables.py
@@ -160,16 +160,16 @@ class DeleteTenantsAction(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Project",
- u"Delete Projects",
+ "Delete Project",
+ "Delete Projects",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Project",
- u"Deleted Projects",
+ "Deleted Project",
+ "Deleted Projects",
count
)
diff --git a/openstack_dashboard/dashboards/identity/roles/tables.py b/openstack_dashboard/dashboards/identity/roles/tables.py
index 6e7c6d354..0eb81d4cd 100644
--- a/openstack_dashboard/dashboards/identity/roles/tables.py
+++ b/openstack_dashboard/dashboards/identity/roles/tables.py
@@ -48,16 +48,16 @@ class DeleteRolesAction(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Role",
- u"Delete Roles",
+ "Delete Role",
+ "Delete Roles",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Role",
- u"Deleted Roles",
+ "Deleted Role",
+ "Deleted Roles",
count
)
policy_rules = (("identity", "identity:delete_role"),)
diff --git a/openstack_dashboard/dashboards/identity/users/tables.py b/openstack_dashboard/dashboards/identity/users/tables.py
index d3345c01c..a2b9ba8bd 100644
--- a/openstack_dashboard/dashboards/identity/users/tables.py
+++ b/openstack_dashboard/dashboards/identity/users/tables.py
@@ -76,13 +76,13 @@ class ToggleEnabled(policy.PolicyTargetMixin, tables.BatchAction):
def action_present(count):
return (
ungettext_lazy(
- u"Enable User",
- u"Enable Users",
+ "Enable User",
+ "Enable Users",
count
),
ungettext_lazy(
- u"Disable User",
- u"Disable Users",
+ "Disable User",
+ "Disable Users",
count
),
)
@@ -91,13 +91,13 @@ class ToggleEnabled(policy.PolicyTargetMixin, tables.BatchAction):
def action_past(count):
return (
ungettext_lazy(
- u"Enabled User",
- u"Enabled Users",
+ "Enabled User",
+ "Enabled Users",
count
),
ungettext_lazy(
- u"Disabled User",
- u"Disabled Users",
+ "Disabled User",
+ "Disabled Users",
count
),
)
@@ -134,16 +134,16 @@ class DeleteUsersAction(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete User",
- u"Delete Users",
+ "Delete User",
+ "Delete Users",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted User",
- u"Deleted Users",
+ "Deleted User",
+ "Deleted Users",
count
)
policy_rules = (("identity", "identity:delete_user"),)
diff --git a/openstack_dashboard/dashboards/identity/users/tests.py b/openstack_dashboard/dashboards/identity/users/tests.py
index ebd532a24..232cad62f 100644
--- a/openstack_dashboard/dashboards/identity/users/tests.py
+++ b/openstack_dashboard/dashboards/identity/users/tests.py
@@ -855,8 +855,8 @@ class UsersViewTests(test.BaseAdminViewTests):
res = self.client.post(USERS_INDEX_URL, formData, follow=True)
self.assertEqual(list(res.context['messages'])[0].message,
- u'You are not allowed to disable user: '
- u'test_user')
+ 'You are not allowed to disable user: '
+ 'test_user')
self.assert_mock_multiple_calls_with_same_arguments(
self.mock_get_effective_domain_id, 2,
@@ -889,8 +889,8 @@ class UsersViewTests(test.BaseAdminViewTests):
res = self.client.post(USERS_INDEX_URL, formData, follow=True)
self.assertEqual(list(res.context['messages'])[0].message,
- u'You are not allowed to disable user: '
- u'test_user')
+ 'You are not allowed to disable user: '
+ 'test_user')
self.assert_mock_multiple_calls_with_same_arguments(
self.mock_get_effective_domain_id, 2,
@@ -919,7 +919,7 @@ class UsersViewTests(test.BaseAdminViewTests):
res = self.client.post(USERS_INDEX_URL, formData, follow=True)
self.assertEqual(list(res.context['messages'])[0].message,
- u'You are not allowed to delete user: %s'
+ 'You are not allowed to delete user: %s'
% self.request.user.username)
self.assert_mock_multiple_calls_with_same_arguments(
@@ -953,7 +953,7 @@ class UsersViewTests(test.BaseAdminViewTests):
res = self.client.post(USERS_INDEX_URL, formData, follow=True)
self.assertEqual(list(res.context['messages'])[0].message,
- u'You are not allowed to delete user: %s'
+ 'You are not allowed to delete user: %s'
% self.request.user.username)
self.assert_mock_multiple_calls_with_same_arguments(
diff --git a/openstack_dashboard/dashboards/project/api_access/tests.py b/openstack_dashboard/dashboards/project/api_access/tests.py
index 865d63f0c..66d570999 100644
--- a/openstack_dashboard/dashboards/project/api_access/tests.py
+++ b/openstack_dashboard/dashboards/project/api_access/tests.py
@@ -132,7 +132,7 @@ class ASCIITenantNameRCTests(test.TestCase):
class UnicodeTenantNameRCTests(test.TestCase):
- TENANT_NAME = u'\u043f\u0440\u043e\u0435\u043a\u0442'
+ TENANT_NAME = '\u043f\u0440\u043e\u0435\u043a\u0442'
def _setup_user(self, **kwargs):
super()._setup_user(tenant_name=self.TENANT_NAME)
diff --git a/openstack_dashboard/dashboards/project/backups/tables.py b/openstack_dashboard/dashboards/project/backups/tables.py
index 4b7e32e69..e631a5ccb 100644
--- a/openstack_dashboard/dashboards/project/backups/tables.py
+++ b/openstack_dashboard/dashboards/project/backups/tables.py
@@ -69,16 +69,16 @@ class DeleteBackup(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Volume Backup",
- u"Delete Volume Backups",
+ "Delete Volume Backup",
+ "Delete Volume Backups",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Scheduled deletion of Volume Backup",
- u"Scheduled deletion of Volume Backups",
+ "Scheduled deletion of Volume Backup",
+ "Scheduled deletion of Volume Backups",
count
)
@@ -145,17 +145,17 @@ class BackupsTable(tables.DataTable):
)
STATUS_DISPLAY_CHOICES = (
("available", pgettext_lazy("Current status of a Volume Backup",
- u"Available")),
+ "Available")),
("error", pgettext_lazy("Current status of a Volume Backup",
- u"Error")),
+ "Error")),
("creating", pgettext_lazy("Current status of a Volume Backup",
- u"Creating")),
+ "Creating")),
("restoring", pgettext_lazy("Current status of a Volume Backup",
- u"Restoring")),
+ "Restoring")),
("deleting", pgettext_lazy("Current status of a Volume Backup",
- u"Deleting")),
+ "Deleting")),
("error_restoring", pgettext_lazy("Current status of a Volume Backup",
- u"Error Restoring")),
+ "Error Restoring")),
)
name = tables.Column("name",
verbose_name=_("Name"),
diff --git a/openstack_dashboard/dashboards/project/floating_ips/tables.py b/openstack_dashboard/dashboards/project/floating_ips/tables.py
index 765da4dc4..f28d2792e 100644
--- a/openstack_dashboard/dashboards/project/floating_ips/tables.py
+++ b/openstack_dashboard/dashboards/project/floating_ips/tables.py
@@ -75,16 +75,16 @@ class ReleaseIPs(tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Release Floating IP",
- u"Release Floating IPs",
+ "Release Floating IP",
+ "Release Floating IPs",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Released Floating IP",
- u"Released Floating IPs",
+ "Released Floating IP",
+ "Released Floating IPs",
count
)
@@ -158,9 +158,9 @@ def get_instance_link(datum):
STATUS_DISPLAY_CHOICES = (
- ("active", pgettext_lazy("Current status of a Floating IP", u"Active")),
- ("down", pgettext_lazy("Current status of a Floating IP", u"Down")),
- ("error", pgettext_lazy("Current status of a Floating IP", u"Error")),
+ ("active", pgettext_lazy("Current status of a Floating IP", "Active")),
+ ("down", pgettext_lazy("Current status of a Floating IP", "Down")),
+ ("error", pgettext_lazy("Current status of a Floating IP", "Error")),
)
diff --git a/openstack_dashboard/dashboards/project/images/images/tables.py b/openstack_dashboard/dashboards/project/images/images/tables.py
index abac0d098..21bea9a19 100644
--- a/openstack_dashboard/dashboards/project/images/images/tables.py
+++ b/openstack_dashboard/dashboards/project/images/images/tables.py
@@ -90,16 +90,16 @@ class DeleteImage(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Image",
- u"Delete Images",
+ "Delete Image",
+ "Delete Images",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Image",
- u"Deleted Images",
+ "Deleted Image",
+ "Deleted Images",
count
)
@@ -266,10 +266,10 @@ def get_format(image):
if format == "raw":
if getattr(image, "container_format") == 'docker':
return pgettext_lazy("Image format for display in table",
- u"Docker")
+ "Docker")
# Most image formats are untranslated acronyms, but raw is a word
# and should be translated
- return pgettext_lazy("Image format for display in table", u"Raw")
+ return pgettext_lazy("Image format for display in table", "Raw")
return format.upper()
@@ -301,19 +301,19 @@ class ImagesTable(tables.DataTable):
("deactivated", False),
)
STATUS_DISPLAY_CHOICES = (
- ("active", pgettext_lazy("Current status of an Image", u"Active")),
- ("saving", pgettext_lazy("Current status of an Image", u"Saving")),
- ("queued", pgettext_lazy("Current status of an Image", u"Queued")),
+ ("active", pgettext_lazy("Current status of an Image", "Active")),
+ ("saving", pgettext_lazy("Current status of an Image", "Saving")),
+ ("queued", pgettext_lazy("Current status of an Image", "Queued")),
("pending_delete", pgettext_lazy("Current status of an Image",
- u"Pending Delete")),
- ("killed", pgettext_lazy("Current status of an Image", u"Killed")),
- ("deleted", pgettext_lazy("Current status of an Image", u"Deleted")),
+ "Pending Delete")),
+ ("killed", pgettext_lazy("Current status of an Image", "Killed")),
+ ("deleted", pgettext_lazy("Current status of an Image", "Deleted")),
("deactivated", pgettext_lazy("Current status of an Image",
- u"Deactivated")),
+ "Deactivated")),
)
TYPE_CHOICES = (
- ("image", pgettext_lazy("Type of an image", u"Image")),
- ("snapshot", pgettext_lazy("Type of an image", u"Snapshot")),
+ ("image", pgettext_lazy("Type of an image", "Image")),
+ ("snapshot", pgettext_lazy("Type of an image", "Snapshot")),
)
name = tables.WrappingColumn(get_image_name,
link="horizon:project:images:images:detail",
diff --git a/openstack_dashboard/dashboards/project/images/images/tests.py b/openstack_dashboard/dashboards/project/images/images/tests.py
index e383d2390..1a5dca8fa 100644
--- a/openstack_dashboard/dashboards/project/images/images/tests.py
+++ b/openstack_dashboard/dashboards/project/images/images/tests.py
@@ -50,11 +50,11 @@ class CreateImageFormTests(test.ResetImageAPIVersionMixin, test.TestCase):
]
post = {
- 'name': u'Ubuntu 11.10',
- 'source_type': u'file',
- 'description': u'Login with admin/admin',
- 'disk_format': u'qcow2',
- 'architecture': u'x86-64',
+ 'name': 'Ubuntu 11.10',
+ 'source_type': 'file',
+ 'description': 'Login with admin/admin',
+ 'disk_format': 'qcow2',
+ 'architecture': 'x86-64',
'min_disk': 15,
'min_ram': 512,
'is_public': 1}
@@ -91,15 +91,15 @@ class UpdateImageFormTests(test.ResetImageAPIVersionMixin, test.TestCase):
def test_image_update_post_v2(self, mock_image_update, mock_image_get):
image = self.images.first()
data = {
- 'name': u'Ubuntu 11.10',
+ 'name': 'Ubuntu 11.10',
'image_id': str(image.id),
- 'description': u'Login with admin/admin',
- 'source_type': u'url',
- 'image_url': u'http://cloud-images.ubuntu.com/releases/'
- u'oneiric/release/ubuntu-11.10-server-cloudimg'
- u'-amd64-disk1.img',
- 'disk_format': u'qcow2',
- 'architecture': u'x86-64',
+ 'description': 'Login with admin/admin',
+ 'source_type': 'url',
+ 'image_url': 'http://cloud-images.ubuntu.com/releases/'
+ 'oneiric/release/ubuntu-11.10-server-cloudimg'
+ '-amd64-disk1.img',
+ 'disk_format': 'qcow2',
+ 'architecture': 'x86-64',
'min_disk': 15,
'min_ram': 512,
'is_public': False,
@@ -155,10 +155,10 @@ class ImageViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
def test_image_create_post_location_v2(self, mock_schemas_list):
mock_schemas_list.return_value = self.image_schemas.first()
data = {
- 'source_type': u'url',
- 'image_url': u'http://cloud-images.ubuntu.com/releases/'
- u'oneiric/release/ubuntu-11.10-server-cloudimg'
- u'-amd64-disk1.img'}
+ 'source_type': 'url',
+ 'image_url': 'http://cloud-images.ubuntu.com/releases/'
+ 'oneiric/release/ubuntu-11.10-server-cloudimg'
+ '-amd64-disk1.img'}
api_data = {'location': data['image_url']}
self._test_image_create(data, api_data)
@@ -171,7 +171,7 @@ class ImageViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
temp_file.flush()
temp_file.seek(0)
- data = {'source_type': u'file',
+ data = {'source_type': 'file',
'image_file': temp_file}
api_data = {'data': test.IsA(InMemoryUploadedFile)}
@@ -186,7 +186,7 @@ class ImageViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
temp_file.seek(0)
data = {
- 'source_type': u'file',
+ 'source_type': 'file',
'image_file': temp_file,
'kernel_id': '007e7d55-fe1e-4c5c-bf08-44b4a496482e',
'ramdisk_id': '007e7d55-fe1e-4c5c-bf08-44b4a496482a'
@@ -200,10 +200,10 @@ class ImageViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
def _test_image_create(self, extra_form_data, extra_api_data,
mock_image_list, mock_image_create):
data = {
- 'name': u'Ubuntu 11.10',
- 'description': u'Login with admin/admin',
- 'disk_format': u'qcow2',
- 'architecture': u'x86-64',
+ 'name': 'Ubuntu 11.10',
+ 'description': 'Login with admin/admin',
+ 'disk_format': 'qcow2',
+ 'architecture': 'x86-64',
'min_disk': 15,
'min_ram': 512,
'is_public': True,
diff --git a/openstack_dashboard/dashboards/project/images/tests.py b/openstack_dashboard/dashboards/project/images/tests.py
index 52ae38ee9..0de38198e 100644
--- a/openstack_dashboard/dashboards/project/images/tests.py
+++ b/openstack_dashboard/dashboards/project/images/tests.py
@@ -115,23 +115,23 @@ class ImagesAndSnapshotsTests(BaseImagesTestCase):
# first instance - status active, owned
self.assertEqual(len(row_actions), 5)
- self.assertEqual(row_actions[0].verbose_name, u"Launch")
- self.assertEqual(row_actions[1].verbose_name, u"Create Volume")
- self.assertEqual(row_actions[2].verbose_name, u"Edit Image")
- self.assertEqual(row_actions[3].verbose_name, u"Update Metadata")
- self.assertEqual(row_actions[4].verbose_name, u"Delete Image")
+ self.assertEqual(row_actions[0].verbose_name, "Launch")
+ self.assertEqual(row_actions[1].verbose_name, "Create Volume")
+ self.assertEqual(row_actions[2].verbose_name, "Edit Image")
+ self.assertEqual(row_actions[3].verbose_name, "Update Metadata")
+ self.assertEqual(row_actions[4].verbose_name, "Delete Image")
row_actions = snaps.get_row_actions(snaps.data[1])
# second instance - status active, not owned
self.assertEqual(len(row_actions), 2)
- self.assertEqual(row_actions[0].verbose_name, u"Launch")
- self.assertEqual(row_actions[1].verbose_name, u"Create Volume")
+ self.assertEqual(row_actions[0].verbose_name, "Launch")
+ self.assertEqual(row_actions[1].verbose_name, "Create Volume")
row_actions = snaps.get_row_actions(snaps.data[2])
# third instance - status queued, only delete is available
self.assertEqual(len(row_actions), 1)
- self.assertEqual(row_actions[0].verbose_name, u"Delete Image")
+ self.assertEqual(row_actions[0].verbose_name, "Delete Image")
self.assertEqual(str(row_actions[0]), "<DeleteImage: delete>")
self.mock_image_list.assert_called_once_with(test.IsHttpRequest(),
diff --git a/openstack_dashboard/dashboards/project/instances/audit_tables.py b/openstack_dashboard/dashboards/project/instances/audit_tables.py
index 74a59ce14..9d7b99210 100644
--- a/openstack_dashboard/dashboards/project/instances/audit_tables.py
+++ b/openstack_dashboard/dashboards/project/instances/audit_tables.py
@@ -22,27 +22,27 @@ from horizon.utils import filters
class AuditTable(tables.DataTable):
ACTION_DISPLAY_CHOICES = (
- ("create", pgettext_lazy("Action log of an instance", u"Create")),
- ("pause", pgettext_lazy("Action log of an instance", u"Pause")),
- ("unpause", pgettext_lazy("Action log of an instance", u"Unpause")),
- ("rebuild", pgettext_lazy("Action log of an instance", u"Rebuild")),
- ("resize", pgettext_lazy("Action log of an instance", u"Resize")),
+ ("create", pgettext_lazy("Action log of an instance", "Create")),
+ ("pause", pgettext_lazy("Action log of an instance", "Pause")),
+ ("unpause", pgettext_lazy("Action log of an instance", "Unpause")),
+ ("rebuild", pgettext_lazy("Action log of an instance", "Rebuild")),
+ ("resize", pgettext_lazy("Action log of an instance", "Resize")),
("confirmresize", pgettext_lazy("Action log of an instance",
- u"Confirm Resize")),
- ("suspend", pgettext_lazy("Action log of an instance", u"Suspend")),
- ("resume", pgettext_lazy("Action log of an instance", u"Resume")),
- ("reboot", pgettext_lazy("Action log of an instance", u"Reboot")),
- ("stop", pgettext_lazy("Action log of an instance", u"Stop")),
- ("start", pgettext_lazy("Action log of an instance", u"Start")),
- ("shelve", pgettext_lazy("Action log of an instance", u"Shelve")),
- ("unshelve", pgettext_lazy("Action log of an instance", u"Unshelve")),
- ("migrate", pgettext_lazy("Action log of an instance", u"Migrate")),
- ("rescue", pgettext_lazy("Action log of an instance", u"Rescue")),
- ("unrescue", pgettext_lazy("Action log of an instance", u"Unrescue")),
- ("lock", pgettext_lazy("Action log of an instance", u"Lock")),
- ("unlock", pgettext_lazy("Action log of an instance", u"Unlock")),
+ "Confirm Resize")),
+ ("suspend", pgettext_lazy("Action log of an instance", "Suspend")),
+ ("resume", pgettext_lazy("Action log of an instance", "Resume")),
+ ("reboot", pgettext_lazy("Action log of an instance", "Reboot")),
+ ("stop", pgettext_lazy("Action log of an instance", "Stop")),
+ ("start", pgettext_lazy("Action log of an instance", "Start")),
+ ("shelve", pgettext_lazy("Action log of an instance", "Shelve")),
+ ("unshelve", pgettext_lazy("Action log of an instance", "Unshelve")),
+ ("migrate", pgettext_lazy("Action log of an instance", "Migrate")),
+ ("rescue", pgettext_lazy("Action log of an instance", "Rescue")),
+ ("unrescue", pgettext_lazy("Action log of an instance", "Unrescue")),
+ ("lock", pgettext_lazy("Action log of an instance", "Lock")),
+ ("unlock", pgettext_lazy("Action log of an instance", "Unlock")),
("createimage", pgettext_lazy("Action log of an instance",
- u"Create Image")),
+ "Create Image")),
)
request_id = tables.Column('request_id',
diff --git a/openstack_dashboard/dashboards/project/instances/tables.py b/openstack_dashboard/dashboards/project/instances/tables.py
index 40b33589b..674ebdca2 100644
--- a/openstack_dashboard/dashboards/project/instances/tables.py
+++ b/openstack_dashboard/dashboards/project/instances/tables.py
@@ -89,16 +89,16 @@ class DeleteInstance(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Instance",
- u"Delete Instances",
+ "Delete Instance",
+ "Delete Instances",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Scheduled deletion of Instance",
- u"Scheduled deletion of Instances",
+ "Scheduled deletion of Instance",
+ "Scheduled deletion of Instances",
count
)
@@ -123,16 +123,16 @@ class RebootInstance(policy.PolicyTargetMixin, tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Hard Reboot Instance",
- u"Hard Reboot Instances",
+ "Hard Reboot Instance",
+ "Hard Reboot Instances",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Hard Rebooted Instance",
- u"Hard Rebooted Instances",
+ "Hard Rebooted Instance",
+ "Hard Rebooted Instances",
count
)
@@ -153,16 +153,16 @@ class SoftRebootInstance(RebootInstance):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Soft Reboot Instance",
- u"Soft Reboot Instances",
+ "Soft Reboot Instance",
+ "Soft Reboot Instances",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Soft Rebooted Instance",
- u"Soft Rebooted Instances",
+ "Soft Rebooted Instance",
+ "Soft Rebooted Instances",
count
)
@@ -197,16 +197,16 @@ class UnRescueInstance(tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Unrescue Instance",
- u"Unrescue Instances",
+ "Unrescue Instance",
+ "Unrescue Instances",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Unrescued Instance",
- u"Unrescued Instances",
+ "Unrescued Instance",
+ "Unrescued Instances",
count
)
@@ -227,13 +227,13 @@ class TogglePause(tables.BatchAction):
def action_present(count):
return (
ungettext_lazy(
- u"Pause Instance",
- u"Pause Instances",
+ "Pause Instance",
+ "Pause Instances",
count
),
ungettext_lazy(
- u"Resume Instance",
- u"Resume Instances",
+ "Resume Instance",
+ "Resume Instances",
count
),
)
@@ -242,13 +242,13 @@ class TogglePause(tables.BatchAction):
def action_past(count):
return (
ungettext_lazy(
- u"Paused Instance",
- u"Paused Instances",
+ "Paused Instance",
+ "Paused Instances",
count
),
ungettext_lazy(
- u"Resumed Instance",
- u"Resumed Instances",
+ "Resumed Instance",
+ "Resumed Instances",
count
),
)
@@ -291,13 +291,13 @@ class ToggleSuspend(tables.BatchAction):
def action_present(count):
return (
ungettext_lazy(
- u"Suspend Instance",
- u"Suspend Instances",
+ "Suspend Instance",
+ "Suspend Instances",
count
),
ungettext_lazy(
- u"Resume Instance",
- u"Resume Instances",
+ "Resume Instance",
+ "Resume Instances",
count
),
)
@@ -306,13 +306,13 @@ class ToggleSuspend(tables.BatchAction):
def action_past(count):
return (
ungettext_lazy(
- u"Suspended Instance",
- u"Suspended Instances",
+ "Suspended Instance",
+ "Suspended Instances",
count
),
ungettext_lazy(
- u"Resumed Instance",
- u"Resumed Instances",
+ "Resumed Instance",
+ "Resumed Instances",
count
),
)
@@ -355,13 +355,13 @@ class ToggleShelve(tables.BatchAction):
def action_present(count):
return (
ungettext_lazy(
- u"Shelve Instance",
- u"Shelve Instances",
+ "Shelve Instance",
+ "Shelve Instances",
count
),
ungettext_lazy(
- u"Unshelve Instance",
- u"Unshelve Instances",
+ "Unshelve Instance",
+ "Unshelve Instances",
count
),
)
@@ -370,13 +370,13 @@ class ToggleShelve(tables.BatchAction):
def action_past(count):
return (
ungettext_lazy(
- u"Shelved Instance",
- u"Shelved Instances",
+ "Shelved Instance",
+ "Shelved Instances",
count
),
ungettext_lazy(
- u"Unshelved Instance",
- u"Unshelved Instances",
+ "Unshelved Instance",
+ "Unshelved Instances",
count
),
)
@@ -817,16 +817,16 @@ class StartInstance(policy.PolicyTargetMixin, tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Start Instance",
- u"Start Instances",
+ "Start Instance",
+ "Start Instances",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Started Instance",
- u"Started Instances",
+ "Started Instance",
+ "Started Instances",
count
)
@@ -848,8 +848,8 @@ class StopInstance(policy.PolicyTargetMixin, tables.BatchAction):
def action_present(count):
return npgettext_lazy(
"Action to perform (the instance is currently running)",
- u"Shut Off Instance",
- u"Shut Off Instances",
+ "Shut Off Instance",
+ "Shut Off Instances",
count
)
@@ -857,8 +857,8 @@ class StopInstance(policy.PolicyTargetMixin, tables.BatchAction):
def action_past(count):
return npgettext_lazy(
"Past action (the instance is currently already Shut Off)",
- u"Shut Off Instance",
- u"Shut Off Instances",
+ "Shut Off Instance",
+ "Shut Off Instances",
count
)
@@ -878,16 +878,16 @@ class LockInstance(policy.PolicyTargetMixin, tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Lock Instance",
- u"Lock Instances",
+ "Lock Instance",
+ "Lock Instances",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Locked Instance",
- u"Locked Instances",
+ "Locked Instance",
+ "Locked Instances",
count
)
@@ -910,16 +910,16 @@ class UnlockInstance(policy.PolicyTargetMixin, tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Unlock Instance",
- u"Unlock Instances",
+ "Unlock Instance",
+ "Unlock Instances",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Unlocked Instance",
- u"Unlocked Instances",
+ "Unlocked Instance",
+ "Unlocked Instances",
count
)
@@ -1059,131 +1059,131 @@ def get_power_state(instance):
STATUS_DISPLAY_CHOICES = (
- ("deleted", pgettext_lazy("Current status of an Instance", u"Deleted")),
- ("active", pgettext_lazy("Current status of an Instance", u"Active")),
- ("shutoff", pgettext_lazy("Current status of an Instance", u"Shutoff")),
+ ("deleted", pgettext_lazy("Current status of an Instance", "Deleted")),
+ ("active", pgettext_lazy("Current status of an Instance", "Active")),
+ ("shutoff", pgettext_lazy("Current status of an Instance", "Shutoff")),
("suspended", pgettext_lazy("Current status of an Instance",
- u"Suspended")),
- ("paused", pgettext_lazy("Current status of an Instance", u"Paused")),
- ("error", pgettext_lazy("Current status of an Instance", u"Error")),
+ "Suspended")),
+ ("paused", pgettext_lazy("Current status of an Instance", "Paused")),
+ ("error", pgettext_lazy("Current status of an Instance", "Error")),
("resize", pgettext_lazy("Current status of an Instance",
- u"Resize/Migrate")),
+ "Resize/Migrate")),
("verify_resize", pgettext_lazy("Current status of an Instance",
- u"Confirm or Revert Resize/Migrate")),
+ "Confirm or Revert Resize/Migrate")),
("revert_resize", pgettext_lazy(
- "Current status of an Instance", u"Revert Resize/Migrate")),
- ("reboot", pgettext_lazy("Current status of an Instance", u"Reboot")),
+ "Current status of an Instance", "Revert Resize/Migrate")),
+ ("reboot", pgettext_lazy("Current status of an Instance", "Reboot")),
("hard_reboot", pgettext_lazy("Current status of an Instance",
- u"Hard Reboot")),
- ("password", pgettext_lazy("Current status of an Instance", u"Password")),
- ("rebuild", pgettext_lazy("Current status of an Instance", u"Rebuild")),
+ "Hard Reboot")),
+ ("password", pgettext_lazy("Current status of an Instance", "Password")),
+ ("rebuild", pgettext_lazy("Current status of an Instance", "Rebuild")),
("migrating", pgettext_lazy("Current status of an Instance",
- u"Migrating")),
- ("build", pgettext_lazy("Current status of an Instance", u"Build")),
- ("rescue", pgettext_lazy("Current status of an Instance", u"Rescue")),
+ "Migrating")),
+ ("build", pgettext_lazy("Current status of an Instance", "Build")),
+ ("rescue", pgettext_lazy("Current status of an Instance", "Rescue")),
("soft-delete", pgettext_lazy("Current status of an Instance",
- u"Soft Deleted")),
- ("shelved", pgettext_lazy("Current status of an Instance", u"Shelved")),
+ "Soft Deleted")),
+ ("shelved", pgettext_lazy("Current status of an Instance", "Shelved")),
("shelved_offloaded", pgettext_lazy("Current status of an Instance",
- u"Shelved Offloaded")),
+ "Shelved Offloaded")),
# these vm states are used when generating CSV usage summary
- ("building", pgettext_lazy("Current status of an Instance", u"Building")),
- ("stopped", pgettext_lazy("Current status of an Instance", u"Stopped")),
- ("rescued", pgettext_lazy("Current status of an Instance", u"Rescued")),
- ("resized", pgettext_lazy("Current status of an Instance", u"Resized")),
+ ("building", pgettext_lazy("Current status of an Instance", "Building")),
+ ("stopped", pgettext_lazy("Current status of an Instance", "Stopped")),
+ ("rescued", pgettext_lazy("Current status of an Instance", "Rescued")),
+ ("resized", pgettext_lazy("Current status of an Instance", "Resized")),
)
-TASK_DISPLAY_NONE = pgettext_lazy("Task status of an Instance", u"None")
+TASK_DISPLAY_NONE = pgettext_lazy("Task status of an Instance", "None")
# Mapping of task states taken from Nova's nova/compute/task_states.py
TASK_DISPLAY_CHOICES = (
("scheduling", pgettext_lazy("Task status of an Instance",
- u"Scheduling")),
+ "Scheduling")),
("block_device_mapping", pgettext_lazy("Task status of an Instance",
- u"Block Device Mapping")),
+ "Block Device Mapping")),
("networking", pgettext_lazy("Task status of an Instance",
- u"Networking")),
- ("spawning", pgettext_lazy("Task status of an Instance", u"Spawning")),
+ "Networking")),
+ ("spawning", pgettext_lazy("Task status of an Instance", "Spawning")),
("image_snapshot", pgettext_lazy("Task status of an Instance",
- u"Snapshotting")),
+ "Snapshotting")),
("image_snapshot_pending", pgettext_lazy("Task status of an Instance",
- u"Image Snapshot Pending")),
+ "Image Snapshot Pending")),
("image_pending_upload", pgettext_lazy("Task status of an Instance",
- u"Image Pending Upload")),
+ "Image Pending Upload")),
("image_uploading", pgettext_lazy("Task status of an Instance",
- u"Image Uploading")),
+ "Image Uploading")),
("image_backup", pgettext_lazy("Task status of an Instance",
- u"Image Backup")),
+ "Image Backup")),
("updating_password", pgettext_lazy("Task status of an Instance",
- u"Updating Password")),
+ "Updating Password")),
("resize_prep", pgettext_lazy("Task status of an Instance",
- u"Preparing Resize or Migrate")),
+ "Preparing Resize or Migrate")),
("resize_migrating", pgettext_lazy("Task status of an Instance",
- u"Resizing or Migrating")),
+ "Resizing or Migrating")),
("resize_migrated", pgettext_lazy("Task status of an Instance",
- u"Resized or Migrated")),
+ "Resized or Migrated")),
("resize_finish", pgettext_lazy("Task status of an Instance",
- u"Finishing Resize or Migrate")),
+ "Finishing Resize or Migrate")),
("resize_reverting", pgettext_lazy("Task status of an Instance",
- u"Reverting Resize or Migrate")),
+ "Reverting Resize or Migrate")),
("resize_confirming", pgettext_lazy("Task status of an Instance",
- u"Confirming Resize or Migrate")),
- ("rebooting", pgettext_lazy("Task status of an Instance", u"Rebooting")),
+ "Confirming Resize or Migrate")),
+ ("rebooting", pgettext_lazy("Task status of an Instance", "Rebooting")),
("reboot_pending", pgettext_lazy("Task status of an Instance",
- u"Reboot Pending")),
+ "Reboot Pending")),
("reboot_started", pgettext_lazy("Task status of an Instance",
- u"Reboot Started")),
+ "Reboot Started")),
("rebooting_hard", pgettext_lazy("Task status of an Instance",
- u"Hard Rebooting")),
+ "Hard Rebooting")),
("reboot_pending_hard", pgettext_lazy("Task status of an Instance",
- u"Hard Reboot Pending")),
+ "Hard Reboot Pending")),
("reboot_started_hard", pgettext_lazy("Task status of an Instance",
- u"Hard Reboot Started")),
- ("pausing", pgettext_lazy("Task status of an Instance", u"Pausing")),
- ("unpausing", pgettext_lazy("Task status of an Instance", u"Resuming")),
+ "Hard Reboot Started")),
+ ("pausing", pgettext_lazy("Task status of an Instance", "Pausing")),
+ ("unpausing", pgettext_lazy("Task status of an Instance", "Resuming")),
("suspending", pgettext_lazy("Task status of an Instance",
- u"Suspending")),
- ("resuming", pgettext_lazy("Task status of an Instance", u"Resuming")),
+ "Suspending")),
+ ("resuming", pgettext_lazy("Task status of an Instance", "Resuming")),
("powering-off", pgettext_lazy("Task status of an Instance",
- u"Powering Off")),
+ "Powering Off")),
("powering-on", pgettext_lazy("Task status of an Instance",
- u"Powering On")),
- ("rescuing", pgettext_lazy("Task status of an Instance", u"Rescuing")),
+ "Powering On")),
+ ("rescuing", pgettext_lazy("Task status of an Instance", "Rescuing")),
("unrescuing", pgettext_lazy("Task status of an Instance",
- u"Unrescuing")),
+ "Unrescuing")),
("rebuilding", pgettext_lazy("Task status of an Instance",
- u"Rebuilding")),
+ "Rebuilding")),
("rebuild_block_device_mapping", pgettext_lazy(
- "Task status of an Instance", u"Rebuild Block Device Mapping")),
+ "Task status of an Instance", "Rebuild Block Device Mapping")),
("rebuild_spawning", pgettext_lazy("Task status of an Instance",
- u"Rebuild Spawning")),
- ("migrating", pgettext_lazy("Task status of an Instance", u"Migrating")),
- ("deleting", pgettext_lazy("Task status of an Instance", u"Deleting")),
+ "Rebuild Spawning")),
+ ("migrating", pgettext_lazy("Task status of an Instance", "Migrating")),
+ ("deleting", pgettext_lazy("Task status of an Instance", "Deleting")),
("soft-deleting", pgettext_lazy("Task status of an Instance",
- u"Soft Deleting")),
- ("restoring", pgettext_lazy("Task status of an Instance", u"Restoring")),
- ("shelving", pgettext_lazy("Task status of an Instance", u"Shelving")),
+ "Soft Deleting")),
+ ("restoring", pgettext_lazy("Task status of an Instance", "Restoring")),
+ ("shelving", pgettext_lazy("Task status of an Instance", "Shelving")),
("shelving_image_pending_upload", pgettext_lazy(
- "Task status of an Instance", u"Shelving Image Pending Upload")),
+ "Task status of an Instance", "Shelving Image Pending Upload")),
("shelving_image_uploading", pgettext_lazy("Task status of an Instance",
- u"Shelving Image Uploading")),
+ "Shelving Image Uploading")),
("shelving_offloading", pgettext_lazy("Task status of an Instance",
- u"Shelving Offloading")),
+ "Shelving Offloading")),
("unshelving", pgettext_lazy("Task status of an Instance",
- u"Unshelving")),
+ "Unshelving")),
)
POWER_DISPLAY_CHOICES = (
- ("NO STATE", pgettext_lazy("Power state of an Instance", u"No State")),
- ("RUNNING", pgettext_lazy("Power state of an Instance", u"Running")),
- ("BLOCKED", pgettext_lazy("Power state of an Instance", u"Blocked")),
- ("PAUSED", pgettext_lazy("Power state of an Instance", u"Paused")),
- ("SHUTDOWN", pgettext_lazy("Power state of an Instance", u"Shut Down")),
- ("SHUTOFF", pgettext_lazy("Power state of an Instance", u"Shut Off")),
- ("CRASHED", pgettext_lazy("Power state of an Instance", u"Crashed")),
- ("SUSPENDED", pgettext_lazy("Power state of an Instance", u"Suspended")),
- ("FAILED", pgettext_lazy("Power state of an Instance", u"Failed")),
- ("BUILDING", pgettext_lazy("Power state of an Instance", u"Building")),
+ ("NO STATE", pgettext_lazy("Power state of an Instance", "No State")),
+ ("RUNNING", pgettext_lazy("Power state of an Instance", "Running")),
+ ("BLOCKED", pgettext_lazy("Power state of an Instance", "Blocked")),
+ ("PAUSED", pgettext_lazy("Power state of an Instance", "Paused")),
+ ("SHUTDOWN", pgettext_lazy("Power state of an Instance", "Shut Down")),
+ ("SHUTOFF", pgettext_lazy("Power state of an Instance", "Shut Off")),
+ ("CRASHED", pgettext_lazy("Power state of an Instance", "Crashed")),
+ ("SUSPENDED", pgettext_lazy("Power state of an Instance", "Suspended")),
+ ("FAILED", pgettext_lazy("Power state of an Instance", "Failed")),
+ ("BUILDING", pgettext_lazy("Power state of an Instance", "Building")),
)
INSTANCE_FILTER_CHOICES = (
diff --git a/openstack_dashboard/dashboards/project/instances/tests.py b/openstack_dashboard/dashboards/project/instances/tests.py
index dc5da6753..6ad04a529 100644
--- a/openstack_dashboard/dashboards/project/instances/tests.py
+++ b/openstack_dashboard/dashboards/project/instances/tests.py
@@ -2523,8 +2523,8 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
nics=nics,
availability_zone=avail_zone.zoneName,
instance_count=helpers.IsA(int),
- admin_pass=u'',
- disk_config=u'AUTO',
+ admin_pass='',
+ disk_config='AUTO',
config_drive=True,
scheduler_hints=scheduler_hints)
self.mock_tenant_quota_usages.assert_called_once_with(
@@ -2556,13 +2556,13 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
sec_group = self.security_groups.first()
avail_zone = self.availability_zones.first()
customization_script = 'user data'
- device_name = u'vda'
+ device_name = 'vda'
volume_choice = "%s:vol" % volume.id
volume_source_id = volume.id.split(':')[0]
block_device_mapping = None
block_device_mapping_2 = [
- {'device_name': u'vda',
+ {'device_name': 'vda',
'source_type': 'volume',
'destination_type': 'volume',
'delete_on_termination': False,
@@ -2634,8 +2634,8 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
nics=nics,
availability_zone=avail_zone.zoneName,
instance_count=helpers.IsA(int),
- admin_pass=u'',
- disk_config=u'AUTO',
+ admin_pass='',
+ disk_config='AUTO',
config_drive=True,
scheduler_hints={})
self.mock_tenant_quota_usages.assert_called_once_with(
@@ -2667,7 +2667,7 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
sec_group = self.security_groups.first()
avail_zone = self.availability_zones.first()
customization_script = 'user data'
- device_name = u'vda'
+ device_name = 'vda'
volume_choice = "%s:vol" % volume.id
block_device_mapping = [
{'device_name': device_name,
@@ -2749,7 +2749,7 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
nics=nics,
availability_zone=avail_zone.zoneName,
instance_count=helpers.IsA(int),
- admin_pass=u'',
+ admin_pass='',
disk_config='MANUAL',
config_drive=True,
scheduler_hints={})
@@ -2856,13 +2856,13 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
sec_group = self.security_groups.first()
avail_zone = self.availability_zones.first()
customization_script = 'user data'
- device_name = u'vda'
+ device_name = 'vda'
snapshot_choice = "%s:snap" % snapshot.id
snapshot_source_id = snapshot.id.split(':')[0]
block_device_mapping = None
block_device_mapping_2 = [
- {'device_name': u'vda',
+ {'device_name': 'vda',
'source_type': 'snapshot',
'destination_type': 'volume',
'delete_on_termination': 0,
@@ -2936,8 +2936,8 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
nics=nics,
availability_zone=avail_zone.zoneName,
instance_count=helpers.IsA(int),
- admin_pass=u'',
- disk_config=u'AUTO',
+ admin_pass='',
+ disk_config='AUTO',
config_drive=True,
scheduler_hints={})
self.mock_tenant_quota_usages.assert_called_once_with(
@@ -3208,7 +3208,7 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
sec_group = self.security_groups.first()
avail_zone = self.availability_zones.first()
customization_script = 'user data'
- device_name = u'vda'
+ device_name = 'vda'
volume_choice = "%s:vol" % volume.id
quota_usages = self.quota_usages.first()
@@ -3287,7 +3287,7 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
sec_group = self.security_groups.first()
avail_zone = self.availability_zones.first()
customization_script = 'user data'
- device_name = u'vda'
+ device_name = 'vda'
volume_choice = "%s:vol" % volume.id
quota_usages = self.quota_usages.first()
if resource == 'both':
@@ -3386,7 +3386,7 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
sec_group = self.security_groups.first()
avail_zone = self.availability_zones.first()
customization_script = 'user data'
- device_name = u'vda'
+ device_name = 'vda'
volume_choice = "%s:vol" % volume.id
quota_usages = self.quota_usages.first()
@@ -3630,7 +3630,7 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
OPENSTACK_HYPERVISOR_FEATURES={'can_set_mount_point': True},)
def test_launch_form_instance_device_name_showed(self):
self._test_launch_form_instance_show_device_name(
- u'vda', widgets.TextInput, {
+ 'vda', widgets.TextInput, {
'name': 'device_name', 'value': 'vda',
'attrs': {'id': 'id_device_name'}}
)
@@ -3639,7 +3639,7 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
OPENSTACK_HYPERVISOR_FEATURES={'can_set_mount_point': False})
def test_launch_form_instance_device_name_hidden(self):
self._test_launch_form_instance_show_device_name(
- u'', widgets.HiddenInput, {
+ '', widgets.HiddenInput, {
'name': 'device_name', 'value': '',
'attrs': {'id': 'id_device_name'}}
)
@@ -3664,7 +3664,7 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
sec_group = self.security_groups.first()
avail_zone = self.availability_zones.first()
customization_script = 'user data'
- device_name = u'vda'
+ device_name = 'vda'
quota_usages = self.quota_usages.first()
quota_usages['cores']['available'] = 2000
if avail_volumes is not None:
@@ -3906,7 +3906,7 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
avail_zone = self.availability_zones.first()
customization_script = 'user data'
nics = [{'net-id': self.networks.first().id, 'v4-fixed-ip': ''}]
- device_name = u''
+ device_name = ''
quota_usages = self.quota_usages.first()
quota_usages['cores']['available'] = 2000
device_mapping_v2 = [{'device_name': None, # device_name must be None
@@ -3980,9 +3980,9 @@ class InstanceLaunchInstanceTests(InstanceTestBase,
nics=nics,
availability_zone=avail_zone.zoneName,
instance_count=helpers.IsA(int),
- admin_pass=u'',
+ admin_pass='',
config_drive=False,
- disk_config=u'',
+ disk_config='',
scheduler_hints={})
@@ -4261,7 +4261,7 @@ class InstanceTests2(InstanceTestBase, InstanceTableTestMixin):
self.mock_server_group_list.return_value = self.server_groups.list()
self.mock_server_resize.return_value = []
- res = self._instance_resize_post(server.id, flavor.id, u'AUTO')
+ res = self._instance_resize_post(server.id, flavor.id, 'AUTO')
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@@ -4352,7 +4352,7 @@ class InstanceTests2(InstanceTestBase, InstanceTableTestMixin):
def test_rebuild_instance_post_with_password(self):
server = self.servers.first()
image = self.images.first()
- password = u'testpass'
+ password = 'testpass'
self.mock_server_get.return_value = server
self._mock_glance_image_list_detailed(self.images.list())
@@ -4406,8 +4406,8 @@ class InstanceTests2(InstanceTestBase, InstanceTableTestMixin):
def test_rebuild_instance_post_password_do_not_match(self):
server = self.servers.first()
image = self.images.first()
- pass1 = u'somepass'
- pass2 = u'notsomepass'
+ pass1 = 'somepass'
+ pass2 = 'notsomepass'
self.mock_server_get.return_value = server
self._mock_glance_image_list_detailed(self.images.list())
@@ -4439,9 +4439,9 @@ class InstanceTests2(InstanceTestBase, InstanceTableTestMixin):
self.mock_is_feature_available.return_value = False
res = self._instance_rebuild_post(server.id, image.id,
- password=u'',
- confirm_password=u'',
- disk_config=u'AUTO')
+ password='',
+ confirm_password='',
+ disk_config='AUTO')
self.assertNoFormErrors(res)
self.assertRedirectsNoFollow(res, INDEX_URL)
@@ -4489,7 +4489,7 @@ class InstanceTests2(InstanceTestBase, InstanceTableTestMixin):
def test_rebuild_instance_post_api_exception(self):
server = self.servers.first()
image = self.images.first()
- password = u'testpass'
+ password = 'testpass'
self.mock_server_get.return_value = server
self._mock_glance_image_list_detailed(self.images.list())
@@ -4711,7 +4711,7 @@ class InstanceTests2(InstanceTestBase, InstanceTableTestMixin):
def test_rescue_instance_post(self):
server = self.servers.first()
image = self.images.first()
- password = u'testpass'
+ password = 'testpass'
self._mock_glance_image_list_detailed(self.images.list())
self.mock_server_rescue.return_value = []
res = self._server_rescue_post(server.id, image.id,
@@ -4839,10 +4839,10 @@ class InstanceAjaxTests(helpers.TestCase):
messages = json.loads(res['X-Horizon-Messages'])
self.assertEqual(len(messages), 1)
# (Pdb) messages
- # [[u'error', u'Failed to launch instance "server_1": \
+ # [['error', 'Failed to launch instance "server_1": \
# There is not enough capacity for this flavor in the \
# selected availability zone. Try again later or select \
- # a different availability zone.', u'']]
+ # a different availability zone.', '']]
self.assertEqual(messages[0][0], 'error')
self.assertTrue(messages[0][1].startswith('Failed'))
diff --git a/openstack_dashboard/dashboards/project/key_pairs/tables.py b/openstack_dashboard/dashboards/project/key_pairs/tables.py
index 2d4f0bb37..86a71571a 100644
--- a/openstack_dashboard/dashboards/project/key_pairs/tables.py
+++ b/openstack_dashboard/dashboards/project/key_pairs/tables.py
@@ -34,16 +34,16 @@ class DeleteKeyPairs(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Key Pair",
- u"Delete Key Pairs",
+ "Delete Key Pair",
+ "Delete Key Pairs",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Key Pair",
- u"Deleted Key Pairs",
+ "Deleted Key Pair",
+ "Deleted Key Pairs",
count
)
diff --git a/openstack_dashboard/dashboards/project/networks/ports/extensions/allowed_address_pairs/tables.py b/openstack_dashboard/dashboards/project/networks/ports/extensions/allowed_address_pairs/tables.py
index b305c89f4..6f0502cec 100644
--- a/openstack_dashboard/dashboards/project/networks/ports/extensions/allowed_address_pairs/tables.py
+++ b/openstack_dashboard/dashboards/project/networks/ports/extensions/allowed_address_pairs/tables.py
@@ -56,16 +56,16 @@ class DeleteAllowedAddressPair(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete",
- u"Delete",
+ "Delete",
+ "Delete",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted address pair",
- u"Deleted address pairs",
+ "Deleted address pair",
+ "Deleted address pairs",
count
)
diff --git a/openstack_dashboard/dashboards/project/networks/ports/tables.py b/openstack_dashboard/dashboards/project/networks/ports/tables.py
index 6120a9d62..f172f1c07 100644
--- a/openstack_dashboard/dashboards/project/networks/ports/tables.py
+++ b/openstack_dashboard/dashboards/project/networks/ports/tables.py
@@ -61,15 +61,15 @@ class UpdatePort(policy.PolicyTargetMixin, tables.LinkAction):
DISPLAY_CHOICES = (
- ("UP", pgettext_lazy("Admin state of a Port", u"UP")),
- ("DOWN", pgettext_lazy("Admin state of a Port", u"DOWN")),
+ ("UP", pgettext_lazy("Admin state of a Port", "UP")),
+ ("DOWN", pgettext_lazy("Admin state of a Port", "DOWN")),
)
STATUS_DISPLAY_CHOICES = (
- ("ACTIVE", pgettext_lazy("status of a network port", u"Active")),
- ("DOWN", pgettext_lazy("status of a network port", u"Down")),
- ("ERROR", pgettext_lazy("status of a network port", u"Error")),
- ("BUILD", pgettext_lazy("status of a network port", u"Build")),
+ ("ACTIVE", pgettext_lazy("status of a network port", "Active")),
+ ("DOWN", pgettext_lazy("status of a network port", "Down")),
+ ("ERROR", pgettext_lazy("status of a network port", "Error")),
+ ("BUILD", pgettext_lazy("status of a network port", "Build")),
)
@@ -107,16 +107,16 @@ class DeletePort(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Port",
- u"Delete Ports",
+ "Delete Port",
+ "Delete Ports",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Port",
- u"Deleted Ports",
+ "Deleted Port",
+ "Deleted Ports",
count
)
diff --git a/openstack_dashboard/dashboards/project/networks/subnets/tables.py b/openstack_dashboard/dashboards/project/networks/subnets/tables.py
index 3a6769eca..d0be38141 100644
--- a/openstack_dashboard/dashboards/project/networks/subnets/tables.py
+++ b/openstack_dashboard/dashboards/project/networks/subnets/tables.py
@@ -60,16 +60,16 @@ class DeleteSubnet(SubnetPolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Subnet",
- u"Delete Subnets",
+ "Delete Subnet",
+ "Delete Subnets",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Subnet",
- u"Deleted Subnets",
+ "Deleted Subnet",
+ "Deleted Subnets",
count
)
diff --git a/openstack_dashboard/dashboards/project/networks/tables.py b/openstack_dashboard/dashboards/project/networks/tables.py
index a98cb1633..cdf63e8a4 100644
--- a/openstack_dashboard/dashboards/project/networks/tables.py
+++ b/openstack_dashboard/dashboards/project/networks/tables.py
@@ -39,16 +39,16 @@ class DeleteNetwork(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Network",
- u"Delete Networks",
+ "Delete Network",
+ "Delete Networks",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Network",
- u"Deleted Networks",
+ "Deleted Network",
+ "Deleted Networks",
count
)
@@ -157,14 +157,14 @@ def get_network_link(network):
DISPLAY_CHOICES = (
- ("up", pgettext_lazy("Admin state of a Network", u"UP")),
- ("down", pgettext_lazy("Admin state of a Network", u"DOWN")),
+ ("up", pgettext_lazy("Admin state of a Network", "UP")),
+ ("down", pgettext_lazy("Admin state of a Network", "DOWN")),
)
STATUS_DISPLAY_CHOICES = (
- ("active", pgettext_lazy("Current status of a Network", u"Active")),
- ("build", pgettext_lazy("Current status of a Network", u"Build")),
- ("down", pgettext_lazy("Current status of a Network", u"Down")),
- ("error", pgettext_lazy("Current status of a Network", u"Error")),
+ ("active", pgettext_lazy("Current status of a Network", "Active")),
+ ("build", pgettext_lazy("Current status of a Network", "Build")),
+ ("down", pgettext_lazy("Current status of a Network", "Down")),
+ ("error", pgettext_lazy("Current status of a Network", "Error")),
)
diff --git a/openstack_dashboard/dashboards/project/networks/tests.py b/openstack_dashboard/dashboards/project/networks/tests.py
index 227611792..dc53c9b99 100644
--- a/openstack_dashboard/dashboards/project/networks/tests.py
+++ b/openstack_dashboard/dashboards/project/networks/tests.py
@@ -454,6 +454,38 @@ class NetworkTests(test.TestCase, NetworkStubMixin):
@test.create_mocks({api.neutron: ('network_create',
'is_extension_supported',
'subnetpool_list')})
+ def test_network_create_post_with_mtu(self):
+ network = self.networks.first()
+ params = {'name': network.name,
+ 'admin_state_up': network.admin_state_up,
+ 'shared': False,
+ 'mtu': 1450}
+ self._stub_is_extension_supported({'network_availability_zone': False,
+ 'subnet_allocation': True})
+ self.mock_subnetpool_list.return_value = self.subnetpools.list()
+ self.mock_network_create.return_value = network
+
+ form_data = {'net_name': network.name,
+ 'admin_state': network.admin_state_up,
+ 'shared': False,
+ 'with_subnet': False,
+ 'mtu': 1450}
+ form_data.update(form_data_no_subnet())
+ url = reverse('horizon:project:networks:create')
+ res = self.client.post(url, form_data)
+
+ self.assertNoFormErrors(res)
+ self.assertRedirectsNoFollow(res, INDEX_URL)
+
+ self.mock_subnetpool_list.assert_called_once_with(test.IsHttpRequest())
+ self.mock_network_create.assert_called_once_with(
+ test.IsHttpRequest(), **params)
+ self._check_is_extension_supported({'network_availability_zone': 1,
+ 'subnet_allocation': 1})
+
+ @test.create_mocks({api.neutron: ('network_create',
+ 'is_extension_supported',
+ 'subnetpool_list')})
def test_network_create_post_with_shared(self):
network = self.networks.first()
params = {'name': network.name,
diff --git a/openstack_dashboard/dashboards/project/networks/workflows.py b/openstack_dashboard/dashboards/project/networks/workflows.py
index f3554495d..5d0e7ad2e 100644
--- a/openstack_dashboard/dashboards/project/networks/workflows.py
+++ b/openstack_dashboard/dashboards/project/networks/workflows.py
@@ -65,6 +65,11 @@ class CreateNetworkInfoAction(workflows.Action):
help_text=_("Availability zones where the DHCP agents may be "
"scheduled. Leaving this unset is equivalent to "
"selecting all availability zones"))
+ mtu = forms.IntegerField(
+ label=_("MTU"), required=False, min_value=68,
+ help_text=_("Maximum Transmission Unit. "
+ "Minimum is 68 bytes for the IPv4 subnet "
+ "and 1280 bytes for the IPv6 subnet."))
def __init__(self, request, *args, **kwargs):
super().__init__(request, *args, **kwargs)
@@ -94,7 +99,7 @@ class CreateNetworkInfoAction(workflows.Action):
class CreateNetworkInfo(workflows.Step):
action_class = CreateNetworkInfoAction
contributes = ("net_name", "admin_state", "with_subnet", "shared",
- "az_hints")
+ "az_hints", "mtu")
class CreateSubnetInfoAction(workflows.Action):
@@ -485,6 +490,8 @@ class CreateNetwork(workflows.Workflow):
'shared': data['shared']}
if 'az_hints' in data and data['az_hints']:
params['availability_zone_hints'] = data['az_hints']
+ if data['mtu']:
+ params['mtu'] = data['mtu']
network = api.neutron.network_create(request, **params)
self.context['net_id'] = network.id
LOG.debug('Network "%s" was successfully created.',
diff --git a/openstack_dashboard/dashboards/project/routers/extensions/extraroutes/tables.py b/openstack_dashboard/dashboards/project/routers/extensions/extraroutes/tables.py
index 9dff61dfe..77d32aed0 100644
--- a/openstack_dashboard/dashboards/project/routers/extensions/extraroutes/tables.py
+++ b/openstack_dashboard/dashboards/project/routers/extensions/extraroutes/tables.py
@@ -40,16 +40,16 @@ class RemoveRouterRoute(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Static Route",
- u"Delete Static Routes",
+ "Delete Static Route",
+ "Delete Static Routes",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Static Route",
- u"Deleted Static Routes",
+ "Deleted Static Route",
+ "Deleted Static Routes",
count
)
failure_url = 'horizon:project:routers:detail'
diff --git a/openstack_dashboard/dashboards/project/routers/ports/tables.py b/openstack_dashboard/dashboards/project/routers/ports/tables.py
index 744c039d7..d07bf7976 100644
--- a/openstack_dashboard/dashboards/project/routers/ports/tables.py
+++ b/openstack_dashboard/dashboards/project/routers/ports/tables.py
@@ -53,16 +53,16 @@ class RemoveInterface(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Interface",
- u"Delete Interfaces",
+ "Delete Interface",
+ "Delete Interfaces",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Interface",
- u"Deleted Interfaces",
+ "Deleted Interface",
+ "Deleted Interfaces",
count
)
@@ -95,15 +95,15 @@ class RemoveInterface(policy.PolicyTargetMixin, tables.DeleteAction):
DISPLAY_CHOICES = (
- ("UP", pgettext_lazy("Admin state of a Port", u"UP")),
- ("DOWN", pgettext_lazy("Admin state of a Port", u"DOWN")),
+ ("UP", pgettext_lazy("Admin state of a Port", "UP")),
+ ("DOWN", pgettext_lazy("Admin state of a Port", "DOWN")),
)
STATUS_DISPLAY_CHOICES = (
- ("ACTIVE", pgettext_lazy("current status of port", u"Active")),
- ("BUILD", pgettext_lazy("current status of port", u"Build")),
- ("DOWN", pgettext_lazy("current status of port", u"Down")),
- ("ERROR", pgettext_lazy("current status of port", u"Error")),
- ("N/A", pgettext_lazy("current status of port", u"N/A")),
+ ("ACTIVE", pgettext_lazy("current status of port", "Active")),
+ ("BUILD", pgettext_lazy("current status of port", "Build")),
+ ("DOWN", pgettext_lazy("current status of port", "Down")),
+ ("ERROR", pgettext_lazy("current status of port", "Error")),
+ ("N/A", pgettext_lazy("current status of port", "N/A")),
)
diff --git a/openstack_dashboard/dashboards/project/routers/tables.py b/openstack_dashboard/dashboards/project/routers/tables.py
index 5a9631550..32631b5c1 100644
--- a/openstack_dashboard/dashboards/project/routers/tables.py
+++ b/openstack_dashboard/dashboards/project/routers/tables.py
@@ -37,16 +37,16 @@ class DeleteRouter(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Router",
- u"Delete Routers",
+ "Delete Router",
+ "Delete Routers",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Router",
- u"Deleted Routers",
+ "Deleted Router",
+ "Deleted Routers",
count
)
@@ -128,16 +128,16 @@ class ClearGateway(policy.PolicyTargetMixin, tables.BatchAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Clear Gateway",
- u"Clear Gateways",
+ "Clear Gateway",
+ "Clear Gateways",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Cleared Gateway",
- u"Cleared Gateways",
+ "Cleared Gateway",
+ "Cleared Gateways",
count
)
@@ -202,12 +202,12 @@ class RoutersFilterAction(tables.FilterAction):
STATUS_DISPLAY_CHOICES = (
- ("active", pgettext_lazy("current status of router", u"Active")),
- ("error", pgettext_lazy("current status of router", u"Error")),
+ ("active", pgettext_lazy("current status of router", "Active")),
+ ("error", pgettext_lazy("current status of router", "Error")),
)
ADMIN_STATE_DISPLAY_CHOICES = (
- ("up", pgettext_lazy("Admin state of a Router", u"UP")),
- ("down", pgettext_lazy("Admin state of a Router", u"DOWN")),
+ ("up", pgettext_lazy("Admin state of a Router", "UP")),
+ ("down", pgettext_lazy("Admin state of a Router", "DOWN")),
)
diff --git a/openstack_dashboard/dashboards/project/routers/views.py b/openstack_dashboard/dashboards/project/routers/views.py
index 614211ac3..946ea3774 100644
--- a/openstack_dashboard/dashboards/project/routers/views.py
+++ b/openstack_dashboard/dashboards/project/routers/views.py
@@ -98,7 +98,7 @@ class IndexView(tables.DataTableView):
# Translators: The usage is "<UUID of ext_net> (Not Found)"
gateway_info['network'] = pgettext_lazy(
'External network not found',
- u'%s (Not Found)') % ext_net_id
+ '%s (Not Found)') % ext_net_id
class DetailView(tabs.TabbedTableView):
diff --git a/openstack_dashboard/dashboards/project/security_groups/tables.py b/openstack_dashboard/dashboards/project/security_groups/tables.py
index f8c3a8aed..7064571da 100644
--- a/openstack_dashboard/dashboards/project/security_groups/tables.py
+++ b/openstack_dashboard/dashboards/project/security_groups/tables.py
@@ -36,16 +36,16 @@ class DeleteGroup(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Security Group",
- u"Delete Security Groups",
+ "Delete Security Group",
+ "Delete Security Groups",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Security Group",
- u"Deleted Security Groups",
+ "Deleted Security Group",
+ "Deleted Security Groups",
count
)
@@ -152,16 +152,16 @@ class DeleteRule(tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Rule",
- u"Delete Rules",
+ "Delete Rule",
+ "Delete Rules",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Deleted Rule",
- u"Deleted Rules",
+ "Deleted Rule",
+ "Deleted Rules",
count
)
@@ -195,7 +195,7 @@ def get_port_range(rule):
ip_proto = rule.ip_protocol
if rule.from_port == rule.to_port:
return check_rule_template(rule.from_port, ip_proto)
- return (u"%(from)s - %(to)s" %
+ return ("%(from)s - %(to)s" %
{'from': check_rule_template(rule.from_port, ip_proto),
'to': check_rule_template(rule.to_port, ip_proto)})
@@ -221,7 +221,7 @@ def check_rule_template(port, ip_proto):
str(port) == rule['to_port'] and
ip_proto == rule['ip_protocol'])]
if templ_rule:
- return u"%(from_port)s (%(name)s)" % templ_rule[0]
+ return "%(from_port)s (%(name)s)" % templ_rule[0]
return port
diff --git a/openstack_dashboard/dashboards/project/security_groups/tests.py b/openstack_dashboard/dashboards/project/security_groups/tests.py
index 90694d0ed..8ab3c3d13 100644
--- a/openstack_dashboard/dashboards/project/security_groups/tests.py
+++ b/openstack_dashboard/dashboards/project/security_groups/tests.py
@@ -189,7 +189,7 @@ class SecurityGroupsViewTests(test.TestCase):
kwargs.get('from_port', int(rule.from_port)),
kwargs.get('to_port', int(rule.to_port)),
kwargs.get('cidr', rule.ip_range['cidr']),
- kwargs.get('security_group', u'%s' % sec_group.id),
+ kwargs.get('security_group', '%s' % sec_group.id),
**extra_params)
self.mock_security_group_list.assert_called_once_with(
test.IsHttpRequest())
@@ -510,7 +510,7 @@ class SecurityGroupsViewTests(test.TestCase):
int(rule.from_port),
int(rule.to_port),
None,
- u'%s' % sec_group.id,
+ '%s' % sec_group.id,
description='')
self.mock_security_group_list.assert_called_once_with(
test.IsHttpRequest())
@@ -549,7 +549,7 @@ class SecurityGroupsViewTests(test.TestCase):
int(rule.from_port),
int(rule.to_port),
None,
- u'%s' % sec_group.id,
+ '%s' % sec_group.id,
description='')
self.mock_security_group_list.assert_called_once_with(
test.IsHttpRequest())
@@ -971,7 +971,7 @@ class SecurityGroupsViewTests(test.TestCase):
int(rule.from_port),
int(rule.to_port),
None,
- u'%s' % sec_group.id,
+ '%s' % sec_group.id,
description='')
self.mock_security_group_list.assert_called_once_with(
test.IsHttpRequest())
diff --git a/openstack_dashboard/dashboards/project/snapshots/tables.py b/openstack_dashboard/dashboards/project/snapshots/tables.py
index d841d3196..9fd925954 100644
--- a/openstack_dashboard/dashboards/project/snapshots/tables.py
+++ b/openstack_dashboard/dashboards/project/snapshots/tables.py
@@ -76,16 +76,16 @@ class DeleteVolumeSnapshot(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Volume Snapshot",
- u"Delete Volume Snapshots",
+ "Delete Volume Snapshot",
+ "Delete Volume Snapshots",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Scheduled deletion of Volume Snapshot",
- u"Scheduled deletion of Volume Snapshots",
+ "Scheduled deletion of Volume Snapshot",
+ "Scheduled deletion of Volume Snapshots",
count
)
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.js
index 824cb9d31..f1c23a83e 100644
--- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.js
+++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.js
@@ -60,6 +60,7 @@
ctrl.createKeyPair = createKeyPair;
ctrl.importKeyPair = importKeyPair;
ctrl.setKeypairRequired = setKeypairRequired;
+ ctrl.setAdminPasswordChange = setAdminPasswordChange;
ctrl.tableData = {
available: launchInstanceModel.keypairs,
@@ -105,6 +106,10 @@
'OPENSTACK_HYPERVISOR_FEATURES.requires_keypair'
).then(setKeypairRequired);
+ ctrl.setAdminPassword = false;
+
+ ctrl.adminPassConfError = gettext('Passwords do not match.');
+
//////////
/**
@@ -200,6 +205,11 @@
function setKeypairRequired(setting) {
ctrl.isKeypairRequired = setting ? 1 : 0;
}
+
+ function setAdminPasswordChange() {
+ ctrl.confirmedAdminPassword = null;
+ launchInstanceModel.newInstanceSpec.admin_pass = null;
+ }
}
})();
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.spec.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.spec.js
index 6e2e06244..c277f1470 100644
--- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.spec.js
+++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.spec.js
@@ -19,7 +19,7 @@
describe('Launch Instance Keypair Step', function() {
describe('LaunchInstanceKeypairController', function() {
- var ctrl, q, settings;
+ var ctrl, q, settings, model;
var $uibModal = { open: angular.noop };
var toastServiceMock = {add: angular.noop};
@@ -28,6 +28,7 @@
beforeEach(function() {
settings = {
OPENSTACK_HYPERVISOR_FEATURES: {
+ can_set_password: true,
requires_keypair: false
}
};
@@ -48,7 +49,7 @@
beforeEach(inject(function($controller, $q) {
q = $q;
- var model = {
+ model = {
newInstanceSpec: {
key_pair: ['key1']
},
@@ -189,6 +190,17 @@
ctrl.setKeypairRequired(false);
expect(ctrl.isKeypairRequired).toBe(0);
});
+
+ it('defines setAdminPassword', function() {
+ expect(ctrl.setAdminPassword).toBeDefined();
+ expect(ctrl.setAdminPassword).toBe(false);
+ });
+
+ it('clears password fields when setAdminPassword is changed', function() {
+ ctrl.setAdminPasswordChange();
+ expect(ctrl.confirmedAdminPassword).toBe(null);
+ expect(model.newInstanceSpec.admin_pass).toBe(null);
+ });
});
});
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.html b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.html
index 4271bcaac..040fa408e 100644
--- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.html
+++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.html
@@ -25,4 +25,56 @@
table="ctrl">
</hz-dynamic-table>
</transfer-table> <!-- End Key Pairs Table -->
+
+ <settings-service required-settings='["OPENSTACK_HYPERVISOR_FEATURES.can_set_password"]'>
+ <div class="admin-password">
+ <div class="themable-checkbox">
+ <input ng-change="ctrl.setAdminPasswordChange()"
+ ng-model="ctrl.setAdminPassword"
+ type="checkbox"
+ id="setPassword">
+ <label for="setPassword">
+ <span translate>Set admin password</span>
+ </label>
+ </div>
+
+ <div class="container">
+ <div class="row">
+
+ <div ng-if="ctrl.setAdminPassword" ng-form="adminPasswordForm">
+ <div class="col-sm-3">
+ <div class="form-group">
+ <label class="control-label" translate for="adminPassword">Password</label>
+ <input class="form-control"
+ id="adminPassword"
+ name="adminPassword"
+ ng-model="model.newInstanceSpec.admin_pass"
+ type="password">
+ </div>
+ </div>
+
+ <div class="col-sm-3">
+ <div class="form-group"
+ ng-class="{ 'has-error':
+ adminPasswordForm['confirmPassword'].$invalid &&
+ adminPasswordForm['confirmPassword'].$dirty }">
+ <label class="control-label" translate for="confirmPassword">Confirm password</label>
+ <input id="confirmPassword"
+ name="confirmPassword"
+ class="form-control"
+ hz-password-match="model.newInstanceSpec.admin_pass"
+ ng-model="ctrl.confirmedAdminPassword"
+ type="password">
+ <span class="help-block"
+ ng-show="adminPasswordForm['confirmPassword'].$invalid &&
+ adminPasswordForm['confirmPassword'].$dirty">
+ {$ ctrl.adminPassConfError $}
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </settings-service> <!-- End Admin Password Form-->
</div> <!-- End Controller -->
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.spec.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.spec.js
index 8e33169d8..21f34cd60 100644
--- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.spec.js
+++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.spec.js
@@ -1041,7 +1041,7 @@
expect(finalSpec.key_pair).toBeUndefined();
});
- it('stips null properties', function() {
+ it('strips null properties', function() {
model.newInstanceSpec.useless = null;
var finalSpec = model.createInstance();
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/port-details.html b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/port-details.html
new file mode 100644
index 000000000..ae8d82997
--- /dev/null
+++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/port-details.html
@@ -0,0 +1,18 @@
+<div ng-controller="LaunchInstanceNetworkPortController as ctrl">
+ <dl class="port-details dl-horizontal">
+ <dt translate>ID</dt>
+ <dd>{$ item.id $}</dd>
+ <dt translate>Project ID</dt>
+ <dd>{$ item.tenant_id $}</dd>
+ <dt translate>Network ID</dt>
+ <dd>{$ item.network_id $}</dd>
+ <dt translate>Network</dt>
+ <dd>{$ item.network_name $}</dd>
+ <dt translate>VNIC type</dt>
+ <dd>{$ item['binding:vnic_type'] | decode:ctrl.vnicTypes $}</dd>
+ <div ng-if="item['binding:host_id']">
+ <dt translate>Host ID</dt>
+ <dd>{$ item['binding:host_id'] $}</dd>
+ </div>
+ </dl>
+</div>
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.controller.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.controller.js
index 1a4cc4dd0..462a8573e 100644
--- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.controller.js
+++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.controller.js
@@ -27,11 +27,12 @@
.controller('LaunchInstanceNetworkPortController', LaunchInstanceNetworkPortController);
LaunchInstanceNetworkPortController.$inject = [
- '$scope',
+ 'horizon.dashboard.project.workflow.launch-instance.basePath',
+ 'launchInstanceModel',
'horizon.framework.widgets.action-list.button-tooltip.row-warning.service'
];
- function LaunchInstanceNetworkPortController($scope, tooltipService) {
+ function LaunchInstanceNetworkPortController(basePath, launchInstanceModel, tooltipService) {
var ctrl = this;
ctrl.portStatuses = {
@@ -53,19 +54,78 @@
'virtio-forwarder': gettext('Virtio Forwarder')
};
+ function getPortStatus(status) {
+ return ctrl.portStatuses[status];
+ }
+
+ function getPortAdminState(state) {
+ return ctrl.portAdminStates[state];
+ }
+
+ var portsArr = launchInstanceModel.ports;
+ ctrl.portsObj = {};
+ ctrl.isPortsObjGenerated = false;
+
+ function getNameOrID(id) {
+ ctrl.portsObj = ctrl.getPortsObj(portsArr);
+ var port = ctrl.portsObj[id];
+ return ctrl.nameOrID(port);
+ }
+
+ function getPortFixedIPs(id) {
+ var port = ctrl.portsObj[id];
+ var fixedIPs = '';
+ for (var ip in port.subnet_names) {
+ fixedIPs += ip + ' on subnet ' + port.subnet_names[ip] + '\n';
+ }
+ return fixedIPs;
+ }
+
ctrl.tableDataMulti = {
- available: $scope.model.ports,
- allocated: $scope.model.newInstanceSpec.ports,
- displayedAvailable: [],
- displayedAllocated: []
+ available: launchInstanceModel.ports,
+ allocated: launchInstanceModel.newInstanceSpec.ports
};
- ctrl.tableLimits = {
- maxAllocation: -1
+ ctrl.availableTableConfig = {
+ selectAll: false,
+ trackId: 'id',
+ detailsTemplateUrl: basePath + 'networkports/port-details.html',
+ columns: [
+ {id: 'id', title: gettext('Name'), priority: 1, filters: [getNameOrID]},
+ {id: 'id', title: gettext('IP'), priority: 2, filters: [getPortFixedIPs]},
+ {id: 'admin_state', title: gettext('Admin State'), priority: 2,
+ filters: [getPortAdminState]},
+ {id: 'status', title: gettext('Status'), priority: 2, filters: [getPortStatus]}
+ ]
};
+ ctrl.allocatedTableConfig = angular.copy(ctrl.availableTableConfig);
+
ctrl.tableHelpText = {
- allocHelpText: gettext('Select ports from those listed below.')
+ allocHelpText: gettext('Select ports from those listed below.'),
+ availHelpText: gettext('Select one or more ports')
+ };
+
+ ctrl.filterFacets = [{
+ label: gettext('Name'),
+ name: 'name',
+ singleton: true
+ }, {
+ label: gettext('ID'),
+ name: 'id',
+ singleton: true
+ }, {
+ label: gettext('Admin State'),
+ name: 'admin_state',
+ singleton: true
+ }, {
+ label: gettext('Status'),
+ name: 'status',
+ singleton: true
+ }];
+
+ ctrl.tableLimits = {
+ maxAllocation: -1
};
ctrl.tooltipModel = tooltipService;
@@ -73,5 +133,17 @@
ctrl.nameOrID = function nameOrId(data) {
return angular.isDefined(data.name) && data.name !== '' ? data.name : data.id;
};
+
+ ctrl.getPortsObj = function (data) {
+ if (!ctrl.isPortsObjGenerated) {
+ var ports = data.reduce(function (acc, cur) {
+ acc[cur.id] = cur;
+ return acc;
+ }, {});
+ ctrl.isPortsObjGenerated = true;
+ return ports;
+ }
+ else { return ctrl.portsObj; }
+ };
}
})();
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.html b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.html
index a315416b5..9cce91105 100644
--- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.html
+++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.html
@@ -3,160 +3,13 @@
Ports provide extra communication channels to your instances. You can select ports instead of networks or a mix of both.
</p>
- <transfer-table tr-model="ctrl.tableDataMulti" help-text="ctrl.tableHelpText" limits="ctrl.tableLimits">
- <allocated>
- <table st-table="ctrl.tableDataMulti.displayedAllocated" st-safe-src="ctrl.tableDataMulti.allocated"
- hz-table class="table table-striped table-rsp table-detail">
- <thead>
- <tr>
- <th class="reorder"></th>
- <th class="expander"></th>
- <th st-sort="name" st-sort-default class="rsp-p1" translate>Name</th>
- <th class="rsp-p2" translate>IP</th>
- <th st-sort="admin_state" class="rsp-p1" translate>Admin State</th>
- <th st-sort="status" class="rsp-p1" translate>Status</th>
- <th class="actions_column"></th>
- </tr>
- </thead>
- <tbody>
- <tr ng-if="ctrl.tableDataMulti.allocated.length === 0">
- <td colspan="7">
- <div class="no-rows-help" translate>
- Select an item from Available items below
- </div>
- </td>
- </tr>
- <tr ng-repeat-start="item in ctrl.tableDataMulti.displayedAllocated track by item.id"
- lr-drag-data="ctrl.tableDataMulti.displayedAllocated" lr-drag-src="reorder"
- lr-drop-target="reorder" lr-drop-success="trCtrl.updateAllocated(e, item, collection)">
- <td class="reorder">
- <span class="fa fa-sort" title="{$ 'Re-order items using drag and drop'|translate $}"></span>
- {$ $index + 1 $}
- </td>
- <td class="expander">
- <span class="fa fa-chevron-right" hz-expand-detail
- title="{$ 'Click to see more details'|translate $}"></span>
- </td>
- <td class="rsp-p1 word-break">{$ ctrl.nameOrID(item) $}</td>
- <td class="rsp-p2">
- <div ng-repeat="ip in item.fixed_ips">
- <span translate
- translate-params-address="ip.ip_address"
- translate-params-subnet="item.subnet_names[ip.ip_address]">
- {$ address $} on subnet {$ subnet $}
- </span>
- </div>
- </td>
- <td class="rsp-p1">{$ item.admin_state | decode:ctrl.portAdminStates $}</td>
- <td class="rsp-p1">{$ item.status | decode:ctrl.portStatuses $}</td>
- <td class="actions_column">
- <action-list>
- <action action-classes="'btn btn-default'"
- callback="trCtrl.deallocate" item="item">
- <span class="fa fa-arrow-down"></span>
- </action>
- </action-list>
- </td>
- </tr>
- <tr ng-repeat-end class="detail-row">
- <td colspan="7" class="detail">
- <dl class="dl-horizontal">
- <dt translate>ID</dt>
- <dd>{$ item.id $}</dd>
- <dt translate>Project ID</dt>
- <dd>{$ item.tenant_id $}</dd>
- <dt translate>Network ID</dt>
- <dd>{$ item.network_id $}</dd>
- <dt translate>Network</dt>
- <dd>{$ item.network_name $}</dd>
- <dt translate>VNIC type</dt>
- <dd>{$ item['binding:vnic_type'] | decode:ctrl.vnicTypes $}</dd>
- <div ng-if="item['binding:host_id']">
- <dt translate>Host ID</dt>
- <dd>{$ item['binding:host_id'] $}</dd>
- </div>
- </dl>
- </td>
- </tr>
- </tbody>
- </table>
- </allocated>
-
- <available>
- <table st-table="ctrl.tableDataMulti.displayedAvailable" st-safe-src="ctrl.tableDataMulti.available"
- hz-table class="table table-striped table-rsp table-detail">
- <thead>
- <tr>
- <th class="search-header" colspan="6">
- <hz-search-bar icon-classes="fa-search"></hz-search-bar>
- </th>
- </tr>
- <tr>
- <th class="expander"></th>
- <th st-sort="name" st-sort-default class="rsp-p1" translate>Name</th>
- <th class="rsp-p2" translate>IP</th>
- <th st-sort="admin_state" class="rsp-p1" translate>Admin State</th>
- <th st-sort="status" class="rsp-p1" translate>Status</th>
- <th class="actions_column"></th>
- </tr>
- </thead>
- <tbody>
- <tr ng-if="trCtrl.numAvailable() === 0">
- <td colspan="6">
- <div class="no-rows-help" translate>
- No available items
- </div>
- </td>
- </tr>
- <tr ng-repeat-start="item in ctrl.tableDataMulti.displayedAvailable track by item.id"
- ng-if="!trCtrl.allocatedIds[item.id]">
- <td class="expander">
- <span class="fa fa-chevron-right" hz-expand-detail
- title="{$ 'Click to see more details'|translate $}"></span>
- </td>
- <td class="rsp-p1 word-break">{$ ctrl.nameOrID(item) $}</td>
- <td class="rsp-p2">
- <div ng-repeat="ip in item.fixed_ips">
- <span translate
- translate-params-address="ip.ip_address"
- translate-params-subnet="item.subnet_names[ip.ip_address]">
- {$ address $} on subnet {$ subnet $}
- </span>
- </div>
- </td>
- <td class="rsp-p1">{$ item.admin_state | decode:ctrl.portAdminStates $}</td>
- <td class="rsp-p1">{$ item.status | decode:ctrl.portStatuses $}</td>
- <td class="actions_column">
- <action-list>
- <action action-classes="'btn btn-default'"
- callback="trCtrl.allocate" item="item">
- <span class="fa fa-arrow-up"></span>
- </action>
- </action-list>
- </td>
- </tr>
- <tr ng-repeat-end class="detail-row">
- <td colspan="6" class="detail">
- <dl class="dl-horizontal">
- <dt translate>ID</dt>
- <dd>{$ item.id $}</dd>
- <dt translate>Project ID</dt>
- <dd>{$ item.tenant_id $}</dd>
- <dt translate>Network ID</dt>
- <dd>{$ item.network_id $}</dd>
- <dt translate>Network</dt>
- <dd>{$ item.network_name $}</dd>
- <dt translate>VNIC type</dt>
- <dd>{$ item['binding:vnic_type'] | decode:ctrl.vnicTypes $}</dd>
- <div ng-if="item['binding:host_id']">
- <dt translate>Host ID</dt>
- <dd>{$ item['binding:host_id'] $}</dd>
- </div>
- </dl>
- </td>
- </tr>
- </tbody>
- </table>
- </available>
- </transfer-table>
+ <transfer-table tr-model="ctrl.tableDataMulti" help-text="ctrl.tableHelpText" limits="ctrl.tableLimits" clone-content>
+ <hz-dynamic-table
+ config="$isAvailableTable ? ctrl.availableTableConfig : ctrl.allocatedTableConfig"
+ items="$isAvailableTable ? ($sourceItems | filterAvailable:trCtrl.allocatedIds) : $sourceItems"
+ item-actions="trCtrl.itemActions"
+ filter-facets="$isAvailableTable && ctrl.filterFacets"
+ table="ctrl">
+ </hz-dynamic-table>
+ </transfer-table> <!-- End Network Ports Transfer Table -->
</div>
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.spec.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.spec.js
index 0e25313c2..da5611aa1 100644
--- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.spec.js
+++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.spec.js
@@ -23,20 +23,19 @@
beforeEach(module('horizon.dashboard.project.workflow.launch-instance'));
describe('LaunchInstanceNetworkPortController', function() {
- var scope, ctrl;
+ var ctrl;
+ var port = {name: 'test_name', id: 'test_id'};
beforeEach(inject(function($controller) {
- scope = {
- model: {
- newInstanceSpec: {
- ports: ['port-a']
- },
- ports: ['port-a', 'port-b']
- }
+ var model = {
+ newInstanceSpec: {
+ ports: ['port-a']
+ },
+ ports: ['port-a', 'port-b']
};
- ctrl = $controller('LaunchInstanceNetworkPortController', {
- $scope: scope
- });
+
+ ctrl = $controller('LaunchInstanceNetworkPortController',
+ { launchInstanceModel: model });
}));
it('has correct ports statuses', function() {
@@ -63,25 +62,35 @@
expect(ctrl.tableHelpText.allocHelpText).toBeDefined();
});
- it('nameOrId return the name', function() {
- var obj = {name: 'test_name', id: 'test_id'};
+ it('nameOrID returns the name', function() {
expect(ctrl.nameOrID).toBeDefined();
- expect(ctrl.nameOrID(obj)).toBe('test_name');
+ expect(ctrl.nameOrID(port)).toBe('test_name');
});
- it('nameOrId return the id if the name is missing', function() {
+ it('nameOrID returns the id if the name is missing', function() {
expect(ctrl.nameOrID).toBeDefined();
expect(ctrl.nameOrID({'id': 'testid'})).toBe('testid');
});
+ it('getPortsObj returns generated ports object', function() {
+ expect(ctrl.getPortsObj).toBeDefined();
+ expect(ctrl.isPortsObjGenerated).toBe(false);
+ expect(ctrl.getPortsObj([port])).toEqual({'test_id': port});
+ expect(ctrl.isPortsObjGenerated).toBe(true);
+ });
+
+ it('getPortsObj returns existing ports object', function() {
+ ctrl.portsObj = {'test_id': port};
+ ctrl.isPortsObjGenerated = true;
+ expect(ctrl.getPortsObj).toBeDefined();
+ expect(ctrl.getPortsObj([port])).toEqual({'test_id': port});
+ });
+
it('uses scope to set table data', function() {
expect(ctrl.tableDataMulti).toBeDefined();
expect(ctrl.tableDataMulti.available).toEqual(['port-a', 'port-b']);
expect(ctrl.tableDataMulti.allocated).toEqual(['port-a']);
- expect(ctrl.tableDataMulti.displayedAllocated).toEqual([]);
- expect(ctrl.tableDataMulti.displayedAvailable).toEqual([]);
});
});
-
});
})();
diff --git a/openstack_dashboard/dashboards/project/vg_snapshots/tables.py b/openstack_dashboard/dashboards/project/vg_snapshots/tables.py
index 82767bb61..25923d7c5 100644
--- a/openstack_dashboard/dashboards/project/vg_snapshots/tables.py
+++ b/openstack_dashboard/dashboards/project/vg_snapshots/tables.py
@@ -37,16 +37,16 @@ class DeleteGroupSnapshot(policy.PolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Snapshot",
- u"Delete Snapshots",
+ "Delete Snapshot",
+ "Delete Snapshots",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Scheduled deletion of Snapshot",
- u"Scheduled deletion of Snapshots",
+ "Scheduled deletion of Snapshot",
+ "Scheduled deletion of Snapshots",
count
)
@@ -99,13 +99,13 @@ class GroupSnapshotsTable(tables.DataTable):
STATUS_DISPLAY_CHOICES = (
("available",
pgettext_lazy("Current status of Volume Group Snapshot",
- u"Available")),
+ "Available")),
("in-use",
pgettext_lazy("Current status of Volume Group Snapshot",
- u"In-use")),
+ "In-use")),
("error",
pgettext_lazy("Current status of Volume Group Snapshot",
- u"Error")),
+ "Error")),
)
name = tables.Column("name_or_id",
diff --git a/openstack_dashboard/dashboards/project/volume_groups/tables.py b/openstack_dashboard/dashboards/project/volume_groups/tables.py
index 69b1ebe0e..7cfbf94fd 100644
--- a/openstack_dashboard/dashboards/project/volume_groups/tables.py
+++ b/openstack_dashboard/dashboards/project/volume_groups/tables.py
@@ -139,15 +139,15 @@ class GroupsTable(tables.DataTable):
)
STATUS_DISPLAY_CHOICES = (
("available",
- pgettext_lazy("Current status of Volume Group", u"Available")),
+ pgettext_lazy("Current status of Volume Group", "Available")),
("in-use",
- pgettext_lazy("Current status of Volume Group", u"In-use")),
+ pgettext_lazy("Current status of Volume Group", "In-use")),
("error",
- pgettext_lazy("Current status of Volume Group", u"Error")),
+ pgettext_lazy("Current status of Volume Group", "Error")),
("updating",
- pgettext_lazy("Current status of Volume Group", u"Updating")),
+ pgettext_lazy("Current status of Volume Group", "Updating")),
("deleting",
- pgettext_lazy("Current status of Volume Group", u"Deleting")),
+ pgettext_lazy("Current status of Volume Group", "Deleting")),
)
name = tables.WrappingColumn("name_or_id",
diff --git a/openstack_dashboard/dashboards/project/volumes/forms.py b/openstack_dashboard/dashboards/project/volumes/forms.py
index 6a0cbdb9e..3622201e9 100644
--- a/openstack_dashboard/dashboards/project/volumes/forms.py
+++ b/openstack_dashboard/dashboards/project/volumes/forms.py
@@ -706,7 +706,7 @@ class UploadToImageForm(forms.SelfHandlingForm):
required=False)
force = forms.BooleanField(
label=pgettext_lazy("Force upload volume in in-use status to image",
- u"Force"),
+ "Force"),
widget=forms.CheckboxInput(),
required=False)
diff --git a/openstack_dashboard/dashboards/project/volumes/tables.py b/openstack_dashboard/dashboards/project/volumes/tables.py
index 01e7c03f2..6db77eefe 100644
--- a/openstack_dashboard/dashboards/project/volumes/tables.py
+++ b/openstack_dashboard/dashboards/project/volumes/tables.py
@@ -98,16 +98,16 @@ class DeleteVolume(VolumePolicyTargetMixin, tables.DeleteAction):
@staticmethod
def action_present(count):
return ungettext_lazy(
- u"Delete Volume",
- u"Delete Volumes",
+ "Delete Volume",
+ "Delete Volumes",
count
)
@staticmethod
def action_past(count):
return ungettext_lazy(
- u"Scheduled deletion of Volume",
- u"Scheduled deletion of Volumes",
+ "Scheduled deletion of Volume",
+ "Scheduled deletion of Volumes",
count
)
@@ -467,35 +467,35 @@ class VolumesTableBase(tables.DataTable):
)
STATUS_DISPLAY_CHOICES = (
("available", pgettext_lazy("Current status of a Volume",
- u"Available")),
- ("in-use", pgettext_lazy("Current status of a Volume", u"In-use")),
- ("error", pgettext_lazy("Current status of a Volume", u"Error")),
+ "Available")),
+ ("in-use", pgettext_lazy("Current status of a Volume", "In-use")),
+ ("error", pgettext_lazy("Current status of a Volume", "Error")),
("creating", pgettext_lazy("Current status of a Volume",
- u"Creating")),
+ "Creating")),
("error_extending", pgettext_lazy("Current status of a Volume",
- u"Error Extending")),
+ "Error Extending")),
("extending", pgettext_lazy("Current status of a Volume",
- u"Extending")),
+ "Extending")),
("attaching", pgettext_lazy("Current status of a Volume",
- u"Attaching")),
+ "Attaching")),
("detaching", pgettext_lazy("Current status of a Volume",
- u"Detaching")),
+ "Detaching")),
("deleting", pgettext_lazy("Current status of a Volume",
- u"Deleting")),
+ "Deleting")),
("error_deleting", pgettext_lazy("Current status of a Volume",
- u"Error deleting")),
+ "Error deleting")),
("backing-up", pgettext_lazy("Current status of a Volume",
- u"Backing Up")),
+ "Backing Up")),
("restoring-backup", pgettext_lazy("Current status of a Volume",
- u"Restoring Backup")),
+ "Restoring Backup")),
("error_restoring", pgettext_lazy("Current status of a Volume",
- u"Error Restoring")),
+ "Error Restoring")),
("maintenance", pgettext_lazy("Current status of a Volume",
- u"Maintenance")),
+ "Maintenance")),
("reserved", pgettext_lazy("Current status of a Volume",
- u"Reserved")),
+ "Reserved")),
("awaiting-transfer", pgettext_lazy("Current status of a Volume",
- u"Awaiting Transfer")),
+ "Awaiting Transfer")),
)
name = tables.Column("name",
verbose_name=_("Name"),
@@ -598,8 +598,8 @@ class DetachVolume(tables.BatchAction):
def action_present(count):
return npgettext_lazy(
"Action to perform (the volume is currently attached)",
- u"Detach Volume",
- u"Detach Volumes",
+ "Detach Volume",
+ "Detach Volumes",
count
)
@@ -608,8 +608,8 @@ class DetachVolume(tables.BatchAction):
def action_past(count):
return npgettext_lazy(
"Past action (the volume is currently being detached)",
- u"Detaching Volume",
- u"Detaching Volumes",
+ "Detaching Volume",
+ "Detaching Volumes",
count
)
diff --git a/openstack_dashboard/dashboards/project/volumes/tests.py b/openstack_dashboard/dashboards/project/volumes/tests.py
index ce98a7181..896a4a9d2 100644
--- a/openstack_dashboard/dashboards/project/volumes/tests.py
+++ b/openstack_dashboard/dashboards/project/volumes/tests.py
@@ -229,9 +229,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
volume = self.cinder_volumes.first()
volume_type = self.cinder_volume_types.first()
az = self.cinder_availability_zones.first().zoneName
- formData = {'name': u'A Volume I Am Making',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A Volume I Am Making',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'type': volume_type.name,
'size': 50,
'snapshot_source': '',
@@ -299,8 +299,8 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
volume_type = self.cinder_volume_types.first()
az = self.cinder_availability_zones.first().zoneName
formData = {'name': '',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'type': volume_type.name,
'size': 50,
'snapshot_source': '',
@@ -362,9 +362,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
})
def test_create_volume_dropdown(self):
volume = self.cinder_volumes.first()
- formData = {'name': u'A Volume I Am Making',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A Volume I Am Making',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'size': 50,
'type': '',
'volume_source_type': 'no_source_type',
@@ -428,9 +428,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
def test_create_volume_from_snapshot(self):
volume = self.cinder_volumes.first()
snapshot = self.cinder_volume_snapshots.first()
- formData = {'name': u'A Volume I Am Making',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A Volume I Am Making',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'size': 50,
'type': '',
'snapshot_source': snapshot.id}
@@ -486,9 +486,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
def test_create_volume_from_volume(self):
volume = self.cinder_volumes.first()
- formData = {'name': u'A copy of a volume',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A copy of a volume',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'size': 50,
'type': '',
'volume_source_type': 'volume_source',
@@ -559,9 +559,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
def test_create_volume_from_snapshot_dropdown(self):
volume = self.cinder_volumes.first()
snapshot = self.cinder_volume_snapshots.first()
- formData = {'name': u'A Volume I Am Making',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A Volume I Am Making',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'size': 50,
'type': '',
'volume_source_type': 'snapshot_source',
@@ -625,9 +625,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
})
def test_create_volume_from_snapshot_invalid_size(self):
snapshot = self.cinder_volume_snapshots.first()
- formData = {'name': u'A Volume I Am Making',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A Volume I Am Making',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'size': 20, 'snapshot_source': snapshot.id}
self.mock_volume_type_list.return_value = \
@@ -670,9 +670,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
def test_create_volume_from_image(self):
volume = self.cinder_volumes.first()
image = self.images.first()
- formData = {'name': u'A Volume I Am Making',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A Volume I Am Making',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'size': 40,
'type': '',
'image_source': image.id}
@@ -730,9 +730,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
def test_create_volume_from_image_dropdown(self):
volume = self.cinder_volumes.first()
image = self.images.first()
- formData = {'name': u'A Volume I Am Making',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A Volume I Am Making',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'size': 30,
'type': '',
'volume_source_type': 'image_source',
@@ -798,9 +798,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
})
def test_create_volume_from_image_under_image_size(self):
image = self.images.first()
- formData = {'name': u'A Volume I Am Making',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A Volume I Am Making',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'size': 1, 'image_source': image.id}
self.mock_volume_type_list.return_value = \
@@ -819,8 +819,8 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
formData, follow=True)
self.assertEqual(res.redirect_chain, [])
- msg = (u"The volume size cannot be less than the "
- u"image size (20.0\xa0GB)")
+ msg = ("The volume size cannot be less than the "
+ "image size (20.0\xa0GB)")
self.assertFormError(res, 'form', None, msg)
@@ -844,9 +844,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
'group_list'],
})
def _test_create_volume_from_image_under_image_min_disk_size(self, image):
- formData = {'name': u'A Volume I Am Making',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A Volume I Am Making',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'size': 5, 'image_source': image.id}
self.mock_volume_type_list.return_value = \
@@ -900,9 +900,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
'group_list'],
})
def test_create_volume_gb_used_over_alloted_quota(self):
- formData = {'name': u'This Volume Is Huge!',
- 'description': u'This is a volume that is just too big!',
- 'method': u'CreateForm',
+ formData = {'name': 'This Volume Is Huge!',
+ 'description': 'This is a volume that is just too big!',
+ 'method': 'CreateForm',
'size': 5000}
usage_limit = self.cinder_quota_usages.first()
@@ -929,7 +929,7 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
url = reverse('horizon:project:volumes:create')
res = self.client.post(url, formData)
- expected_error = [u'A volume of 5000GiB cannot be created as you only'
+ expected_error = ['A volume of 5000GiB cannot be created as you only'
' have 20GiB of your quota available.']
self.assertEqual(res.context['form'].errors['__all__'], expected_error)
@@ -960,9 +960,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
'group_list'],
})
def test_create_volume_number_over_alloted_quota(self):
- formData = {'name': u'Too Many...',
- 'description': u'We have no volumes left!',
- 'method': u'CreateForm',
+ formData = {'name': 'Too Many...',
+ 'description': 'We have no volumes left!',
+ 'method': 'CreateForm',
'size': 10}
usage_limit = self.cinder_quota_usages.first()
@@ -990,7 +990,7 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
url = reverse('horizon:project:volumes:create')
res = self.client.post(url, formData)
- expected_error = [u'You are already using all of your available'
+ expected_error = ['You are already using all of your available'
' volumes.']
self.assertEqual(res.context['form'].errors['__all__'], expected_error)
@@ -1022,9 +1022,9 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
volume_type = self.cinder_volume_types.first()
az = self.cinder_availability_zones.first().zoneName
volume_group = self.cinder_groups.list()[0]
- formData = {'name': u'A Volume I Am Making',
- 'description': u'This is a volume I am making for a test.',
- 'method': u'CreateForm',
+ formData = {'name': 'A Volume I Am Making',
+ 'description': 'This is a volume I am making for a test.',
+ 'method': 'CreateForm',
'type': volume_type.name,
'size': 50,
'snapshot_source': '',
@@ -1736,7 +1736,7 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
@mock.patch.object(cinder, 'volume_get')
def test_extend_volume(self, mock_get, mock_extend, mock_quotas):
volume = self.cinder_volumes.first()
- formData = {'name': u'A Volume I Am Making',
+ formData = {'name': 'A Volume I Am Making',
'orig_size': volume.size,
'new_size': 120}
@@ -1760,7 +1760,7 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
@mock.patch.object(cinder, 'volume_get')
def test_extend_volume_with_wrong_size(self, mock_get, mock_quotas):
volume = self.cinder_volumes.first()
- formData = {'name': u'A Volume I Am Making',
+ formData = {'name': 'A Volume I Am Making',
'orig_size': volume.size,
'new_size': 10}
@@ -1895,7 +1895,7 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
usage_limit.tally('gigabytes', 20)
usage_limit.tally('volumes', len(self.cinder_volumes.list()))
- formData = {'name': u'A Volume I Am Making',
+ formData = {'name': 'A Volume I Am Making',
'orig_size': volume.size,
'new_size': 1000}
@@ -1957,7 +1957,7 @@ class VolumeViewTests(test.ResetImageAPIVersionMixin, test.TestCase):
volumes = self.cinder_volumes.list()
volToTransfer = [v for v in volumes if v.status == 'available'][0]
formData = {'volume_id': volToTransfer.id,
- 'name': u'any transfer name'}
+ 'name': 'any transfer name'}
transfer = self.cinder_volume_transfers.first()
mock_transfer_create.return_value = transfer
diff --git a/openstack_dashboard/locale/en_GB/LC_MESSAGES/djangojs.po b/openstack_dashboard/locale/en_GB/LC_MESSAGES/djangojs.po
index 9c55a520d..e5633b5a8 100644
--- a/openstack_dashboard/locale/en_GB/LC_MESSAGES/djangojs.po
+++ b/openstack_dashboard/locale/en_GB/LC_MESSAGES/djangojs.po
@@ -6,15 +6,16 @@
# Andi Chandler <andi@gowling.com>, 2018. #zanata
# Andi Chandler <andi@gowling.com>, 2019. #zanata
# Andi Chandler <andi@gowling.com>, 2020. #zanata
+# Andi Chandler <andi@gowling.com>, 2021. #zanata
msgid ""
msgstr ""
"Project-Id-Version: horizon VERSION\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2020-04-18 22:47+0000\n"
+"POT-Creation-Date: 2021-02-10 01:42+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2020-04-18 09:18+0000\n"
+"PO-Revision-Date: 2021-02-02 04:21+0000\n"
"Last-Translator: Andi Chandler <andi@gowling.com>\n"
"Language-Team: English (United Kingdom)\n"
"Language: en_GB\n"
@@ -2182,6 +2183,9 @@ msgstr[1] "Projects"
msgid "Project ID"
msgstr "Project ID"
+msgid "Project Name"
+msgstr "Project Name"
+
msgid ""
"Project networks are created by users.\n"
" These networks are fully isolated and are project-specific."
diff --git a/openstack_dashboard/locale/id/LC_MESSAGES/djangojs.po b/openstack_dashboard/locale/id/LC_MESSAGES/djangojs.po
index 25fe6f1b8..cac1a6053 100644
--- a/openstack_dashboard/locale/id/LC_MESSAGES/djangojs.po
+++ b/openstack_dashboard/locale/id/LC_MESSAGES/djangojs.po
@@ -4,15 +4,16 @@
# suhartono <cloudsuhartono@gmail.com>, 2018. #zanata
# suhartono <cloudsuhartono@gmail.com>, 2019. #zanata
# suhartono <cloudsuhartono@gmail.com>, 2020. #zanata
+# suhartono <cloudsuhartono@gmail.com>, 2021. #zanata
msgid ""
msgstr ""
"Project-Id-Version: horizon VERSION\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/openstack-i18n/\n"
-"POT-Creation-Date: 2020-04-18 22:47+0000\n"
+"POT-Creation-Date: 2021-02-10 01:42+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2020-04-18 07:40+0000\n"
+"PO-Revision-Date: 2021-01-30 07:33+0000\n"
"Last-Translator: suhartono <cloudsuhartono@gmail.com>\n"
"Language-Team: Indonesian\n"
"Language: id\n"
@@ -2159,6 +2160,9 @@ msgstr[0] "Project (proyek)"
msgid "Project ID"
msgstr "ID proyek"
+msgid "Project Name"
+msgstr "Project Name"
+
msgid ""
"Project networks are created by users.\n"
" These networks are fully isolated and are project-specific."
diff --git a/openstack_dashboard/locale/tr_TR/LC_MESSAGES/django.po b/openstack_dashboard/locale/tr_TR/LC_MESSAGES/django.po
index 59c63b105..74710b2fd 100644
--- a/openstack_dashboard/locale/tr_TR/LC_MESSAGES/django.po
+++ b/openstack_dashboard/locale/tr_TR/LC_MESSAGES/django.po
@@ -7612,7 +7612,7 @@ msgid "up"
msgstr "up"
msgid "vCPUs ="
-msgstr "vCPU'lar ="
+msgstr "vCP'lar ="
msgid "yes"
msgstr "evet"
diff --git a/openstack_dashboard/management/commands/update_catalog.py b/openstack_dashboard/management/commands/update_catalog.py
index 1b2ac2505..48f57bfd8 100644
--- a/openstack_dashboard/management/commands/update_catalog.py
+++ b/openstack_dashboard/management/commands/update_catalog.py
@@ -33,12 +33,12 @@ MODULES = ['openstack_dashboard', 'horizon', 'openstack_auth']
def translate(segment):
- prefix = u""
+ prefix = ""
# When the id starts with a newline the mo compiler enforces that
# the translated message must also start with a newline. Make
# sure that doesn't get broken when prepending the bracket.
if segment.startswith('\n'):
- prefix = u"\n"
+ prefix = "\n"
orig_size = len(segment)
# Add extra expansion space based on recommendation from
# http://www-01.ibm.com/software/globalization/guidelines/a3.html
@@ -54,7 +54,7 @@ def translate(segment):
multiplier = 0.3
extra_length = int(max(0, (orig_size * multiplier) - 10))
extra_chars = "~" * extra_length
- return u"{0}[~{1}~您好яшçあ{2}]".format(prefix, segment, extra_chars)
+ return "{0}[~{1}~您好яшçあ{2}]".format(prefix, segment, extra_chars)
class Command(BaseCommand):
@@ -121,7 +121,7 @@ class Command(BaseCommand):
for msg in pot_cat:
if msg.pluralizable:
msg.string = [
- translate(u"{}:{}".format(i, msg.id[0]))
+ translate("{}:{}".format(i, msg.id[0]))
for i in range(num_plurals)]
else:
msg.string = translate(msg.id)
diff --git a/openstack_dashboard/management/commands/upgrade_check.py b/openstack_dashboard/management/commands/upgrade_check.py
index d1af7b70c..c3c669720 100644
--- a/openstack_dashboard/management/commands/upgrade_check.py
+++ b/openstack_dashboard/management/commands/upgrade_check.py
@@ -156,7 +156,7 @@ def check_invalid_settings(dummy=None):
if invalid:
return upgradecheck.Result(
upgradecheck.Code.WARNING,
- _("Unknown settings: {}.").format(u", ".join(invalid)),
+ _("Unknown settings: {}.").format(", ".join(invalid)),
)
return upgradecheck.Result(upgradecheck.Code.SUCCESS)
@@ -173,7 +173,7 @@ def check_deprecated_settings(dummy=None):
if deprecated:
return upgradecheck.Result(
upgradecheck.Code.FAILURE,
- _("Deprecated settings: {}.").format(u", ".join(deprecated)),
+ _("Deprecated settings: {}.").format(", ".join(deprecated)),
)
return upgradecheck.Result(upgradecheck.Code.SUCCESS)
@@ -193,7 +193,7 @@ def check_required_settings(dummy=None):
if missing:
return upgradecheck.Result(
upgradecheck.Code.FAILURE,
- _("Missing required settings: {}.").format(u", ".join(missing)),
+ _("Missing required settings: {}.").format(", ".join(missing)),
)
return upgradecheck.Result(upgradecheck.Code.SUCCESS)
diff --git a/openstack_dashboard/templates/500.html b/openstack_dashboard/templates/500.html
index 705b279a6..739514297 100644
--- a/openstack_dashboard/templates/500.html
+++ b/openstack_dashboard/templates/500.html
@@ -1,4 +1,4 @@
-{% load branding i18n staticfiles %}
+{% load branding i18n static %}
{% load load_config from horizon %}
{% load_config as CONF %}
diff --git a/openstack_dashboard/test/integration_tests/tests/test_volumes.py b/openstack_dashboard/test/integration_tests/tests/test_volumes.py
index 8353de4dd..95108134b 100644
--- a/openstack_dashboard/test/integration_tests/tests/test_volumes.py
+++ b/openstack_dashboard/test/integration_tests/tests/test_volumes.py
@@ -300,8 +300,8 @@ class TestVolumesActions(helpers.TestCase):
5. Repeat actions for all disk formats
"""
self.volumes_page = self.home_pg.go_to_project_volumes_volumespage()
- all_formats = {"qcow2": u'QCOW2', "raw": u'Raw', "vdi": u'VDI',
- "vmdk": u'VMDK'}
+ all_formats = {"qcow2": 'QCOW2', "raw": 'Raw', "vdi": 'VDI',
+ "vmdk": 'VMDK'}
for disk_format in all_formats:
self.volumes_page.upload_volume_to_image(self.VOLUME_NAME,
self.IMAGE_NAME,
diff --git a/openstack_dashboard/test/test_data/cinder_data.py b/openstack_dashboard/test/test_data/cinder_data.py
index a08273b66..e829cbbd2 100644
--- a/openstack_dashboard/test/test_data/cinder_data.py
+++ b/openstack_dashboard/test/test_data/cinder_data.py
@@ -115,7 +115,7 @@ def data(TEST):
{'id': "21023e92-8008-1234-8059-7f2293ff3889",
'status': 'in-use',
'size': 10,
- 'name': u'my_volume',
+ 'name': 'my_volume',
'display_description': '',
'created_at': '2013-04-01 10:30:00',
'volume_type': None,
@@ -129,7 +129,7 @@ def data(TEST):
'name': 'my_volume2',
'status': 'in-use',
'size': 10,
- 'name': u'my_volume2',
+ 'name': 'my_volume2',
'display_description': '',
'created_at': '2013-04-01 10:30:00',
'volume_type': 'vol_type_2',
@@ -142,7 +142,7 @@ def data(TEST):
{'id': "21023e92-8008-1234-8059-7f2293ff3890",
'status': 'in-use',
'size': 10,
- 'name': u'my_volume',
+ 'name': 'my_volume',
'display_description': '',
'created_at': '2013-04-01 10:30:00',
'volume_type': None,
@@ -164,26 +164,26 @@ def data(TEST):
vol_type1 = volume_types.VolumeType(
volume_types.VolumeTypeManager(None),
- {'id': u'1',
- 'name': u'vol_type_1',
+ {'id': '1',
+ 'name': 'vol_type_1',
'description': 'type 1 description',
'extra_specs': {'foo': 'bar',
'volume_backend_name': 'backend_1'}})
vol_type2 = volume_types.VolumeType(
volume_types.VolumeTypeManager(None),
- {'id': u'2',
- 'name': u'vol_type_2',
+ {'id': '2',
+ 'name': 'vol_type_2',
'description': 'type 2 description'})
vol_type3 = volume_types.VolumeType(
volume_types.VolumeTypeManager(None),
- {'id': u'3',
- 'name': u'vol_type_3',
+ {'id': '3',
+ 'name': 'vol_type_3',
'is_public': False,
'description': 'type 3 description'})
TEST.cinder_volume_types.add(vol_type1, vol_type2, vol_type3)
vol_type_access1 = volume_type_access.VolumeTypeAccess(
volume_type_access.VolumeTypeAccessManager(None),
- {'volume_type_id': u'1', 'project_id': u'1'})
+ {'volume_type_id': '1', 'project_id': '1'})
TEST.cinder_type_access.add(vol_type_access1)
# Volumes - Cinder v2
@@ -253,14 +253,14 @@ def data(TEST):
# Volume Type Encryption
vol_enc_type1 = vol_enc_types.VolumeEncryptionType(
vol_enc_types.VolumeEncryptionTypeManager(None),
- {'volume_type_id': u'1',
+ {'volume_type_id': '1',
'control_location': "front-end",
'key_size': 512,
'provider': "a-provider",
'cipher': "a-cipher"})
vol_enc_type2 = vol_enc_types.VolumeEncryptionType(
vol_enc_types.VolumeEncryptionTypeManager(None),
- {'volume_type_id': u'2',
+ {'volume_type_id': '2',
'control_location': "front-end",
'key_size': 256,
'provider': "a-provider",
diff --git a/openstack_dashboard/test/test_data/glance_data.py b/openstack_dashboard/test/test_data/glance_data.py
index 02713ff19..f6d46248e 100644
--- a/openstack_dashboard/test/test_data/glance_data.py
+++ b/openstack_dashboard/test/test_data/glance_data.py
@@ -57,32 +57,32 @@ def data(TEST):
TEST.snapshotsV2 = utils.TestDataContainer()
# Snapshots
- snapshot_dict = {'name': u'snapshot',
- 'container_format': u'ami',
+ snapshot_dict = {'name': 'snapshot',
+ 'container_format': 'ami',
'id': 3,
'status': "active",
'owner': TEST.tenant.id,
- 'properties': {'image_type': u'snapshot'},
+ 'properties': {'image_type': 'snapshot'},
'is_public': False,
'protected': False}
- snapshot_dict_no_owner = {'name': u'snapshot 2',
- 'container_format': u'ami',
+ snapshot_dict_no_owner = {'name': 'snapshot 2',
+ 'container_format': 'ami',
'id': 4,
'status': "active",
'owner': None,
- 'properties': {'image_type': u'snapshot'},
+ 'properties': {'image_type': 'snapshot'},
'is_public': False,
'protected': False}
- snapshot_dict_queued = {'name': u'snapshot 2',
- 'container_format': u'ami',
+ snapshot_dict_queued = {'name': 'snapshot 2',
+ 'container_format': 'ami',
'id': 5,
'status': "queued",
'owner': TEST.tenant.id,
- 'properties': {'image_type': u'snapshot'},
+ 'properties': {'image_type': 'snapshot'},
'is_public': False,
'protected': False}
- snapshot_dict_with_volume = {'name': u'snapshot 2',
- 'container_format': u'ami',
+ snapshot_dict_with_volume = {'name': 'snapshot 2',
+ 'container_format': 'ami',
'id': 6,
'status': "queued",
'owner': TEST.tenant.id,
@@ -104,14 +104,14 @@ def data(TEST):
# Images
image_dict = {'id': '007e7d55-fe1e-4c5c-bf08-44b4a4964822',
'name': 'public_image',
- 'disk_format': u'qcow2',
+ 'disk_format': 'qcow2',
'status': "active",
'size': 20 * 1024 ** 3,
'virtual_size': None,
'min_disk': 0,
'owner': TEST.tenant.id,
'container_format': 'novaImage',
- 'properties': {'image_type': u'image'},
+ 'properties': {'image_type': 'image'},
'is_public': True,
'protected': False,
'min_ram': 0,
@@ -140,7 +140,7 @@ def data(TEST):
'virtual_size': None,
'min_disk': 30,
'container_format': 'novaImage',
- 'properties': {'image_type': u'image'},
+ 'properties': {'image_type': 'image'},
'is_public': True,
'protected': True,
'min_ram': 0,
@@ -155,7 +155,7 @@ def data(TEST):
'min_disk': 0,
'owner': TEST.tenant.id,
'container_format': 'novaImage',
- 'properties': {'image_type': u'image'},
+ 'properties': {'image_type': 'image'},
'is_public': True,
'protected': False,
'min_ram': 0}
@@ -240,9 +240,9 @@ def data(TEST):
'min_disk': 0,
'owner': TEST.tenant.id,
'container_format': 'novaImage',
- 'properties': {'description': u'a multi prop image',
- 'foo': u'foo val',
- 'bar': u'bar val'},
+ 'properties': {'description': 'a multi prop image',
+ 'foo': 'foo val',
+ 'bar': 'bar val'},
'is_public': True,
'protected': False}
multi_prop_image = APIResourceV2(image_dict)
@@ -283,7 +283,7 @@ def data(TEST):
'created_at': '2014-02-14T20:56:53',
'direct_url': 'swift+config://ref1/glance/'
'da8500d5-8b80-4b9c-8410-cc57fb8fb9d5',
- 'disk_format': u'qcow2',
+ 'disk_format': 'qcow2',
'file': '/v2/images/'
'da8500d5-8b80-4b9c-8410-cc57fb8fb9d5/file',
'id': '007e7d55-fe1e-4c5c-bf08-44b4a4964822',
@@ -294,7 +294,7 @@ def data(TEST):
'da8500d5-8b80-4b9c-8410-cc57fb8fb9d5'}],
'min_ram': 0,
'name': 'public_image',
- 'image_type': u'image',
+ 'image_type': 'image',
'min_disk': 0,
'owner': TEST.tenant.id,
'protected': False,
@@ -310,7 +310,7 @@ def data(TEST):
'container_format': 'novaImage',
'created_at': '2014-03-16T06:22:14',
'disk_format': None,
- 'image_type': u'image',
+ 'image_type': 'image',
'file': '/v2/images/885d1cb0-9f5c-4677-9d03-175be7f9f984/file',
'id': 'd6936c86-7fec-474a-85c5-5e467b371c3c',
'locations': [],
@@ -344,9 +344,9 @@ def data(TEST):
'updated_at': '2015-09-02T00:31:17Z',
'virtual_size': None,
'visibility': 'public',
- 'description': u'a multi prop image',
- 'foo': u'foo val',
- 'bar': u'bar val'
+ 'description': 'a multi prop image',
+ 'foo': 'foo val',
+ 'bar': 'bar val'
}]
for fixture in image_v2_dicts:
apiresource = APIResourceV2(fixture)
diff --git a/openstack_dashboard/test/test_data/keystone_data.py b/openstack_dashboard/test/test_data/keystone_data.py
index e54fabbae..b98e3bbdb 100644
--- a/openstack_dashboard/test/test_data/keystone_data.py
+++ b/openstack_dashboard/test/test_data/keystone_data.py
@@ -405,7 +405,7 @@ def data(TEST):
'domain_id': '2',
'domain_name': 'disabled_domain'}
tenant_dict_3 = {'id': "3",
- 'name': u'\u4e91\u89c4\u5219',
+ 'name': '\u4e91\u89c4\u5219',
'description': "an unicode-named tenant.",
'enabled': True,
'domain_id': '2',
diff --git a/openstack_dashboard/test/test_data/neutron_data.py b/openstack_dashboard/test/test_data/neutron_data.py
index 5c2fc0d2f..4a90e5c22 100644
--- a/openstack_dashboard/test/test_data/neutron_data.py
+++ b/openstack_dashboard/test/test_data/neutron_data.py
@@ -506,7 +506,7 @@ def data(TEST):
def add_rule_to_group(secgroup, default_only=True):
rule_egress_ipv4 = {
'id': uuidutils.generate_uuid(),
- 'direction': u'egress', 'ethertype': u'IPv4',
+ 'direction': 'egress', 'ethertype': 'IPv4',
'port_range_min': None, 'port_range_max': None,
'protocol': None, 'remote_group_id': None,
'remote_ip_prefix': None,
@@ -516,7 +516,7 @@ def data(TEST):
}
rule_egress_ipv6 = {
'id': uuidutils.generate_uuid(),
- 'direction': u'egress', 'ethertype': u'IPv6',
+ 'direction': 'egress', 'ethertype': 'IPv6',
'port_range_min': None, 'port_range_max': None,
'protocol': None, 'remote_group_id': None,
'remote_ip_prefix': None,
@@ -526,29 +526,29 @@ def data(TEST):
}
rule_tcp_80 = {
'id': uuidutils.generate_uuid(),
- 'direction': u'ingress', 'ethertype': u'IPv4',
+ 'direction': 'ingress', 'ethertype': 'IPv4',
'port_range_min': 80, 'port_range_max': 80,
- 'protocol': u'tcp', 'remote_group_id': None,
- 'remote_ip_prefix': u'0.0.0.0/0',
+ 'protocol': 'tcp', 'remote_group_id': None,
+ 'remote_ip_prefix': '0.0.0.0/0',
'security_group_id': secgroup['id'],
'tenant_id': secgroup['tenant_id'],
'description': 'Ingress HTTP',
}
rule_icmp = {
'id': uuidutils.generate_uuid(),
- 'direction': u'ingress', 'ethertype': u'IPv4',
+ 'direction': 'ingress', 'ethertype': 'IPv4',
'port_range_min': 5, 'port_range_max': 8,
- 'protocol': u'icmp', 'remote_group_id': None,
- 'remote_ip_prefix': u'0.0.0.0/0',
+ 'protocol': 'icmp', 'remote_group_id': None,
+ 'remote_ip_prefix': '0.0.0.0/0',
'security_group_id': secgroup['id'],
'tenant_id': secgroup['tenant_id'],
'description': 'Ingress IPv4 ICMP',
}
rule_group = {
'id': uuidutils.generate_uuid(),
- 'direction': u'ingress', 'ethertype': u'IPv4',
+ 'direction': 'ingress', 'ethertype': 'IPv4',
'port_range_min': 80, 'port_range_max': 80,
- 'protocol': u'tcp', 'remote_group_id': sec_group_1['id'],
+ 'protocol': 'tcp', 'remote_group_id': sec_group_1['id'],
'remote_ip_prefix': None,
'security_group_id': secgroup['id'],
'tenant_id': secgroup['tenant_id'],
@@ -556,20 +556,20 @@ def data(TEST):
}
rule_ip_proto = {
'id': uuidutils.generate_uuid(),
- 'direction': u'ingress', 'ethertype': u'IPv4',
+ 'direction': 'ingress', 'ethertype': 'IPv4',
'port_range_min': None, 'port_range_max': None,
- 'protocol': u'99', 'remote_group_id': None,
- 'remote_ip_prefix': u'0.0.0.0/24',
+ 'protocol': '99', 'remote_group_id': None,
+ 'remote_ip_prefix': '0.0.0.0/24',
'security_group_id': secgroup['id'],
'tenant_id': secgroup['tenant_id'],
'description': 'Ingress custom IP protocol 99',
}
rule_all_tcp = {
'id': uuidutils.generate_uuid(),
- 'direction': u'egress', 'ethertype': u'IPv4',
+ 'direction': 'egress', 'ethertype': 'IPv4',
'port_range_min': 1, 'port_range_max': 65535,
- 'protocol': u'tcp', 'remote_group_id': None,
- 'remote_ip_prefix': u'0.0.0.0/24',
+ 'protocol': 'tcp', 'remote_group_id': None,
+ 'remote_ip_prefix': '0.0.0.0/24',
'security_group_id': secgroup['id'],
'tenant_id': secgroup['tenant_id'],
'description': 'Egress all TCP',
@@ -867,7 +867,7 @@ def data(TEST):
'sub_ports': [{'segmentation_type': 'vlan',
'segmentation_id': tdata['tag_1'],
'port_id': tdata['child1']['id']},
- {'segmentation_type': u'vlan',
+ {'segmentation_type': 'vlan',
'segmentation_id': tdata['tag_2'],
'port_id': tdata['child2']['id']}],
'name': 'trunk',
diff --git a/openstack_dashboard/test/test_data/nova_data.py b/openstack_dashboard/test/test_data/nova_data.py
index 9b9d3acaa..7fd75e26f 100644
--- a/openstack_dashboard/test/test_data/nova_data.py
+++ b/openstack_dashboard/test/test_data/nova_data.py
@@ -359,7 +359,7 @@ def data(TEST):
"server_id": "2"})
server_2 = servers.Server(servers.ServerManager(None),
json.loads(SERVER_DATA % vals)['server'])
- vals.update({"name": u'\u4e91\u89c4\u5219',
+ vals.update({"name": '\u4e91\u89c4\u5219',
"status": "ACTIVE",
"tenant_id": tenant3.id,
"server_id": "3"})
@@ -380,33 +380,33 @@ def data(TEST):
# VNC Console Data
console = {
- u'console': {
- u'url': u'http://example.com:6080/vnc_auto.html',
- u'type': u'novnc'
+ 'console': {
+ 'url': 'http://example.com:6080/vnc_auto.html',
+ 'type': 'novnc'
}
}
TEST.servers.vnc_console_data = console
# SPICE Console Data
console = {
- u'console': {
- u'url': u'http://example.com:6080/spice_auto.html',
- u'type': u'spice'
+ 'console': {
+ 'url': 'http://example.com:6080/spice_auto.html',
+ 'type': 'spice'
}
}
TEST.servers.spice_console_data = console
# RDP Console Data
console = {
- u'console': {
- u'url': u'http://example.com:6080/rdp_auto.html',
- u'type': u'rdp'
+ 'console': {
+ 'url': 'http://example.com:6080/rdp_auto.html',
+ 'type': 'rdp'
}
}
TEST.servers.rdp_console_data = console
# MKS Console Data
console = {
- u'remote_console': {
- u'url': u'http://example.com:6080/mks_auto.html',
- u'type': u'mks'
+ 'remote_console': {
+ 'url': 'http://example.com:6080/mks_auto.html',
+ 'type': 'mks'
}
}
TEST.servers.mks_console_data = console
diff --git a/openstack_dashboard/test/test_data/swift_data.py b/openstack_dashboard/test/test_data/swift_data.py
index 9adaf5fcf..22c5bd17b 100644
--- a/openstack_dashboard/test/test_data/swift_data.py
+++ b/openstack_dashboard/test/test_data/swift_data.py
@@ -30,14 +30,14 @@ def data(TEST):
# ' ' (space) can break 'Content-Disposition' if not properly
# double-quoted
- container_dict_1 = {"name": u"container one%\u6346",
+ container_dict_1 = {"name": "container one%\u6346",
"container_object_count": 2,
"container_bytes_used": 256,
"timestamp": timeutils.utcnow().isoformat(),
"is_public": False,
"public_url": ""}
container_1 = swift.Container(container_dict_1)
- container_2_name = u"container_two\u6346"
+ container_2_name = "container_two\u6346"
container_dict_2 = {"name": container_2_name,
"container_object_count": 4,
"container_bytes_used": 1024,
@@ -48,7 +48,7 @@ def data(TEST):
"v1/project_id/%s" % utils_http.urlquote(
container_2_name)}
container_2 = swift.Container(container_dict_2)
- container_dict_3 = {"name": u"container,three%\u6346",
+ container_dict_3 = {"name": "container,three%\u6346",
"container_object_count": 2,
"container_bytes_used": 256,
"timestamp": timeutils.utcnow().isoformat(),
@@ -57,30 +57,30 @@ def data(TEST):
container_3 = swift.Container(container_dict_3)
TEST.containers.add(container_1, container_2, container_3)
- object_dict = {"name": u"test object%\u6346",
- "content_type": u"text/plain",
+ object_dict = {"name": "test object%\u6346",
+ "content_type": "text/plain",
"bytes": 128,
"timestamp": timeutils.utcnow().isoformat(),
"last_modified": None,
- "hash": u"object_hash"}
- object_dict_2 = {"name": u"test_object_two\u6346",
- "content_type": u"text/plain",
+ "hash": "object_hash"}
+ object_dict_2 = {"name": "test_object_two\u6346",
+ "content_type": "text/plain",
"bytes": 128,
"timestamp": timeutils.utcnow().isoformat(),
"last_modified": None,
- "hash": u"object_hash_2"}
- object_dict_3 = {"name": u"test,object_three%\u6346",
- "content_type": u"text/plain",
+ "hash": "object_hash_2"}
+ object_dict_3 = {"name": "test,object_three%\u6346",
+ "content_type": "text/plain",
"bytes": 128,
"timestamp": timeutils.utcnow().isoformat(),
"last_modified": None,
- "hash": u"object_hash"}
- object_dict_4 = {"name": u"test folder%\u6346/test.txt",
- "content_type": u"text/plain",
+ "hash": "object_hash"}
+ object_dict_4 = {"name": "test folder%\u6346/test.txt",
+ "content_type": "text/plain",
"bytes": 128,
"timestamp": timeutils.utcnow().isoformat(),
"last_modified": None,
- "hash": u"object_hash"}
+ "hash": "object_hash"}
obj_dicts = [object_dict, object_dict_2, object_dict_3, object_dict_4]
obj_data = b"Fake Data"
@@ -90,18 +90,18 @@ def data(TEST):
data=obj_data)
TEST.objects.add(swift_object)
- folder_dict = {"subdir": u"test folder%\u6346/"}
+ folder_dict = {"subdir": "test folder%\u6346/"}
TEST.folder.add(swift.PseudoFolder(folder_dict, container_1.name))
# when the folder is returned as part of a prefix match, this content
# is returned by Swift instead:
folder_dict_alt = {
- "name": u"test folder%\u6346/",
+ "name": "test folder%\u6346/",
"bytes": 0,
"last_modified": timeutils.utcnow().isoformat(),
- "content_type": u"application/octet-stream",
- "hash": u"object_hash"
+ "content_type": "application/octet-stream",
+ "hash": "object_hash"
}
TEST.folder_alt.add(swift.PseudoFolder(folder_dict_alt, container_1.name))
diff --git a/openstack_dashboard/test/unit/api/rest/test_swift.py b/openstack_dashboard/test/unit/api/rest/test_swift.py
index 3ac4e6027..c0c440216 100644
--- a/openstack_dashboard/test/unit/api/rest/test_swift.py
+++ b/openstack_dashboard/test/unit/api/rest/test_swift.py
@@ -81,7 +81,7 @@ class SwiftRestTestCase(test.TestCase):
False)
response = swift.Containers().get(request)
self.assertStatusCode(response, 200)
- self.assertEqual(u'container one%\u6346',
+ self.assertEqual('container one%\u6346',
response.json['items'][0]['name'])
self.assertFalse(response.json['has_more'])
self.mock_swift_get_containers.assert_called_once_with(request)
@@ -90,11 +90,11 @@ class SwiftRestTestCase(test.TestCase):
def test_container_get(self):
request = self.mock_rest_request()
self.mock_swift_get_container.return_value = self.containers.first()
- response = swift.Container().get(request, u'container one%\u6346')
+ response = swift.Container().get(request, 'container one%\u6346')
self.assertStatusCode(response, 200)
self.assertEqual(response.json, self.containers.first().to_dict())
self.mock_swift_get_container.assert_called_once_with(
- request, u'container one%\u6346')
+ request, 'container one%\u6346')
@test.create_mocks({api.swift: ['swift_create_container']})
def test_container_create(self):
@@ -102,7 +102,7 @@ class SwiftRestTestCase(test.TestCase):
request = self.mock_rest_request(body='{}')
response = swift.Container().post(request, 'spam')
self.assertStatusCode(response, 201)
- self.assertEqual(u'/api/swift/containers/spam',
+ self.assertEqual('/api/swift/containers/spam',
response['location'])
self.mock_swift_create_container.assert_called_once_with(
request, 'spam', metadata={}
@@ -114,7 +114,7 @@ class SwiftRestTestCase(test.TestCase):
request = self.mock_rest_request(body='{"is_public": false}')
response = swift.Container().post(request, 'spam')
self.assertStatusCode(response, 201)
- self.assertEqual(u'/api/swift/containers/spam',
+ self.assertEqual('/api/swift/containers/spam',
response['location'])
self.mock_swift_create_container.assert_called_once_with(
request, 'spam', metadata={'is_public': False}
@@ -124,10 +124,10 @@ class SwiftRestTestCase(test.TestCase):
def test_container_delete(self):
self.mock_swift_delete_container.return_value = True
request = self.mock_rest_request()
- response = swift.Container().delete(request, u'container one%\u6346')
+ response = swift.Container().delete(request, 'container one%\u6346')
self.assertStatusCode(response, 204)
self.mock_swift_delete_container.assert_called_once_with(
- request, u'container one%\u6346'
+ request, 'container one%\u6346'
)
@test.create_mocks({api.swift: ['swift_update_container']})
@@ -151,42 +151,42 @@ class SwiftRestTestCase(test.TestCase):
self.mock_swift_get_objects.return_value = (
self.objects.list() + self.folder.list(), False
)
- response = swift.Objects().get(request, u'container one%\u6346')
+ response = swift.Objects().get(request, 'container one%\u6346')
self.assertStatusCode(response, 200)
self.assertEqual(5, len(response.json['items']))
- self.assertEqual(u'test folder%\u6346/test.txt',
+ self.assertEqual('test folder%\u6346/test.txt',
response.json['items'][3]['path'])
self.assertEqual('test.txt', response.json['items'][3]['name'])
self.assertTrue(response.json['items'][3]['is_object'])
self.assertFalse(response.json['items'][3]['is_subdir'])
- self.assertEqual(u'test folder%\u6346/test.txt',
+ self.assertEqual('test folder%\u6346/test.txt',
response.json['items'][3]['path'])
- self.assertEqual(u'test folder%\u6346/',
+ self.assertEqual('test folder%\u6346/',
response.json['items'][4]['path'])
- self.assertEqual(u'test folder%\u6346',
+ self.assertEqual('test folder%\u6346',
response.json['items'][4]['name'])
self.assertFalse(response.json['items'][4]['is_object'])
self.assertTrue(response.json['items'][4]['is_subdir'])
self.mock_swift_get_objects.assert_called_once_with(
request,
- u'container one%\u6346',
+ 'container one%\u6346',
prefix=None)
@test.create_mocks({api.swift: ['swift_get_objects']})
def test_container_get_path_folder(self):
- request = self.mock_rest_request(GET={'path': u'test folder%\u6346/'})
+ request = self.mock_rest_request(GET={'path': 'test folder%\u6346/'})
self.mock_swift_get_objects.return_value = (self.subfolder.list(),
False)
- response = swift.Objects().get(request, u'container one%\u6346')
+ response = swift.Objects().get(request, 'container one%\u6346')
self.assertStatusCode(response, 200)
self.assertEqual(1, len(response.json['items']))
self.assertTrue(response.json['items'][0]['is_object'])
self.assertFalse(response.json['items'][0]['is_subdir'])
self.mock_swift_get_objects.assert_called_once_with(
request,
- u'container one%\u6346', prefix=u'test folder%\u6346/'
+ 'container one%\u6346', prefix='test folder%\u6346/'
)
@test.create_mocks({api.swift: ['swift_get_object']})
@@ -219,10 +219,10 @@ class SwiftRestTestCase(test.TestCase):
form_obj = self.mock_UploadObjectForm.return_value
form_obj.is_valid.return_value = True
# note file name not used, path name is
- _file = mock.Mock(name=u'NOT object%\u6346')
+ _file = mock.Mock(name='NOT object%\u6346')
form_obj.clean.return_value = {'file': _file}
request = self.mock_rest_request()
- real_name = u'test_object%\u6346'
+ real_name = 'test_object%\u6346'
self.mock_swift_upload_object.return_value = self.objects.first()
response = swift.Object().post(request, 'spam', real_name)
self.assertStatusCode(response, 201)
@@ -232,7 +232,7 @@ class SwiftRestTestCase(test.TestCase):
response['location']
)
self.mock_swift_upload_object.assert_called_once_with(
- request, 'spam', u'test_object%\u6346', _file)
+ request, 'spam', 'test_object%\u6346', _file)
@test.create_mocks({api.swift: ['swift_create_pseudo_folder'],
swift: ['UploadObjectForm']})
@@ -243,7 +243,7 @@ class SwiftRestTestCase(test.TestCase):
request = self.mock_rest_request()
self.mock_swift_create_pseudo_folder.return_value = \
self.folder_alt.first()
- response = swift.Object().post(request, 'spam', u'test_folder%\u6346/')
+ response = swift.Object().post(request, 'spam', 'test_folder%\u6346/')
self.assertStatusCode(response, 201)
self.assertEqual(
response['location'],
@@ -251,7 +251,7 @@ class SwiftRestTestCase(test.TestCase):
'=25=E6=8D=86/?='
)
self.mock_swift_create_pseudo_folder.assert_called_once_with(
- request, 'spam', u'test_folder%\u6346/')
+ request, 'spam', 'test_folder%\u6346/')
@test.create_mocks({api.swift: ['swift_copy_object']})
def test_object_copy(self):
@@ -261,7 +261,7 @@ class SwiftRestTestCase(test.TestCase):
self.mock_swift_copy_object.return_value = self.objects.first()
response = swift.ObjectCopy().post(request,
'spam',
- u'test object%\u6346')
+ 'test object%\u6346')
self.assertStatusCode(response, 201)
self.assertEqual(
response['location'],
@@ -272,7 +272,7 @@ class SwiftRestTestCase(test.TestCase):
self.mock_swift_copy_object.assert_called_once_with(
request,
'spam',
- u'test object%\u6346',
+ 'test object%\u6346',
'eggs',
'bacon')
self.assertStatusCode(response, 201)
diff --git a/openstack_dashboard/test/unit/api/test_glance.py b/openstack_dashboard/test/unit/api/test_glance.py
index 863c05512..12f5e7aaa 100644
--- a/openstack_dashboard/test/unit/api/test_glance.py
+++ b/openstack_dashboard/test/unit/api/test_glance.py
@@ -400,12 +400,12 @@ class GlanceApiTests(test.APIMockTestCase):
def test_create_image_metadata_docker_v2(self):
form_data = {
- 'name': u'Docker image',
- 'description': u'Docker image test',
- 'source_type': u'url',
- 'image_url': u'/',
- 'disk_format': u'docker',
- 'architecture': u'x86-64',
+ 'name': 'Docker image',
+ 'description': 'Docker image test',
+ 'source_type': 'url',
+ 'image_url': '/',
+ 'disk_format': 'docker',
+ 'architecture': 'x86-64',
'min_disk': 15,
'min_ram': 512,
'is_public': False,
@@ -421,12 +421,12 @@ class GlanceApiTests(test.APIMockTestCase):
def test_create_image_metadata_vhd(self):
form_data = {
- 'name': u'OVF image',
- 'description': u'OVF image test',
- 'source_type': u'url',
- 'image_url': u'/',
- 'disk_format': u'vhd',
- 'architecture': u'x86-64',
+ 'name': 'OVF image',
+ 'description': 'OVF image test',
+ 'source_type': 'url',
+ 'image_url': '/',
+ 'disk_format': 'vhd',
+ 'architecture': 'x86-64',
'min_disk': 15,
'min_ram': 512,
'is_public': False,
diff --git a/openstack_dashboard/test/unit/api/test_nova.py b/openstack_dashboard/test/unit/api/test_nova.py
index cce6fb02d..d72dcc363 100644
--- a/openstack_dashboard/test/unit/api/test_nova.py
+++ b/openstack_dashboard/test/unit/api/test_nova.py
@@ -264,7 +264,7 @@ class ComputeApiTests(test.APIMockTestCase):
novaclient.usage.get.assert_has_calls([
mock.call(self.tenant.id, 'start', 'end'),
mock.call(self.tenant.id, 'start', 'end',
- marker=u'063cf7f3-ded1-4297-bc4c-31eae876cc93'),
+ marker='063cf7f3-ded1-4297-bc4c-31eae876cc93'),
])
@mock.patch.object(api._nova, 'novaclient')
@@ -301,7 +301,7 @@ class ComputeApiTests(test.APIMockTestCase):
novaclient.usage.list.assert_has_calls([
mock.call('start', 'end', True),
mock.call('start', 'end', True,
- marker=u'063cf7f3-ded1-4297-bc4c-31eae876cc93'),
+ marker='063cf7f3-ded1-4297-bc4c-31eae876cc93'),
])
@mock.patch.object(api._nova, 'novaclient')
diff --git a/openstack_dashboard/test/unit/utils/test_config_types.py b/openstack_dashboard/test/unit/utils/test_config_types.py
index 2893eeb30..7786db7f2 100644
--- a/openstack_dashboard/test/unit/utils/test_config_types.py
+++ b/openstack_dashboard/test/unit/utils/test_config_types.py
@@ -22,7 +22,7 @@ class ConfigTypesTest(unittest.TestCase):
self.assertRaises(ValueError, literal, "[1, '2', 3]")
literal = config_types.Literal({0: ""})
- self.assertEqual({1: 'a', 2: u'b'}, literal("{1: 'a', 2: u'b'}"))
+ self.assertEqual({1: 'a', 2: 'b'}, literal("{1: 'a', 2: 'b'}"))
self.assertRaises(ValueError, literal, "[1, '2', 3]")
self.assertRaises(ValueError, literal, "{1: 1, '2': 2}")
diff --git a/releasenotes/notes/launch-instance-admin-password-68e7e4b7af239bae.yaml b/releasenotes/notes/launch-instance-admin-password-68e7e4b7af239bae.yaml
new file mode 100644
index 000000000..c144be1be
--- /dev/null
+++ b/releasenotes/notes/launch-instance-admin-password-68e7e4b7af239bae.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Setting 'can_set_password' to True in OPENSTACK_HYPERVISOR_FEATURES adds
+ the option to set admin password from AngularJS Launch Instance dialog. \ No newline at end of file
diff --git a/releasenotes/source/conf.py b/releasenotes/source/conf.py
index 13f6e1b81..d6e4b9dc3 100644
--- a/releasenotes/source/conf.py
+++ b/releasenotes/source/conf.py
@@ -75,7 +75,7 @@ source_suffix = '.rst'
master_doc = 'index'
# General information about the project.
-copyright = u'2015, Horizon Developers'
+copyright = '2015, Horizon Developers'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
@@ -204,8 +204,8 @@ htmlhelp_basename = 'HorizonReleaseNotesdoc'
# author, documentclass [howto, manual, or own class]).
latex_documents = [
('index', 'HorizonReleaseNotes.tex',
- u'Horizon Release Notes Documentation',
- u'Horizon Developers', 'manual'),
+ 'Horizon Release Notes Documentation',
+ 'Horizon Developers', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
@@ -234,8 +234,8 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
- ('index', 'horizonreleasenotes', u'Horizon Release Notes Documentation',
- [u'Horizon Developers'], 1)
+ ('index', 'horizonreleasenotes', 'Horizon Release Notes Documentation',
+ ['Horizon Developers'], 1)
]
# If true, show URL addresses after external links.
@@ -248,8 +248,8 @@ man_pages = [
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
- ('index', 'HorizonReleaseNotes', u'Horizon Release Notes Documentation',
- u'Horizon Developers', 'HorizonReleaseNotes',
+ ('index', 'HorizonReleaseNotes', 'Horizon Release Notes Documentation',
+ 'Horizon Developers', 'HorizonReleaseNotes',
'Dashboard for OpenStack.',
'Miscellaneous'),
]
diff --git a/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
index 4eaae17d0..a0807c68c 100644
--- a/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
+++ b/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
@@ -3,15 +3,16 @@
# Andi Chandler <andi@gowling.com>, 2018. #zanata
# Andi Chandler <andi@gowling.com>, 2019. #zanata
# Andi Chandler <andi@gowling.com>, 2020. #zanata
+# Andi Chandler <andi@gowling.com>, 2021. #zanata
msgid ""
msgstr ""
"Project-Id-Version: horizon\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-24 13:47+0000\n"
+"POT-Creation-Date: 2021-02-10 01:39+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2020-12-23 12:20+0000\n"
+"PO-Revision-Date: 2021-01-13 10:43+0000\n"
"Last-Translator: Andi Chandler <andi@gowling.com>\n"
"Language-Team: English (United Kingdom)\n"
"Language: en_GB\n"
@@ -91,8 +92,8 @@ msgstr "12.0.0"
msgid "12.0.3"
msgstr "12.0.3"
-msgid "12.0.4-4"
-msgstr "12.0.4-4"
+msgid "12.0.4-5"
+msgstr "12.0.4-5"
msgid "13.0.0"
msgstr "13.0.0"
@@ -100,8 +101,8 @@ msgstr "13.0.0"
msgid "13.0.3"
msgstr "13.0.3"
-msgid "13.0.3-7"
-msgstr "13.0.3-7"
+msgid "13.0.3-8"
+msgstr "13.0.3-8"
msgid "14.0.0"
msgstr "14.0.0"
@@ -115,6 +116,9 @@ msgstr "14.0.4"
msgid "14.1.0"
msgstr "14.1.0"
+msgid "14.1.0-8"
+msgstr "14.1.0-8"
+
msgid "15.0.0"
msgstr "15.0.0"
@@ -139,9 +143,6 @@ msgstr "16.0.0"
msgid "16.2.0"
msgstr "16.2.0"
-msgid "16.2.0-8"
-msgstr "16.2.0-8"
-
msgid "17.0.0"
msgstr "17.0.0"
@@ -157,9 +158,6 @@ msgstr "18.1.0"
msgid "18.3.0"
msgstr "18.3.0"
-msgid "18.3.2-14"
-msgstr "18.3.2-14"
-
msgid "18.5.0"
msgstr "18.5.0"
diff --git a/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po b/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po
index 61a7a88ab..214e04580 100644
--- a/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po
+++ b/releasenotes/source/locale/id/LC_MESSAGES/releasenotes.po
@@ -8,11 +8,11 @@ msgid ""
msgstr ""
"Project-Id-Version: horizon\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-24 13:47+0000\n"
+"POT-Creation-Date: 2021-02-10 01:39+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2021-01-01 04:39+0000\n"
+"PO-Revision-Date: 2021-01-30 07:33+0000\n"
"Last-Translator: suhartono <cloudsuhartono@gmail.com>\n"
"Language-Team: Indonesian\n"
"Language: id\n"
@@ -94,8 +94,8 @@ msgstr "12.0.0"
msgid "12.0.3"
msgstr "12.0.3"
-msgid "12.0.4-4"
-msgstr "12.0.4-4"
+msgid "12.0.4-5"
+msgstr "12.0.4-5"
msgid "13.0.0"
msgstr "13.0.0"
@@ -103,8 +103,8 @@ msgstr "13.0.0"
msgid "13.0.3"
msgstr "13.0.3"
-msgid "13.0.3-7"
-msgstr "13.0.3-7"
+msgid "13.0.3-8"
+msgstr "13.0.3-8"
msgid "14.0.0"
msgstr "14.0.0"
@@ -145,9 +145,6 @@ msgstr "16.0.0"
msgid "16.2.0"
msgstr "16.2.0"
-msgid "16.2.0-8"
-msgstr "16.2.0-8"
-
msgid "17.0.0"
msgstr "17.0.0"
@@ -163,9 +160,6 @@ msgstr "18.1.0"
msgid "18.3.0"
msgstr "18.3.0"
-msgid "18.3.2-14"
-msgstr "18.3.2-14"
-
msgid "18.5.0"
msgstr "18.5.0"
diff --git a/tox.ini b/tox.ini
index 0a88f7e97..e69b8312b 100644
--- a/tox.ini
+++ b/tox.ini
@@ -20,7 +20,7 @@ whitelist_externals =
bash
find
deps =
- -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+ -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/test-requirements.txt
-r{toxinidir}/requirements.txt
commands =
@@ -123,7 +123,7 @@ commands =
[testenv:docs]
# We need to install horizon dependecies to build module references
deps =
- -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+ -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/requirements.txt
-r{toxinidir}/doc/requirements.txt
commands =