From becf2aadbab49e9e135045f4e360a18b5c653d31 Mon Sep 17 00:00:00 2001 From: James Knight Date: Wed, 12 Jun 2024 01:31:42 -0400 Subject: [PATCH 1/5] tox: bump linter versions Signed-off-by: James Knight --- tox.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index e2bd82da..e3b7b41e 100644 --- a/tox.ini +++ b/tox.ini @@ -49,7 +49,7 @@ usedevelop = false [testenv:pylint] deps = {[testenv]deps} - pylint + pylint: pylint==3.2.3 commands = pylint \ sphinxcontrib \ @@ -58,7 +58,7 @@ commands = [testenv:ruff] deps = {[testenv]deps} - ruff: ruff==0.3.4 + ruff: ruff==0.4.8 setenv = {[testenv]setenv} RUFF_CACHE_DIR={toxworkdir}/.ruff_cache From 27e0c27217e8b1156b2dcc2522b1f0fb280dc900 Mon Sep 17 00:00:00 2001 From: James Knight Date: Wed, 12 Jun 2024 01:33:09 -0400 Subject: [PATCH 2/5] drop use of older percent format Signed-off-by: James Knight --- sphinxcontrib/confluencebuilder/assets.py | 8 ++++---- sphinxcontrib/confluencebuilder/config/env.py | 2 +- sphinxcontrib/confluencebuilder/logger.py | 4 ++-- sphinxcontrib/confluencebuilder/singlebuilder.py | 4 ++-- sphinxcontrib/confluencebuilder/state.py | 4 ++-- sphinxcontrib/confluencebuilder/svg.py | 6 +++--- sphinxcontrib/confluencebuilder/transmute/__init__.py | 2 +- .../confluencebuilder/transmute/ext_sphinx_diagrams.py | 3 +-- .../transmute/ext_sphinxcontrib_mermaid.py | 2 +- 9 files changed, 17 insertions(+), 18 deletions(-) diff --git a/sphinxcontrib/confluencebuilder/assets.py b/sphinxcontrib/confluencebuilder/assets.py index cd37882e..9b884d0a 100644 --- a/sphinxcontrib/confluencebuilder/assets.py +++ b/sphinxcontrib/confluencebuilder/assets.py @@ -82,7 +82,7 @@ def add(self, path, docname): Returns: the key, document name and path """ - logger.verbose('adding manual attachment: %s' % path) + logger.verbose(f'adding manual attachment: {path}') abs_path = find_env_abspath(self.env, self.out_dir, path) return self._handle_entry(abs_path, docname, standalone=True) @@ -219,7 +219,7 @@ def process_file_node(self, node, docname, standalone=False): target = node['reftarget'] if target.find('://') == -1: - logger.verbose('process file node: %s' % target) + logger.verbose(f'process file node: {target}') path = self._interpret_asset_path(node) if path: return self._handle_entry(path, docname, standalone) @@ -245,7 +245,7 @@ def process_image_node(self, node, docname, standalone=False): uri = str(node['uri']) if not uri.startswith('data:') and uri.find('://') == -1: - logger.verbose('process image node: %s' % uri) + logger.verbose(f'process image node: {uri}') path = self._interpret_asset_path(node) if path: return self._handle_entry(path, docname, standalone) @@ -344,7 +344,7 @@ def _interpret_asset_path(self, node): abs_path = find_env_abspath(self.env, self.out_dir, path) if not abs_path: - logger.verbose('failed to find path: %s' % path) + logger.verbose(f'failed to find path: {path}') return abs_path diff --git a/sphinxcontrib/confluencebuilder/config/env.py b/sphinxcontrib/confluencebuilder/config/env.py index bd39ba7f..3aef8ca9 100644 --- a/sphinxcontrib/confluencebuilder/config/env.py +++ b/sphinxcontrib/confluencebuilder/config/env.py @@ -31,7 +31,7 @@ def apply_env_overrides(builder): env_key = key.upper() env_val = os.getenv(env_key) if env_val: - logger.verbose('accepting configuration from env: %s' % env_val) + logger.verbose(f'accepting configuration from env: {env_val}') if key in config_manager.options_bool: conf[key] = str2bool(env_val) diff --git a/sphinxcontrib/confluencebuilder/logger.py b/sphinxcontrib/confluencebuilder/logger.py index 66b331e9..fb7a4971 100644 --- a/sphinxcontrib/confluencebuilder/logger.py +++ b/sphinxcontrib/confluencebuilder/logger.py @@ -121,8 +121,8 @@ def trace(container, data): try: trace_file = Path('trace.log') with trace_file.open('a', encoding='utf-8') as file: - file.write('[%s]\n' % container) + file.write(f'[{container}]\n') file.write(data) file.write('\n') except OSError as err: - ConfluenceLogger.warn('unable to trace: %s' % err) + ConfluenceLogger.warn(f'unable to trace: {err}') diff --git a/sphinxcontrib/confluencebuilder/singlebuilder.py b/sphinxcontrib/confluencebuilder/singlebuilder.py index 3c0986bc..ee49bac3 100644 --- a/sphinxcontrib/confluencebuilder/singlebuilder.py +++ b/sphinxcontrib/confluencebuilder/singlebuilder.py @@ -199,7 +199,7 @@ def _register_doctree_title_targets(self, docname, doctree): secnumbers = self.env.toc_secnumbers.get(self.config.root_doc, {}) docref_set = False - doc_anchorname = '%s/' % docname + doc_anchorname = f'{docname}/' root_section = None title_node = self._find_title_element(doctree) if title_node: @@ -216,7 +216,7 @@ def _register_doctree_title_targets(self, docname, doctree): anchorname = f'{docname}/#{id_}' if anchorname not in secnumbers: - anchorname = '%s/' % id_ + anchorname = f'{id_}/' if self.add_secnumbers: secnumber = secnumbers.get(anchorname) diff --git a/sphinxcontrib/confluencebuilder/state.py b/sphinxcontrib/confluencebuilder/state.py index ff5a3bbb..946c0f5b 100644 --- a/sphinxcontrib/confluencebuilder/state.py +++ b/sphinxcontrib/confluencebuilder/state.py @@ -92,9 +92,9 @@ def register_title(docname, title, config): base_tail += postfix if len(title) + len(base_tail) > try_max: - warning = 'document title has been trimmed due to length: %s' % title + warning = f'document title has been trimmed due to length: {title}' if len(base_tail) > 0: - warning += '; With postfix: %s' % base_tail + warning += f'; With postfix: {base_tail}' logger.warn(warning) title = title[0:try_max - len(base_tail)] diff --git a/sphinxcontrib/confluencebuilder/svg.py b/sphinxcontrib/confluencebuilder/svg.py index 3d30f19b..76f3b1c5 100644 --- a/sphinxcontrib/confluencebuilder/svg.py +++ b/sphinxcontrib/confluencebuilder/svg.py @@ -73,7 +73,7 @@ def confluence_supported_svg(builder, node): with abs_path.open('rb') as f: svg_data = f.read() except OSError as err: - builder.warn('error reading svg: %s' % err) + builder.warn(f'error reading svg: {err}') return modified = False @@ -196,7 +196,7 @@ def confluence_supported_svg(builder, node): # write the new svg file (if needed) if not out_file.is_file(): - logger.verbose('generating compatible svg of: %s' % uri) + logger.verbose(f'generating compatible svg of: {uri}') logger.verbose(f'generating compatible svg to: {out_file}') out_file.parent.mkdir(parents=True, exist_ok=True) @@ -204,7 +204,7 @@ def confluence_supported_svg(builder, node): with out_file.open('wb') as f: f.write(svg_data) except OSError as err: - builder.warn('error writing svg: %s' % err) + builder.warn(f'error writing svg: {err}') return # replace the required node attributes diff --git a/sphinxcontrib/confluencebuilder/transmute/__init__.py b/sphinxcontrib/confluencebuilder/transmute/__init__.py index eed60183..6eb3a19d 100644 --- a/sphinxcontrib/confluencebuilder/transmute/__init__.py +++ b/sphinxcontrib/confluencebuilder/transmute/__init__.py @@ -272,7 +272,7 @@ def __init__(self, builder): graph = node['graph'] graph_hash = inheritance_diagram.get_graph_hash(node) - name = 'inheritance%s' % graph_hash + name = f'inheritance{graph_hash}' dotcode = graph.generate_dot(name, {}, env=builder.env) diff --git a/sphinxcontrib/confluencebuilder/transmute/ext_sphinx_diagrams.py b/sphinxcontrib/confluencebuilder/transmute/ext_sphinx_diagrams.py index 01298cdc..3ae84d91 100644 --- a/sphinxcontrib/confluencebuilder/transmute/ext_sphinx_diagrams.py +++ b/sphinxcontrib/confluencebuilder/transmute/ext_sphinx_diagrams.py @@ -67,6 +67,5 @@ def __init__(self, builder): node.replace_self(new_container) except DiagramsError as exc: - ConfluenceLogger.warn( - 'diagrams code %r: ' % node['code'] + str(exc)) + ConfluenceLogger.warn('diagrams code %r: %s', node['code'], exc) node.parent.remove(node) diff --git a/sphinxcontrib/confluencebuilder/transmute/ext_sphinxcontrib_mermaid.py b/sphinxcontrib/confluencebuilder/transmute/ext_sphinxcontrib_mermaid.py index 10c2a8fd..08748156 100644 --- a/sphinxcontrib/confluencebuilder/transmute/ext_sphinxcontrib_mermaid.py +++ b/sphinxcontrib/confluencebuilder/transmute/ext_sphinxcontrib_mermaid.py @@ -67,5 +67,5 @@ def __init__(self, builder): new_node['align'] = node['align'] node.replace_self(new_node) except MermaidError as exc: - ConfluenceLogger.warn('mermaid code %r: ' % node['code'] + str(exc)) + ConfluenceLogger.warn('mermaid code %r: %s', node['code'], exc) node.parent.remove(node) From 0e280fa2b3ca06298b4146c422e77a2e789eb345 Mon Sep 17 00:00:00 2001 From: James Knight Date: Wed, 12 Jun 2024 01:33:39 -0400 Subject: [PATCH 3/5] remove no longer required sfl001 check Signed-off-by: James Knight --- sphinxcontrib/confluencebuilder/config/checks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinxcontrib/confluencebuilder/config/checks.py b/sphinxcontrib/confluencebuilder/config/checks.py index eeeffd78..eed2fc2a 100644 --- a/sphinxcontrib/confluencebuilder/config/checks.py +++ b/sphinxcontrib/confluencebuilder/config/checks.py @@ -513,7 +513,7 @@ def conf_translate(value): # ################################################################## # confluence_publish_debug - opts = PublishDebug._member_names_ # noqa: SLF001 pylint: disable=no-member + opts = PublishDebug._member_names_ # pylint: disable=no-member try: validator.conf('confluence_publish_debug').bool() # deprecated except ConfluenceConfigError: From 4dd4ecce494787f27694d612c2f2cc2e54a091b0 Mon Sep 17 00:00:00 2001 From: James Knight Date: Wed, 12 Jun 2024 01:35:56 -0400 Subject: [PATCH 4/5] transmute: ensure inheritance_diagram is set Ensure `inheritance_diagram` is set even if graphviz is not loaded, to prevent any undesired handled if the extension is missing. Signed-off-by: James Knight --- sphinxcontrib/confluencebuilder/transmute/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sphinxcontrib/confluencebuilder/transmute/__init__.py b/sphinxcontrib/confluencebuilder/transmute/__init__.py index 6eb3a19d..ac1a3e4c 100644 --- a/sphinxcontrib/confluencebuilder/transmute/__init__.py +++ b/sphinxcontrib/confluencebuilder/transmute/__init__.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: BSD-2-Clause # Copyright Sphinx Confluence Builder Contributors (AUTHORS) +from contextlib import suppress from docutils import nodes from sphinx.util.math import wrap_displaymath from sphinxcontrib.confluencebuilder.compat import docutils_findall as findall @@ -32,11 +33,10 @@ imgmath = None # load inheritance_diagram extension if available to handle node pre-processing +inheritance_diagram = None if graphviz: - try: + with suppress(ImportError): from sphinx.ext import inheritance_diagram - except ImportError: - inheritance_diagram = None def doctree_transmute(builder, doctree): From 27a7d92d06deb306e8e78f3ccd72d28744f19cbf Mon Sep 17 00:00:00 2001 From: James Knight Date: Wed, 12 Jun 2024 01:36:44 -0400 Subject: [PATCH 5/5] lint: exclude example/test assets in ruff Signed-off-by: James Knight --- ruff.toml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ruff.toml b/ruff.toml index 0adf070f..5aa4ffdf 100644 --- a/ruff.toml +++ b/ruff.toml @@ -2,6 +2,11 @@ lint.select = [ 'ALL', ] +lint.exclude = [ + # exclude any hello/sample scripts + 'Hello.py', +] + lint.ignore = [ # we do not type annotate everything at this time 'ANN',