Fix hacking warnings

Fix some warnings found by hacking and enable them again.

Change-Id: Ia09de4d0fda752a009b9246b4e6d485601cd9562
This commit is contained in:
Andreas Jaeger 2020-04-09 12:31:41 +02:00 committed by Andreas Jaeger
parent a27dc56f52
commit 57eb87149f
39 changed files with 128 additions and 112 deletions

View File

@ -18,6 +18,9 @@
An OpenStack REST API to Heat. An OpenStack REST API to Heat.
""" """
import os
import sys
from oslo_log import log as logging from oslo_log import log as logging
@ -27,8 +30,6 @@ LOG.warning('DEPRECATED: `heat-api` script is deprecated. Please use the '
'system level heat binaries installed to start ' 'system level heat binaries installed to start '
'any of the heat services.') 'any of the heat services.')
import os
import sys
# If ../heat/__init__.py exists, add ../ to Python search path, so that # If ../heat/__init__.py exists, add ../ to Python search path, so that
# it will override what happens to be installed in /usr/(local/)lib/python... # it will override what happens to be installed in /usr/(local/)lib/python...
@ -39,6 +40,6 @@ POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'heat', '__init__.py')): if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'heat', '__init__.py')):
sys.path.insert(0, POSSIBLE_TOPDIR) sys.path.insert(0, POSSIBLE_TOPDIR)
from heat.cmd import api from heat.cmd import api # noqa: E402
api.main() api.main()

View File

@ -20,6 +20,9 @@ translates it into a native representation. It then calls the heat-engine via
AMQP RPC to implement them. AMQP RPC to implement them.
""" """
import os
import sys
from oslo_log import log as logging from oslo_log import log as logging
@ -29,9 +32,6 @@ LOG.warning('DEPRECATED: `heat-api-cfn` script is deprecated. Please use '
'the system level heat binaries installed to start ' 'the system level heat binaries installed to start '
'any of the heat services.') 'any of the heat services.')
import os
import sys
# If ../heat/__init__.py exists, add ../ to Python search path, so that # If ../heat/__init__.py exists, add ../ to Python search path, so that
# it will override what happens to be installed in /usr/(local/)lib/python... # it will override what happens to be installed in /usr/(local/)lib/python...
POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]), POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
@ -41,6 +41,6 @@ POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'heat', '__init__.py')): if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'heat', '__init__.py')):
sys.path.insert(0, POSSIBLE_TOPDIR) sys.path.insert(0, POSSIBLE_TOPDIR)
from heat.cmd import api_cfn from heat.cmd import api_cfn # noqa: E402
api_cfn.main() api_cfn.main()

View File

@ -20,6 +20,10 @@ Normal communications is done via the heat API which then calls into this
engine. engine.
""" """
import os
import sys
from oslo_log import log as logging from oslo_log import log as logging
@ -29,8 +33,6 @@ LOG.warning('DEPRECATED: `heat-engine` script is deprecated. '
'Please use the system level heat binaries installed to ' 'Please use the system level heat binaries installed to '
'start any of the heat services.') 'start any of the heat services.')
import os
import sys
# If ../heat/__init__.py exists, add ../ to Python search path, so that # If ../heat/__init__.py exists, add ../ to Python search path, so that
# it will override what happens to be installed in /usr/(local/)lib/python... # it will override what happens to be installed in /usr/(local/)lib/python...
@ -41,6 +43,6 @@ POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'heat', '__init__.py')): if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'heat', '__init__.py')):
sys.path.insert(0, POSSIBLE_TOPDIR) sys.path.insert(0, POSSIBLE_TOPDIR)
from heat.cmd import engine from heat.cmd import engine # noqa: E402
engine.main() engine.main()

View File

