File "/usr/local/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/views/decorators/cache.py", line 62, in _wrapper_view_func
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/wagtail/admin/urls/__init__.py", line 172, in wrapper
return view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/wagtail/admin/auth.py", line 151, in decorated_view
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/views/generic/base.py", line 105, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/wagtail/admin/views/pages/edit.py", line 396, in dispatch
return super().dispatch(request)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/views/generic/base.py", line 144, in dispatch
return handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/wagtail/admin/views/pages/edit.py", line 479, in post
return self.form_valid(self.form)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/wagtail/admin/views/pages/edit.py", line 526, in form_valid
return self.save_action()
^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/wagtail/admin/views/pages/edit.py", line 529, in save_action
self.page = self.form.save(commit=not self.page.live)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/wagtail/admin/forms/pages.py", line 195, in save
return super().save(commit=commit)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/modelcluster/forms.py", line 377, in save
instance = super().save(commit=(commit and not save_m2m_now))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/forms/models.py", line 542, in save
self.instance.save()
File "/usr/local/lib/python3.12/contextlib.py", line 81, in inner
return func(*args, **kwds)
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/wagtail/models/__init__.py", line 1618, in save
result = super().save(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/modelcluster/models.py", line 202, in save
super().save(update_fields=real_update_fields, **kwargs)
File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 814, in save
self.save_base(
File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 892, in save_base
post_save.send(
File "/usr/local/lib/python3.12/site-packages/django/dispatch/dispatcher.py", line 177, in send
(receiver, receiver(signal=self, sender=sender, **named))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/wagtail/signal_handlers.py", line 91, in update_reference_index_on_save
ReferenceIndex.create_or_update_for_object(instance)
File "/usr/local/lib/python3.12/site-packages/wagtail/models/reference_index.py", line 430, in create_or_update_for_object
references = set(cls._extract_references_from_object(object))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/wagtail/models/reference_index.py", line 363, in _extract_references_from_object
yield from (
File "/usr/local/lib/python3.12/site-packages/wagtail/models/reference_index.py", line 363, in <genexpr>
yield from (
^
File "/usr/local/lib/python3.12/site-packages/wagtail/fields.py", line 265, in extract_references
yield from self.stream_block.extract_references(value)
File "/usr/local/lib/python3.12/site-packages/wagtail/blocks/stream_block.py", line 398, in extract_references
for (
File "/usr/local/lib/python3.12/site-packages/wagtail/blocks/field_block.py", line 733, in extract_references
yield from extract_references_from_rich_text(force_str(value.source))
File "/usr/local/lib/python3.12/site-packages/wagtail/rich_text/__init__.py", line 62, in extract_references_from_rich_text
yield from rewriter.extract_references(html)
File "/usr/local/lib/python3.12/site-packages/wagtail/rich_text/rewriters.py", line 242, in extract_references
yield from rewriter.extract_references(html)
File "/usr/local/lib/python3.12/site-packages/wagtail/rich_text/rewriters.py", line 137, in extract_references
yield from self.reference_extractors[tag_type](attrs)
File "/usr/local/lib/python3.12/site-packages/wagtail/images/rich_text/__init__.py", line 42, in extract_references
yield cls.get_model(), attrs["id"], "", ""
~~~~~^^^^^^
KeyError: 'id'
Description
Someone was editing
/admin/pages/361/edit/and caused a crash due toKeyErrorLog
https://logs.freedom.press/app/kibana#/discover?_g=(time:(from:now-30d,to:now))&_a=(index:'filebeat-*',query:(language:kuery,query:'_id:uxWnc50BuG5r6JOlb4M6'))
Stack Trace