Source: sphinx-argparse
Version: 0.2.5-1
Severity: important
Tags: patch
Control: affects -1 src:python-pyproj

Dear Maintainer,

As reported in #982698, python-pyproj FTBFS due to sphinx failing:

 PYTHONPATH=/build/python-pyproj/.pybuild/cpython3_3.9_pyproj/build make -C 
/build/python-pyproj/docs man
 make[2]: Entering directory '/build/python-pyproj/docs'
 Running Sphinx v3.4.3
 making output directory... done
 building [mo]: targets for 0 po files that are out of date
 building [man]: all manpages
 updating environment: [new config] 33 added, 0 changed, 0 removed
 reading sources... [  3%] advanced_examples
 reading sources... [  6%] api/aoi
 reading sources... [  9%] api/crs/coordinate_operation
 reading sources... [ 12%] api/crs/coordinate_system
 reading sources... [ 15%] api/crs/crs
 reading sources... [ 18%] api/crs/datum
 reading sources... [ 21%] api/crs/enums
 reading sources... [ 24%] api/crs/index
 reading sources... [ 27%] api/database
 reading sources... [ 30%] api/datadir
 reading sources... [ 33%] api/enums
 reading sources... [ 36%] api/exceptions
 reading sources... [ 39%] api/geod
 reading sources... [ 42%] api/global_context
 reading sources... [ 45%] api/index
 reading sources... [ 48%] api/list
 reading sources... [ 51%] api/network
 reading sources... [ 54%] api/proj
 reading sources... [ 57%] api/show_versions
 reading sources... [ 60%] api/sync
 reading sources... [ 63%] api/transformer
 reading sources... [ 66%] build_crs
 reading sources... [ 69%] build_crs_cf
 reading sources... [ 72%] cli
 
 Exception occurred:
   File "/usr/lib/python3/dist-packages/sphinxarg/parser.py", line 40, in 
_try_add_parser_attribute
     data[attribname] = attribval % {'prog': data['prog']}
 KeyError: 'prog'
 The full traceback has been saved in /tmp/sphinx-err-c2bpk2op.log, if you want 
to report the issue to the developers.
 Please also report this if it was a user error, so that a better error message 
can be provided next time.
 A bug report can be filed in the tracker at 
<https://github.com/sphinx-doc/sphinx/issues>. Thanks!

The content of /tmp/sphinx-err-c2bpk2op.log:

 # Sphinx version: 3.4.3
 # Python version: 3.9.2 (CPython)
 # Docutils version: 0.16 release
 # Jinja2 version: 2.11.3
 # Last messages:
 #   reading sources... [ 45%] api/index
 #   reading sources... [ 48%] api/list
 #   reading sources... [ 51%] api/network
 #   reading sources... [ 54%] api/proj
 #   reading sources... [ 57%] api/show_versions
 #   reading sources... [ 60%] api/sync
 #   reading sources... [ 63%] api/transformer
 #   reading sources... [ 66%] build_crs
 #   reading sources... [ 69%] build_crs_cf
 #   reading sources... [ 72%] cli
 # Loaded extensions:
 #   sphinx.ext.mathjax (3.4.3) from 
/usr/lib/python3/dist-packages/sphinx/ext/mathjax.py
 #   alabaster (0.7.8) from /usr/lib/python3/dist-packages/alabaster/__init__.py
 #   sphinx.ext.autodoc.type_comment (3.4.3) from 
/usr/lib/python3/dist-packages/sphinx/ext/autodoc/type_comment.py
 #   sphinx.ext.autodoc (3.4.3) from 
/usr/lib/python3/dist-packages/sphinx/ext/autodoc/__init__.py
 #   sphinx.ext.viewcode (3.4.3) from 
/usr/lib/python3/dist-packages/sphinx/ext/viewcode.py
 #   sphinx.ext.napoleon (3.4.3) from 
/usr/lib/python3/dist-packages/sphinx/ext/napoleon/__init__.py
 #   sphinx.ext.intersphinx (3.4.3) from 
/usr/lib/python3/dist-packages/sphinx/ext/intersphinx.py
 #   sphinxarg.ext (unknown version) from 
/usr/lib/python3/dist-packages/sphinxarg/ext.py
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/sphinx/cmd/build.py", line 280, in 
build_main
     app.build(args.force_all, filenames)
   File "/usr/lib/python3/dist-packages/sphinx/application.py", line 346, in 