@ -13,6 +13,10 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import os
import sys
from oslo_log import log as logging from oslo_log import log as logging
@ -21,8 +25,6 @@ LOG = logging.getLogger(__name__)
LOG.warning('DEPRECATED: `heat-manage` script is deprecated. Please use ' LOG.warning('DEPRECATED: `heat-manage` script is deprecated. Please use '
'the system level heat-manage binary.') 'the system level heat-manage binary.')
import os
import sys
# If ../heat/__init__.py exists, add ../ to Python search path, so that # If ../heat/__init__.py exists, add ../ to Python search path, so that
# it will override what happens to be installed in /usr/(local/)lib/python... # it will override what happens to be installed in /usr/(local/)lib/python...
@ -32,6 +34,6 @@ POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'heat', '__init__.py')): if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'heat', '__init__.py')):
sys.path.insert(0, POSSIBLE_TOPDIR) sys.path.insert(0, POSSIBLE_TOPDIR)
from heat.cmd import manage from heat.cmd import manage # noqa: E402
manage.main() manage.main()

View File

@ -15,6 +15,9 @@
An OpenStack Heat server that can run all services. An OpenStack Heat server that can run all services.
""" """
# flake8: noqa: E402
import eventlet import eventlet
eventlet.monkey_patch(os=False) eventlet.monkey_patch(os=False)

View File

@ -16,6 +16,8 @@
An OpenStack ReST API to Heat. An OpenStack ReST API to Heat.
""" """
# flake8: noqa: E402
import eventlet import eventlet
eventlet.monkey_patch(os=False) eventlet.monkey_patch(os=False)

View File

@ -18,6 +18,8 @@ translates it into a native representation. It then calls the heat-engine via
AMQP RPC to implement them. AMQP RPC to implement them.
""" """
# flake8: noqa: E402
import eventlet import eventlet
eventlet.monkey_patch(os=False) eventlet.monkey_patch(os=False)

View File

@ -18,6 +18,8 @@ Normal communications is done via the heat API which then calls into this
engine. engine.
""" """
# flake8: noqa: E402
import eventlet import eventlet
eventlet.monkey_patch() eventlet.monkey_patch()

View File

