Skip to content

KeyError: 'id' causes crash #1250

@paulschreiber

Description

@paulschreiber

Description

Someone was editing /admin/pages/361/edit/ and caused a crash due to KeyError

Log

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

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'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions