Skip to content

[bug] Device Firmware: submitting empty image triggers uncaught exception #338

@nemesifier

Description

@nemesifier

Describe the bug

Traceback (most recent call last):
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/core/handlers/exception.py", line 42, in inner
    response = await get_response(request)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/core/handlers/base.py", line 253, in _get_response_async
    response = await wrapped_callback(
  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/contrib/admin/options.py", line 719, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/utils/decorators.py", line 192, in _view_wrapper
    result = _process_exception(request, e)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/utils/decorators.py", line 190, in _view_wrapper
    response = view_func(request, *args, **kwargs)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/views/decorators/cache.py", line 80, in _view_wrapper
    response = view_func(request, *args, **kwargs)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/contrib/admin/sites.py", line 246, in inner
    return view(request, *args, **kwargs)
  File "/Code/openwisp/openwisp-controller/openwisp_controller/config/admin.py", line 164, in change_view
    return super().change_view(request, object_id, form_url, extra_context)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/reversion/admin.py", line 162, in change_view
    return super().change_view(request, object_id, form_url, extra_context)
  File "/Code/openwisp/openwisp-utils/openwisp_utils/admin.py", line 126, in change_view
    return super().change_view(
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/contrib/admin/options.py", line 1987, in change_view
    return self.changeform_view(request, object_id, form_url, extra_context)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/utils/decorators.py", line 48, in _wrapper
    return bound_method(*args, **kwargs)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/utils/decorators.py", line 192, in _view_wrapper
    result = _process_exception(request, e)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/utils/decorators.py", line 190, in _view_wrapper
    response = view_func(request, *args, **kwargs)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/contrib/admin/options.py", line 1843, in changeform_view
    return self._changeform_view(request, object_id, form_url, extra_context)
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/contrib/admin/options.py", line 1893, in _changeform_view
    if all_valid(formsets) and form_validated:
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/forms/formsets.py", line 584, in all_valid
    return all([formset.is_valid() for formset in formsets])
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/forms/formsets.py", line 584, in <listcomp>
    return all([formset.is_valid() for formset in formsets])
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/forms/formsets.py", line 384, in is_valid
    self.errors
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/forms/formsets.py", line 366, in errors
    self.full_clean()
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/forms/formsets.py", line 429, in full_clean
    form_errors = form.errors
  File "/.virtualenvs/openwisp2/lib/python3.10/site-packages/django/forms/forms.py", line 201, in errors
    self.full_clean()
  File "/Code/openwisp/openwisp-firmware-upgrader/openwisp_firmware_upgrader/admin.py", line 359, in full_clean
    device=self.cleaned_data["device"],

Exception Type: KeyError at /admin/config/device/5131f85b-5604-46be-a0da-b45ded388a08/change/
Exception Value: 'device'

Steps To Reproduce
Steps to reproduce the behavior:

  1. Go to device detail page in admin
  2. Go to "Firmware" tab
  3. Click on "Add another firmware"
  4. Do not set the image field and submit
Image

Expected behavior

A ValidationError should be raised instead, which will be shown in the admin UI.

System Informatioon:

Not relevant.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    Status

    Backlog

    Status

    To do (general)

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions