The cinder.hacking.checks
Module¶
-
class
BaseASTChecker
(tree, filename)¶ Bases:
ast.NodeVisitor
Provides a simple framework for writing AST-based checks.
Subclasses should implement visit_* methods like any other AST visitor implementation. When they detect an error for a particular node the method should call
self.add_error(offending_node)
. Details about where in the code the error occurred will be pulled from the node object.Subclasses should also provide a class variable named CHECK_DESC to be used for the human readable error message.
-
add_error
(node, message=None)¶ Add an error caused by a node to the list of errors for pep8.
-
run
()¶ Called automatically by pep8.
-
-
class
CheckForStrUnicodeExc
(tree, filename)¶ Bases:
cinder.hacking.checks.BaseASTChecker
Checks for the use of str() or unicode() on an exception.
This currently only handles the case where str() or unicode() is used in the scope of an exception handler. If the exception is passed into a function, returned from an assertRaises, or used on an exception created in the same scope, this does not catch it.
-
CHECK_DESC
= 'N325 str() and unicode() cannot be used on an exception. Remove or use six.text_type()'¶
-
visit_Call
(node)¶
-
visit_ExceptHandler
(node)¶
-
visit_TryExcept
(node)¶
-
-
class
CheckLoggingFormatArgs
(tree, filename)¶ Bases:
cinder.hacking.checks.BaseASTChecker
Check for improper use of logging format arguments.
- LOG.debug(“Volume %s caught fire and is at %d degrees C and climbing.”,
- (‘volume1’, 500))
The format arguments should not be a tuple as it is easy to miss.
-
CHECK_DESC
= 'C310 Log method arguments should not be a tuple.'¶
-
LOG_METHODS
= ['debug', 'info', 'warn', 'warning', 'error', 'exception', 'critical', 'fatal', 'trace', 'log']¶
-
visit_Call
(node)¶ Look for the ‘LOG.*’ calls.
-
class
CheckOptRegistrationArgs
(tree, filename)¶ Bases:
cinder.hacking.checks.BaseASTChecker
Verifying the registration of options are well formed
This class creates a check for single opt or list/tuple of opts when register_opt() or register_opts() are being called.
-
CHECK_DESC
= 'C311: Arguments being passed to register_opt/register_opts must be a single option or list/tuple of options respectively. Options must also end with _opt or _opts respectively.'¶
-
plural_method
= 'register_opts'¶
-
register_methods
= ['register_opt', 'register_opts']¶
-
singular_method
= 'register_opt'¶
-
visit_Call
(node)¶ Look for the register_opt/register_opts calls.
-
-
check_datetime_now
(logical_line, noqa)¶
-
check_explicit_underscore_import
(logical_line, filename)¶ Check for explicit import of the _ function
We need to ensure that any files that are using the _() function to translate logs are explicitly importing the _ function. We can’t trust unit test to catch whether the import has been added so we need to check for it here.
-
check_no_log_audit
(logical_line)¶ Ensure that we are not using LOG.audit messages
Plans are in place going forward as discussed in the following spec (https://review.openstack.org/#/c/91446/) to take out LOG.audit messages. Given that audit was a concept invented for OpenStack we can enforce not using it.
-
check_no_print_statements
(logical_line, filename, noqa)¶
-
check_timeutils_isotime
(logical_line)¶
-
check_timeutils_strtime
(logical_line)¶
-
check_unicode_usage
(logical_line, noqa)¶
-
dict_constructor_with_list_copy
(logical_line)¶
-
factory
(register)¶
-
no_log_warn
(logical_line)¶
-
no_mutable_default_args
(logical_line)¶
-
no_test_log
(logical_line, filename, noqa)¶
-
no_translate_debug_logs
(logical_line, filename)¶ Check for ‘LOG.debug(_(‘
As per our translation policy, https://wiki.openstack.org/wiki/LoggingStandards#Log_Translation we shouldn’t translate debug level logs.
- This check assumes that ‘LOG’ is a logger.
- Use filename so we can start enforcing this in specific folders instead of needing to do so all at once.
N319
-
no_vi_headers
(physical_line, line_number, lines)¶ Check for vi editor configuration in source files.
By default vi modelines can only appear in the first or last 5 lines of a source file.
N314
-
validate_assertIsNone
(logical_line)¶
-
validate_assertTrue
(logical_line)¶
-
validate_log_translations
(logical_line, filename)¶