diff options
-rw-r--r-- | .pre-commit-config.yaml | 35 | ||||
-rw-r--r-- | .zuul.d/project.yaml | 2 | ||||
-rw-r--r-- | doc/source/conf.py | 13 | ||||
-rw-r--r-- | lower-constraints.txt | 1 | ||||
-rw-r--r-- | oslo_config/generator.py | 46 | ||||
-rw-r--r-- | oslo_config/sphinxext.py | 9 | ||||
-rw-r--r-- | oslo_config/tests/test_generator.py | 16 | ||||
-rw-r--r-- | releasenotes/source/index.rst | 1 | ||||
-rw-r--r-- | releasenotes/source/victoria.rst | 6 | ||||
-rw-r--r-- | setup.cfg | 7 | ||||
-rw-r--r-- | test-requirements.txt | 2 | ||||
-rw-r--r-- | tox.ini | 2 |
12 files changed, 127 insertions, 13 deletions
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/.zuul.d/project.yaml b/.zuul.d/project.yaml index 2c16442..1155b74 100644 --- a/.zuul.d/project.yaml +++ b/.zuul.d/project.yaml @@ -3,7 +3,7 @@ - check-requirements - lib-forward-testing-python3 - openstack-lower-constraints-jobs - - openstack-python3-victoria-jobs + - openstack-python3-wallaby-jobs - periodic-stable-jobs - publish-openstack-docs-pti - release-notes-jobs-python3 diff --git a/doc/source/conf.py b/doc/source/conf.py index 5ce2034..3535e20 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -1,4 +1,17 @@ # -*- 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 os import sys diff --git a/lower-constraints.txt b/lower-constraints.txt index e7a67e9..fc28af9 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -58,6 +58,7 @@ requests-mock==1.5.0 requestsexceptions==1.2.0 restructuredtext-lint==1.3.1 rfc3986==1.2.0 +rst2txt==1.1.0 six==1.15.0 smmap==0.9.0 snowballstemmer==1.2.1 diff --git a/oslo_config/generator.py b/oslo_config/generator.py index f422587..277036b 100644 --- a/oslo_config/generator.py +++ b/oslo_config/generator.py @@ -29,7 +29,18 @@ import json import logging import operator import sys -import textwrap + +try: + # For oslo.config[rst-generator] + from docutils import core as docutils_core + from docutils.parsers.rst import nodes as docutils_nodes + from docutils.parsers.rst import roles as docutils_roles + import rst2txt + from sphinx import roles as sphinx_roles +except ImportError: + import textwrap + + rst2txt = None try: # For Python 3.8 and later @@ -53,6 +64,7 @@ _generator_opts = [ cfg.IntOpt( 'wrap-width', default=70, + min=0, help='The maximum length of help lines.'), cfg.MultiStrOpt( 'namespace', @@ -173,16 +185,43 @@ class _OptFormatter(object): :param output_file: a writeable file object """ self.output_file = output_file or sys.stdout - self.wrap_width = conf.wrap_width + self.wrap_width = conf.wrap_width or 998 # arbitrary line length self.minimal = conf.minimal self.summarize = conf.summarize + if rst2txt: + # register the default Sphinx roles + for rolename, nodeclass in sphinx_roles.generic_docroles.items(): + generic = docutils_roles.GenericRole(rolename, nodeclass) + docutils_roles.register_local_role(rolename, generic) + + for rolename, func in sphinx_roles.specific_docroles.items(): + docutils_roles.register_local_role(rolename, func) + + # plus our custom roles + for rolename in ('oslo.config:option', 'oslo.config:group'): + generic = docutils_roles.GenericRole(rolename, + docutils_nodes.strong) + docutils_roles.register_local_role(rolename, generic) + def _format_help(self, help_text): """Format the help for a group or option to the output file. :param help_text: The text of the help string """ - if self.wrap_width is not None and self.wrap_width > 0: + if rst2txt: + help_text = docutils_core.publish_string( + source=help_text, + writer=rst2txt.Writer(), + settings_overrides={'wrap_width': self.wrap_width} + ).decode() + + lines = '' + for line in help_text.splitlines(): + lines += '# ' + line + '\n' if line else '#\n' + + lines = [lines] + elif self.wrap_width > 0: wrapped = "" for line in help_text.splitlines(): text = "\n".join(textwrap.wrap(line, self.wrap_width, @@ -195,6 +234,7 @@ class _OptFormatter(object): lines = [wrapped] else: lines = ['# ' + help_text + '\n'] + return lines def _get_choice_text(self, choice): diff --git a/oslo_config/sphinxext.py b/oslo_config/sphinxext.py index 4a11163..6aadf73 100644 --- a/oslo_config/sphinxext.py +++ b/oslo_config/sphinxext.py @@ -495,6 +495,15 @@ class ConfigDomain(Domain): ) return None + def merge_domaindata(self, docnames, otherdata): + for target, docname in otherdata['options'].items(): + if docname in docnames: + self.data['options'][target] = docname + + for target, docname in otherdata['groups'].items(): + if docname in docnames: + self.data['groups'][target] = docname + def setup(app): # NOTE(dhellmann): Try to turn off lazy translation from oslo_i18n diff --git a/oslo_config/tests/test_generator.py b/oslo_config/tests/test_generator.py index a069e24..9a27aac 100644 --- a/oslo_config/tests/test_generator.py +++ b/oslo_config/tests/test_generator.py @@ -405,16 +405,16 @@ class GeneratorTestCase(base.BaseTestCase): # ''' # noqa -'# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod ' -'tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, ' -'quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ' -'consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse ' -'cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat ' -'non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ' -'(string value)' +'# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod ' # noqa +'tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, ' # noqa +'quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo ' # noqa +'consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse ' # noqa +'cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat ' # noqa +'non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ' # noqa +'(string value)' # noqa ''' #long_help = <None> -''')), +''')), # noqa ('long_help_with_preformatting', dict(opts=[('test', [(None, [opts['long_help_pre']])])], wrap_width=70, diff --git a/releasenotes/source/index.rst b/releasenotes/source/index.rst index 2051f56..0ebefc1 100644 --- a/releasenotes/source/index.rst +++ b/releasenotes/source/index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 unreleased + victoria ussuri train stein diff --git a/releasenotes/source/victoria.rst b/releasenotes/source/victoria.rst new file mode 100644 index 0000000..4efc7b6 --- /dev/null +++ b/releasenotes/source/victoria.rst @@ -0,0 +1,6 @@ +============================= +Victoria Series Release Notes +============================= + +.. release-notes:: + :branch: stable/victoria @@ -22,6 +22,13 @@ classifier = Programming Language :: Python :: 3 :: Only Programming Language :: Python :: Implementation :: CPython +[extras] +# package dependencies for optional behavior in the config generator. +# e.g.: oslo.config[generator] +rst-generator = + rst2txt>=1.1.0 # BSD + sphinx>=1.8.0,!=2.1.0 # BSD + [files] packages = oslo_config diff --git a/test-requirements.txt b/test-requirements.txt index bfe3ac5..8cb29d3 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -25,3 +25,5 @@ requests_mock>=1.5.0 # Apache-2.0 # Bandit security code scanner bandit>=1.6.0,<1.7.0 # Apache-2.0 + +pre-commit>=2.6.0 # MIT @@ -31,7 +31,7 @@ deps = [testenv:pep8] commands = - flake8 + pre-commit run -a # TODO(stephenfin): Add mypy here once it's passing {[testenv:bandit]commands} |