OpenSlides / OpenSlides/openslides-backend

Fix Traceback user.save_saml_account

Open Beginner friendly
#3,768 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
9
Forks
40
Avg merge
1d 22h
Merged PRs (30d)
19

Description

backendaction: INFO:openslides_backend.shared.handlers.base_handler:Performing action user.save_saml_account.
backendaction: [2026-09-18 09:45:53 +0000] [17] [ERROR] Error handling request POST /internal/handle_request
backendaction: Traceback (most recent call last):
backendaction:   File "/usr/local/lib/python3.12/site-packages/gunicorn/workers/gthread.py", line 516, in handle
backendaction:     return self._keepalive_after(conn, self.handle_request(req, conn))
backendaction:                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/usr/local/lib/python3.12/site-packages/gunicorn/workers/gthread.py", line 712, in handle_request
backendaction:     respiter = self.wsgi(environ, resp.start_response)
backendaction:                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/http/application.py", line 164, in __call__
backendaction:     return self.wsgi_application(environ, start_response)
backendaction:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/http/application.py", line 154, in wsgi_application
backendaction:     response = self.dispatch_request(request)
backendaction:                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/http/application.py", line 103, in dispatch_request
backendaction:     response_body, access_token = view_instance.dispatch(request)
backendaction:                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/http/views/base_view.py", line 121, in dispatch
backendaction:     return func(request)
backendaction:            ^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/http/views/action_view.py", line 72, in internal_action_route
backendaction:     response = handle_action_in_worker_thread(
backendaction:                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/action/action_worker.py", line 94, in handle_action_in_worker_thread
backendaction:     raise action_worker_thread.exception
backendaction:   File "/app/openslides_backend/action/action_worker.py", line 265, in run
backendaction:     self.response = self.handler.handle_request(
backendaction:                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/action/action_handler.py", line 140, in handle_request
backendaction:     results = self.execute_write_requests(
backendaction:               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/action/action_handler.py", line 229, in execute_write_requests
backendaction:     write_requests, data = get_write_requests(*args)
backendaction:                            ^^^^^^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/action/action_handler.py", line 279, in parse_actions
backendaction:     write_request, results = self.perform_action(
backendaction:                              ^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/action/action_handler.py", line 328, in perform_action
backendaction:     write_request, results = action.perform(
backendaction:                              ^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/action/action.py", line 161, in perform
backendaction:     cast(list[dict[str, Any]], action_data)[i] = self.validate_fields(instance)
backendaction:                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/action/actions/user/save_saml_account.py", line 150, in validate_fields
backendaction:     self.apply_meeting_mapping(instance, instance_old)
backendaction:   File "/app/openslides_backend/action/actions/user/save_saml_account.py", line 268, in apply_meeting_mapping
backendaction:     for key, value in self.get_field_data(
backendaction:                       ^^^^^^^^^^^^^^^^^^^^
backendaction:   File "/app/openslides_backend/action/actions/user/save_saml_account.py", line 469, in get_field_data
backendaction:     cast(set, result).update(value.split(", "))
backendaction:                              ^^^^^^^^^^^
backendaction: AttributeError: 'list' object has no attribute 'split'

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in openslides_backend/action/actions/user/save_saml_account.py, especially get_field_data and its call from apply_meeting_mapping. Reproduce the user.save_saml_account action with the failing SAML mapping and trace how the value reaches the split call. Done means the action no longer raises this AttributeError for the reported input.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
authentication, backend
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
74/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.