Use python3-style super()

In python3, super() does not always require a class and self reference.
In other words, super() is enough for most cases.
This is much simpler and it is time to switch it to the newer style.

pylint provides a check for this.
Let's enable 'super-with-arguments' check.

NOTE: _prepare_mappings() method of FormRegion in
openstack_dashboard/test/integration_tests/regions/forms.py is refactored.
super() (without explicit class and self referece) does not work when
a subclass method calls a same method in a parent class multiple times.
It looks better to prepare a separate method to provide a common logic.

Change-Id: Id9512a14be9f20dbd5ebd63d446570c7b7c825ff
This commit is contained in:
Akihiro Motoki 2020-09-15 14:08:17 +09:00
parent 74df97f57c
commit e5d09edc20
263 changed files with 636 additions and 720 deletions

View File

@ -56,8 +56,6 @@ disable=
inconsistent-return-statements, # TODO
interface-not-implemented,
no-self-use,
# python3 way: Let's do it once we have a consensus.
super-with-arguments, # TODO
too-many-ancestors,
too-many-arguments,
too-many-branches,

View File

@ -108,7 +108,7 @@ class HorizonComponent(object):
policy_rules = tuple()
def __init__(self):
super(HorizonComponent, self).__init__()
super().__init__()
if not self.slug:
raise ImproperlyConfigured('Every %s must have a slug.'
% self.__class__)
@ -476,7 +476,7 @@ class Dashboard(Registry, HorizonComponent):
return "<Dashboard: %s>" % self.slug
def __init__(self, *args, **kwargs):
super(Dashboard, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self._panel_groups = None
def get_panel(self, panel):
@ -1023,8 +1023,7 @@ class HorizonSite(Site):
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(HorizonSite, cls).__new__(cls,
*args, **kwargs)
cls._instance = super().__new__(cls, *args, **kwargs)
return cls._instance

View File

@ -93,7 +93,7 @@ class ResourceBrowser(html.HTMLElement):
breadcrumb_url = None
def __init__(self, request, tables_dict=None, attrs=None, **kwargs):
super(ResourceBrowser, self).__init__()
super().__init__()
self.name = self.name or self.__class__.__name__
self.verbose_name = self.verbose_name or self.name.title()
self.request = request

View File

@ -20,7 +20,7 @@ from horizon.utils import html
class Breadcrumb(html.HTMLElement):
def __init__(self, request, template, root,
subfolder_path, url, attr=None):
super(Breadcrumb, self).__init__()
super().__init__()
self.template = template
self.request = request
self.root = root

View File

@ -32,7 +32,7 @@ class ResourceBrowserView(MultiTableView):
self.table_classes = (self.browser_class.navigation_table_class,
self.browser_class.content_table_class)
self.navigation_selection = False
super(ResourceBrowserView, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
@memoized.memoized_method
def get_browser(self):
@ -45,7 +45,7 @@ class ResourceBrowserView(MultiTableView):
return browser
def get_tables(self):
tables = super(ResourceBrowserView, self).get_tables()
tables = super().get_tables()
# Tells the navigation table what is selected.
navigation_table = tables[
self.browser_class.navigation_table_class._meta.name]
@ -55,7 +55,7 @@ class ResourceBrowserView(MultiTableView):
return tables
def get_context_data(self, **kwargs):
context = super(ResourceBrowserView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
browser = self.get_browser()
context["%s_browser" % browser.name] = browser
return context
@ -78,7 +78,7 @@ class AngularIndexView(generic.TemplateView):
page_title = None
def get_context_data(self, **kwargs):
context = super(AngularIndexView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context["title"] = self.title
context["csrf_http"] = settings.CSRF_COOKIE_HTTPONLY
if self.page_title is None:
@ -97,7 +97,7 @@ class AngularDetailsView(generic.TemplateView):
template_name = 'angular.html'
def get_context_data(self, **kwargs):
context = super(AngularDetailsView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
# some parameters are needed for navigation side bar and breadcrumb.
title = _("Horizon")
context["title"] = title

View File

@ -22,7 +22,7 @@ class HorizonStaticFinder(AppDirectoriesFinder):
"""Static files finder that also looks into the directory of each panel."""
def __init__(self, app_names=None, *args, **kwargs):
super(HorizonStaticFinder, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
app_configs = apps.get_app_configs()
for app_config in app_configs:
if 'openstack_dashboard' in app_config.path:

View File

@ -108,7 +108,7 @@ class ServiceCatalogException(HorizonException):
"""
def __init__(self, service_name):
message = _('Invalid service catalog: %s') % service_name
super(ServiceCatalogException, self).__init__(message)
super().__init__(message)
class AlreadyExists(HorizonException):

View File

@ -26,7 +26,7 @@ class SelfHandlingMixin(object):
if not hasattr(self, "handle"):
raise NotImplementedError("%s does not define a handle method."
% self.__class__.__name__)
super(SelfHandlingMixin, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
class SelfHandlingForm(SelfHandlingMixin, forms.Form):
@ -56,6 +56,6 @@ class DateForm(forms.Form):
end = forms.DateField(input_formats=("%Y-%m-%d",))
def __init__(self, *args, **kwargs):
super(DateForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.fields['start'].widget.attrs['data-date-format'] = "yyyy-mm-dd"
self.fields['end'].widget.attrs['data-date-format'] = "yyyy-mm-dd"

View File

@ -80,10 +80,10 @@ class IPField(fields.Field):
self.min_mask = kwargs.pop("mask_range_from", 0)
self.version = kwargs.pop('version', IPv4)
super(IPField, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def validate(self, value):
super(IPField, self).validate(value)
super().validate(value)
if not value and not self.required:
return
@ -109,7 +109,7 @@ class IPField(fields.Field):
raise ValidationError(self.invalid_mask_message)
def clean(self, value):
super(IPField, self).clean(value)
super().clean(value)
return str(getattr(self, "ip", ""))
@ -120,13 +120,13 @@ class MultiIPField(IPField):
if value:
addresses = value.split(',')
for ip in addresses:
super(MultiIPField, self).validate(ip)
super().validate(ip)
self.addresses.append(ip)
else:
super(MultiIPField, self).validate(value)
super().validate(value)
def clean(self, value):
super(MultiIPField, self).clean(value)
super().clean(value)
return str(','.join(getattr(self, "addresses", [])))
@ -139,7 +139,7 @@ class MACAddressField(fields.Field):
.. xxxx.xxxx.xxxx
"""
def validate(self, value):
super(MACAddressField, self).validate(value)
super().validate(value)
if not value:
return
@ -153,7 +153,7 @@ class MACAddressField(fields.Field):
code="invalid_mac")
def clean(self, value):
super(MACAddressField, self).clean(value)
super().clean(value)
return str(getattr(self, "mac_address", ""))
@ -221,7 +221,7 @@ class SelectWidget(widgets.Widget):
self.data_attrs = data_attrs
self.transform = transform
self.transform_html_attrs = transform_html_attrs
super(SelectWidget, self).__init__(attrs)
super().__init__(attrs)
def render(self, name, value, attrs=None, renderer=None):
if value is None:
@ -356,7 +356,7 @@ class DynamicSelectWidget(SelectWidget):
add_item_url = self.get_add_item_url()
if add_item_url is not None:
self.attrs[self._data_add_url_attr] = add_item_url
return super(DynamicSelectWidget, self).render(*args, **kwargs)
return super().render(*args, **kwargs)
def get_add_item_url(self):
if callable(self.add_item_link):
@ -393,7 +393,7 @@ class DynamicChoiceField(fields.ChoiceField):
add_item_link_args=None,
*args,
**kwargs):
super(DynamicChoiceField, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.widget.add_item_link = add_item_link
self.widget.add_item_link_args = add_item_link_args
@ -425,7 +425,7 @@ class ThemableCheckboxInput(widgets.CheckboxInput):
return html.format_html(
u'<div class="themable-checkbox">{}<label for="{}"></label></div>',
super(ThemableCheckboxInput, self).render(name, value, attrs),
super().render(name, value, attrs),
label_for
)
@ -520,7 +520,7 @@ class ThemableCheckboxChoiceInput(ChoiceInput):
input_type = 'checkbox'
def __init__(self, *args, **kwargs):
super(ThemableCheckboxChoiceInput, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
# NOTE(e0ne): Django sets default value to None
if self.value:
self.value = set(force_text(v) for v in self.value)
@ -601,7 +601,7 @@ class ExternalFileField(fields.FileField):
paired with ExternalUploadMeta metaclass embedded into the Form class.
"""
def __init__(self, *args, **kwargs):
super(ExternalFileField, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.widget.attrs.update({'data-external-upload': 'true'})
@ -651,5 +651,4 @@ class ExternalUploadMeta(forms.DeclarativeFieldsMetaclass):
new_attrs[new_attr_name] = hidden_field
meth_name = 'clean_' + new_attr_name
new_attrs[meth_name] = make_clean_method(new_attr_name)
return super(ExternalUploadMeta, cls).__new__(
cls, name, bases, new_attrs)
return super().__new__(cls, name, bases, new_attrs)

View File

@ -46,13 +46,13 @@ class ModalBackdropMixin(object):
modal_backdrop = 'static'
def __init__(self, *args, **kwargs):
super(ModalBackdropMixin, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
config = settings.HORIZON_CONFIG
if 'modal_backdrop' in config:
self.modal_backdrop = config['modal_backdrop']
def get_context_data(self, **kwargs):
context = super(ModalBackdropMixin, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['modal_backdrop'] = self.modal_backdrop
return context
@ -73,7 +73,7 @@ class ModalFormMixin(ModalBackdropMixin):
return template
def get_context_data(self, **kwargs):
context = super(ModalFormMixin, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
if self.request.is_ajax():
context['hide'] = True
if ADD_TO_FIELD_HEADER in self.request.META:
@ -140,7 +140,7 @@ class ModalFormView(ModalFormMixin, views.HorizonFormView):
cancel_url = None
def get_context_data(self, **kwargs):
context = super(ModalFormView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['modal_id'] = self.modal_id
context['modal_header'] = self.modal_header
context['form_id'] = self.form_id

View File

@ -59,7 +59,7 @@ class Command(TemplateCommand):
"Python module and cannot be used as an app "
"name. Please try another name." % dash_name)
super(Command, self).handle('dash', dash_name, **options)
super().handle('dash', dash_name, **options)
target = options.pop("target", None)
if not target:

View File

@ -92,7 +92,7 @@ class Command(TemplateCommand):
"Python module and cannot be used as an app "
"name. Please try another name." % panel_name)
super(Command, self).handle('panel', panel_name, target, **options)
super().handle('panel', panel_name, target, **options)
if not target:
target = os.path.join(os.curdir, panel_name)

View File

@ -76,8 +76,7 @@ class BaseActionMetaClass(type):
def __call__(cls, *args, **kwargs):
cls.base_options.update(kwargs)
# Adding cls.base_options to each init call.
klass = super(BaseActionMetaClass, cls).__call__(
*args, **cls.base_options)
klass = super().__call__(*args, **cls.base_options)
return klass
@ -85,7 +84,7 @@ class BaseAction(html.HTMLElement, metaclass=BaseActionMetaClass):
"""Common base class for all ``Action`` classes."""
def __init__(self, **kwargs):
super(BaseAction, self).__init__()
super().__init__()
self.datum = kwargs.get('datum', None)
self.table = kwargs.get('table', None)
self.handles_multiple = kwargs.get('handles_multiple', False)
@ -258,7 +257,7 @@ class Action(BaseAction):
def __init__(self, single_func=None, multiple_func=None, handle_func=None,
attrs=None, **kwargs):
super(Action, self).__init__(**kwargs)
super().__init__(**kwargs)
self.method = kwargs.get('method', "POST")
self.requires_input = kwargs.get('requires_input', True)
@ -344,7 +343,7 @@ class LinkAction(BaseAction):
ajax = False
def __init__(self, attrs=None, **kwargs):
super(LinkAction, self).__init__(**kwargs)
super().__init__(**kwargs)
self.method = kwargs.get('method', "GET")
self.bound_url = kwargs.get('bound_url', None)
self.name = kwargs.get('name', self.name)
@ -377,7 +376,7 @@ class LinkAction(BaseAction):
action_dict)
def associate_with_table(self, table):
super(LinkAction, self).associate_with_table(table)
super().associate_with_table(table)
if self.ajax:
self.attrs['data-update-url'] = self.get_ajax_update_url()
@ -468,7 +467,7 @@ class FilterAction(BaseAction):
name = "filter"
def __init__(self, **kwargs):
super(FilterAction, self).__init__(**kwargs)
super().__init__(**kwargs)
self.method = kwargs.get('method', "POST")
self.name = kwargs.get('name', self.name)
self.verbose_name = kwargs.get('verbose_name', _("Filter"))
@ -560,7 +559,7 @@ class FixedFilterAction(FilterAction):
"""A filter action with fixed buttons."""
def __init__(self, **kwargs):
super(FixedFilterAction, self).__init__(**kwargs)
super().__init__(**kwargs)
self.filter_type = kwargs.get('filter_type', "fixed")
self.needs_preloading = kwargs.get('needs_preloading', True)
@ -654,7 +653,7 @@ class BatchAction(Action):
default_message_level = "success"
def __init__(self, **kwargs):
super(BatchAction, self).__init__(**kwargs)
super().__init__(**kwargs)
action_present_method = callable(getattr(self, 'action_present', None))
action_past_method = callable(getattr(self, 'action_past', None))
@ -687,7 +686,7 @@ class BatchAction(Action):
action = request.GET.get('action')
if action != 'row_update' and not self.table.data and not datum:
return False
return super(BatchAction, self)._allowed(request, datum)
return super()._allowed(request, datum)
def _get_action_name(self, items=None, past=False):
"""Retreive action name based on the number of items and `past` flag.
@ -746,7 +745,7 @@ class BatchAction(Action):
def get_default_attrs(self):
"""Returns a list of the default HTML attributes for the action."""
attrs = super(BatchAction, self).get_default_attrs()
attrs = super().get_default_attrs()
attrs.update({'data-batch-action': 'true'})
return attrs
@ -869,7 +868,7 @@ class DeleteAction(BatchAction):
name = "delete"
def __init__(self, **kwargs):
super(DeleteAction, self).__init__(**kwargs)
super().__init__(**kwargs)
self.name = kwargs.get('name', self.name)
self.icon = "trash"
self.action_type = "danger"

View File

@ -305,7 +305,7 @@ class Column(html.HTMLElement):
allowed_data_types = allowed_data_types or []
self.classes = list(classes or getattr(self, "classes", []))
super(Column, self).__init__()
super().__init__()
self.attrs.update(attrs or {})
if callable(transform):
@ -478,7 +478,7 @@ class Column(html.HTMLElement):
if settings.INTEGRATION_TESTS_SUPPORT:
def get_default_attrs(self):
attrs = super(Column, self).get_default_attrs()
attrs = super().get_default_attrs()
attrs.update({'data-selenium': self.name})
return attrs
@ -510,7 +510,7 @@ class WrappingColumn(Column):
"""A column that wraps its contents. Useful for data like UUIDs or names"""
def __init__(self, *args, **kwargs):
super(WrappingColumn, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.classes.append('word-break')
@ -580,7 +580,7 @@ class Row(html.HTMLElement):
ajax_cell_action_name = "cell_update"
def __init__(self, table, datum=None):
super(Row, self).__init__()
super().__init__()
self.table = table
self.datum = datum
self.selected = False
@ -709,7 +709,7 @@ class Cell(html.HTMLElement):
def __init__(self, datum, column, row, attrs=None, classes=None):
self.classes = classes or getattr(self, "classes", [])
super(Cell, self).__init__()
super().__init__()
self.attrs.update(attrs or {})
self.datum = datum

View File

@ -27,7 +27,7 @@ class FormsetCell(horizon_tables.Cell):
"""A DataTable cell that knows about its field from the formset."""
def __init__(self, *args, **kwargs):
super(FormsetCell, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
try:
self.field = (self.row.form or {})[self.column.name]
except KeyError:
@ -46,7 +46,7 @@ class FormsetRow(horizon_tables.Row):
def __init__(self, column, datum, form):
self.form = form
super(FormsetRow, self).__init__(column, datum)
super().__init__(column, datum)
if not self.cells:
# We need to be able to handle empty rows, because there may
# be extra empty forms in a formset. The original DataTable breaks
@ -72,7 +72,7 @@ class FormsetDataTableMixin(object):
formset_class = None
def __init__(self, *args, **kwargs):
super(FormsetDataTableMixin, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self._formset = None
# Override Meta settings, because we need custom Form and Cell classes,
@ -151,7 +151,7 @@ class FormsetDataTableMixin(object):
# We need to support ``None`` when there are more forms than data.
if datum is None:
return None
return super(FormsetDataTableMixin, self).get_object_id(datum)
return super().get_object_id(datum)
class FormsetDataTable(FormsetDataTableMixin, horizon_tables.DataTable):

View File

@ -26,7 +26,7 @@ class MultiTableMixin(object):
data_method_pattern = "get_%s_data"
def __init__(self, *args, **kwargs):
super(MultiTableMixin, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.table_classes = getattr(self, "table_classes", [])
self._data = {}
self._tables = {}
@ -102,7 +102,7 @@ class MultiTableMixin(object):
return self._tables
def get_context_data(self, **kwargs):
context = super(MultiTableMixin, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
tables = self.get_tables()
for name, table in tables.items():
context["%s_table" % name] = table
@ -274,7 +274,7 @@ class DataTableView(MultiTableView):
return self.table
def get_context_data(self, **kwargs):
context = super(DataTableView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
if hasattr(self, "table"):
context[self.context_object_name] = self.table
return context
@ -354,7 +354,7 @@ class MixedDataTableView(DataTableView):
type_string)
def get_table(self):
self.table = super(MixedDataTableView, self).get_table()
self.table = super().get_table()
if not self.table._meta.mixed_data_type:
raise AttributeError('You must have at least two elements in '
'the data_types attribute '
@ -365,7 +365,7 @@ class MixedDataTableView(DataTableView):
class PagedTableMixin(object):
def __init__(self, *args, **kwargs):
super(PagedTableMixin, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self._has_prev_data = False
self._has_more_data = False
@ -391,7 +391,7 @@ class PagedTableMixin(object):
class PagedTableWithPageMenu(object):
def __init__(self, *args, **kwargs):
super(PagedTableWithPageMenu, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self._current_page = 1
self._number_of_pages = 0
self._total_of_entries = 0
@ -401,7 +401,7 @@ class PagedTableWithPageMenu(object):
name = table.name
self._tables[name]._meta.current_page = self.current_page
self._tables[name]._meta.number_of_pages = self.number_of_pages
return super(PagedTableWithPageMenu, self).handle_table(table)
return super().handle_table(table)
def has_prev_data(self, table):
return self._current_page > 1

View File

@ -102,7 +102,7 @@ class TabGroup(html.HTMLElement):
return self._active
def __init__(self, request, **kwargs):
super(TabGroup, self).__init__()
super().__init__()
if not hasattr(self, "tabs"):
raise NotImplementedError('%s must declare a "tabs" attribute.'
% self.__class__)
@ -187,7 +187,7 @@ class TabGroup(html.HTMLElement):
Defaults to ``["nav", "nav-tabs", "ajax-tabs"]``.
"""
default_classes = super(TabGroup, self).get_default_classes()
default_classes = super().get_default_classes()
default_classes.extend(CSS_TAB_GROUP_CLASSES)
return default_classes
@ -309,7 +309,7 @@ class Tab(html.HTMLElement):
permissions = []
def __init__(self, tab_group, request=None):
super(Tab, self).__init__()
super().__init__()
# Priority: constructor, class-defined, fallback
if not self.name:
raise ValueError("%s must have a name." % self.__class__.__name__)
@ -393,7 +393,7 @@ class Tab(html.HTMLElement):
If the tab is not enabled, the classes the class ``"disabled"``
will be added.
"""
default_classes = super(Tab, self).get_default_classes()
default_classes = super().get_default_classes()
if self.is_active():
default_classes.extend(CSS_ACTIVE_TAB_CLASSES)
if not self._enabled:
@ -471,7 +471,7 @@ class TableTab(Tab):
table_classes = []
def __init__(self, tab_group, request):
super(TableTab, self).__init__(tab_group, request)
super().__init__(tab_group, request)
if not self.table_classes:
class_name = self.__class__.__name__
raise NotImplementedError("You must define a table_class "
@ -522,7 +522,7 @@ class TableTab(Tab):
If only one table class is provided, a shortcut ``table`` context
variable is also added containing the single table.
"""
context = super(TableTab, self).get_context_data(request, **kwargs)
context = super().get_context_data(request, **kwargs)
# If the data hasn't been manually loaded before now,
# make certain it's loaded before setting the context.
self.load_table_data()

View File

@ -45,7 +45,7 @@ class TabView(views.HorizonTemplateView):
def get_context_data(self, **kwargs):
"""Adds the ``tab_group`` variable to the context data."""
context = super(TabView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
try:
tab_group = self.get_tabs(self.request, **kwargs)
context["tab_group"] = tab_group
@ -73,7 +73,7 @@ class TabView(views.HorizonTemplateView):
class TabbedTableView(tables.MultiTableMixin, TabView):
def __init__(self, *args, **kwargs):
super(TabbedTableView, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.table_classes = []
self._table_dict = {}

View File

@ -82,7 +82,7 @@ class WebDriver(firefox.webdriver.WebDriver):
# called from WebDriver.__init__, retry __init__.
for i in range(self.CONNREFUSED_RETRY_COUNT + 1):
try:
super(WebDriver, self).__init__(
super().__init__(
firefox_profile, FirefoxBinary(), timeout,
desired_capabilities, proxy)
if i > 0:

View File

@ -118,14 +118,14 @@ class SessionStore(SessionBase):
class RequestFactoryWithMessages(RequestFactory):
def get(self, *args, **kwargs):
req = super(RequestFactoryWithMessages, self).get(*args, **kwargs)
req = super().get(*args, **kwargs)
req.user = User()
req.session = SessionStore()
req._messages = default_storage(req)
return req
def post(self, *args, **kwargs):
req = super(RequestFactoryWithMessages, self).post(*args, **kwargs)
req = super().post(*args, **kwargs)
req.user = User()
req.session = SessionStore()
req._messages = default_storage(req)
@ -143,7 +143,7 @@ class TestCase(django_test.TestCase):
"""
def setUp(self):
super(TestCase, self).setUp()
super().setUp()
self._setup_test_data()
self._setup_factory()
self._setup_user()
@ -171,7 +171,7 @@ class TestCase(django_test.TestCase):
self.request.session = self.client.session
def tearDown(self):
super(TestCase, self).tearDown()
super().tearDown()
del os.environ["HORIZON_TEST_RUN"]
def set_permissions(self, permissions=None):
@ -250,7 +250,7 @@ class SeleniumTestCase(LiveServerTestCase):
cls.vdisplay = xvfbwrapper.Xvfb(width=1280, height=720)
cls.vdisplay.start()
cls.selenium = WebDriver()
super(SeleniumTestCase, cls).setUpClass()
super().setUpClass()
@classmethod
def tearDownClass(cls):
@ -259,13 +259,13 @@ class SeleniumTestCase(LiveServerTestCase):
time.sleep(1)
if hasattr(cls, 'vdisplay'):
cls.vdisplay.stop()
super(SeleniumTestCase, cls).tearDownClass()
super().tearDownClass()
def setUp(self):
socket.setdefaulttimeout(60)
self.selenium.implicitly_wait(30)
self.ui = selenium_ui
super(SeleniumTestCase, self).setUp()
super().setUp()
class JasmineTests(SeleniumTestCase):
@ -351,7 +351,7 @@ class update_settings(django_test_utils.override_settings):
copied = copy.copy(value)
copied.update(new_value)
kwargs[key] = copied
super(update_settings, self).__init__(**kwargs)
super().__init__(**kwargs)
class IsA(object):
@ -366,4 +366,4 @@ class IsA(object):
class IsHttpRequest(IsA):
"""Class to compare param is django.http.HttpRequest."""
def __init__(self):
super(IsHttpRequest, self).__init__(http.HttpRequest)
super().__init__(http.HttpRequest)

View File

@ -41,7 +41,7 @@ class LazyLoadedTabsTests(test.SeleniumTestCase):
select_all_selector = 'th.multi_select_column input[type=checkbox]'
def setUp(self):
super(LazyLoadedTabsTests, self).setUp()
super().setUp()
wait = self.ui.WebDriverWait(self.selenium, 120)
self.get_element = self.selenium.find_element_by_css_selector
self.get_elements = self.selenium.find_elements_by_css_selector

View File

@ -227,7 +227,7 @@ class ChoiceFieldForm(forms.SelfHandlingForm):
transform_html_attrs=title_dic.get))
def __init__(self, request, *args, **kwargs):
super(ChoiceFieldForm, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
choices = ([('choice1', 'label1'),
('choice2', 'label2')])
self.fields['test_choices'].choices = choices
@ -241,7 +241,7 @@ class ChoiceFieldTests(test.TestCase):
template = 'horizon/common/_form_fields.html'
def setUp(self):
super(ChoiceFieldTests, self).setUp()
super().setUp()
self.form = ChoiceFieldForm(self.request)
def _render_form(self):
@ -282,7 +282,7 @@ class ThemableChoiceFieldForm(forms.SelfHandlingForm):
transform_html_attrs=title_dic.get))
def __init__(self, request, *args, **kwargs):
super(ThemableChoiceFieldForm, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
choices = ([('choice1', 'label1'),
('choice2', 'label2')])
self.fields['test_choices'].choices = choices
@ -296,7 +296,7 @@ class ThemableChoiceFieldTests(test.TestCase):
template = 'horizon/common/_form_fields.html'
def setUp(self):
super(ThemableChoiceFieldTests, self).setUp()
super().setUp()
self.form = ThemableChoiceFieldForm(self.request)
def _render_form(self):

View File

@ -80,7 +80,7 @@ class FormErrorTests(test.TestCase):
template = 'horizon/common/_form_fields.html'
def setUp(self):
super(FormErrorTests, self).setUp()
super().setUp()
# Note(Itxaka): We pass data to the form so its bound and has the
# proper cleaned_data fields
self.form = FormForTesting(self.request, data={'fake': 'data'})

View File

@ -35,11 +35,11 @@ class MiddlewareTests(django_test.TestCase):
self._timezone_backup = timezone.get_current_timezone_name()
self.factory = test.RequestFactoryWithMessages()
self.get_response = mock.Mock()
super(MiddlewareTests, self).setUp()
super().setUp()
def tearDown(self):
timezone.activate(self._timezone_backup)
super(MiddlewareTests, self).tearDown()
super().tearDown()
def test_redirect_login_fail_to_login(self):
url = settings.LOGIN_URL

View File

@ -33,7 +33,7 @@ class OperationLogMiddlewareTest(django_test.TestCase):
http_referer = u'/dashboard/test_http_referer'
def setUp(self):
super(OperationLogMiddlewareTest, self).setUp()
super().setUp()
self.factory = test.RequestFactoryWithMessages()
def test_middleware_not_used(self):

View File

@ -340,11 +340,11 @@ class TabTests(test.TestCase):
class TabExceptionTests(test.TestCase):
def setUp(self):
super(TabExceptionTests, self).setUp()
super().setUp()
self._original_tabs = copy.copy(TabWithTableView.tab_group_class.tabs)
def tearDown(self):
super(TabExceptionTests, self).tearDown()
super().tearDown()
TabWithTableView.tab_group_class.tabs = self._original_tabs
@override_settings(SESSION_REFRESH=False)

View File

@ -70,7 +70,7 @@ class RbacYesAccessPanel(horizon.Panel):
class BaseHorizonTests(test.TestCase):
def setUp(self):
super(BaseHorizonTests, self).setUp()
super().setUp()
# Adjust our horizon config and register our custom dashboards/panels.
self.old_default_dash = settings.HORIZON_CONFIG['default_dashboard']
settings.HORIZON_CONFIG['default_dashboard'] = 'cats'
@ -93,7 +93,7 @@ class BaseHorizonTests(test.TestCase):
self._discovered_panels[dash] = panels
def tearDown(self):
super(BaseHorizonTests, self).tearDown()
super().tearDown()
# Restore our settings
settings.HORIZON_CONFIG['default_dashboard'] = self.old_default_dash
settings.HORIZON_CONFIG['dashboards'] = self.old_dashboards
@ -349,12 +349,12 @@ class HorizonTests(BaseHorizonTests):
settings.SECURE_PROXY_SSL_HEADER = None
class GetUserHomeTests(BaseHorizonTests):
class GetUserHomeTests(test.TestCase):
"""Test get_user_home parameters."""
def setUp(self):
self.orig_user_home = settings.HORIZON_CONFIG['user_home']
super(BaseHorizonTests, self).setUp()
super().setUp()
self.original_username = "testname"
self.test_user = User()
self.test_user.username = self.original_username
@ -362,6 +362,7 @@ class GetUserHomeTests(BaseHorizonTests):
def tearDown(self):
settings.HORIZON_CONFIG['user_home'] = self.orig_user_home
conf.HORIZON_CONFIG._setup()
super().tearDown()
def test_using_callable(self):
def themable_user_fnc(user):
@ -399,7 +400,7 @@ class CustomPanelTests(BaseHorizonTests):
"""
def setUp(self):
super(CustomPanelTests, self).setUp()
super().setUp()
settings.HORIZON_CONFIG['customization_module'] = \
'horizon.test.customization.cust_test1'
# refresh config
@ -414,7 +415,7 @@ class CustomPanelTests(BaseHorizonTests):
self._discovered_dashboards.append(Dogs)
Dogs.register(Puppies)
Cats.register(Tigers)
super(CustomPanelTests, self).tearDown()
super().tearDown()
settings.HORIZON_CONFIG.pop('customization_module')
# refresh config
conf.HORIZON_CONFIG._setup()
@ -440,14 +441,14 @@ class CustomPermissionsTests(BaseHorizonTests):
'horizon.test.customization.cust_test2'
# refresh config
conf.HORIZON_CONFIG._setup()
super(CustomPermissionsTests, self).setUp()
super().setUp()
def tearDown(self):
# Restore permissions
dogs = horizon.get_dashboard("dogs")
puppies = dogs.get_panel("puppies")
puppies.permissions = tuple([])
super(CustomPermissionsTests, self).tearDown()
super().tearDown()
settings.HORIZON_CONFIG.pop('customization_module')
# refresh config
conf.HORIZON_CONFIG._setup()
@ -489,7 +490,7 @@ class CustomPermissionsTests(BaseHorizonTests):
class RbacHorizonTests(test.TestCase):
def setUp(self):
super(RbacHorizonTests, self).setUp()
super().setUp()
# Adjust our horizon config and register our custom dashboards/panels.
self.old_default_dash = settings.HORIZON_CONFIG['default_dashboard']
settings.HORIZON_CONFIG['default_dashboard'] = 'cats'
@ -513,7 +514,7 @@ class RbacHorizonTests(test.TestCase):
self._discovered_panels[dash] = panels
def tearDown(self):
super(RbacHorizonTests, self).tearDown()
super().tearDown()
# Restore our settings
settings.HORIZON_CONFIG['default_dashboard'] = self.old_default_dash
settings.HORIZON_CONFIG['dashboards'] = self.old_dashboards

View File

@ -28,7 +28,7 @@ class ViewData(object):
template_name = 'fake'
def get_context_data(self, **kwargs):
context = super(ViewData, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['object'] = {'name': 'myName'}
return context
@ -61,7 +61,7 @@ class ViewWithTransTitle(views.PageTitleMixin, generic.TemplateView):
class PageTitleTests(test.TestCase):
def setUp(self):
super(PageTitleTests, self).setUp()
super().setUp()
self.request = client.RequestFactory().get('fake')
def _dispatch(self, viewClass):

View File

@ -184,14 +184,14 @@ class FullscreenWorkflowView(workflows.WorkflowView):
class WorkflowsTests(test.TestCase):
def setUp(self):
super(WorkflowsTests, self).setUp()
super().setUp()
self.policy_patcher = mock.patch(
'openstack_auth.policy.check', lambda action, request: True)
self.policy_check = self.policy_patcher.start()
self.addCleanup(mock.patch.stopall)
def tearDown(self):
super(WorkflowsTests, self).tearDown()
super().tearDown()
self._reset_workflow()
def _reset_workflow(self):

View File

@ -23,4 +23,4 @@ class ObjDictWrapper(dict):
self[item] = value
def __repr__(self):
return '<ObjDictWrapper %s>' % super(ObjDictWrapper, self).__repr__()
return '<ObjDictWrapper %s>' % super().__repr__()

View File

@ -40,8 +40,7 @@ class WrapperFindOverride(object):
repeat = range(2)
for i in repeat:
try:
web_el = super(WrapperFindOverride, self).find_element(
by, value)
web_el = super().find_element(by, value)
except exceptions.NoSuchElementException:
if i == repeat[-1]:
raise
@ -52,8 +51,7 @@ class WrapperFindOverride(object):
repeat = range(2)
for i in repeat:
try:
web_els = super(WrapperFindOverride, self).find_elements(
by, value)
web_els = super().find_elements(by, value)
except exceptions.NoSuchElementException:
if i == repeat[-1]:
raise
@ -77,7 +75,7 @@ class WebElementWrapper(WrapperFindOverride, webelement.WebElement):
"""
def __init__(self, parent, id_, locator, src_element, index=None):
super(WebElementWrapper, self).__init__(parent, id_)
super().__init__(parent, id_)
self.locator = locator
self.src_element = src_element
# in case element was looked up previously via find_elements
@ -102,7 +100,7 @@ class WebElementWrapper(WrapperFindOverride, webelement.WebElement):
repeat = range(20)
for i in repeat:
try:
return super(WebElementWrapper, self)._execute(command, params)
return super()._execute(command, params)
except (exceptions.StaleElementReferenceException,
exceptions.ElementClickInterceptedException):
if i == repeat[-1]:

View File

@ -54,7 +54,7 @@ class AngularGettextHTMLParser(parser.HTMLParser):
"""
def __init__(self):
super(AngularGettextHTMLParser, self).__init__(
super().__init__(
convert_charrefs=False
)

View File

@ -29,7 +29,7 @@ class CsvDataMixin(object):
"""
def __init__(self):
self.out = io.StringIO()
super(CsvDataMixin, self).__init__()
super().__init__()
if hasattr(self, "columns"):
columns = [self.encode(col) for col in self.columns]
self.writer = csv.DictWriter(self.out, columns,
@ -65,7 +65,7 @@ class BaseCsvResponse(CsvDataMixin, HttpResponse):
"""Base CSV response class. Provides handling of CSV data."""
def __init__(self, request, template, context, content_type, **kwargs):
super(BaseCsvResponse, self).__init__()
super().__init__()
self['Content-Disposition'] = 'attachment; filename="%s"' % (
kwargs.get("filename", "export.csv"),)
self['Content-Type'] = content_type
@ -97,7 +97,7 @@ class BaseCsvStreamingResponse(CsvDataMixin, StreamingHttpResponse):
"""Base CSV Streaming class. Provides streaming response for CSV data."""
def __init__(self, request, template, context, content_type, **kwargs):
super(BaseCsvStreamingResponse, self).__init__()
super().__init__()
self['Content-Disposition'] = 'attachment; filename="%s"' % (
kwargs.get("filename", "export.csv"),)
self['Content-Type'] = content_type

View File

@ -22,4 +22,4 @@ class LazyTranslationEncoder(DjangoJSONEncoder):
def default(self, obj):
if isinstance(obj, Promise):
return force_text(obj)
return super(LazyTranslationEncoder, self).default(obj)
return super().default(obj)

View File

@ -23,7 +23,7 @@ from scss.types import String
class HorizonScssFilter(DjangoScssFilter):
def __init__(self, *args, **kwargs):
super(HorizonScssFilter, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.namespace = Namespace()

View File

@ -68,7 +68,7 @@ class PageTitleMixin(object):
"""
context = self.render_context_with_title(context)
return super(PageTitleMixin, self).render_to_response(context)
return super().render_to_response(context)
def trace(name):
@ -83,7 +83,7 @@ def trace(name):
class HorizonTemplateView(PageTitleMixin, generic.TemplateView):
@trace('horizon.render_to_response')
def render_to_response(self, context):
return super(HorizonTemplateView, self).render_to_response(context)
return super().render_to_response(context)
class HorizonFormView(PageTitleMixin, generic.FormView):

View File

@ -42,11 +42,11 @@ LOG = logging.getLogger(__name__)
class WorkflowContext(dict):
def __init__(self, workflow, *args, **kwargs):
super(WorkflowContext, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self._workflow = workflow
def __setitem__(self, key, val):
super(WorkflowContext, self).__setitem__(key, val)
super().__setitem__(key, val)
return self._workflow._trigger_handlers(key)
def __delitem__(self, key):
@ -64,7 +64,7 @@ class ActionMetaclass(forms.forms.DeclarativeFieldsMetaclass):
# Pop Meta for later processing
opts = attrs.pop("Meta", None)
# Create our new class
cls_ = super(ActionMetaclass, cls).__new__(cls, name, bases, attrs)
cls_ = super().__new__(cls, name, bases, attrs)
# Process options from Meta
cls_.name = getattr(opts, "name", name)
cls_.slug = getattr(opts, "slug", slugify(name))
@ -151,9 +151,9 @@ class Action(forms.Form, metaclass=ActionMetaclass):
def __init__(self, request, context, *args, **kwargs):
if request.method == "POST":
super(Action, self).__init__(request.POST, initial=context)
super().__init__(request.POST, initial=context)
else:
super(Action, self).__init__(initial=context)
super().__init__(initial=context)
if not hasattr(self, "handle"):
raise AttributeError("The action %s must define a handle method."
@ -313,7 +313,7 @@ class Step(object):
return force_text(self.name)
def __init__(self, workflow):
super(Step, self).__init__()
super().__init__()
self.workflow = workflow
cls = self.__class__.__name__
@ -478,7 +478,7 @@ class Step(object):
class WorkflowMetaclass(type):
def __new__(cls, name, bases, attrs):
super(WorkflowMetaclass, cls).__new__(cls, name, bases, attrs)
super().__new__(cls, name, bases, attrs)
attrs["_cls_registry"] = []
return type.__new__(cls, name, bases, attrs)
@ -636,7 +636,7 @@ class Workflow(html.HTMLElement, metaclass=WorkflowMetaclass):
def __init__(self, request=None, context_seed=None, entry_point=None,
*args, **kwargs):
super(Workflow, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
if self.slug is None:
raise AttributeError("The workflow %s must have a slug."
% self.__class__.__name__)

View File

@ -59,7 +59,7 @@ class WorkflowView(hz_views.ModalBackdropMixin, generic.TemplateView):
step_errors = {}
def __init__(self):
super(WorkflowView, self).__init__()
super().__init__()
if not self.workflow_class:
raise AttributeError("You must set the workflow_class attribute "
"on %s." % self.__class__.__name__)
@ -87,7 +87,7 @@ class WorkflowView(hz_views.ModalBackdropMixin, generic.TemplateView):
This method should be overridden in subclasses to provide additional
context data to the template.
"""
context = super(WorkflowView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
workflow = self.get_workflow()
workflow.verify_integrity()
context[self.context_object_name] = workflow

View File

@ -77,7 +77,7 @@ class Login(django_auth_forms.AuthenticationForm):
widget=forms.PasswordInput(render_value=False))
def __init__(self, *args, **kwargs):
super(Login, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
fields_ordering = ['username', 'password', 'region']
if settings.OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT:
last_domain = self.request.COOKIES.get('login_domain', None)
@ -185,7 +185,7 @@ class DummyAuth(auth_plugin.BaseAuthPlugin):
class Password(forms.Form):
"""Form used for changing user's password without having to log in."""
def __init__(self, *args, **kwargs):
super(Password, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.fields = collections.OrderedDict([
(
'region',

View File

@ -37,7 +37,7 @@ class TestResponse(requests.Response):
def __init__(self, data):
self._text = None
super(TestResponse, self).__init__()
super().__init__()
if isinstance(data, dict):
self.status_code = data.get('status_code', 200)
self.headers = data.get('headers', None)

View File

@ -995,7 +995,7 @@ class OpenStackAuthTestsV3WithMock(test.TestCase):
'username': user.name}
def setUp(self):
super(OpenStackAuthTestsV3WithMock, self).setUp()
super().setUp()
if getattr(self, 'interface', None):
override = self.settings(OPENSTACK_ENDPOINT_TYPE=self.interface)

View File

@ -85,7 +85,7 @@ class UtilsTestCase(test.TestCase):
class BehindProxyTestCase(test.TestCase):
def setUp(self):
super(BehindProxyTestCase, self).setUp()
super().setUp()
self.request = http.HttpRequest()
def test_without_proxy(self):

View File

@ -57,7 +57,7 @@ class Server(base.APIResourceWrapper):
'OS-EXT-AZ:availability_zone', 'OS-DCF:diskConfig']
def __init__(self, apiresource, request):
super(Server, self).__init__(apiresource)
super().__init__(apiresource)
self.request = request
# TODO(gabriel): deprecate making a call to Glance as a fallback.

View File

@ -109,7 +109,7 @@ class Image(base.APIResourceWrapper):
def to_dict(self, show_ext_attrs=False):
if not isinstance(self._apiresource, abc.Iterable):
return self._apiresource.to_dict()
image_dict = super(Image, self).to_dict()
image_dict = super().to_dict()
image_dict['is_public'] = self.is_public
image_dict['properties'] = {
k: self._apiresource[k] for k in self._apiresource
@ -372,14 +372,14 @@ def get_image_upload_mode():
class ExternallyUploadedImage(Image):
def __init__(self, apiresource, request):
super(ExternallyUploadedImage, self).__init__(apiresource)
super().__init__(apiresource)
image_endpoint = base.url_for(request, 'image', 'publicURL')
upload_template = "%s/v2/images/%s/file"
self._url = upload_template % (image_endpoint, self.id)
self._token_id = request.user.token.id
def to_dict(self):
base_dict = super(ExternallyUploadedImage, self).to_dict()
base_dict = super().to_dict()
base_dict.update({
'upload_url': self._url,
'token_id': self._token_id

View File

@ -74,7 +74,7 @@ class Service(base.APIDictWrapper):
_attrs = ['id', 'type', 'name']
def __init__(self, service, region, *args, **kwargs):
super(Service, self).__init__(service, *args, **kwargs)
super().__init__(service, *args, **kwargs)
self.public_url = base.get_url_for_service(service, region,
'publicURL')
self.url = base.get_url_for_service(service, region,

View File

@ -78,7 +78,7 @@ class NeutronAPIDictWrapper(base.APIDictWrapper):
for key, value in apidict.items()
if ':' in key
})
super(NeutronAPIDictWrapper, self).__init__(apidict)
super().__init__(apidict)
def set_id_as_name_if_empty(self, length=8):
try:
@ -112,7 +112,7 @@ class Subnet(NeutronAPIDictWrapper):
def __init__(self, apidict):
apidict['ipver_str'] = get_ipver_str(apidict['ip_version'])
super(Subnet, self).__init__(apidict)
super().__init__(apidict)
AUTO_ALLOCATE_ID = '__auto_allocate__'
@ -142,7 +142,7 @@ class PreAutoAllocateNetwork(Network):
'subnets': [auto_allocated_subnet],
'tenant_id': tenant_id,
}
super(PreAutoAllocateNetwork, self).__init__(auto_allocated_network)
super().__init__(auto_allocated_network)
class Trunk(NeutronAPIDictWrapper):
@ -153,7 +153,7 @@ class Trunk(NeutronAPIDictWrapper):
return len(self._apidict.get('sub_ports', []))
def to_dict(self):
trunk_dict = super(Trunk, self).to_dict()
trunk_dict = super().to_dict()
trunk_dict['name_or_id'] = self.name_or_id
trunk_dict['subport_count'] = self.subport_count
return trunk_dict
@ -175,7 +175,7 @@ class Port(NeutronAPIDictWrapper):
apidict = copy.deepcopy(apidict)
wrapped_pairs = [PortAllowedAddressPair(pair) for pair in pairs]
apidict['allowed_address_pairs'] = wrapped_pairs
super(Port, self).__init__(apidict)
super().__init__(apidict)
class PortTrunkParent(Port):
@ -203,14 +203,14 @@ class PortTrunkSubport(Port):
def __init__(self, apidict, trunk_subport_info):
for field in ['trunk_id', 'segmentation_type', 'segmentation_id']:
apidict[field] = trunk_subport_info[field]
super(PortTrunkSubport, self).__init__(apidict)
super().__init__(apidict)
class PortAllowedAddressPair(NeutronAPIDictWrapper):
"""Wrapper for neutron port allowed address pairs."""
def __init__(self, addr_pair):
super(PortAllowedAddressPair, self).__init__(addr_pair)
super().__init__(addr_pair)
# Horizon references id property for table operations
self.id = addr_pair['ip_address']
@ -223,7 +223,7 @@ class RouterStaticRoute(NeutronAPIDictWrapper):
"""Wrapper for neutron routes extra route."""
def __init__(self, route):
super(RouterStaticRoute, self).__init__(route)
super().__init__(route)
# Horizon references id property for table operations
self.id = route['nexthop'] + ":" + route['destination']
@ -238,7 +238,7 @@ class SecurityGroup(NeutronAPIDictWrapper):
sg['security_group_rules'] = []
sg['rules'] = [SecurityGroupRule(rule, sg_dict)
for rule in sg['security_group_rules']]
super(SecurityGroup, self).__init__(sg)
super().__init__(sg)
def to_dict(self):
return {k: self._apidict[k] for k in self._apidict if k != 'rules'}
@ -283,7 +283,7 @@ class SecurityGroupRule(NeutronAPIDictWrapper):
rule['ip_range'] = {'cidr': cidr} if cidr else {}
group = self._get_secgroup_name(sgr['remote_group_id'], sg_dict)
rule['group'] = {'name': group} if group else {}
super(SecurityGroupRule, self).__init__(rule)
super().__init__(rule)
def __str__(self):
if 'name' in self.group:
@ -497,7 +497,7 @@ class FloatingIp(base.APIDictWrapper):
fip['ip'] = fip['floating_ip_address']
fip['fixed_ip'] = fip['fixed_ip_address']
fip['pool'] = fip['floating_network_id']
super(FloatingIp, self).__init__(fip)
super().__init__(fip)
class FloatingIpPool(base.APIDictWrapper):
@ -522,7 +522,7 @@ class FloatingIpTarget(base.APIDictWrapper):
'id': '%s_%s' % (port.id, ip_address),
'port_id': port.id,
'instance_id': port.device_id}
super(FloatingIpTarget, self).__init__(target)
super().__init__(target)
class FloatingIpManager(object):

View File

@ -21,7 +21,7 @@ class NaNJSONEncoder(json.JSONEncoder):
def __init__(self, nan_str='NaN', inf_str='1e+999', **kwargs):
self.nan_str = nan_str
self.inf_str = inf_str
super(NaNJSONEncoder, self).__init__(**kwargs)
super().__init__(**kwargs)
def iterencode(self, o, _one_shot=False):
"""JSON encoder with NaN and float inf support.

View File

@ -29,7 +29,7 @@ LOG = logging.getLogger(__name__)
class AjaxError(Exception):
def __init__(self, http_status, msg):
self.http_status = http_status
super(AjaxError, self).__init__(msg)
super().__init__(msg)
http_errors = exceptions.UNAUTHORIZED + exceptions.NOT_FOUND + \
@ -53,8 +53,8 @@ class CreatedResponse(_RestResponse):
else:
content = ''
content_type = None
super(CreatedResponse, self).__init__(status=201, content=content,
content_type=content_type)
super().__init__(status=201, content=content,
content_type=content_type)
self['Location'] = location
@ -66,7 +66,7 @@ class JSONResponse(_RestResponse):
content = jsonutils.dumps(data, sort_keys=settings.DEBUG,
cls=json_encoder)
super(JSONResponse, self).__init__(
super().__init__(
status=status,
content=content,
content_type='application/json',

View File

@ -56,7 +56,7 @@ class Container(base.APIDictWrapper):
class StorageObject(base.APIDictWrapper):
def __init__(self, apidict, container_name, orig_name=None, data=None):
super(StorageObject, self).__init__(apidict)
super().__init__(apidict)
self.container_name = container_name
self.orig_name = orig_name
self.data = data
@ -68,7 +68,7 @@ class StorageObject(base.APIDictWrapper):
class PseudoFolder(base.APIDictWrapper):
def __init__(self, apidict, container_name):
super(PseudoFolder, self).__init__(apidict)
super().__init__(apidict)
self.container_name = container_name
@property

View File

@ -26,7 +26,7 @@ class Developer(horizon.Dashboard):
def allowed(self, context):
if not settings.DEBUG:
return False
return super(Developer, self).allowed(context)
return super().allowed(context)
horizon.register(Developer)

View File

@ -42,7 +42,7 @@ class ProfilerClientMiddleware(object):
def __init__(self, get_response):
if not PROFILER_ENABLED:
raise exceptions.MiddlewareNotUsed()
super(ProfilerClientMiddleware, self).__init__()
super().__init__()
self.get_response = get_response
def __call__(self, request):

View File

@ -27,7 +27,7 @@ class IndexView(views.HorizonTemplateView):
page_title = _("OpenStack Profiler")
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
return context

View File

@ -38,7 +38,7 @@ class UpdateAggregateForm(forms.SelfHandlingForm):
)
def __init__(self, request, *args, **kwargs):
super(UpdateAggregateForm, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
old_availability_zone = self.initial['availability_zone']
if not old_availability_zone:
self.fields['availability_zone'].required = False

View File

@ -40,4 +40,4 @@ class Aggregates(horizon.Panel):
"likely due to a problem communicating with the Nova "
"endpoint. Host Aggregates panel will not be displayed.")
return False
return super(Aggregates, self).allowed(context)
return super().allowed(context)

View File

@ -75,7 +75,7 @@ class UpdateMetadataAction(tables.LinkAction):
def __init__(self, attrs=None, **kwargs):
kwargs['preempt'] = True
super(UpdateMetadataAction, self).__init__(attrs, **kwargs)
super().__init__(attrs, **kwargs)
def get_link_url(self, datum):
aggregate_id = self.table.get_object_id(datum)

View File

@ -81,7 +81,7 @@ class UpdateView(forms.ModalFormView):
'availability_zone': aggregate.availability_zone}
def get_context_data(self, **kwargs):
context = super(UpdateView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['id'] = self.kwargs['id']
return context
@ -107,6 +107,6 @@ class ManageHostsView(workflows.WorkflowView):
return {'id': self.kwargs["id"]}
def get_context_data(self, **kwargs):
context = super(ManageHostsView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['id'] = self.kwargs['id']
return context

View File

@ -36,7 +36,7 @@ class SetAggregateInfoAction(workflows.Action):
slug = "set_aggregate_info"
def clean(self):
cleaned_data = super(SetAggregateInfoAction, self).clean()
cleaned_data = super().clean()
name = cleaned_data.get('name', '')
try:
@ -64,9 +64,7 @@ class SetAggregateInfoStep(workflows.Step):
class AddHostsToAggregateAction(workflows.MembershipAction):
def __init__(self, request, *args, **kwargs):
super(AddHostsToAggregateAction, self).__init__(request,
*args,
**kwargs)
super().__init__(request, *args, **kwargs)
err_msg = _('Unable to get the available hosts')
default_role_field_name = self.get_default_role_field_name()
@ -95,9 +93,7 @@ class AddHostsToAggregateAction(workflows.MembershipAction):
class ManageAggregateHostsAction(workflows.MembershipAction):
def __init__(self, request, *args, **kwargs):
super(ManageAggregateHostsAction, self).__init__(request,
*args,
**kwargs)
super().__init__(request, *args, **kwargs)
err_msg = _('Unable to get the available hosts')
default_role_field_name = self.get_default_role_field_name()

View File

@ -33,6 +33,6 @@ class UpdateDefaultQuotasView(workflows.WorkflowView):
workflow_class = project_workflows.UpdateDefaultQuotas
def get_initial(self):
initial = super(UpdateDefaultQuotasView, self).get_initial()
initial = super().get_initial()
initial['disabled_quotas'] = quotas.get_disabled_quotas(self.request)
return initial

View File

@ -48,8 +48,7 @@ class UpdateDefaultComputeQuotasAction(workflows.Action):
label=_("Length of Injected File Path"))
def __init__(self, request, context, *args, **kwargs):
super(UpdateDefaultComputeQuotasAction, self).__init__(
request, context, *args, **kwargs)
super().__init__(request, context, *args, **kwargs)
disabled_quotas = context['disabled_quotas']
for field in disabled_quotas:
if field in self.fields:
@ -104,8 +103,7 @@ class UpdateDefaultVolumeQuotasAction(workflows.Action):
snapshots = forms.IntegerField(min_value=-1, label=_("Volume Snapshots"))
def __init__(self, request, context, *args, **kwargs):
super(UpdateDefaultVolumeQuotasAction, self).__init__(
request, context, *args, **kwargs)
super().__init__(request, context, *args, **kwargs)
disabled_quotas = context['disabled_quotas']
for field in disabled_quotas:
if field in self.fields:

View File

@ -69,7 +69,7 @@ class UpdateMetadata(tables.LinkAction):
def __init__(self, **kwargs):
kwargs['preempt'] = True
super(UpdateMetadata, self).__init__(**kwargs)
super().__init__(**kwargs)
def get_link_url(self, datum):
obj_id = self.table.get_object_id(datum)

View File

@ -76,7 +76,7 @@ class CreateFlavorInfoAction(workflows.Action):
return name
def clean(self):
cleaned_data = super(CreateFlavorInfoAction, self).clean()
cleaned_data = super().clean()
name = cleaned_data.get('name')
flavor_id = cleaned_data.get('flavor_id')
@ -114,7 +114,7 @@ class CreateFlavorInfo(workflows.Step):
class FlavorAccessAction(workflows.MembershipAction):
def __init__(self, request, *args, **kwargs):
super(FlavorAccessAction, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
err_msg = _('Unable to retrieve flavor access list. '
'Please try again later.')
context = args[0]

View File

@ -39,7 +39,7 @@ class AdminFloatingIpAllocate(forms.SelfHandlingForm):
required=False)
def __init__(self, *args, **kwargs):
super(AdminFloatingIpAllocate, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
floating_pool_list = kwargs.get('initial', {}).get('pool_list', [])
self.fields['pool'].choices = floating_pool_list
tenant_list = kwargs.get('initial', {}).get('tenant_list', [])

View File

@ -129,7 +129,7 @@ class DetailView(views.HorizonTemplateView):
exceptions.handle(self.request, msg, redirect=url)
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
floating_ip_id = self.kwargs['floating_ip_id']
floating_ip = self._get_corresponding_data("floating IP",

View File

@ -27,7 +27,7 @@ from openstack_dashboard.dashboards.admin.group_types.specs \
class GroupTypeSpecMixin(object):
def get_context_data(self, **kwargs):
context = super(GroupTypeSpecMixin, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
try:
context['group_type'] = api.cinder.group_type_get(
self.request, self.kwargs['type_id'])
@ -74,7 +74,7 @@ class CreateView(GroupTypeSpecMixin, forms.ModalFormView):
return reverse(self.success_url)
def get_context_data(self, **kwargs):
context = super(CreateView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
args = (self.kwargs['type_id'],)
context['submit_url'] = reverse(self.submit_url, args=args)
return context
@ -111,14 +111,14 @@ class EditView(GroupTypeSpecMixin, forms.ModalFormView):
'value': group_specs.get(key, '')}
def get_context_data(self, **kwargs):
context = super(EditView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
args = (self.kwargs['type_id'], self.kwargs['key'],)
context['submit_url'] = reverse(self.submit_url, args=args)
context['modal_header'] = self.modal_header % self.kwargs['key']
return context
def form_invalid(self, form):
context = super(EditView, self).get_context_data()
context = super().get_context_data()
context = self._populate_context(context)
context['form'] = form
context['modal_header'] = self.modal_header % self.kwargs['key']

View File

@ -77,7 +77,7 @@ class EditGroupTypeView(forms.ModalFormView):
return group_type
def get_context_data(self, **kwargs):
context = super(EditGroupTypeView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['group_type'] = self.get_data()
return context

View File

@ -35,7 +35,7 @@ class EvacuateHostForm(forms.SelfHandlingForm):
initial=False, required=False)
def __init__(self, request, *args, **kwargs):
super(EvacuateHostForm, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
initial = kwargs.get('initial', {})
self.fields['target_host'].choices = \
self.populate_host_choices(request, initial)

View File

@ -30,7 +30,7 @@ class EvacuateHost(tables.LinkAction):
policy_rules = (("compute", "os_compute_api:os-evacuate"),)
def __init__(self, **kwargs):
super(EvacuateHost, self).__init__(**kwargs)
super().__init__(**kwargs)
self.name = kwargs.get('name', self.name)
def allowed(self, request, instance):

View File

@ -31,7 +31,7 @@ class EvacuateHostView(forms.ModalFormView):
submit_label = page_title
def get_context_data(self, **kwargs):
context = super(EvacuateHostView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context["compute_host"] = self.kwargs['compute_host']
return context
@ -47,7 +47,7 @@ class EvacuateHostView(forms.ModalFormView):
exceptions.handle(self.request, msg, redirect=redirect)
def get_initial(self):
initial = super(EvacuateHostView, self).get_initial()
initial = super().get_initial()
hosts = self.get_active_compute_hosts_names()
current_host = self.kwargs['compute_host']
initial.update({'current_host': current_host,
@ -64,12 +64,12 @@ class DisableServiceView(forms.ModalFormView):
submit_label = page_title
def get_context_data(self, **kwargs):
context = super(DisableServiceView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context["compute_host"] = self.kwargs['compute_host']
return context
def get_initial(self):
initial = super(DisableServiceView, self).get_initial()
initial = super().get_initial()
initial.update({'host': self.kwargs['compute_host']})
return initial
@ -83,12 +83,12 @@ class MigrateHostView(forms.ModalFormView):
submit_label = page_title
def get_context_data(self, **kwargs):
context = super(MigrateHostView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context["compute_host"] = self.kwargs['compute_host']
return context
def get_initial(self):
initial = super(MigrateHostView, self).get_initial()
initial = super().get_initial()
current_host = self.kwargs['compute_host']
initial.update({

View File

@ -31,7 +31,7 @@ class AdminIndexView(tabs.TabbedTableView):
page_title = _("All Hypervisors")
def get_context_data(self, **kwargs):
context = super(AdminIndexView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
try:
context["stats"] = api.nova.hypervisor_stats(self.request)
except Exception:
@ -65,7 +65,7 @@ class AdminDetailView(tables.DataTableView):
return instances
def get_context_data(self, **kwargs):
context = super(AdminDetailView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
hypervisor_name = self.kwargs['hypervisor'].split('_', 1)[1]
breadcrumb = [(hypervisor_name, None)]
context['custom_breadcrumb'] = breadcrumb

View File

@ -49,7 +49,7 @@ class UpdateMetadata(tables.LinkAction):
def __init__(self, attrs=None, **kwargs):
kwargs['preempt'] = True
super(UpdateMetadata, self).__init__(attrs, **kwargs)
super().__init__(attrs, **kwargs)
def get_link_url(self, datum):
image_id = self.table.get_object_id(datum)

View File

@ -164,7 +164,7 @@ class UpdateView(views.UpdateView):
class DetailView(views.DetailView):
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
table = project_tables.AdminImagesTable(self.request)
context["url"] = reverse('horizon:admin:images:index')
context["actions"] = table.render_row_actions(context["image"])

View File

@ -214,11 +214,9 @@ class NetworkAgentsTable(tables.DataTable):
filters.timesince))
def __init__(self, request, data=None, needs_form_wrapper=None, **kwargs):
super(NetworkAgentsTable, self).__init__(
request,
data=data,
needs_form_wrapper=needs_form_wrapper,
**kwargs)
super().__init__(request, data=data,
needs_form_wrapper=needs_form_wrapper,
**kwargs)
availability_zone_supported = api.neutron.is_extension_supported(
request,

View File

@ -32,7 +32,7 @@ class IndexView(tabs.TabbedTableView):
page_title = _("System Information")
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
try:
context["version"] = version.version_info.version_string()
except Exception:

View File

@ -39,7 +39,7 @@ class LiveMigrateForm(forms.SelfHandlingForm):
initial=False, required=False)
def __init__(self, request, *args, **kwargs):
super(LiveMigrateForm, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
initial = kwargs.get('initial', {})
instance_id = initial.get('instance_id')
self.fields['instance_id'] = forms.CharField(widget=forms.HiddenInput,

View File

@ -94,7 +94,7 @@ class LiveMigrateInstance(policy.PolicyTargetMixin,
class AdminUpdateRow(project_tables.UpdateRow):
def get_data(self, request, instance_id):
instance = super(AdminUpdateRow, self).get_data(request, instance_id)
instance = super().get_data(request, instance_id)
try:
tenant = api.keystone.tenant_get(request,
instance.tenant_id,

View File

@ -205,7 +205,7 @@ class LiveMigrateView(forms.ModalFormView):
success_label = page_title
def get_context_data(self, **kwargs):
context = super(LiveMigrateView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context["instance_id"] = self.kwargs['instance_id']
return context
@ -231,7 +231,7 @@ class LiveMigrateView(forms.ModalFormView):
exceptions.handle(self.request, msg, redirect=redirect)
def get_initial(self):
initial = super(LiveMigrateView, self).get_initial()
initial = super().get_initial()
_object = self.get_object()
if _object:
current_host = getattr(_object, 'OS-EXT-SRV-ATTR:host', '')

View File

@ -61,7 +61,7 @@ class CreateNamespaceForm(forms.SelfHandlingForm):
protected = forms.BooleanField(label=_("Protected"), required=False)
def clean(self):
data = super(CreateNamespaceForm, self).clean()
data = super().clean()
# The key can be missing based on particular upload
# conditions. Code defensively for it here...

View File

@ -101,7 +101,7 @@ class UpdateView(forms.ModalFormView):
submit_label = _("Save Changes")
def get_context_data(self, **kwargs):
context = super(UpdateView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
args = (self.kwargs['namespace_id'],)
context["namespace_id"] = self.kwargs['namespace_id']
context["submit_url"] = reverse(self.submit_url, args=args)
@ -132,7 +132,7 @@ class DetailView(tabs.TabView):
page_title = "{{ namespace.namespace }}"
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context["namespace"] = self.get_data()
return context
@ -171,7 +171,7 @@ class ManageResourceTypes(forms.ModalFormView):
'resource_types': resource_types}
def get_context_data(self, **kwargs):
context = super(ManageResourceTypes, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
selected_type_names = [selected_type['name'] for selected_type in
context['form'].initial['resource_types']]

View File

@ -32,7 +32,7 @@ class AddDHCPAgent(forms.SelfHandlingForm):
help_text=_("Choose an DHCP Agent to attach to."))
def __init__(self, request, *args, **kwargs):
super(AddDHCPAgent, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
initial = kwargs.get('initial', {})
self.fields['agent'].choices = self._populate_agent_choices(request,
initial)

View File

@ -40,7 +40,7 @@ class AddView(forms.ModalFormView):
args=(self.kwargs['network_id'],))
def get_context_data(self, **kwargs):
context = super(AddView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['network_id'] = self.kwargs['network_id']
args = (self.kwargs['network_id'],)
context['submit_url'] = reverse(self.submit_url, args=args)
@ -48,7 +48,7 @@ class AddView(forms.ModalFormView):
return context
def get_initial(self):
initial = super(AddView, self).get_initial()
initial = super().get_initial()
agents = self._get_agents()
network_id = self.kwargs['network_id']
try:

View File

@ -153,7 +153,7 @@ class CreateNetwork(forms.SelfHandlingForm):
return cls(request, *args, **kwargs)
def __init__(self, request, *args, **kwargs):
super(CreateNetwork, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
tenant_choices = [('', _("Select a project"))]
tenants, has_more = api.keystone.tenant_list(request)
for tenant in tenants:
@ -293,7 +293,7 @@ class CreateNetwork(forms.SelfHandlingForm):
exceptions.handle(request, msg, redirect=redirect)
def clean(self):
cleaned_data = super(CreateNetwork, self).clean()
cleaned_data = super().clean()
if api.neutron.is_extension_supported(self.request, 'provider'):
self._clean_physical_network(cleaned_data)
self._clean_segmentation_id(cleaned_data)

View File

@ -40,7 +40,7 @@ class DetailView(project_views.DetailView):
tab_group_class = ports_tabs.PortDetailTabs
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
port = context["port"]
network_url = "horizon:admin:networks:detail"
subnet_url = "horizon:admin:networks:subnets:detail"
@ -70,7 +70,7 @@ class UpdateView(project_views.UpdateView):
failure_url = 'horizon:admin:networks:detail'
def get_initial(self):
initial = super(UpdateView, self).get_initial()
initial = super().get_initial()
port = self._get_object()
if 'binding__host_id' in port:
initial['binding__host_id'] = port['binding__host_id']

View File

@ -56,7 +56,7 @@ class CreatePort(project_workflow.CreatePort):
args=(self.context['network_id'],))
def _construct_parameters(self, context):
params = super(CreatePort, self)._construct_parameters(context)
params = super()._construct_parameters(context)
params.update({'tenant_id': context['target_tenant_id'],
'binding__host_id': context['binding__host_id']})
return params
@ -97,7 +97,7 @@ class UpdatePort(project_workflow.UpdatePort):
args=(self.context['network_id'],))
def _construct_parameters(self, data):
params = super(UpdatePort, self)._construct_parameters(data)
params = super()._construct_parameters(data)
params.update({'device_id': data['device_id'],
'device_owner': data['device_owner'],
'binding__host_id': data['binding__host_id'],

View File

@ -120,10 +120,9 @@ class SubnetsTable(tables.DataTable):
hidden_title = False
def __init__(self, request, data=None, needs_form_wrapper=None, **kwargs):
super(SubnetsTable, self).__init__(
request, data=data,
needs_form_wrapper=needs_form_wrapper,
**kwargs)
super().__init__(request, data=data,
needs_form_wrapper=needs_form_wrapper,
**kwargs)
if not api.neutron.is_extension_supported(request,
'network-ip-availability'):
del self.columns['subnet_used_ips']
@ -168,7 +167,7 @@ class SubnetsTab(project_tabs_subnets_tab):
def get_subnets_data(self):
try:
subnets = super(SubnetsTab, self).get_subnets_data()
subnets = super().get_subnets_data()
network_id = self.tab_group.kwargs['network_id']
if api.neutron.is_extension_supported(self.request,

View File

@ -32,7 +32,7 @@ class UpdateView(project_views.UpdateView):
class DetailView(project_views.DetailView):
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
subnet = context['subnet']
table = admin_tables.SubnetsTable(self.request,
network_id=subnet.network_id)

View File

@ -119,10 +119,9 @@ class NetworksTable(tables.DataTable):
row_actions = (EditNetwork, CreateSubnet, project_tables.DeleteNetwork)
def __init__(self, request, data=None, needs_form_wrapper=None, **kwargs):
super(NetworksTable, self).__init__(
request, data=data,
needs_form_wrapper=needs_form_wrapper,
**kwargs)
super().__init__(request, data=data,
needs_form_wrapper=needs_form_wrapper,
**kwargs)
try:
if not api.neutron.is_extension_supported(
request, "network_availability_zone"):

View File

@ -118,7 +118,7 @@ class IndexView(tables.DataTableView):
return networks
def get_filters(self, filters=None, filters_map=None):
filters = super(IndexView, self).get_filters(filters, filters_map)
filters = super().get_filters(filters, filters_map)
if 'project' in filters:
tenants = api.keystone.tenant_list(self.request)[0]
tenant_filter_ids = [t.id for t in tenants
@ -179,7 +179,7 @@ class DetailView(tabs.TabbedTableView):
return reverse_lazy('horizon:admin:networks:index')
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
network = self._get_data()
context["network"] = network
table = networks_tables.NetworksTable(self.request)

View File

@ -26,13 +26,11 @@ class CreateNetworkInfoAction(network_workflows.CreateNetworkInfoAction):
self.create_network_form = context.get('create_network_form')
self.base_fields = self.create_network_form.base_fields
super(CreateNetworkInfoAction, self).__init__(
request, context, *args, **kwargs)
super().__init__(request, context, *args, **kwargs)
self.fields = self.create_network_form.fields
def clean(self):
self.create_network_form.cleaned_data = super(
CreateNetworkInfoAction, self).clean()
self.create_network_form.cleaned_data = super().clean()
self.create_network_form._changed_data = self.changed_data
self.create_network_form._errors = self.errors
return self.create_network_form.clean()
@ -48,11 +46,10 @@ class CreateNetworkInfo(network_workflows.CreateNetworkInfo):
def __init__(self, workflow):
self.contributes = tuple(workflow.create_network_form.fields.keys())
super(CreateNetworkInfo, self).__init__(workflow)
super().__init__(workflow)
def prepare_action_context(self, request, context):
context = super(CreateNetworkInfo, self).prepare_action_context(
request, context)
context = super().prepare_action_context(request, context)
context['create_network_form'] = self.workflow.create_network_form
return context
@ -66,11 +63,8 @@ class CreateNetwork(network_workflows.CreateNetwork):
*args, **kwargs):
self.create_network_form = networks_forms.CreateNetwork(
request, *args, **kwargs)
super(CreateNetwork, self).__init__(
request=request,
context_seed=context_seed,
entry_point=entry_point,
*args, **kwargs)
super().__init__(request=request, context_seed=context_seed,
entry_point=entry_point, *args, **kwargs)
def get_success_url(self):
return reverse("horizon:admin:networks:index")

View File

@ -50,12 +50,12 @@ class GlobalOverview(usage.UsageView):
csv_response_class = GlobalUsageCsvRenderer
def get_context_data(self, **kwargs):
context = super(GlobalOverview, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['monitoring'] = settings.EXTERNAL_MONITORING
return context
def get_data(self):
data = super(GlobalOverview, self).get_data()
data = super().get_data()
# Pre-fill project names
try:
projects, has_more = api.keystone.tenant_list(self.request)

View File

@ -79,7 +79,7 @@ class CreatePolicyForm(forms.SelfHandlingForm):
required=False)
def clean(self):
cleaned_data = super(CreatePolicyForm, self).clean()
cleaned_data = super().clean()
action_object_type = cleaned_data.get("action_object_type")
error_msg = _("This field is required.")
if action_object_type in ["shared_network", "external_network"]:
@ -91,7 +91,7 @@ class CreatePolicyForm(forms.SelfHandlingForm):
return cleaned_data
def __init__(self, request, *args, **kwargs):
super(CreatePolicyForm, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
tenant_choices = [('', _("Select a project"))]
tenants, has_more = api.keystone.tenant_list(request)
tenant_choices.append(("*", "*"))
@ -161,7 +161,7 @@ class UpdatePolicyForm(forms.SelfHandlingForm):
failure_url = 'horizon:admin:rbac_policies:index'
def __init__(self, request, *args, **kwargs):
super(UpdatePolicyForm, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
tenant_choices = [('', _("Select a project"))]
tenant_choices.append(("*", "*"))
tenants, has_more = api.keystone.tenant_list(request)

View File

@ -44,7 +44,7 @@ class OverviewTab(tabs.Tab):
return rbac_policy
def get_context_data(self, request, **kwargs):
context = super(OverviewTab, self).get_context_data(request, **kwargs)
context = super().get_context_data(request, **kwargs)
rbac_policy = self._get_data()
context["rbac_policy"] = rbac_policy

View File

@ -116,7 +116,7 @@ class UpdateView(forms.ModalFormView):
page_title = _("Update RBAC Policy")
def get_context_data(self, **kwargs):
context = super(UpdateView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
args = (self.kwargs['rbac_policy_id'],)
context["rbac_policy_id"] = self.kwargs['rbac_policy_id']
context["submit_url"] = reverse(self.submit_url, args=args)

View File

@ -27,7 +27,7 @@ class CreateForm(r_forms.CreateForm):
failure_url = 'horizon:admin:routers:index'
def __init__(self, request, *args, **kwargs):
super(CreateForm, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
tenant_choices = [('', _("Select a project"))]
tenants, __ = api.keystone.tenant_list(request)
for tenant in tenants:

View File

@ -55,7 +55,7 @@ class RouterMixin(r_test.RouterMixin):
return res
def _check_get_detail(self, router, extraroute=True):
super(RouterMixin, self)._check_get_detail(router, extraroute)
super()._check_get_detail(router, extraroute)
self.mock_is_extension_supported.assert_any_call(
test.IsHttpRequest(), 'l3_agent_scheduler')
if self.support_l3_agent:
@ -191,7 +191,7 @@ class RouterTests(RouterMixin, r_test.RouterTestCase, test.BaseAdminViewTests):
@test.create_mocks({api.neutron: ('list_l3_agent_hosting_router',)})
def test_router_detail(self):
super(RouterTests, self).test_router_detail()
super().test_router_detail()
@test.create_mocks({api.neutron: ('router_list',
'network_list',
@ -358,8 +358,8 @@ class RouterRouteTests(RouterMixin,
@test.create_mocks({api.neutron: ('list_l3_agent_hosting_router',)})
def test_extension_hides_without_routes(self):
super(RouterRouteTests, self).test_extension_hides_without_routes()
super().test_extension_hides_without_routes()
@test.create_mocks({api.neutron: ('list_l3_agent_hosting_router',)})
def test_routerroute_detail(self):
super(RouterRouteTests, self).test_routerroute_detail()
super().test_routerroute_detail()

View File

@ -84,7 +84,7 @@ class IndexView(r_views.IndexView, n_views.IndexView):
return routers
def get_filters(self, filters=None, filters_map=None):
filters = super(IndexView, self).get_filters(filters, filters_map)
filters = super().get_filters(filters, filters_map)
if 'project' in filters:
tenants = api.keystone.tenant_list(self.request)[0]
tenants_filter_ids = [t.id for t in tenants
@ -100,7 +100,7 @@ class DetailView(r_views.DetailView):
network_url = 'horizon:admin:networks:detail'
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
table = rtbl.RoutersTable(self.request)
context["url"] = self.failure_url
router = context["router"]

View File

@ -53,7 +53,7 @@ class UpdateStatus(forms.SelfHandlingForm):
current_status = kwargs['initial']['status']
kwargs['initial'].pop('status')
super(UpdateStatus, self).__init__(request, *args, **kwargs)
super().__init__(request, *args, **kwargs)
self.fields['status'].choices = populate_status_choices(
current_status, STATUS_CHOICES)

View File

@ -38,7 +38,7 @@ class UpdateRow(snapshots_tables.UpdateRow):
ajax = True
def get_data(self, request, snapshot_id):
snapshot = super(UpdateRow, self).get_data(request, snapshot_id)
snapshot = super().get_data(request, snapshot_id)
snapshot.host_name = getattr(snapshot._volume,
'os-vol-host-attr:host')
tenant_id = getattr(snapshot._volume,

View File

@ -119,7 +119,7 @@ class UpdateStatusView(forms.ModalFormView):
return self._object
def get_context_data(self, **kwargs):
context = super(UpdateStatusView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['snapshot_id'] = self.kwargs["snapshot_id"]
args = (self.kwargs['snapshot_id'],)
context['submit_url'] = reverse(self.submit_url, args=args)
@ -136,7 +136,7 @@ class DetailView(views.DetailView):
volume_url = 'horizon:admin:volumes:detail'
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
snapshot = self.get_data()
snapshot.volume_url = reverse(self.volume_url,
args=(snapshot.volume_id,))

View File

@ -33,7 +33,7 @@ class Trunks(horizon.Panel):
request = context['request']
try:
return (
super(Trunks, self).allowed(context) and
super().allowed(context) and
request.user.has_perms(self.permissions) and
neutron.is_extension_supported(request,
extension_alias='trunk')

View File

@ -75,7 +75,7 @@ class DetailView(project_views.DetailView):
tab_group_class = admin_tabs.DetailTabs
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
table = admin_tables.GroupSnapshotsTable(self.request)
context["actions"] = table.render_row_actions(context["vg_snapshot"])
return context

Some files were not shown because too many files have changed in this diff Show More