@ -12,8 +12,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import re
"""
Guidelines for writing new hacking checks
@ -30,6 +28,11 @@ Guidelines for writing new hacking checks
"""
import re
from hacking import core
_all_log_levels = { ' critical ' , ' error ' , ' exception ' , ' info ' , ' warning ' }
_all_hints = { ' _LC ' , ' _LE ' , ' _LI ' , ' _ ' , ' _LW ' }
@ -70,6 +73,7 @@ def _translation_checks_not_enforced(filename):
return any ( pat in filename for pat in [ " /tests/ " , " rally-jobs/plugins/ " ] )
@core . flake8ext
def assert_true_instance ( logical_line ) :
""" Check for assertTrue(isinstance(a, b)) sentences
@ -80,6 +84,7 @@ def assert_true_instance(logical_line):
" Use assertIsInstance instead. " )
@core . flake8ext
def assert_equal_or_not_none ( logical_line ) :
""" Check for assertEqual(A, None) or assertEqual(None, A) sentences,
@ -97,6 +102,7 @@ def assert_equal_or_not_none(logical_line):
yield ( 0 , msg )
@core . flake8ext
def assert_equal_true_or_false ( logical_line ) :
""" Check for assertEqual(True, A) or assertEqual(False, A) sentences
@ -109,12 +115,14 @@ def assert_equal_true_or_false(logical_line):
" sentences not allowed " )
@core . flake8ext
def no_mutable_default_args ( logical_line ) :
msg = " O324: Method ' s default argument shouldn ' t be mutable! "
if mutable_default_args . match ( logical_line ) :
yield ( 0 , msg )
@core . flake8ext
def assert_equal_in ( logical_line ) :
""" Check for assertEqual(A in B, True), assertEqual(True, A in B),
@ -130,6 +138,7 @@ def assert_equal_in(logical_line):
" contents. " )
@core . flake8ext
def no_log_warn ( logical_line ) :
""" Disallow ' LOG.warn( '
@ -139,6 +148,7 @@ def no_log_warn(logical_line):
yield ( 0 , " O339:Use LOG.warning() rather than LOG.warn() " )
@core . flake8ext
def no_translate_logs ( logical_line , filename ) :
""" O341 - Don ' t translate logs.
@ -164,6 +174,7 @@ def no_translate_logs(logical_line, filename):
yield ( logical_line . index ( match . group ( ) ) , msg )
@core . flake8ext
def check_raised_localized_exceptions ( logical_line , filename ) :
""" O342 - Untranslated exception message.
@ -185,6 +196,7 @@ def check_raised_localized_exceptions(logical_line, filename):
yield ( logical_line . index ( exception_msg ) , msg )
@core . flake8ext
def check_no_eventlet_imports ( logical_line ) :
""" O345 - Usage of Python eventlet module not allowed.
@ -198,6 +210,7 @@ def check_no_eventlet_imports(logical_line):
yield logical_line . index ( ' eventlet ' ) , msg
@core . flake8ext
def check_line_continuation_no_backslash ( logical_line , tokens ) :
""" O346 - Don ' t use backslashes for line continuation.
@ -219,6 +232,7 @@ def check_line_continuation_no_backslash(logical_line, tokens):
yield backslash , msg
@core . flake8ext
def revert_must_have_kwargs ( logical_line ) :
""" O347 - Taskflow revert methods must have \\ * \\ *kwargs.
@ -232,6 +246,7 @@ def revert_must_have_kwargs(logical_line):
yield 0 , msg
@core . flake8ext
def check_no_logging_imports ( logical_line ) :
""" O348 - Usage of Python logging module not allowed.
@ -243,18 +258,3 @@ def check_no_logging_imports(logical_line):
if no_logging_re . match ( logical_line ) :
msg = ' O348 Usage of Python logging module not allowed, use oslo_log '
yield logical_line . index ( ' logging ' ) , msg
def factory ( register ) :
register ( assert_true_instance )
register ( assert_equal_or_not_none )
register ( no_translate_logs )
register ( assert_equal_true_or_false )
register ( no_mutable_default_args )
register ( assert_equal_in )
register ( no_log_warn )
register ( check_raised_localized_exceptions )
register ( check_no_eventlet_imports )
register ( check_line_continuation_no_backslash )
register ( revert_must_have_kwargs )
register ( check_no_logging_imports )