@ -224,6 +224,7 @@ def add_command_parsers(subparsers):
ServiceManageCommand.add_service_parsers(subparsers) ServiceManageCommand.add_service_parsers(subparsers)
command_opt = cfg.SubCommandOpt('command', command_opt = cfg.SubCommandOpt('command',
title='Commands', title='Commands',
help=_('Show available commands.'), help=_('Show available commands.'),

View File

@ -50,5 +50,6 @@ def main():
return upgradecheck.main( return upgradecheck.main(
cfg.CONF, project='heat', upgrade_command=Checks()) cfg.CONF, project='heat', upgrade_command=Checks())
if __name__ == '__main__': if __name__ == '__main__':
sys.exit(main()) sys.exit(main())

View File

@ -183,7 +183,7 @@ class CheckResource(object):
except scheduler.Timeout: except scheduler.Timeout:
self._handle_resource_failure(cnxt, is_update, rsrc.id, self._handle_resource_failure(cnxt, is_update, rsrc.id,
stack, u'Timed out') stack, u'Timed out')
except CancelOperation as ex: except CancelOperation:
# Stack is already marked FAILED, so we just need to retrigger # Stack is already marked FAILED, so we just need to retrigger
# in case a new traversal has started and is waiting on us. # in case a new traversal has started and is waiting on us.
self._retrigger_new_traversal(cnxt, current_traversal, is_update, self._retrigger_new_traversal(cnxt, current_traversal, is_update,

View File

@ -918,7 +918,7 @@ class Resource(status.ResourceStatus):
try: try:
set_in_progress() set_in_progress()
yield yield
except exception.UpdateInProgress as ex: except exception.UpdateInProgress:
with excutils.save_and_reraise_exception(): with excutils.save_and_reraise_exception():
LOG.info('Update in progress for %s', self.name) LOG.info('Update in progress for %s', self.name)
except expected_exceptions as ex: except expected_exceptions as ex:

View File

@ -17,8 +17,6 @@ from oslo_config import cfg
from oslo_log import log as logging from oslo_log import log as logging
import six import six
cfg.CONF.import_opt('max_server_name_length', 'heat.common.config')
from heat.common import exception from heat.common import exception
from heat.common.i18n import _ from heat.common.i18n import _
from heat.engine import attributes from heat.engine import attributes
@ -28,6 +26,9 @@ from heat.engine import properties
from heat.engine import resource from heat.engine import resource
from heat.engine.resources import scheduler_hints as sh from heat.engine.resources import scheduler_hints as sh
cfg.CONF.import_opt('max_server_name_length', 'heat.common.config')
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)

View File

@ -214,7 +214,7 @@ class AutoScalingResourceGroup(aws_asg.AutoScalingGroup):
def _attribute_output_name(self, *attr_path): def _attribute_output_name(self, *attr_path):
return ', '.join(six.text_type(a) for a in attr_path) return ', '.join(six.text_type(a) for a in attr_path)
def get_attribute(self, key, *path): def get_attribute(self, key, *path): # noqa: C901
if key == self.CURRENT_SIZE: if key == self.CURRENT_SIZE:
return grouputils.get_size(self) return grouputils.get_size(self)

View File

@ -296,7 +296,7 @@ class TaskRunner(object):
return self.__nonzero__() return self.__nonzero__()
def wrappertask(task): def wrappertask(task): # noqa: C901
"""Decorator for a task that needs to drive a subtask. """Decorator for a task that needs to drive a subtask.
This is essentially a replacement for the Python 3-only "yield from" This is essentially a replacement for the Python 3-only "yield from"

View File

@ -1872,7 +1872,7 @@ class Stack(collections.Mapping):
else: else:
self.clients.client('keystone').delete_trust( self.clients.client('keystone').delete_trust(
trust_id) trust_id)
except Exception as ex: except Exception:
# We want the admin to be able to delete the stack # We want the admin to be able to delete the stack
# Do not FAIL a delete when we cannot delete a trust. # Do not FAIL a delete when we cannot delete a trust.
# We already carry through and delete the credentials # We already carry through and delete the credentials

View File

@ -18,6 +18,7 @@ import oslo_i18n as i18n
def fake_translate_msgid(msgid, domain, desired_locale=None): def fake_translate_msgid(msgid, domain, desired_locale=None):
return msgid return msgid
i18n.enable_lazy() i18n.enable_lazy()
# To ensure messages don't really get translated while running tests. # To ensure messages don't really get translated while running tests.

View File

@ -112,4 +112,5 @@ class MessageProcessor(object):
"""Delete all the messages from the queue.""" """Delete all the messages from the queue."""
self.queue.clear() self.queue.clear()
__all__ = ['MessageProcessor', 'asynchronous'] __all__ = ['MessageProcessor', 'asynchronous']

View File

@ -41,4 +41,5 @@ class Processes(object):
self.engine.clear() self.engine.clear()
self.worker.clear() self.worker.clear()
Processes() Processes()

View File

@ -48,4 +48,5 @@ class RealityStore(object):
prop_name) prop_name)
return res_data.value return res_data.value
reality = RealityStore() reality = RealityStore()

View File

@ -57,16 +57,16 @@ class dependenciesTest(common.HeatTestCase):
def test_single_node(self): def test_single_node(self):
d = dependencies.Dependencies([('only', None)]) d = dependencies.Dependencies([('only', None)])
l = list(iter(d)) li = list(iter(d))
self.assertEqual(1, len(l)) self.assertEqual(1, len(li))
self.assertEqual('only', l[0]) self.assertEqual('only', li[0])
def test_disjoint(self): def test_disjoint(self):
d = dependencies.Dependencies([('1', None), ('2', None)]) d = dependencies.Dependencies([('1', None), ('2', None)])
l = list(iter(d)) li = list(iter(d))
self.assertEqual(2, len(l)) self.assertEqual(2, len(li))
self.assertIn('1', l) self.assertIn('1', li)
self.assertIn('2', l) self.assertIn('2', li)
def test_single_fwd(self): def test_single_fwd(self):
self._dep_test_fwd(('second', 'first')) self._dep_test_fwd(('second', 'first'))
@ -170,9 +170,9 @@ class dependenciesTest(common.HeatTestCase):
def test_single_partial(self): def test_single_partial(self):
d = dependencies.Dependencies([('last', 'first')]) d = dependencies.Dependencies([('last', 'first')])
p = d['last'] p = d['last']
l = list(iter(p)) li = list(iter(p))
self.assertEqual(1, len(l)) self.assertEqual(1, len(li))
self.assertEqual('last', l[0]) self.assertEqual('last', li[0])
def test_simple_partial(self): def test_simple_partial(self):
d = dependencies.Dependencies([('last', 'middle'), d = dependencies.Dependencies([('last', 'middle'),

View File

@ -1242,9 +1242,9 @@ class DescriptionTest(common.HeatTestCase):
self.assertEqual('f', scheduler.task_description(f)) self.assertEqual('f', scheduler.task_description(f))
def test_lambda(self): def test_lambda(self):
l = lambda: None lam = lambda: None # noqa: E731
self.assertEqual('<lambda>', scheduler.task_description(l)) self.assertEqual('<lambda>', scheduler.task_description(lam))
def test_method(self): def test_method(self):
class C(object): class C(object):

View File

@ -81,16 +81,16 @@ class SchemaTest(common.HeatTestCase):
self.assertRaises(ValueError, r.validate, 6) self.assertRaises(ValueError, r.validate, 6)
def test_length_validate(self): def test_length_validate(self):
l = constraints.Length(min=5, max=5, description='a range') cl = constraints.Length(min=5, max=5, description='a range')
l.validate('abcde') cl.validate('abcde')
def test_length_min_fail(self): def test_length_min_fail(self):
l = constraints.Length(min=5, description='a range') cl = constraints.Length(min=5, description='a range')
self.assertRaises(ValueError, l.validate, 'abcd') self.assertRaises(ValueError, cl.validate, 'abcd')
def test_length_max_fail(self): def test_length_max_fail(self):
l = constraints.Length(max=5, description='a range') cl = constraints.Length(max=5, description='a range')
self.assertRaises(ValueError, l.validate, 'abcdef') self.assertRaises(ValueError, cl.validate, 'abcdef')
def test_modulo_validate(self): def test_modulo_validate(self):
r = constraints.Modulo(step=2, offset=1, description='a modulo') r = constraints.Modulo(step=2, offset=1, description='a modulo')
@ -196,8 +196,8 @@ class SchemaTest(common.HeatTestCase):
s = constraints.Schema(constraints.Schema.STRING, 'A string', s = constraints.Schema(constraints.Schema.STRING, 'A string',
default='wibble', default='wibble',
constraints=[constraints.Length(4, 8)]) constraints=[constraints.Length(4, 8)])
l = constraints.Schema(constraints.Schema.LIST, 'A list', schema=s) ls = constraints.Schema(constraints.Schema.LIST, 'A list', schema=s)
self.assertEqual(d, dict(l)) self.assertEqual(d, dict(ls))
def test_schema_map_schema(self): def test_schema_map_schema(self):
d = { d = {
@ -252,8 +252,8 @@ class SchemaTest(common.HeatTestCase):
constraints=[constraints.Length(4, 8)]) constraints=[constraints.Length(4, 8)])
m = constraints.Schema(constraints.Schema.MAP, 'A map', m = constraints.Schema(constraints.Schema.MAP, 'A map',
schema={'Foo': s}) schema={'Foo': s})
l = constraints.Schema(constraints.Schema.LIST, 'A list', schema=m) ls = constraints.Schema(constraints.Schema.LIST, 'A list', schema=m)
self.assertEqual(d, dict(l)) self.assertEqual(d, dict(ls))
def test_invalid_type(self): def test_invalid_type(self):
self.assertRaises(exception.InvalidSchemaError, constraints.Schema, self.assertRaises(exception.InvalidSchemaError, constraints.Schema,

View File

@ -194,7 +194,7 @@ class StackConvergenceCreateUpdateDeleteTest(common.HeatTestCase):
[[4, False], [3, False]], [[4, False], [3, False]],
[[4, False], [4, True]]]), [[4, False], [4, True]]]),
sorted(stack_db.current_deps['edges'])) sorted(stack_db.current_deps['edges']))
''' r'''
To visualize: To visualize:
G(7, True) H(6, True) G(7, True) H(6, True)

View File

@ -71,8 +71,8 @@ class PropertySchemaTest(common.HeatTestCase):
s = properties.Schema(properties.Schema.STRING, 'A string', s = properties.Schema(properties.Schema.STRING, 'A string',
default='wibble', default='wibble',
constraints=[constraints.Length(4, 8)]) constraints=[constraints.Length(4, 8)])
l = properties.Schema(properties.Schema.LIST, 'A list', schema=s) ls = properties.Schema(properties.Schema.LIST, 'A list', schema=s)
self.assertEqual(d, dict(l)) self.assertEqual(d, dict(ls))
def test_schema_map_schema(self): def test_schema_map_schema(self):
d = { d = {
@ -137,8 +137,8 @@ class PropertySchemaTest(common.HeatTestCase):
constraints=[constraints.Length(4, 8)]) constraints=[constraints.Length(4, 8)])
m = properties.Schema(properties.Schema.MAP, 'A map', m = properties.Schema(properties.Schema.MAP, 'A map',
schema={'Foo': s}) schema={'Foo': s})
l = properties.Schema(properties.Schema.LIST, 'A list', schema=m) ls = properties.Schema(properties.Schema.LIST, 'A list', schema=m)
self.assertEqual(d, dict(l)) self.assertEqual(d, dict(ls))
def test_all_resource_schemata(self): def test_all_resource_schemata(self):
for resource_type in resources.global_env().get_types(): for resource_type in resources.global_env().get_types():
@ -292,7 +292,7 @@ class PropertySchemaTest(common.HeatTestCase):
self.assertEqual('[a-z]*', c.pattern) self.assertEqual('[a-z]*', c.pattern)
def test_from_legacy_list(self): def test_from_legacy_list(self):
l = properties.Schema.from_legacy({ ls = properties.Schema.from_legacy({
'Type': 'List', 'Type': 'List',
'Default': ['wibble'], 'Default': ['wibble'],
'Schema': { 'Schema': {
@ -301,15 +301,15 @@ class PropertySchemaTest(common.HeatTestCase):
'MaxLength': 8, 'MaxLength': 8,
} }
}) })
self.assertEqual(properties.Schema.LIST, l.type) self.assertEqual(properties.Schema.LIST, ls.type)
self.assertEqual(['wibble'], l.default) self.assertEqual(['wibble'], ls.default)
ss = l.schema[0] ss = ls.schema[0]
self.assertEqual(properties.Schema.STRING, ss.type) self.assertEqual(properties.Schema.STRING, ss.type)
self.assertEqual('wibble', ss.default) self.assertEqual('wibble', ss.default)
def test_from_legacy_map(self): def test_from_legacy_map(self):
l = properties.Schema.from_legacy({ ls = properties.Schema.from_legacy({
'Type': 'Map', 'Type': 'Map',
'Schema': { 'Schema': {
'foo': { 'foo': {
@ -318,9 +318,9 @@ class PropertySchemaTest(common.HeatTestCase):
} }
} }
}) })
self.assertEqual(properties.Schema.MAP, l.type) self.assertEqual(properties.Schema.MAP, ls.type)
ss = l.schema['foo'] ss = ls.schema['foo']
self.assertEqual(properties.Schema.STRING, ss.type) self.assertEqual(properties.Schema.STRING, ss.type)
self.assertEqual('wibble', ss.default) self.assertEqual('wibble', ss.default)

View File

@ -108,19 +108,14 @@ commands = bandit -r heat -x tests --skip B101,B104,B107,B110,B310,B311,B404,B41
[flake8] [flake8]
show-source = true show-source = true
# E117 over-indented
# E123 closing bracket does not match indentation of opening bracket's line # E123 closing bracket does not match indentation of opening bracket's line
# E226 missing whitespace around arithmetic operator # E226 missing whitespace around arithmetic operator
# E241 multiple spaces after ',' # E241 multiple spaces after ','
# E305 expected 2 blank lines after class or function definition, found 1 # E305 expected 2 blank lines after class or function definition, found 1
# E402 module level import not at top of file # E402 module level import not at top of file
# E731 do not assign a lambda expression, use a def
# E741 ambiguous variable name 'l'
# F841 local variable 'ex' is assigned to but never used
# W503 line break before binary operator # W503 line break before binary operator
# W504 line break after binary operator # W504 line break after binary operator
# W605 invalid escape sequence '\ ' ignore = E123,E226,E241,E402,W503,W504
ignore = E117,E123,E226,E241,E305,E402,E731,E741,F841,W503,W504,W605
exclude=.*,dist,*lib/python*,*egg,build,*convergence/scenarios/* exclude=.*,dist,*lib/python*,*egg,build,*convergence/scenarios/*
max-complexity=23 max-complexity=23