[Pkg-mailman-hackers] Bug#1123397: hyperkitty: FTBFS: AttributeError: 'super' object has no attribute 'dicts' and no __dict__ for setting new attributes
Santiago Vila
sanvila at debian.org
Tue Dec 16 20:27:19 GMT 2025
Package: src:hyperkitty
Version: 1.3.12-3
Severity: serious
Tags: ftbfs forky sid
Dear maintainer:
During a rebuild of all packages in unstable, this package failed to build.
Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:
https://people.debian.org/~sanvila/build-logs/202512/
About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.
If you cannot reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.
If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:hyperkitty, so that this is still
visible in the BTS web page for this package.
Thanks.
--------------------------------------------------------------------------------
[...]
debian/rules clean
dh clean --with python3,sphinxdoc --buildsystem=pybuild
dh_auto_clean -O--buildsystem=pybuild
dh_autoreconf_clean -O--buildsystem=pybuild
debian/rules override_dh_clean
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_clean -X.txt.orig
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
debian/rules binary
dh binary --with python3,sphinxdoc --buildsystem=pybuild
dh_update_autotools_config -O--buildsystem=pybuild
dh_autoreconf -O--buildsystem=pybuild
dh_auto_configure -O--buildsystem=pybuild
debian/rules override_dh_auto_build
make[1]: Entering directory '/<<PKGBUILDDIR>>'
[... snipped ...]
File "/usr/lib/python3/dist-packages/whoosh/index.py", line 464, in writer
return SegmentWriter(self, **kwargs)
File "/usr/lib/python3/dist-packages/whoosh/writing.py", line 513, in __init__
if not try_for(self.writelock.acquire, timeout=timeout,
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
delay=delay):
^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/whoosh/util/filelock.py", line 54, in try_for
v = fn()
File "/usr/lib/python3/dist-packages/django_q/timeout.py", line 15, in raise_timeout_exception
raise TimeoutException(
f"Task exceeded maximum timeout value ({self._timeout} seconds)"
)
django_q.exceptions.TimeoutException: Task exceeded maximum timeout value (30 seconds)
======================================================================
ERROR: test_tag_removal_form (hyperkitty.tests.views.test_thread.ThreadTestCase.test_tag_removal_form)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/<<PKGBUILDDIR>>/hyperkitty/tests/views/test_thread.py", line 199, in setUp
msg = self._make_msg("msgid")
File "/<<PKGBUILDDIR>>/hyperkitty/tests/views/test_thread.py", line 215, in _make_msg
msg["Message-ID-Hash"] = add_to_list(listname, msg)
~~~~~~~~~~~^^^^^^^^^^^^^^^
File "/<<PKGBUILDDIR>>/hyperkitty/lib/incoming.py", line 154, in add_to_list
email.save()
~~~~~~~~~~^^
File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 814, in save
self.save_base(
~~~~~~~~~~~~~~^
using=using,
^^^^^^^^^^^^
...<2 lines>...
update_fields=update_fields,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 892, in save_base
post_save.send(
~~~~~~~~~~~~~~^
sender=origin,
^^^^^^^^^^^^^^
...<4 lines>...
using=using,
^^^^^^^^^^^^
)
^
File "/usr/lib/python3/dist-packages/django/dispatch/dispatcher.py", line 177, in send
(receiver, receiver(signal=self, sender=sender, **named))
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/<<PKGBUILDDIR>>/hyperkitty/signals.py", line 54, in Email_on_post_save
kwargs["instance"].on_post_created()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/<<PKGBUILDDIR>>/hyperkitty/models/email.py", line 222, in on_post_created
self.thread.on_email_added(self)
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/<<PKGBUILDDIR>>/hyperkitty/models/thread.py", line 191, in on_email_added
compute_thread_positions(self.id)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/<<PKGBUILDDIR>>/hyperkitty/tasks.py", line 127, in compute_thread_positions
q_options={'task_name': 'compute_thread_positions'}).run()
~~~^^
File "/usr/lib/python3/dist-packages/django_q/tasks.py", line 730, in run
self.id = async_task(self.func, *self.args, **self.kwargs)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django_q/tasks.py", line 73, in async_task
return _sync(pack)
File "/usr/lib/python3/dist-packages/django_q/tasks.py", line 773, in _sync
worker(task_queue, result_queue, Value("f", -1))
~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django_q/worker.py", line 103, in worker
res = f(*task["args"], **task["kwargs"])
File "/<<PKGBUILDDIR>>/hyperkitty/tasks.py", line 139, in _compute_thread_positions
compute_thread_order_and_depth(thread)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "/<<PKGBUILDDIR>>/hyperkitty/lib/analysis.py", line 55, in compute_thread_order_and_depth
walk_successors(thread.starting_email.id)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/<<PKGBUILDDIR>>/hyperkitty/lib/analysis.py", line 40, in walk_successors
obj.save(update_fields=["thread_depth", "thread_order"])
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 814, in save
self.save_base(
~~~~~~~~~~~~~~^
using=using,
^^^^^^^^^^^^
...<2 lines>...
update_fields=update_fields,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 892, in save_base
post_save.send(
~~~~~~~~~~~~~~^
sender=origin,
^^^^^^^^^^^^^^
...<4 lines>...
using=using,
^^^^^^^^^^^^
)
^
File "/usr/lib/python3/dist-packages/django/dispatch/dispatcher.py", line 177, in send
(receiver, receiver(signal=self, sender=sender, **named))
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/haystack/signals.py", line 49, in handle_save
index.update_object(instance, using=using)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/haystack/indexes.py", line 324, in update_object
backend.update(self, [instance])
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/haystack/backends/whoosh_backend.py", line 260, in update
writer = AsyncWriter(self.index)
File "/usr/lib/python3/dist-packages/whoosh/writing.py", line 988, in __init__
self.writer = self.index.writer(**self.writerargs)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/whoosh/index.py", line 464, in writer
return SegmentWriter(self, **kwargs)
File "/usr/lib/python3/dist-packages/whoosh/writing.py", line 513, in __init__
if not try_for(self.writelock.acquire, timeout=timeout,
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
delay=delay):
^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/whoosh/util/filelock.py", line 54, in try_for
v = fn()
File "/usr/lib/python3/dist-packages/django_q/timeout.py", line 15, in raise_timeout_exception
raise TimeoutException(
f"Task exceeded maximum timeout value ({self._timeout} seconds)"
)
django_q.exceptions.TimeoutException: Task exceeded maximum timeout value (30 seconds)
======================================================================
FAIL: test_votes (hyperkitty.tests.views.test_accounts.AccountViewsTestCase.test_votes)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/<<PKGBUILDDIR>>/hyperkitty/tests/views/test_accounts.py", line 150, in test_votes
response = self.client.get(reverse("hk_user_votes"))
File "/usr/lib/python3/dist-packages/django/test/client.py", line 927, in get
response = super().get(path, data=data, secure=secure, headers=headers, **extra)
File "/usr/lib/python3/dist-packages/django/test/client.py", line 457, in get
return self.generic(
~~~~~~~~~~~~^
"GET",
^^^^^^
...<6 lines>...
},
^^
)
^
File "/usr/lib/python3/dist-packages/django/test/client.py", line 609, in generic
return self.request(**r)
~~~~~~~~~~~~^^^^^
File "/usr/lib/python3/dist-packages/django/test/client.py", line 891, in request
self.check_exception(response)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/test/client.py", line 738, in check_exception
raise exc_value
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3/dist-packages/django/contrib/auth/decorators.py", line 23, in _wrapper_view
return view_func(request, *args, **kwargs)
File "/<<PKGBUILDDIR>>/hyperkitty/views/accounts.py", line 92, in votes
return render(request, 'hyperkitty/user_profile/votes.html', {
"votes": all_votes,
"subpage": "votes",
})
File "/usr/lib/python3/dist-packages/django/shortcuts.py", line 24, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/usr/lib/python3/dist-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/template/base.py", line 175, in render
return self._render(context)
~~~~~~~~~~~~^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/test/utils.py", line 111, in instrumented_test_render
template_rendered.send(sender=self, template=self, context=context)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/dispatch/dispatcher.py", line 177, in send
(receiver, receiver(signal=self, sender=sender, **named))
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/test/client.py", line 267, in store_rendered_templates
store["context"].append(copy(context))
~~~~^^^^^^^^^
File "/usr/lib/python3.14/copy.py", line 82, in copy
return copier(x)
File "/usr/lib/python3/dist-packages/django/template/context.py", line 158, in __copy__
duplicate = super().__copy__()
File "/usr/lib/python3/dist-packages/django/template/context.py", line 39, in __copy__
duplicate.dicts = self.dicts[:]
^^^^^^^^^^^^^^^
AttributeError: 'super' object has no attribute 'dicts' and no __dict__ for setting new attributes
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/<<PKGBUILDDIR>>/hyperkitty/tests/views/test_accounts.py", line 152, in test_votes
self.fail("Getting the votes should not fail if "
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"the user has never voted yet\n%s" % format_exc())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: Getting the votes should not fail if the user has never voted yet
Traceback (most recent call last):
File "/<<PKGBUILDDIR>>/hyperkitty/tests/views/test_accounts.py", line 150, in test_votes
response = self.client.get(reverse("hk_user_votes"))
File "/usr/lib/python3/dist-packages/django/test/client.py", line 927, in get
response = super().get(path, data=data, secure=secure, headers=headers, **extra)
File "/usr/lib/python3/dist-packages/django/test/client.py", line 457, in get
return self.generic(
~~~~~~~~~~~~^
"GET",
^^^^^^
...<6 lines>...
},
^^
)
^
File "/usr/lib/python3/dist-packages/django/test/client.py", line 609, in generic
return self.request(**r)
~~~~~~~~~~~~^^^^^
File "/usr/lib/python3/dist-packages/django/test/client.py", line 891, in request
self.check_exception(response)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/test/client.py", line 738, in check_exception
raise exc_value
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3/dist-packages/django/contrib/auth/decorators.py", line 23, in _wrapper_view
return view_func(request, *args, **kwargs)
File "/<<PKGBUILDDIR>>/hyperkitty/views/accounts.py", line 92, in votes
return render(request, 'hyperkitty/user_profile/votes.html', {
"votes": all_votes,
"subpage": "votes",
})
File "/usr/lib/python3/dist-packages/django/shortcuts.py", line 24, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/usr/lib/python3/dist-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/template/base.py", line 175, in render
return self._render(context)
~~~~~~~~~~~~^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/test/utils.py", line 111, in instrumented_test_render
template_rendered.send(sender=self, template=self, context=context)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/dispatch/dispatcher.py", line 177, in send
(receiver, receiver(signal=self, sender=sender, **named))
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/django/test/client.py", line 267, in store_rendered_templates
store["context"].append(copy(context))
~~~~^^^^^^^^^
File "/usr/lib/python3.14/copy.py", line 82, in copy
return copier(x)
File "/usr/lib/python3/dist-packages/django/template/context.py", line 158, in __copy__
duplicate = super().__copy__()
File "/usr/lib/python3/dist-packages/django/template/context.py", line 39, in __copy__
duplicate.dicts = self.dicts[:]
^^^^^^^^^^^^^^^
AttributeError: 'super' object has no attribute 'dicts' and no __dict__ for setting new attributes
----------------------------------------------------------------------
Ran 366 tests in 1871.135s
FAILED (failures=1, errors=129, skipped=4, expected failures=2)
Destroying test database for alias 'default' ('file:memorydb_default?mode=memory&cache=shared')...
make[1]: *** [debian/rules:15: override_dh_auto_test] Error 1
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
make: *** [debian/rules:8: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------
More information about the Pkg-mailman-hackers
mailing list