#1063326 TypeError: first argument must be callable

#1063326#5
Date:
2024-02-06 08:32:45 UTC
From:
To:
Dear Maintainer,

Hello,, while preparing the new silx package, I got this error message from sphinx when calling this command line

	# build man pages
	pybuild --build -s custom -p $(PY3VER) --build-args="cd doc && env PYTHONPATH={build_dir} http_proxy='127.0.0.1:9' xvfb-run -a --server-args=\"-screen 0 1024x768x24\" {interpreter} -m sphinx -N -bman source build/man"

The error message is:

# Platform:         linux; (Linux-6.6.13-amd64-x86_64-with-glibc2.37)
# Sphinx version:   7.2.6
# Python version:   3.11.7 (CPython)
# Docutils version: 0.20.1
# Jinja2 version:   3.1.2
# Pygments version: 2.17.2

# Last messages:
#   modules/utils/index
#   modules/utils/array_like
#   modules/utils/decorators
#   modules/utils/testutils
#   modules/utils/weakref
#   modules/utils/retry
#   modules/test/index
#   changelog
#   }
#   failed

# Loaded extensions:
#   sphinx.ext.mathjax (7.2.6)
#   alabaster (0.7.12)
#   sphinx.ext.autodoc.preserve_defaults (7.2.6)
#   sphinx.ext.autodoc.type_comment (7.2.6)
#   sphinx.ext.autodoc.typehints (7.2.6)
#   sphinx.ext.autodoc (7.2.6)
#   sphinx.ext.coverage (7.2.6)
#   sphinx.ext.viewcode (7.2.6)
#   sphinx.ext.doctest (7.2.6)
#   sphinx.ext.graphviz (7.2.6)
#   sphinx.ext.inheritance_diagram (7.2.6)
#   sphinx_panels (0.6.0)
#   sphinxext-archive (0.1)
#   snapshotqt_directive (0.1)
#   nbsphinx (0.8.11)

# Traceback:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/sphinx/cmd/build.py", line 298, in build_main
    app.build(args.force_all, args.filenames)
  File "/usr/lib/python3/dist-packages/sphinx/application.py", line 354, in build
    self.builder.build_update()
  File "/usr/lib/python3/dist-packages/sphinx/builders/__init__.py", line 290, in build_update
    self.build(['__all__'], to_build)
  File "/usr/lib/python3/dist-packages/sphinx/builders/__init__.py", line 363, in build
    self.write(docnames, list(updated_docnames), method)
  File "/usr/lib/python3/dist-packages/sphinx/util/display.py", line 92, in wrapper
    return f(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/sphinx/builders/manpage.py", line 103, in write
    docwriter.write(largetree, destination)
  File "/usr/lib/python3/dist-packages/docutils/writers/__init__.py", line 80, in write
    self.translate()
  File "/usr/lib/python3/dist-packages/sphinx/writers/manpage.py", line 35, in translate
    visitor = self.builder.create_translator(self.document, self.builder)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/sphinx/builders/__init__.py", line 119, in create_translator
    return self.app.registry.create_translator(self, *args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/sphinx/registry.py", line 353, in create_translator
    setattr(translator, 'visit_' + name, MethodType(visit, translator))
                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: first argument must be callable



Cheers

Frederic

#1063326#10
Date:
2024-02-06 11:30:53 UTC
From:
To:
Hi Frédéric!

This is because sphinx-panels defines the handler for "fontawesome" role for
manpage builder as (None, None):

https://sources.debian.org/src/sphinx-panels/0.6.0-3/sphinx_panels/icons.py/#L144

While Sphinx expects at least the visit function (the first pair element) to
be not None.

However, sphinx-panels is dead, and upstream recommends to use sphinx-design
instead. And in sphinx-design this bug is fixed:

https://sources.debian.org/src/sphinx-design/0.5.0-2/sphinx_design/icons.py/#L42

https://github.com/executablebooks/sphinx-design/pull/88

If you want a fix in sphinx-panels, please reassign the bug. Otherwise, if you
have found another solution, please close it.