add flake8-pep3101
This commit is contained in:
parent
305330d147
commit
6dbfd81152
|
@ -64,18 +64,18 @@ def main():
|
||||||
candidate = candidates.classify(filename, settings, standards)
|
candidate = candidates.classify(filename, settings, standards)
|
||||||
if candidate:
|
if candidate:
|
||||||
if candidate.binary:
|
if candidate.binary:
|
||||||
LOG.info("Not reviewing binary file %s" % filename)
|
LOG.info("Not reviewing binary file {name}".format(name=filename))
|
||||||
continue
|
continue
|
||||||
if candidate.vault:
|
if candidate.vault:
|
||||||
LOG.info("Not reviewing vault file %s" % filename)
|
LOG.info("Not reviewing vault file {name}".format(name=filename))
|
||||||
continue
|
continue
|
||||||
if lines:
|
if lines:
|
||||||
LOG.info("Reviewing %s lines %s" % (candidate, lines))
|
LOG.info("Reviewing {candidate} lines {no}".format(candidate=candidate, no=lines))
|
||||||
else:
|
else:
|
||||||
LOG.info("Reviewing all of %s" % candidate)
|
LOG.info("Reviewing all of {candidate}".format(candidate=candidate))
|
||||||
tasks.append((candidate, settings, lines))
|
tasks.append((candidate, settings, lines))
|
||||||
else:
|
else:
|
||||||
LOG.info("Couldn't classify file %s" % filename)
|
LOG.info("Couldn't classify file {name}".format(name=filename))
|
||||||
|
|
||||||
errors = (sum(p.map(_review_wrapper, tasks)))
|
errors = (sum(p.map(_review_wrapper, tasks)))
|
||||||
p.close()
|
p.close()
|
||||||
|
|
|
@ -31,23 +31,29 @@ def get_standards(filepath):
|
||||||
standards = importlib.import_module("standards")
|
standards = importlib.import_module("standards")
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
utils.sysexit_with_message(
|
utils.sysexit_with_message(
|
||||||
"Could not import standards from directory %s: %s" % (filepath, str(e))
|
"Could not import standards from directory {path}: {msg}".format(
|
||||||
|
path=filepath, msg=str(e)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if getattr(standards, "ansible_min_version", None) and \
|
if getattr(standards, "ansible_min_version", None) and \
|
||||||
LooseVersion(standards.ansible_min_version) > LooseVersion(ansible.__version__):
|
LooseVersion(standards.ansible_min_version) > LooseVersion(ansible.__version__):
|
||||||
utils.sysexit_with_message(
|
utils.sysexit_with_message(
|
||||||
"Standards require ansible version %s (current version %s). "
|
"Standards require ansible version {min_version} (current version {version}). "
|
||||||
"Please upgrade ansible." % (standards.ansible_min_version, ansible.__version__)
|
"Please upgrade ansible.".format(
|
||||||
|
min_version=standards.ansible_min_version, version=ansible.__version__
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if getattr(standards, "ansible_later_min_version", None) and \
|
if getattr(standards, "ansible_later_min_version", None) and \
|
||||||
LooseVersion(standards.ansible_later_min_version) > LooseVersion(
|
LooseVersion(standards.ansible_later_min_version) > LooseVersion(
|
||||||
utils.get_property("__version__")):
|
utils.get_property("__version__")):
|
||||||
utils.sysexit_with_message(
|
utils.sysexit_with_message(
|
||||||
"Standards require ansible-later version %s (current version %s). "
|
"Standards require ansible-later version {min_version} (current version {version}). "
|
||||||
"Please upgrade ansible-later." %
|
"Please upgrade ansible-later.".format(
|
||||||
(standards.ansible_later_min_version, utils.get_property("__version__"))
|
min_version=standards.ansible_later_min_version,
|
||||||
|
version=utils.get_property("__version__")
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
normalized_std = (list(toolz.remove(lambda x: x.id == "", standards.standards)))
|
normalized_std = (list(toolz.remove(lambda x: x.id == "", standards.standards)))
|
||||||
|
|
|
@ -74,20 +74,24 @@ class Candidate(object):
|
||||||
if self.expected_version:
|
if self.expected_version:
|
||||||
if isinstance(self, RoleFile):
|
if isinstance(self, RoleFile):
|
||||||
LOG.warning(
|
LOG.warning(
|
||||||
"%s %s is in a role that contains a meta/main.yml without a declared "
|
"{name} {path} is in a role that contains a meta/main.yml without a "
|
||||||
"standards version. "
|
"declared standards version. "
|
||||||
"Using latest standards version %s" %
|
"Using latest standards version {version}".format(
|
||||||
(type(self).__name__, self.path, version)
|
name=type(self).__name__, path=self.path, version=version
|
||||||
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
LOG.warning(
|
LOG.warning(
|
||||||
"%s %s does not present standards version. "
|
"{name} {path} does not present standards version. "
|
||||||
"Using latest standards version %s" %
|
"Using latest standards version {version}".format(
|
||||||
(type(self).__name__, self.path, version)
|
name=type(self).__name__, path=self.path, version=version
|
||||||
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
LOG.info(
|
LOG.info(
|
||||||
"%s %s declares standards version %s" % (type(self).__name__, self.path, version)
|
"{name} {path} declares standards version {version}".format(
|
||||||
|
name=type(self).__name__, path=self.path, version=version
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
return version
|
return version
|
||||||
|
@ -182,7 +186,7 @@ class Candidate(object):
|
||||||
return standard_id
|
return standard_id
|
||||||
|
|
||||||
def __repr__(self): # noqa
|
def __repr__(self): # noqa
|
||||||
return "%s (%s)" % (type(self).__name__, self.path)
|
return "{name} ({path})".format(name=type(self).__name__, path=self.path)
|
||||||
|
|
||||||
def __getitem__(self, item): # noqa
|
def __getitem__(self, item): # noqa
|
||||||
return self.__dict__.get(item)
|
return self.__dict__.get(item)
|
||||||
|
@ -330,9 +334,9 @@ class Error(object):
|
||||||
|
|
||||||
def __repr__(self): # noqa
|
def __repr__(self): # noqa
|
||||||
if self.lineno:
|
if self.lineno:
|
||||||
return "%s: %s" % (self.lineno, self.message)
|
return "{no}: {msg}".format(no=self.lineno, msg=self.message)
|
||||||
else:
|
else:
|
||||||
return " %s" % (self.message)
|
return " {msg}".format(msg=self.message)
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
result = dict(lineno=self.lineno, message=self.message)
|
result = dict(lineno=self.lineno, message=self.message)
|
||||||
|
|
|
@ -8,7 +8,7 @@ class LaterError(Exception):
|
||||||
|
|
||||||
def __init__(self, msg, original):
|
def __init__(self, msg, original):
|
||||||
"""Initialize new exception."""
|
"""Initialize new exception."""
|
||||||
super(LaterError, self).__init__(msg + (": %s" % original))
|
super(LaterError, self).__init__("{msg}: {org}".format(msg=msg, org=original))
|
||||||
self.original = original
|
self.original = original
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -47,20 +47,20 @@ def check_named_task(candidate, settings):
|
||||||
"meta", "debug", "include_role", "import_role", "include_tasks", "import_tasks",
|
"meta", "debug", "include_role", "import_role", "include_tasks", "import_tasks",
|
||||||
"include_vars", "block"
|
"include_vars", "block"
|
||||||
]
|
]
|
||||||
description = "module '%s' used without or empty name attribute"
|
description = "module '{module}' used without or empty name attribute"
|
||||||
|
|
||||||
if not errors:
|
if not errors:
|
||||||
for task in tasks:
|
for task in tasks:
|
||||||
module = task["action"]["__ansible_module__"]
|
module = task["action"]["__ansible_module__"]
|
||||||
if ("name" not in task or not task["name"]) and module not in nameless_tasks:
|
if ("name" not in task or not task["name"]) and module not in nameless_tasks:
|
||||||
errors.append(Error(task["__line__"], description % module))
|
errors.append(Error(task["__line__"], description.format(module=module)))
|
||||||
|
|
||||||
return Result(candidate.path, errors)
|
return Result(candidate.path, errors)
|
||||||
|
|
||||||
|
|
||||||
def check_name_format(candidate, settings):
|
def check_name_format(candidate, settings):
|
||||||
tasks, errors = get_normalized_tasks(candidate, settings)
|
tasks, errors = get_normalized_tasks(candidate, settings)
|
||||||
description = "name '%s' should start with uppercase"
|
description = "name '{name}' should start with uppercase"
|
||||||
namelines = defaultdict(list)
|
namelines = defaultdict(list)
|
||||||
|
|
||||||
if not errors:
|
if not errors:
|
||||||
|
@ -69,14 +69,14 @@ def check_name_format(candidate, settings):
|
||||||
namelines[task["name"]].append(task["__line__"])
|
namelines[task["name"]].append(task["__line__"])
|
||||||
for (name, lines) in namelines.items():
|
for (name, lines) in namelines.items():
|
||||||
if name and not name[0].isupper():
|
if name and not name[0].isupper():
|
||||||
errors.append(Error(lines[-1], description % name))
|
errors.append(Error(lines[-1], description.format(name=name)))
|
||||||
|
|
||||||
return Result(candidate.path, errors)
|
return Result(candidate.path, errors)
|
||||||
|
|
||||||
|
|
||||||
def check_unique_named_task(candidate, settings):
|
def check_unique_named_task(candidate, settings):
|
||||||
tasks, errors = get_normalized_tasks(candidate, settings)
|
tasks, errors = get_normalized_tasks(candidate, settings)
|
||||||
description = "name '%s' appears multiple times"
|
description = "name '{name}' appears multiple times"
|
||||||
|
|
||||||
namelines = defaultdict(list)
|
namelines = defaultdict(list)
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ def check_unique_named_task(candidate, settings):
|
||||||
namelines[task["name"]].append(task["__line__"])
|
namelines[task["name"]].append(task["__line__"])
|
||||||
for (name, lines) in namelines.items():
|
for (name, lines) in namelines.items():
|
||||||
if name and len(lines) > 1:
|
if name and len(lines) > 1:
|
||||||
errors.append(Error(lines[-1], description % name))
|
errors.append(Error(lines[-1], description.format(name=name)))
|
||||||
|
|
||||||
return Result(candidate.path, errors)
|
return Result(candidate.path, errors)
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ def check_command_instead_of_module(candidate, settings):
|
||||||
"systemctl": "systemd",
|
"systemctl": "systemd",
|
||||||
"sed": "template or lineinfile"
|
"sed": "template or lineinfile"
|
||||||
}
|
}
|
||||||
description = "%s command used in place of %s module"
|
description = "{exec} command used in place of {module} module"
|
||||||
|
|
||||||
if not errors:
|
if not errors:
|
||||||
for task in tasks:
|
for task in tasks:
|
||||||
|
@ -129,7 +129,10 @@ def check_command_instead_of_module(candidate, settings):
|
||||||
and "register" not in task
|
and "register" not in task
|
||||||
):
|
):
|
||||||
errors.append(
|
errors.append(
|
||||||
Error(task["__line__"], description % (executable, modules[executable]))
|
Error(
|
||||||
|
task["__line__"],
|
||||||
|
description.format(exec=executable, module=modules[executable])
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
return Result(candidate.path, errors)
|
return Result(candidate.path, errors)
|
||||||
|
|
|
@ -12,12 +12,12 @@ from ansiblelater.utils.rulehelper import get_tasks
|
||||||
def check_meta_main(candidate, settings):
|
def check_meta_main(candidate, settings):
|
||||||
content, errors = get_raw_yaml(candidate, settings)
|
content, errors = get_raw_yaml(candidate, settings)
|
||||||
keys = ["author", "description", "min_ansible_version", "platforms", "dependencies"]
|
keys = ["author", "description", "min_ansible_version", "platforms", "dependencies"]
|
||||||
description = "file should contain '%s' key"
|
description = "file should contain '{key}' key"
|
||||||
|
|
||||||
if not errors:
|
if not errors:
|
||||||
for key in keys:
|
for key in keys:
|
||||||
if not nested_lookup(key, content):
|
if not nested_lookup(key, content):
|
||||||
errors.append(Error(None, description % (key)))
|
errors.append(Error(None, description.format(key=key)))
|
||||||
|
|
||||||
return Result(candidate.path, errors)
|
return Result(candidate.path, errors)
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,8 @@ def check_yaml_file(candidate, settings):
|
||||||
try:
|
try:
|
||||||
yaml.safe_load(f)
|
yaml.safe_load(f)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
errors.append(Error(e.problem_mark.line + 1, "syntax error: %s" % (e.problem)))
|
errors.append(
|
||||||
|
Error(e.problem_mark.line + 1, "syntax error: {msg}".format(msg=e.problem))
|
||||||
|
)
|
||||||
|
|
||||||
return Result(candidate.path, errors)
|
return Result(candidate.path, errors)
|
||||||
|
|
|
@ -23,4 +23,6 @@ class Standard(object):
|
||||||
self.types = standard_dict.get("types")
|
self.types = standard_dict.get("types")
|
||||||
|
|
||||||
def __repr__(self): # noqa
|
def __repr__(self): # noqa
|
||||||
return "Standard: %s (version: %s, types: %s)" % (self.name, self.version, self.types)
|
return "Standard: {name} (version: {version}, types: {types})".format(
|
||||||
|
name=self.name, version=self.version, types=self.types
|
||||||
|
)
|
||||||
|
|
|
@ -25,9 +25,9 @@ def get_tasks(candidate, settings):
|
||||||
|
|
||||||
except LaterError as ex:
|
except LaterError as ex:
|
||||||
e = ex.original
|
e = ex.original
|
||||||
errors.append(Error(e.problem_mark.line + 1, "syntax error: %s" % (e.problem)))
|
errors.append(Error(e.problem_mark.line + 1, "syntax error: {msg}".format(msg=e.problem)))
|
||||||
except LaterAnsibleError as e:
|
except LaterAnsibleError as e:
|
||||||
errors.append(Error(e.line, "syntax error: %s" % (e.message)))
|
errors.append(Error(e.line, "syntax error: {msg}".format(e.message)))
|
||||||
|
|
||||||
return yamllines, errors
|
return yamllines, errors
|
||||||
|
|
||||||
|
@ -43,9 +43,9 @@ def get_action_tasks(candidate, settings):
|
||||||
tasks = action_tasks(yamllines, candidate)
|
tasks = action_tasks(yamllines, candidate)
|
||||||
except LaterError as ex:
|
except LaterError as ex:
|
||||||
e = ex.original
|
e = ex.original
|
||||||
errors.append(Error(e.problem_mark.line + 1, "syntax error: %s" % (e.problem)))
|
errors.append(Error(e.problem_mark.line + 1, "syntax error: {msg}".format(msg=e.problem)))
|
||||||
except LaterAnsibleError as e:
|
except LaterAnsibleError as e:
|
||||||
errors.append(Error(e.line, "syntax error: %s" % (e.message)))
|
errors.append(Error(e.line, "syntax error: {}".format(e.message)))
|
||||||
|
|
||||||
return tasks, errors
|
return tasks, errors
|
||||||
|
|
||||||
|
@ -57,9 +57,9 @@ def get_normalized_task(task, candidate, settings):
|
||||||
normalized = normalize_task(task, candidate.path, settings["ansible"]["custom_modules"])
|
normalized = normalize_task(task, candidate.path, settings["ansible"]["custom_modules"])
|
||||||
except LaterError as ex:
|
except LaterError as ex:
|
||||||
e = ex.original
|
e = ex.original
|
||||||
errors.append(Error(e.problem_mark.line + 1, "syntax error: %s" % (e.problem)))
|
errors.append(Error(e.problem_mark.line + 1, "syntax error: {msg}".format(msg=e.problem)))
|
||||||
except LaterAnsibleError as e:
|
except LaterAnsibleError as e:
|
||||||
errors.append(Error(e.line, "syntax error: %s" % (e.message)))
|
errors.append(Error(e.line, "syntax error: {msg}".format(msg=e.message)))
|
||||||
|
|
||||||
return normalized, errors
|
return normalized, errors
|
||||||
|
|
||||||
|
@ -86,9 +86,9 @@ def get_normalized_tasks(candidate, settings):
|
||||||
|
|
||||||
except LaterError as ex:
|
except LaterError as ex:
|
||||||
e = ex.original
|
e = ex.original
|
||||||
errors.append(Error(e.problem_mark.line + 1, "syntax error: %s" % (e.problem)))
|
errors.append(Error(e.problem_mark.line + 1, "syntax error: {msg}".format(msg=e.problem)))
|
||||||
except LaterAnsibleError as e:
|
except LaterAnsibleError as e:
|
||||||
errors.append(Error(e.line, "syntax error: %s" % (e.message)))
|
errors.append(Error(e.line, "syntax error: {msg}".format(msg=e.message)))
|
||||||
|
|
||||||
return normalized, errors
|
return normalized, errors
|
||||||
|
|
||||||
|
@ -105,9 +105,9 @@ def get_normalized_yaml(candidate, settings, options=None):
|
||||||
yamllines = normalized_yaml(candidate.path, options)
|
yamllines = normalized_yaml(candidate.path, options)
|
||||||
except LaterError as ex:
|
except LaterError as ex:
|
||||||
e = ex.original
|
e = ex.original
|
||||||
errors.append(Error(e.problem_mark.line + 1, "syntax error: %s" % (e.problem)))
|
errors.append(Error(e.problem_mark.line + 1, "syntax error: {msg}".format(msg=e.problem)))
|
||||||
except LaterAnsibleError as e:
|
except LaterAnsibleError as e:
|
||||||
errors.append(Error(e.line, "syntax error: %s" % (e.message)))
|
errors.append(Error(e.line, "syntax error: {msg}".format(msg=e.message)))
|
||||||
|
|
||||||
return yamllines, errors
|
return yamllines, errors
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ def get_raw_yaml(candidate, settings):
|
||||||
|
|
||||||
except LaterError as ex:
|
except LaterError as ex:
|
||||||
e = ex.original
|
e = ex.original
|
||||||
errors.append(Error(e.problem_mark.line + 1, "syntax error: %s" % (e.problem)))
|
errors.append(Error(e.problem_mark.line + 1, "syntax error: {msg}".format(msg=e.problem)))
|
||||||
|
|
||||||
return content, errors
|
return content, errors
|
||||||
|
|
||||||
|
@ -135,6 +135,6 @@ def run_yamllint(path, options="extends: default"):
|
||||||
errors.append(Error(problem.line, problem.desc))
|
errors.append(Error(problem.line, problem.desc))
|
||||||
except LaterError as ex:
|
except LaterError as ex:
|
||||||
e = ex.original
|
e = ex.original
|
||||||
errors.append(Error(e.problem_mark.line + 1, "syntax error: %s" % (e.problem)))
|
errors.append(Error(e.problem_mark.line + 1, "syntax error: {msg}".format(msg=e.problem)))
|
||||||
|
|
||||||
return errors
|
return errors
|
||||||
|
|
|
@ -483,8 +483,9 @@ def extract_from_list(blocks, candidates):
|
||||||
results.extend(add_action_type(block[candidate], candidate, meta_data))
|
results.extend(add_action_type(block[candidate], candidate, meta_data))
|
||||||
elif block[candidate] is not None:
|
elif block[candidate] is not None:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
"Key '%s' defined, but bad value: '%s'" %
|
"Key '{candidate}' defined, but bad value: '{block}'".format(
|
||||||
(candidate, str(block[candidate]))
|
candidate=candidate, block=str(block[candidate])
|
||||||
|
)
|
||||||
)
|
)
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ flake8-isort
|
||||||
flake8-logging-format
|
flake8-logging-format
|
||||||
flake8-polyfill
|
flake8-polyfill
|
||||||
flake8-quotes
|
flake8-quotes
|
||||||
|
flake8-pep3101
|
||||||
flake8-eradicate; python_version >= "3.6"
|
flake8-eradicate; python_version >= "3.6"
|
||||||
pep8-naming
|
pep8-naming
|
||||||
wheel
|
wheel
|
||||||
|
|
Loading…
Reference in New Issue