build
     self.builder.build_update()
   File "/usr/lib/python3/dist-packages/sphinx/builders/__init__.py", line 293, 
in build_update
     self.build(['__all__'], to_build)
   File "/usr/lib/python3/dist-packages/sphinx/builders/__init__.py", line 310, 
in build
     updated_docnames = set(self.read())
   File "/usr/lib/python3/dist-packages/sphinx/builders/__init__.py", line 417, 
in read
     self._read_serial(docnames)
   File "/usr/lib/python3/dist-packages/sphinx/builders/__init__.py", line 438, 
in _read_serial
     self.read_doc(docname)
   File "/usr/lib/python3/dist-packages/sphinx/builders/__init__.py", line 478, 
in read_doc
     doctree = read_doc(self.app, self.env, self.env.doc2path(docname))
   File "/usr/lib/python3/dist-packages/sphinx/io.py", line 221, in read_doc
     pub.publish()
   File "/usr/lib/python3/dist-packages/docutils/core.py", line 217, in publish
     self.document = self.reader.read(self.source, self.parser,
   File "/usr/lib/python3/dist-packages/sphinx/io.py", line 126, in read
     self.parse()
   File "/usr/lib/python3/dist-packages/docutils/readers/__init__.py", line 77, 
in parse
     self.parser.parse(self.input, document)
   File "/usr/lib/python3/dist-packages/sphinx/parsers.py", line 104, in parse
     self.statemachine.run(inputlines, document, inliner=self.inliner)
   File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 
171, in run
     results = StateMachineWS.run(self, input_lines, input_offset,
   File "/usr/lib/python3/dist-packages/docutils/statemachine.py", line 241, in 
run
     context, next_state, result = self.check_line(
   File "/usr/lib/python3/dist-packages/docutils/statemachine.py", line 459, in 
check_line
     return method(match, context, next_state)
   File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 
2770, in underline
     self.section(title, source, style, lineno - 1, messages)
   File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 
328, in section
     self.new_subsection(title, lineno, messages)
   File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 
394, in new_subsection
     newabsoffset = self.nested_parse(
   File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 
282, in nested_parse
     state_machine.run(block, input_offset, memo=self.memo,
   File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 
197, in run
     results = StateMachineWS.run(self, input_lines, input_offset)
   File "/usr/lib/python3/dist-packages/docutils/statemachine.py", line 241, in 
run
     context, next_state, result = self.check_line(
   File "/usr/lib/python3/dist-packages/docutils/statemachine.py", line 459, in 
check_line
     return method(match, context, next_state)
   File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 
2343, in explicit_markup
     nodelist, blank_finish = self.explicit_construct(match)
   File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 
2355, in explicit_construct
     return method(self, expmatch)
   File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 
2097, in directive
     return self.run_directive(
   File "/usr/lib/python3/dist-packages/docutils/parsers/rst/states.py", line 
2147, in run_directive
     result = directive_instance.run()
   File "/usr/lib/python3/dist-packages/sphinxarg/ext.py", line 467, in run
     result = parse_parser(
   File "/usr/lib/python3/dist-packages/sphinxarg/parser.py", line 95, in 
parse_parser
     parse_parser(subaction, subdata, **kwargs)
   File "/usr/lib/python3/dist-packages/sphinxarg/parser.py", line 62, in 
parse_parser
     _try_add_parser_attribute(data, parser, 'description')
   File "/usr/lib/python3/dist-packages/sphinxarg/parser.py", line 40, in 
_try_add_parser_attribute
     data[attribname] = attribval % {'prog': data['prog']}
 KeyError: 'prog'


This change in pytest_prog_name_varies.patch is the cause:

 --- sphinx-argparse.orig/sphinxarg/parser.py
 +++ sphinx-argparse/sphinxarg/parser.py
 @@ -37,7 +37,7 @@
      if not isinstance(attribval, str):
          return
      if len(attribval) > 0:
 -        data[attribname] = attribval
 +        data[attribname] = attribval % {'prog': data['prog']}
  
  
  def _format_usage_without_prefix(parser):

Reverting this change fixes the issue.

If the change is required for other cases, something like the following may be 
appropriate to fix the KeyError:

        if 'prog' in data:
            data[attribname] = attribval % {'prog': data['prog']}
        else:
            data[attribname] = attribval

Kind Regards,

Bas

Reply via email to