From 2794b9828ccf0a8b1eafcc8dee4be1c3714c9b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Beraud?= Date: Tue, 21 Jul 2020 13:40:01 +0200 Subject: Adding pre-commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduced changes: - pre-commit config and rules - Add pre-commit to pep8 gate, Flake8 is covered in the pre-commit hooks. - Applying fixes for pre-commit compliance in all code. Also commit hash will be used instead of version tags in pre-commit to prevend arbitrary code from running in developer's machines. pre-commit will be used to: - trailing whitespace; - Replaces or checks mixed line ending (mixed-line-ending); - Forbid files which have a UTF-8 byte-order marker (check-byte-order-marker); - Checks that non-binary executables have a proper shebang (check-executables-have-shebangs); - Check for files that contain merge conflict strings (check-merge-conflict); - Check for debugger imports and py37+ breakpoint() calls in python source (debug-statements); - Attempts to load all yaml files to verify syntax (check-yaml); - Run flake8 checks (flake8) (local) For further details about tests please refer to: https://github.com/pre-commit/pre-commit-hooks Change-Id: If4bd505d6bf73d06ce2f6080cedb3b5576c881d9 Signed-off-by: Moisés Guimarães de Medeiros --- .pre-commit-config.yaml | 35 ++++++ doc/source/conf.py | 193 ++++++-------------------------- osprofiler/tests/unit/doc/test_specs.py | 4 +- test-requirements.txt | 2 + tools/lint.py | 4 +- tools/patch_tox_venv.py | 3 +- tox.ini | 3 +- 7 files changed, 80 insertions(+), 164 deletions(-) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..9d94556 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,35 @@ +# We from the Oslo project decided to pin repos based on the +# commit hash instead of the version tag to prevend arbitrary +# code from running in developer's machines. To update to a +# newer version, run `pre-commit autoupdate` and then replace +# the newer versions with their commit hash. + +default_language_version: + python: python3 + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: ebc15addedad713c86ef18ae9632c88e187dd0af # v3.1.0 + hooks: + - id: trailing-whitespace + # Replaces or checks mixed line ending + - id: mixed-line-ending + args: ['--fix', 'lf'] + exclude: '.*\.(svg)$' + # Forbid files which have a UTF-8 byte-order marker + - id: check-byte-order-marker + # Checks that non-binary executables have a proper shebang + - id: check-executables-have-shebangs + # Check for files that contain merge conflict strings. + - id: check-merge-conflict + # Check for debugger imports and py37+ breakpoint() + # calls in python source + - id: debug-statements + - id: check-yaml + files: .*\.(yaml|yml)$ + - repo: https://gitlab.com/pycqa/flake8 + rev: 181bb46098dddf7e2d45319ea654b4b4d58c2840 # 3.8.3 + hooks: + - id: flake8 + additional_dependencies: + - hacking>=3.0.1,<3.1.0 diff --git a/doc/source/conf.py b/doc/source/conf.py index 67978eb..f904f7f 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -1,9 +1,23 @@ # -*- coding: utf-8 -*- +# Copyright (C) 2020 Red Hat, Inc. +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. # # OSprofiler documentation build configuration file, created by # sphinx-quickstart on Fri Jan 10 23:19:18 2014. # -# This file is execfile()d with the current directory set to its containing dir. +# This file is execfile()d with the current directory set to its +# containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. @@ -14,21 +28,19 @@ import os import sys -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. +# If extensions (or modules to document with autodoc) are in another +# directory, add these directories to sys.path here. If the directory +# is relative to the documentation root, use os.path.abspath to make +# it absolute, like shown here. sys.path.extend([ os.path.abspath('../..'), ]) -# -- General configuration ----------------------------------------------------- +# -- General configuration --------------------- -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.doctest', @@ -53,9 +65,6 @@ templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' -# The encoding of source files. -#source_encoding = 'utf-8-sig' - # The master toctree document. master_doc = 'index' @@ -63,23 +72,10 @@ master_doc = 'index' project = u'OSprofiler' copyright = u'2016, OpenStack Foundation' -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = [] -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - # If true, '()' will be appended to :func: etc. cross-reference text. add_function_parentheses = True @@ -87,108 +83,30 @@ add_function_parentheses = True # unit titles (such as .. function::). add_module_names = True -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'native' -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- +# -- Options for HTML output ------------ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'openstackdocs' -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = [] -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - # Output file base name for HTML help builder. htmlhelp_basename = '%sdoc' % project +# -- Options for LaTeX output -------------- -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} +latex_elements = {} # Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). +# (source start file, target name, title, author, +# documentclass [howto/manual]). latex_documents = [ ('index', '%s.tex' % project, @@ -196,56 +114,19 @@ latex_documents = [ u'OpenStack Foundation', 'manual'), ] -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -#man_pages = [ -# ('index', 'rally', u'Rally Documentation', -# [u'Rally Team'], 1) -#] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------------ +# -- Options for Texinfo output ----------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - ('index', 'OSprofiler', u'OSprofiler Documentation', - u'OSprofiler Team', 'OSprofiler', 'One line description of project.', - 'Miscellaneous'), + ( + 'index', + 'OSprofiler', + u'OSprofiler Documentation', + u'OSprofiler Team', + 'OSprofiler', + 'One line description of project.', + 'Miscellaneous' + ), ] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' diff --git a/osprofiler/tests/unit/doc/test_specs.py b/osprofiler/tests/unit/doc/test_specs.py index fe2b867..e875227 100644 --- a/osprofiler/tests/unit/doc/test_specs.py +++ b/osprofiler/tests/unit/doc/test_specs.py @@ -74,7 +74,7 @@ class TitlesTestCase(test.TestCase): self.assertTrue( len(line) < 80, msg="%s:%d: Line limited to a maximum of 79 characters." % - (tpl, i+1)) + (tpl, i + 1)) def _check_no_cr(self, tpl, raw): matches = re.findall("\r", raw) @@ -88,7 +88,7 @@ class TitlesTestCase(test.TestCase): trailing_spaces = re.findall(" +$", line) self.assertEqual( len(trailing_spaces), 0, - "Found trailing spaces on line %s of %s" % (i+1, tpl)) + "Found trailing spaces on line %s of %s" % (i + 1, tpl)) def test_template(self): with open(os.path.join(self.specs_path, "template.rst")) as f: diff --git a/test-requirements.txt b/test-requirements.txt index a227fe4..a2ca153 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -25,3 +25,5 @@ reno>=3.1.0 # Apache-2.0 # For Jaeger Tracing jaeger-client>=3.8.0 # Apache-2.0 + +pre-commit>=2.6.0 # MIT diff --git a/tools/lint.py b/tools/lint.py index d2a545b..62864eb 100644 --- a/tools/lint.py +++ b/tools/lint.py @@ -12,9 +12,6 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -# -# @author: Zhongyue Luo, Intel Corporation. -# import sys @@ -28,5 +25,6 @@ def main(dirpath): enable_opt = '--enable=%s' % ','.join(ENABLED_PYLINT_MSGS) lint.Run(['--reports=n', '--disable=all', enable_opt, dirpath]) + if __name__ == '__main__': main(sys.argv[1]) diff --git a/tools/patch_tox_venv.py b/tools/patch_tox_venv.py index ee8f53c..52b724c 100644 --- a/tools/patch_tox_venv.py +++ b/tools/patch_tox_venv.py @@ -41,8 +41,9 @@ def main(argv): project = 'oslo' install = install_venv.InstallVenv(root, venv, pip_requires, test_requires, py_version, project) - #NOTE(dprince): For Tox we only run post_process (which patches files, etc) + # NOTE(dprince): For Tox we only run post_process, which patches files, etc install.post_process() + if __name__ == '__main__': main(sys.argv) diff --git a/tox.ini b/tox.ini index 112fd78..0c34eba 100644 --- a/tox.ini +++ b/tox.ini @@ -34,7 +34,7 @@ deps = [testenv:pep8] commands = - flake8 + pre-commit run -a # Run security linter bandit -r osprofiler -n5 distribute = false @@ -76,7 +76,6 @@ extension = N322 = checks:assert_equal_none N323 = checks:assert_true_or_false_with_in N324 = checks:assert_equal_in - N350 = checks:check_quotes N351 = checks:check_no_constructor_data_struct N352 = checks:check_dict_formatting_in_string N353 = checks:check_using_unicode -- cgit v1.2.1