Bug 2440190 - [heads up] python-sphinx-hoverxref will fail to build with Sphinx 9+ in Fedora 45: exception: cannot unpack non-iterable _Opt object
Summary: [heads up] python-sphinx-hoverxref will fail to build with Sphinx 9+ in Fedor...
Keywords:
Status: NEW
Alias: None
Product: Fedora
Classification: Fedora
Component: python-sphinx-hoverxref
Version: 45
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Michel Lind
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: 2419310
TreeView+ depends on / blocked
 
Reported: 2026-02-16 11:41 UTC by Karolina Surma
Modified: 2026-08-17 14:12 UTC (History)
2 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed:
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Karolina Surma 2026-02-16 11:41:53 UTC
[heads up] python-sphinx-hoverxref will fail to build with Sphinx 9+ which is going to be shipped in Fedora 45.

_________________ ERROR at setup of test_lazy_tooltips_notlazy _________________

self = <sphinx.events.EventManager object at 0x7f466ec90750>
name = 'config-inited', allowed_exceptions = ()
args = (Config(project='Project name not set', author='Author name not set', project_copyright='', copyright='', version='', ...modal_debugmode=False, hoverxref_modal_default_title='Note', hoverxref_modal_prefix_title='📝 ', jquery_use_sri=False),)
repr_args = "(Config(project='Project name not set', author='Author name not set', project_copyright='', copyright='', version='',...odal_debugmode=False, hoverxref_modal_default_title='Note', hoverxref_modal_prefix_title='📝 ', jquery_use_sri=False),)"
results = []

    def emit(
        self,
        name: str,
        *args: Any,
        allowed_exceptions: tuple[type[Exception], ...] = (),
    ) -> list[Any]:
        """Emit a Sphinx event.
    
        This emits the *name* event and passes *args* to the handler functions.
        Return the return values of all handlers as a list.
        Do not emit core Sphinx events in extensions!
    
        :param name:
            The name of the event that will be emitted.
        :param args:
            The arguments for the event, to be passed to the handler functions.
        :param allowed_exceptions:
            The list of exceptions that are allowed in the handlers.
    
        .. versionchanged:: 3.1
    
           Added *allowed_exceptions* to specify path-through exceptions
        """
        # not every object likes to be repr()'d
        # (think random stuff coming via autodoc)
        try:
            repr_args = repr(args)
        except Exception:
            pass
        else:
            logger.debug('[app] emitting event: %r%s', name, repr_args)
    
        results = []
        listeners = sorted(self.listeners[name], key=attrgetter('priority'))
        for listener in listeners:
            try:
>               results.append(listener.handler(self._app, *args))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

/usr/lib/python3.14/site-packages/sphinx/events.py:441: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

app = <SphinxTestApp buildername='html'>
exception = Config(project='Project name not set', author='Author name not set', project_copyright='', copyright='', version='', r...f_modal_debugmode=False, hoverxref_modal_default_title='Note', hoverxref_modal_prefix_title='📝 ', jquery_use_sri=False)

    def deprecated_configs_warning(app, exception):
        """Log warning message if old configs are used."""
>       default, rebuild, types = app.config.values.get('hoverxref_tooltip_api_host')
        ^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: cannot unpack non-iterable _Opt object

hoverxref/extension.py:312: TypeError

The above exception was the direct cause of the following exception:

test_params = {'shared_result': None}
app_params = _app_params(args=[], kwargs={'srcdir': PosixPath('/builddir/build/BUILD/python-sphinx-hoverxref-1.4.1-build/sphinx-hov...ath('/builddir/build/BUILD/python-sphinx-hoverxref-1.4.1-build/sphinx-hoverxref-1.4.1/tests/examples/default/_build')})
make_app = <function make_app.<locals>.make at 0x7f466ebd9a60>
shared_result = <sphinx.testing.fixtures.SharedResult object at 0x7f466ebe3310>

    @pytest.fixture
    def app(
        test_params: dict[str, Any],
        app_params: _app_params,
        make_app: Callable[..., SphinxTestApp],
        shared_result: SharedResult,
    ) -> Iterator[SphinxTestApp]:
        """Provides the 'sphinx.application.Sphinx' object"""
        args, kwargs = app_params
>       app_ = make_app(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^

/usr/lib/python3.14/site-packages/sphinx/testing/fixtures.py:166: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.14/site-packages/sphinx/testing/fixtures.py:209: in make
    app_ = SphinxTestApp(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.14/site-packages/sphinx/testing/util.py:177: in __init__
    super().__init__(
/usr/lib/python3.14/site-packages/sphinx/application.py:325: in __init__
    self.events.emit('config-inited', self.config)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <sphinx.events.EventManager object at 0x7f466ec90750>
name = 'config-inited', allowed_exceptions = ()
args = (Config(project='Project name not set', author='Author name not set', project_copyright='', copyright='', version='', ...modal_debugmode=False, hoverxref_modal_default_title='Note', hoverxref_modal_prefix_title='📝 ', jquery_use_sri=False),)
repr_args = "(Config(project='Project name not set', author='Author name not set', project_copyright='', copyright='', version='',...odal_debugmode=False, hoverxref_modal_default_title='Note', hoverxref_modal_prefix_title='📝 ', jquery_use_sri=False),)"
results = []

    def emit(
        self,
        name: str,
        *args: Any,
        allowed_exceptions: tuple[type[Exception], ...] = (),
    ) -> list[Any]:
        """Emit a Sphinx event.
    
        This emits the *name* event and passes *args* to the handler functions.
        Return the return values of all handlers as a list.
        Do not emit core Sphinx events in extensions!
    
        :param name:
            The name of the event that will be emitted.
        :param args:
            The arguments for the event, to be passed to the handler functions.
        :param allowed_exceptions:
            The list of exceptions that are allowed in the handlers.
    
        .. versionchanged:: 3.1
    
           Added *allowed_exceptions* to specify path-through exceptions
        """
        # not every object likes to be repr()'d
        # (think random stuff coming via autodoc)
        try:
            repr_args = repr(args)
        except Exception:
            pass
        else:
            logger.debug('[app] emitting event: %r%s', name, repr_args)
    
        results = []
        listeners = sorted(self.listeners[name], key=attrgetter('priority'))
        for listener in listeners:
            try:
                results.append(listener.handler(self._app, *args))
            except allowed_exceptions:
                # pass through the errors specified as *allowed_exceptions*
                raise
            except SphinxError:
                raise
            except Exception as exc:
                if self._reraise_errors:
                    raise
                modname = safe_getattr(listener.handler, '__module__', None)
                msg = __('Handler %r for event %r threw an exception')
>               raise ExtensionError(
                    msg % (listener.handler, name),
                    exc,
                    modname=modname,
                ) from exc
E               sphinx.errors.ExtensionError: Handler <function deprecated_configs_warning at 0x7f466f520ca0> for event 'config-inited' threw an exception (exception: cannot unpack non-iterable _Opt object)

This is only used by python-hypothesis in Fedora, no longer active upstream, and removed from newer hypothesis. The best course of action would be to get rid of using this extension in hypothesis and retiring the package.

Thank you for working on this!

Comment 1 Aoife Moloney 2026-08-17 14:12:58 UTC
This bug appears to have been reported against 'rawhide' during the Fedora Linux 45 development cycle.
Changing version to 45.


Note You need to log in before you can comment on or make changes to this bug.