summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.pre-commit-config.yaml35
-rw-r--r--.zuul.d/project.yaml2
-rw-r--r--doc/source/conf.py13
-rw-r--r--lower-constraints.txt1
-rw-r--r--oslo_config/generator.py46
-rw-r--r--oslo_config/sphinxext.py9
-rw-r--r--oslo_config/tests/test_generator.py16
-rw-r--r--releasenotes/source/index.rst1
-rw-r--r--releasenotes/source/victoria.rst6
-rw-r--r--setup.cfg7
-rw-r--r--test-requirements.txt2
-rw-r--r--tox.ini2
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
diff --git a/setup.cfg b/setup.cfg
index edb0c7b..cc8f171 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -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
diff --git a/tox.ini b/tox.ini
index 92466fc..e4f7a05 100644
--- a/tox.ini
+++ b/tox.ini
@@ -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}