commit de9b2fc6a184611531c46d519797c428a0aeaead Author: Hervé Beraud Date: Tue Jul 21 13:40:33 2020 +0200 Adding pre-commit 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: I045fa1cd7932d960e1cf49b2c335c7acdeba0b46 Signed-off-by: Moisés Guimarães de Medeiros diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..a9cb953 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,35 @@ +--- +default_language_version: + # force all unspecified python hooks to run python3 + python: python3 +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: 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://github.com/Lucas-C/pre-commit-hooks + rev: v1.1.7 + hooks: + - id: remove-tabs + exclude: '.*\.(svg)$' + - repo: https://gitlab.com/pycqa/flake8 + rev: 3.8.3 + hooks: + - id: flake8 + additional_dependencies: + - hacking>=3.0.1,<3.1.0 diff --git a/doc/Makefile b/doc/Makefile index cc35949..efd594b 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -17,137 +17,137 @@ I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: - -rm -rf $(BUILDDIR)/* + -rm -rf $(BUILDDIR)/* html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/stevedore.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/stevedore.qhc" + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/stevedore.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/stevedore.qhc" devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/stevedore" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/stevedore" - @echo "# devhelp" + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/stevedore" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/stevedore" + @echo "# devhelp" epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/doc/source/conf.py b/doc/source/conf.py index d3b088a..5f3e370 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -1,9 +1,24 @@ # -*- 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. # # stevedore documentation build configuration file, created by # sphinx-quickstart on Sun Jul 22 14:01:09 2012. # -# 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. @@ -11,30 +26,28 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import datetime - -# make openstackdocstheme an optional dependency. stevedore is a low level lib +# make openstackdocstheme an optional dependency. stevedore is a +# low level lib # that is used outside of OpenStack. Not having something OpenStack specific # as build requirement is a good thing. try: - import openstackdocstheme + import openstackdocstheme # noqa except ImportError: has_openstackdocstheme = False else: has_openstackdocstheme = True -# If extensions (or modules to document with autodoc) are in another directory, +# 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.insert(0, os.path.abspath('.')) +# documentation root, use os.path.abspath to make it absolute, +# like shown here.sys.path.insert(0, 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.todo', @@ -57,9 +70,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' @@ -68,195 +78,64 @@ project = u'stevedore' copyright = u'2016, DreamHost' -# 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 - -# If true, the current module name will be prepended to all description -# 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 = 'default' if has_openstackdocstheme: 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 = ['_static'] - -# 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 = 'stevedoredoc' -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', +# -- Options for LaTeX output ---------------------------------------- -# 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', 'stevedore.tex', u'stevedore Documentation', - u'DreamHost', 'manual'), + ( + 'index', + 'stevedore.tex', + u'stevedore Documentation', + u'DreamHost', + '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', 'stevedore', u'stevedore Documentation', -# [u'DreamHost'], 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', 'stevedore', u'stevedore Documentation', - u'DreamHost', 'stevedore', 'One line description of project.', - 'Miscellaneous'), + ( + 'index', + 'stevedore', + u'stevedore Documentation', + u'DreamHost', + 'stevedore', + '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' - extlinks = { 'issue': ('https://github.com/dreamhost/stevedore/issues/%s', 'issue '), } -autodoc_default_options = {'members': None, 'special-members': None, 'show-inheritance': None} +autodoc_default_options = { + 'members': None, + 'special-members': None, + 'show-inheritance': None +} diff --git a/doc/source/user/essays/pycon2013.rst b/doc/source/user/essays/pycon2013.rst index f2bc8fa..a06a47a 100644 --- a/doc/source/user/essays/pycon2013.rst +++ b/doc/source/user/essays/pycon2013.rst @@ -88,7 +88,7 @@ several different areas. OpenStack is a collection of components that cooperate to provide `Infrastructure as a Service`_ features. Each component manages a different aspect of the cloud and uses a message bus to communicate -with the other components. +with the other components. All of the components generate notification messages when events happen (like instances being created or destroyed). Capturing those @@ -453,7 +453,7 @@ unexpected errors from the plugins any time we call into them. Invocation ---------- -We used all three invocation patterns, in different places. +We used all three invocation patterns, in different places. 1. We only use one storage system at a time, so we treat the storage plugin like a driver. diff --git a/doc/source/user/tutorial/creating_plugins.rst b/doc/source/user/tutorial/creating_plugins.rst index eefe76b..114de28 100644 --- a/doc/source/user/tutorial/creating_plugins.rst +++ b/doc/source/user/tutorial/creating_plugins.rst @@ -33,7 +33,7 @@ A Plugin Base Class =================== Step 1 above is to define an abstract base class for the API that -needs to be implemented by each plugin. +needs to be implemented by each plugin. .. literalinclude:: ../../../../stevedore/example/base.py :language: python @@ -104,7 +104,7 @@ for stevedore is located in ``stevedore.egg-info/entry_points.txt``: [stevedore.example.formatter] simple = stevedore.example.simple:Simple plain = stevedore.example.simple:Simple - + [stevedore.test.extension] t2 = stevedore.tests.test_extension:FauxExtension t1 = stevedore.tests.test_extension:FauxExtension diff --git a/doc/source/user/tutorial/naming.rst b/doc/source/user/tutorial/naming.rst index 5a155c1..b6ab448 100644 --- a/doc/source/user/tutorial/naming.rst +++ b/doc/source/user/tutorial/naming.rst @@ -11,7 +11,7 @@ module is imported (i.e., it needs to be a module-level global). Names and Namespaces ==================== -Entry points are registered using a *name* in a *namespace*. +Entry points are registered using a *name* in a *namespace*. Entry point names are usually considered user-visible. For example, they frequently appear in configuration files where a driver is being diff --git a/releasenotes/source/conf.py b/releasenotes/source/conf.py index e59270e..6d53444 100644 --- a/releasenotes/source/conf.py +++ b/releasenotes/source/conf.py @@ -1,4 +1,6 @@ # -*- 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 diff --git a/stevedore/_cache.py b/stevedore/_cache.py index 28a45fa..cd0e1cd 100644 --- a/stevedore/_cache.py +++ b/stevedore/_cache.py @@ -72,8 +72,7 @@ def _ftobytes(f): def _hash_settings_for_path(path): - """Return a hash and the path settings that created it. - """ + """Return a hash and the path settings that created it.""" paths = [] h = hashlib.sha256() diff --git a/stevedore/driver.py b/stevedore/driver.py index 167dc67..e21e4ce 100644 --- a/stevedore/driver.py +++ b/stevedore/driver.py @@ -10,7 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. -from .exception import NoMatches, MultipleMatches +from .exception import MultipleMatches +from .exception import NoMatches from .named import NamedExtensionManager @@ -142,7 +143,6 @@ class DriverManager(NamedExtensionManager): @property def driver(self): - """Returns the driver being used by this manager. - """ + """Returns the driver being used by this manager.""" ext = self.extensions[0] return ext.obj if ext.obj else ext.plugin diff --git a/stevedore/example/base.py b/stevedore/example/base.py index 08f8a5c..cd48bf2 100644 --- a/stevedore/example/base.py +++ b/stevedore/example/base.py @@ -1,3 +1,18 @@ +# -*- 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. import abc diff --git a/stevedore/example/load_as_driver.py b/stevedore/example/load_as_driver.py index 6838c9d..a3de5df 100644 --- a/stevedore/example/load_as_driver.py +++ b/stevedore/example/load_as_driver.py @@ -1,3 +1,17 @@ +# 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. import argparse from stevedore import driver diff --git a/stevedore/example/load_as_extension.py b/stevedore/example/load_as_extension.py index f751852..1af1f46 100644 --- a/stevedore/example/load_as_extension.py +++ b/stevedore/example/load_as_extension.py @@ -1,3 +1,17 @@ +# 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. import argparse from stevedore import extension diff --git a/stevedore/example/setup.py b/stevedore/example/setup.py index 33e2aee..c0ea667 100644 --- a/stevedore/example/setup.py +++ b/stevedore/example/setup.py @@ -1,4 +1,19 @@ -from setuptools import setup, find_packages +# 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. +from setuptools import find_packages +from setuptools import setup setup( name='stevedore-examples', diff --git a/stevedore/example/simple.py b/stevedore/example/simple.py index 1cad96a..0cc3acd 100644 --- a/stevedore/example/simple.py +++ b/stevedore/example/simple.py @@ -1,9 +1,21 @@ +# 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. from stevedore.example import base class Simple(base.FormatterBase): - """A very basic formatter. - """ + """A very basic formatter.""" def format(self, data): """Format the data and return unicode text. diff --git a/stevedore/example2/fields.py b/stevedore/example2/fields.py index f5c8e19..82db747 100644 --- a/stevedore/example2/fields.py +++ b/stevedore/example2/fields.py @@ -1,3 +1,18 @@ +# -*- 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. import textwrap from stevedore.example import base diff --git a/stevedore/example2/setup.py b/stevedore/example2/setup.py index 31d7145..2293c66 100644 --- a/stevedore/example2/setup.py +++ b/stevedore/example2/setup.py @@ -1,4 +1,19 @@ -from setuptools import setup, find_packages +# 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. +from setuptools import find_packages +from setuptools import setup setup( name='stevedore-examples2', diff --git a/stevedore/extension.py b/stevedore/extension.py index 2ccdc27..4aeda06 100644 --- a/stevedore/extension.py +++ b/stevedore/extension.py @@ -13,8 +13,8 @@ """ExtensionManager """ -import operator import logging +import operator from . import _cache from .exception import NoMatches @@ -331,8 +331,7 @@ class ExtensionManager(object): LOG.exception(err) def items(self): - """ - Return an iterator of tuples of the form (name, extension). + """Return an iterator of tuples of the form (name, extension). This is analogous to the Mapping.items() method. """ @@ -356,6 +355,5 @@ class ExtensionManager(object): return self._extensions_by_name[name] def __contains__(self, name): - """Return true if name is in list of enabled extensions. - """ + """Return true if name is in list of enabled extensions.""" return any(extension.name == name for extension in self.extensions) diff --git a/stevedore/tests/test_dispatch.py b/stevedore/tests/test_dispatch.py index f1c305a..e54e492 100644 --- a/stevedore/tests/test_dispatch.py +++ b/stevedore/tests/test_dispatch.py @@ -10,8 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. -from stevedore.tests import utils from stevedore import dispatch +from stevedore.tests import utils def check_dispatch(ep, *args, **kwds): diff --git a/stevedore/tests/test_test_manager.py b/stevedore/tests/test_test_manager.py index 54bb454..3ada139 100644 --- a/stevedore/tests/test_test_manager.py +++ b/stevedore/tests/test_test_manager.py @@ -10,15 +10,20 @@ # License for the specific language governing permissions and limitations # under the License. -from unittest.mock import Mock, sentinel +from unittest.mock import Mock +from unittest.mock import sentinel -from stevedore import (ExtensionManager, NamedExtensionManager, HookManager, - DriverManager, EnabledExtensionManager) -from stevedore.dispatch import (DispatchExtensionManager, - NameDispatchExtensionManager) +from stevedore.dispatch import DispatchExtensionManager +from stevedore.dispatch import NameDispatchExtensionManager from stevedore.extension import Extension from stevedore.tests import utils +from stevedore import DriverManager +from stevedore import EnabledExtensionManager +from stevedore import ExtensionManager +from stevedore import HookManager +from stevedore import NamedExtensionManager + test_extension = Extension('test_extension', None, None, None) test_extension2 = Extension('another_one', None, None, None) diff --git a/test-requirements.txt b/test-requirements.txt index 7b203a2..1964dd1 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -6,3 +6,6 @@ coverage!=4.4,>=4.0 # Apache-2.0 stestr>=2.0.0 # Apache-2.0 # sphinx is needed for testing the sphinxext module sphinx>=2.0.0,!=2.1.0 # BSD + +bandit>=1.6.0,<1.7.0 # Apache-2.0 +pre-commit>=2.6.0 # MIT diff --git a/tox.ini b/tox.ini index 72dd206..ae86fcb 100644 --- a/tox.ini +++ b/tox.ini @@ -20,17 +20,14 @@ deps = commands = {posargs} [testenv:pep8] -deps = - flake8 # MIT - bandit>=1.1.0,<1.6.0 # Apache-2.0 ignore = E251 commands = - flake8 stevedore setup.py + pre-commit run -a # Run security linter bandit -r stevedore -x tests -n5 [flake8] -ignore = E251 +ignore = E251,H405 show-source = True exclude=.venv,.git,.tox,dist,*lib/python*,*egg,build