Skip to content

Candidate cannot apply in prod, KeyError from pypdf

StrassAdmin
Internal Server Error: /candidate/apply/Information/

KeyError at /candidate/apply/Information/
0

Request Method: POST
Request URL: http://hub-jobs2025.pasteur.cloud/candidate/apply/Information/
Django Version: 4.2.19
Python Executable: /usr/local/bin/python
Python Version: 3.11.11
Python Path: ['/code', '/usr/local/bin', '/usr/local/lib/python311.zip', '/usr/local/lib/python3.11', '/usr/local/lib/python3.11/lib-dynload', '/usr/local/lib/python3.11/site-packages', '/opt/gurobi201/linux32/lib/python2.5']
Server time: Fri, 28 Mar 2025 14:33:25 +0100
Installed Applications:
['live_settings',
 'language_override',
 'basetheme_bootstrap',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'crispy_forms',
 'crispy_bootstrap4',
 'django_kubernetes_probes',
 'strass_app',
 'csp',
 'cspmailreports']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'csp.middleware.CSPMiddleware']


Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/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.11/site-packages/django/views/generic/base.py", line 104, in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/code/strass_app/mixins.py", line 329, in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/formtools/wizard/views.py", line 250, in dispatch
    response = super().dispatch(request, *args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/views/generic/base.py", line 143, in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/formtools/wizard/views.py", line 707, in post
    return super().post(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/formtools/wizard/views.py", line 300, in post
    if form.is_valid():
       ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/forms/forms.py", line 201, in is_valid
    return self.is_bound and not self.errors
                                 ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/forms/forms.py", line 196, in errors
    self.full_clean()
    ^^^^^^^^^^^^^^^^^
  File "/code/strass_app/forms.py", line 159, in full_clean
    return super().full_clean()
           ^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/forms/forms.py", line 434, in full_clean
    self._clean_form()
    ^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/forms/forms.py", line 455, in _clean_form
    cleaned_data = self.clean()
                   ^^^^^^^^^^^^
  File "/code/strass_app/forms.py", line 372, in clean
    safe_pdf(cleaned_data['cv']).read(),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/code/strass_app/utils.py", line 288, in safe_pdf
    _pdf_object_cleanup(writer, writer.root_object.get('/Names', {}))
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/code/strass_app/utils.py", line 274, in _pdf_object_cleanup
    for k in list(obj):
             ^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pypdf/generic/_base.py", line 393, in __getitem__
    return self._get_object_with_check()[key]  # type: ignore
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pypdf/generic/_data_structures.py", line 479, in __getitem__
    return dict.__getitem__(self, key).get_object()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^

Exception Type: KeyError at /candidate/apply/Information/
Exception Value: 0
Raised during: strass_app.views.CandidateWizard
Request information:
USER: ......
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information