Run pyupgrade to clean up Python 2 syntaxes
Update all .py source files by $ pyupgrade --py3-only $(git ls-files | grep ".py$") to modernize the code according to Python 3 syntaxes. Also add the pyupgrade hook to pre-commit to avoid merging additional Python 2 syntaxes. Change-Id: Iad18362b251f8ca947976e6150a1ed17ee4c5327
This commit is contained in:
parent
51cf6f8fa8
commit
8bd8a07c08
@ -1,6 +1,6 @@
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v4.5.0
|
||||
rev: v5.0.0
|
||||
hooks:
|
||||
- id: trailing-whitespace
|
||||
# Replaces or checks mixed line ending
|
||||
@ -19,12 +19,17 @@ repos:
|
||||
- id: check-yaml
|
||||
files: .*\.(yaml|yml)$
|
||||
- repo: https://opendev.org/openstack/hacking
|
||||
rev: 6.1.0
|
||||
rev: 7.0.0
|
||||
hooks:
|
||||
- id: hacking
|
||||
additional_dependencies: []
|
||||
- repo: https://github.com/PyCQA/bandit
|
||||
rev: 1.7.6
|
||||
rev: 1.7.10
|
||||
hooks:
|
||||
- id: bandit
|
||||
args: ['-x', 'tests', '-s', 'B314,B405']
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v3.18.0
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
args: [--py3-only]
|
||||
|
@ -1,4 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (C) 2020 Red Hat, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
@ -24,7 +24,7 @@ from oslo_config import cfg
|
||||
from oslo_reports.models import conf as cm
|
||||
|
||||
|
||||
class ConfigReportGenerator(object):
|
||||
class ConfigReportGenerator:
|
||||
"""A Configuration Data Generator
|
||||
|
||||
This generator returns
|
||||
|
@ -25,7 +25,7 @@ import psutil
|
||||
from oslo_reports.models import process as pm
|
||||
|
||||
|
||||
class ProcessReportGenerator(object):
|
||||
class ProcessReportGenerator:
|
||||
"""A Process Data Generator
|
||||
|
||||
This generator returns a
|
||||
|
@ -46,7 +46,7 @@ def _find_objects(t):
|
||||
return [o for o in gc.get_objects() if isinstance(o, t)]
|
||||
|
||||
|
||||
class ThreadReportGenerator(object):
|
||||
class ThreadReportGenerator:
|
||||
"""A Thread Data Generator
|
||||
|
||||
This generator returns a collection of
|
||||
@ -63,10 +63,10 @@ class ThreadReportGenerator(object):
|
||||
self.traceback = curr_thread_traceback
|
||||
|
||||
def __call__(self):
|
||||
threadModels = dict(
|
||||
(thread_id, tm.ThreadModel(thread_id, stack))
|
||||
threadModels = {
|
||||
thread_id: tm.ThreadModel(thread_id, stack)
|
||||
for thread_id, stack in sys._current_frames().items()
|
||||
)
|
||||
}
|
||||
|
||||
if self.traceback is not None:
|
||||
curr_thread_id = threading.current_thread().ident
|
||||
@ -77,7 +77,7 @@ class ThreadReportGenerator(object):
|
||||
text_view=text_views.MultiView())
|
||||
|
||||
|
||||
class GreenThreadReportGenerator(object):
|
||||
class GreenThreadReportGenerator:
|
||||
"""A Green Thread Data Generator
|
||||
|
||||
This generator returns a collection of
|
||||
|
@ -23,7 +23,7 @@ generators for generating the model in
|
||||
from oslo_reports.models import version as vm
|
||||
|
||||
|
||||
class PackageReportGenerator(object):
|
||||
class PackageReportGenerator:
|
||||
"""A Package Information Data Generator
|
||||
|
||||
This generator returns
|
||||
|
@ -84,7 +84,7 @@ except ImportError:
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class GuruMeditation(object):
|
||||
class GuruMeditation:
|
||||
"""A Guru Meditation Report Mixin/Base Class
|
||||
|
||||
This class is a base class for Guru Meditation Reports.
|
||||
@ -104,7 +104,7 @@ class GuruMeditation(object):
|
||||
self.version_obj = version_obj
|
||||
self.traceback = sig_handler_tb
|
||||
|
||||
super(GuruMeditation, self).__init__(*args, **kwargs)
|
||||
super().__init__(*args, **kwargs)
|
||||
self.start_section_index = len(self.sections)
|
||||
|
||||
@classmethod
|
||||
@ -179,8 +179,8 @@ class GuruMeditation(object):
|
||||
mtime = stat.st_mtime
|
||||
except OSError:
|
||||
msg = ("Guru Meditation Report cannot read " +
|
||||
"'{0}' file".format(filepath))
|
||||
raise IOError(msg)
|
||||
"'{}' file".format(filepath))
|
||||
raise OSError(msg)
|
||||
finally:
|
||||
time.sleep(interval)
|
||||
|
||||
@ -223,7 +223,7 @@ class GuruMeditation(object):
|
||||
if log_dir:
|
||||
service_name = service_name or os.path.basename(
|
||||
inspect.stack()[-1][1])
|
||||
filename = "%s_gurumeditation_%s" % (
|
||||
filename = "{}_gurumeditation_{}".format(
|
||||
service_name, timeutils.utcnow().strftime(
|
||||
cls.timestamp_fmt))
|
||||
filepath = os.path.join(log_dir, filename)
|
||||
@ -263,7 +263,7 @@ class GuruMeditation(object):
|
||||
|
||||
def run(self):
|
||||
self._readd_sections()
|
||||
return super(GuruMeditation, self).run()
|
||||
return super().run()
|
||||
|
||||
|
||||
# GuruMeditation must come first to get the correct MRO
|
||||
@ -291,5 +291,4 @@ class TextGuruMeditation(GuruMeditation, report.TextReport):
|
||||
"""
|
||||
|
||||
def __init__(self, version_obj, traceback=None):
|
||||
super(TextGuruMeditation, self).__init__(version_obj, traceback,
|
||||
'Guru Meditation')
|
||||
super().__init__(version_obj, traceback, 'Guru Meditation')
|
||||
|
@ -36,7 +36,7 @@ class ConfigModel(mwdv.ModelWithDefaultViews):
|
||||
def __init__(self, conf_obj):
|
||||
kv_view = generic_text_views.KeyValueView(dict_sep=": ",
|
||||
before_dict='')
|
||||
super(ConfigModel, self).__init__(text_view=kv_view)
|
||||
super().__init__(text_view=kv_view)
|
||||
|
||||
def opt_title(optname, co):
|
||||
return co._opts[optname]['opt'].name
|
||||
@ -47,20 +47,20 @@ class ConfigModel(mwdv.ModelWithDefaultViews):
|
||||
else:
|
||||
return value
|
||||
|
||||
self['default'] = dict(
|
||||
(opt_title(optname, conf_obj),
|
||||
opt_value(conf_obj._opts[optname], conf_obj[optname]))
|
||||
self['default'] = {
|
||||
opt_title(optname, conf_obj):
|
||||
opt_value(conf_obj._opts[optname], conf_obj[optname])
|
||||
for optname in conf_obj._opts
|
||||
)
|
||||
}
|
||||
|
||||
groups = {}
|
||||
for groupname in conf_obj._groups:
|
||||
group_obj = conf_obj._groups[groupname]
|
||||
curr_group_opts = dict(
|
||||
(opt_title(optname, group_obj),
|
||||
opt_value(group_obj._opts[optname],
|
||||
conf_obj[groupname][optname]))
|
||||
for optname in group_obj._opts)
|
||||
curr_group_opts = {
|
||||
opt_title(optname, group_obj):
|
||||
opt_value(group_obj._opts[optname],
|
||||
conf_obj[groupname][optname])
|
||||
for optname in group_obj._opts}
|
||||
groups[group_obj.name] = curr_group_opts
|
||||
|
||||
self.update(groups)
|
||||
|
@ -32,7 +32,7 @@ class ProcessModel(mwdv.ModelWithDefaultViews):
|
||||
"""
|
||||
|
||||
def __init__(self, process):
|
||||
super(ProcessModel, self).__init__(
|
||||
super().__init__(
|
||||
text_view=text_views.ProcessView())
|
||||
|
||||
self['pid'] = process.pid
|
||||
|
@ -34,7 +34,7 @@ class StackTraceModel(mwdv.ModelWithDefaultViews):
|
||||
"""
|
||||
|
||||
def __init__(self, stack_state):
|
||||
super(StackTraceModel, self).__init__(
|
||||
super().__init__(
|
||||
text_view=text_views.StackTraceView())
|
||||
|
||||
if (stack_state is not None):
|
||||
@ -72,7 +72,7 @@ class ThreadModel(mwdv.ModelWithDefaultViews):
|
||||
|
||||
# threadId, stack in sys._current_frams().items()
|
||||
def __init__(self, thread_id, stack):
|
||||
super(ThreadModel, self).__init__(text_view=text_views.ThreadView())
|
||||
super().__init__(text_view=text_views.ThreadView())
|
||||
|
||||
self['thread_id'] = thread_id
|
||||
self['stack_trace'] = StackTraceModel(stack)
|
||||
@ -95,6 +95,6 @@ class GreenThreadModel(mwdv.ModelWithDefaultViews):
|
||||
|
||||
# gr in greenpool.coroutines_running --> gr.gr_frame
|
||||
def __init__(self, stack):
|
||||
super(GreenThreadModel, self).__init__(
|
||||
super().__init__(
|
||||
{'stack_trace': StackTraceModel(stack)},
|
||||
text_view=text_views.GreenThreadView())
|
||||
|
@ -35,7 +35,7 @@ class PackageModel(mwdv.ModelWithDefaultViews):
|
||||
"""
|
||||
|
||||
def __init__(self, vendor, product, version):
|
||||
super(PackageModel, self).__init__(
|
||||
super().__init__(
|
||||
text_view=generic_text_views.KeyValueView()
|
||||
)
|
||||
|
||||
|
@ -62,11 +62,11 @@ class ModelWithDefaultViews(base_model.ReportModel):
|
||||
if k.endswith('_view'):
|
||||
self.views[k[:-5]] = kwargs[k]
|
||||
del newargs[k]
|
||||
super(ModelWithDefaultViews, self).__init__(*args, **newargs)
|
||||
super().__init__(*args, **newargs)
|
||||
|
||||
def set_current_view_type(self, tp, visited=None):
|
||||
self.attached_view = self.views[tp]
|
||||
super(ModelWithDefaultViews, self).set_current_view_type(tp, visited)
|
||||
super().set_current_view_type(tp, visited)
|
||||
|
||||
def __getattr__(self, attrname):
|
||||
if attrname[:3] == 'to_':
|
||||
@ -78,4 +78,4 @@ class ModelWithDefaultViews(base_model.ReportModel):
|
||||
" a default view for "
|
||||
"{tp}").format(cn=type(self), tp=attrname[3:]))
|
||||
else:
|
||||
return super(ModelWithDefaultViews, self).__getattr__(attrname)
|
||||
return super().__getattr__(attrname)
|
||||
|
@ -23,7 +23,7 @@ sections.
|
||||
from oslo_reports.views.text import header as header_views
|
||||
|
||||
|
||||
class BasicReport(object):
|
||||
class BasicReport:
|
||||
"""A Basic Report
|
||||
|
||||
A Basic Report consists of a collection of :class:`ReportSection`
|
||||
@ -76,7 +76,7 @@ class BasicReport(object):
|
||||
return "\n".join(str(sect) for sect in self.sections)
|
||||
|
||||
|
||||
class ReportSection(object):
|
||||
class ReportSection:
|
||||
"""A Report Section
|
||||
|
||||
A report section contains a generator and a top-level view. When something
|
||||
@ -122,7 +122,7 @@ class ReportOfType(BasicReport):
|
||||
|
||||
def __init__(self, tp):
|
||||
self.output_type = tp
|
||||
super(ReportOfType, self).__init__()
|
||||
super().__init__()
|
||||
|
||||
def add_section(self, view, generator, index=None):
|
||||
def with_type(gen):
|
||||
@ -136,7 +136,7 @@ class ReportOfType(BasicReport):
|
||||
return res
|
||||
return newgen
|
||||
|
||||
super(ReportOfType, self).add_section(
|
||||
super().add_section(
|
||||
view,
|
||||
with_type(generator),
|
||||
index
|
||||
@ -153,7 +153,7 @@ class TextReport(ReportOfType):
|
||||
"""
|
||||
|
||||
def __init__(self, name):
|
||||
super(TextReport, self).__init__('text')
|
||||
super().__init__('text')
|
||||
self.name = name
|
||||
# add a title with a generator that creates an empty result model
|
||||
self.add_section(name, lambda: ('|' * 72) + "\n\n")
|
||||
@ -183,6 +183,4 @@ class TextReport(ReportOfType):
|
||||
:type index: int or None
|
||||
"""
|
||||
|
||||
super(TextReport, self).add_section(header_views.TitledView(heading),
|
||||
generator,
|
||||
index)
|
||||
super().add_section(header_views.TitledView(heading), generator, index)
|
||||
|
@ -21,7 +21,7 @@ from oslo_reports.models import base as base_model
|
||||
from oslo_reports import report
|
||||
|
||||
|
||||
class BasicView(object):
|
||||
class BasicView:
|
||||
def __call__(self, model):
|
||||
res = ""
|
||||
for k in sorted(model.keys()):
|
||||
@ -35,7 +35,7 @@ def basic_generator():
|
||||
|
||||
class TestBasicReport(base.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestBasicReport, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
self.report = report.BasicReport()
|
||||
|
||||
@ -64,7 +64,7 @@ class TestBasicReport(base.BaseTestCase):
|
||||
|
||||
class TestBaseModel(base.BaseTestCase):
|
||||
def test_submodel_attached_view(self):
|
||||
class TmpView(object):
|
||||
class TmpView:
|
||||
def __call__(self, model):
|
||||
return '{len: ' + str(len(model.c)) + '}'
|
||||
|
||||
|
@ -37,7 +37,7 @@ CONF = oslo_config.cfg.CONF
|
||||
opts.set_defaults(CONF)
|
||||
|
||||
|
||||
class FakeVersionObj(object):
|
||||
class FakeVersionObj:
|
||||
def vendor_string(self):
|
||||
return 'Cheese Shoppe'
|
||||
|
||||
@ -59,7 +59,7 @@ def skip_body_lines(start_line, report_lines):
|
||||
|
||||
class GmrConfigFixture(fixture.Config):
|
||||
def setUp(self):
|
||||
super(GmrConfigFixture, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
self.conf.set_override(
|
||||
'file_event_handler',
|
||||
@ -77,7 +77,7 @@ class GmrConfigFixture(fixture.Config):
|
||||
|
||||
class TestGuruMeditationReport(base.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestGuruMeditationReport, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
self.curr_g = greenlet.getcurrent()
|
||||
|
||||
@ -242,6 +242,6 @@ class TestGuruMeditationReport(base.BaseTestCase):
|
||||
self.assertIn('RunFail', sys.stderr.getvalue())
|
||||
|
||||
def tearDown(self):
|
||||
super(TestGuruMeditationReport, self).tearDown()
|
||||
super().tearDown()
|
||||
if self.old_stderr is not None:
|
||||
sys.stderr = self.old_stderr
|
||||
|
@ -45,7 +45,7 @@ class TestOpenstackGenerators(base.BaseTestCase):
|
||||
self.assertIsNotNone(str(model))
|
||||
|
||||
def test_thread_generator_tb(self):
|
||||
class FakeModel(object):
|
||||
class FakeModel:
|
||||
def __init__(self, thread_id, tb):
|
||||
self.traceback = tb
|
||||
|
||||
@ -117,7 +117,7 @@ class TestOpenstackGenerators(base.BaseTestCase):
|
||||
self.assertEqual(target_str, str(model))
|
||||
|
||||
def test_package_report_generator(self):
|
||||
class VersionObj(object):
|
||||
class VersionObj:
|
||||
def vendor_string(self):
|
||||
return 'Cheese Shoppe'
|
||||
|
||||
@ -136,7 +136,7 @@ class TestOpenstackGenerators(base.BaseTestCase):
|
||||
self.assertEqual(target_str, str(model))
|
||||
|
||||
def test_package_report_generator_without_vendor_string(self):
|
||||
class VersionObj(object):
|
||||
class VersionObj:
|
||||
def product_string(self):
|
||||
return 'Sharp Cheddar'
|
||||
|
||||
|
@ -121,7 +121,7 @@ class TestModelReportType(base.BaseTestCase):
|
||||
|
||||
class TestGenericXMLView(base.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestGenericXMLView, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
self.model = mwdv_generator()
|
||||
self.model.set_current_view_type('xml')
|
||||
@ -191,7 +191,7 @@ class TestGenericXMLView(base.BaseTestCase):
|
||||
|
||||
class TestGenericJSONViews(base.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestGenericJSONViews, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
self.model = mwdv_generator()
|
||||
self.model.set_current_view_type('json')
|
||||
@ -260,7 +260,7 @@ class TestGenericJSONViews(base.BaseTestCase):
|
||||
|
||||
class TestGenericTextViews(base.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestGenericTextViews, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
self.model = mwdv_generator()
|
||||
self.model.set_current_view_type('text')
|
||||
@ -412,7 +412,7 @@ class TestJinjaView(base.BaseTestCase):
|
||||
MM_OPEN, MM_FILE = get_open_mocks(TEMPL_STR)
|
||||
|
||||
def setUp(self):
|
||||
super(TestJinjaView, self).setUp()
|
||||
super().setUp()
|
||||
self.model = base_model.ReportModel(data={'int': 1, 'string': 'value'})
|
||||
|
||||
@mock.mock_open(MM_OPEN)
|
||||
|
@ -24,7 +24,7 @@ import copy
|
||||
import jinja2
|
||||
|
||||
|
||||
class JinjaView(object):
|
||||
class JinjaView:
|
||||
"""A Jinja View
|
||||
|
||||
This view renders the given model using the provided Jinja
|
||||
@ -49,7 +49,7 @@ class JinjaView(object):
|
||||
self._text = self.VIEW_TEXT
|
||||
except AttributeError:
|
||||
if path is not None:
|
||||
with open(path, 'r') as f:
|
||||
with open(path) as f:
|
||||
self._text = f.read()
|
||||
elif text is not None:
|
||||
self._text = text
|
||||
|
@ -30,7 +30,7 @@ from oslo_serialization import jsonutils as json
|
||||
from oslo_reports import _utils as utils
|
||||
|
||||
|
||||
class BasicKeyValueView(object):
|
||||
class BasicKeyValueView:
|
||||
"""A Basic Key-Value JSON View
|
||||
|
||||
This view performs a naive serialization of a model
|
||||
@ -43,7 +43,7 @@ class BasicKeyValueView(object):
|
||||
return res
|
||||
|
||||
|
||||
class KeyValueView(object):
|
||||
class KeyValueView:
|
||||
"""A Key-Value JSON View
|
||||
|
||||
This view performs advanced serialization to a model
|
||||
|
@ -21,7 +21,7 @@ serializing models into human-readable text.
|
||||
from collections import abc
|
||||
|
||||
|
||||
class MultiView(object):
|
||||
class MultiView:
|
||||
"""A Text View Containing Multiple Views
|
||||
|
||||
This view simply serializes each
|
||||
@ -37,7 +37,7 @@ class MultiView(object):
|
||||
return "\n".join(res)
|
||||
|
||||
|
||||
class BasicKeyValueView(object):
|
||||
class BasicKeyValueView:
|
||||
"""A Basic Key-Value Text View
|
||||
|
||||
This view performs a naive serialization of a model into
|
||||
@ -53,7 +53,7 @@ class BasicKeyValueView(object):
|
||||
return res
|
||||
|
||||
|
||||
class KeyValueView(object):
|
||||
class KeyValueView:
|
||||
"""A Key-Value Text View
|
||||
|
||||
This view performs an advanced serialization of a model
|
||||
@ -151,7 +151,7 @@ class KeyValueView(object):
|
||||
return "\n".join(serialize(model, None, -1))
|
||||
|
||||
|
||||
class TableView(object):
|
||||
class TableView:
|
||||
"""A Basic Table Text View
|
||||
|
||||
This view performs serialization of data into a basic table with
|
||||
@ -196,6 +196,6 @@ class TableView(object):
|
||||
row = [str(raw_row[prop_name])
|
||||
for prop_name in self.column_values]
|
||||
# double format is in case we have roundoff error
|
||||
res += '{0: <72}\n'.format(self.row_fmt_str.format(cv=row))
|
||||
res += '{: <72}\n'.format(self.row_fmt_str.format(cv=row))
|
||||
|
||||
return res
|
||||
|
@ -18,7 +18,7 @@ This package defines several text views with headers
|
||||
"""
|
||||
|
||||
|
||||
class HeaderView(object):
|
||||
class HeaderView:
|
||||
"""A Text View With a Header
|
||||
|
||||
This view simply serializes the model and places the given
|
||||
@ -48,4 +48,4 @@ class TitledView(HeaderView):
|
||||
FORMAT_STR = ('=' * 72) + "\n===={0: ^64}====\n" + ('=' * 72)
|
||||
|
||||
def __init__(self, title):
|
||||
super(TitledView, self).__init__(self.FORMAT_STR.format(title))
|
||||
super().__init__(self.FORMAT_STR.format(title))
|
||||
|
@ -48,7 +48,7 @@ class StackTraceView(jv.JinjaView):
|
||||
)
|
||||
|
||||
|
||||
class GreenThreadView(object):
|
||||
class GreenThreadView:
|
||||
"""A Green Thread View
|
||||
|
||||
This view displays a green thread provided by the data
|
||||
@ -64,7 +64,7 @@ class GreenThreadView(object):
|
||||
)
|
||||
|
||||
|
||||
class ThreadView(object):
|
||||
class ThreadView:
|
||||
"""A Thread Collection View
|
||||
|
||||
This view displays a python thread provided by the data
|
||||
@ -75,6 +75,6 @@ class ThreadView(object):
|
||||
|
||||
def __call__(self, model):
|
||||
return self.FORMAT_STR.format(
|
||||
thread_str=" Thread #{0} ".format(model.thread_id),
|
||||
thread_str=" Thread #{} ".format(model.thread_id),
|
||||
stack_trace=model.stack_trace
|
||||
)
|
||||
|
@ -30,7 +30,7 @@ import xml.etree.ElementTree as ET
|
||||
from oslo_reports import _utils as utils
|
||||
|
||||
|
||||
class KeyValueView(object):
|
||||
class KeyValueView:
|
||||
"""A Key-Value XML View
|
||||
|
||||
This view performs advanced serialization of a data model
|
||||
|
@ -1,4 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
|
Loading…
Reference in New Issue
Block a user