OpenSlides / openslides-backend

Backend service for OpenSlides 4+
MIT License
6 stars 26 forks source link

`/openslides_backend/models/fields.py` line 196 raises a `NotImplementedError` #1242

Closed GabrielInTheWorld closed 2 years ago

GabrielInTheWorld commented 2 years ago

I sent this payload:

{
    "action": "user.update",
    "data": [
        {
            "id": 4,
            "pronoun": "",
            "title": "",
            "first_name": "ash",
            "last_name": "",
            "username": "ash",
            "is_active": true,
            "is_physical_person": true,
            "default_password": "ash",
            "email": "",
            "default_vote_weight": null,
            "number_$": {},
            "structure_level_$": {},
            "vote_weight_$": {
                "2": null
            },
            "about_me_$": {
                "2": ""
            },
            "comment_$": {
                "2": ""
            },
            "vote_delegated_$_to_id": {},
            "vote_delegations_$_from_ids": {
                "2": []
            },
            "group_$_ids": {
                "2": [
                    8
                ]
            }
        }
    ]
}

and got this error:

docker-backend-1           | Traceback (most recent call last):
docker-backend-1           |   File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 136, in handle
docker-backend-1           |     self.handle_request(listener, req, client, addr)
docker-backend-1           |   File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 179, in handle_request
docker-backend-1           |     respiter = self.wsgi(environ, resp.start_response)
docker-backend-1           |   File "/app/openslides_backend/http/application.py", line 92, in __call__
docker-backend-1           |     return self.wsgi_application(environ, start_response)
docker-backend-1           |   File "/app/openslides_backend/http/application.py", line 82, in wsgi_application
docker-backend-1           |     response = self.dispatch_request(request)
docker-backend-1           |   File "/app/openslides_backend/http/application.py", line 44, in dispatch_request
docker-backend-1           |     response_body, access_token = view_instance.dispatch(request)
docker-backend-1           |   File "/app/openslides_backend/http/views/base_view.py", line 111, in dispatch
docker-backend-1           |     return func(request)
docker-backend-1           |   File "/app/openslides_backend/http/views/action_view.py", line 38, in action_route
docker-backend-1           |     response = handler.handle_request(request.json, user_id, is_atomic)
docker-backend-1           |   File "/app/openslides_backend/action/action_handler.py", line 112, in handle_request
docker-backend-1           |     results = self.execute_write_requests(self.parse_actions, payload)
docker-backend-1           |   File "/app/openslides_backend/action/action_handler.py", line 149, in execute_write_requests
docker-backend-1           |     write_requests, data = get_write_requests(*args)
docker-backend-1           |   File "/app/openslides_backend/action/action_handler.py", line 186, in parse_actions
docker-backend-1           |     write_request, results = self.perform_action(element, relation_manager)
docker-backend-1           |   File "/app/openslides_backend/action/action_handler.py", line 223, in perform_action
docker-backend-1           |     write_request, results = action.perform(
docker-backend-1           |   File "/app/openslides_backend/action/action.py", line 155, in perform
docker-backend-1           |     instance = self.base_update_instance(instance)
docker-backend-1           |   File "/app/openslides_backend/action/generics/update.py", line 16, in base_update_instance
docker-backend-1           |     instance = self.validate_fields(instance)
docker-backend-1           |   File "/app/openslides_backend/action/action.py", line 460, in validate_fields
docker-backend-1           |     instance[field_name] = field.validate(instance[field_name])
docker-backend-1           |   File "/app/openslides_backend/models/fields.py", line 196, in validate
docker-backend-1           |     raise NotImplementedError()
docker-backend-1           | NotImplementedError
GabrielInTheWorld commented 2 years ago

Maybe this is related to #1228.

GabrielInTheWorld commented 2 years ago
Related meeting/2

```js { "id":2, "name":"Pok\u00e9monwelt (1)", "end_time":1645484400, "location":"", "poll_ids":[ 8, 9 ], "user_ids":[ 1, 4 ], "vote_ids":[ ], "group_ids":[ 6, 7, 8, 9, 10, 11 ], "motion_ids":[ 5, 6, 7 ], "option_ids":[ 18, 19, 20, 21 ], "start_time":1645484400, "description":"", "committee_id":2, "meta_deleted":false, "welcome_text":"Space for your welcome text.", "applause_type":"applause-type-bar", "meta_position":57, "projector_ids":[ 3 ], "users_sort_by":"first_name", "welcome_title":"Welcome to OpenSlides", "admin_group_id":7, "applause_enable":false, "conference_show":false, "applause_timeout":5, "default_group_id":6, "enable_anonymous":false, "motion_state_ids":[ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 ], "motions_preamble":"The assembly may decide:", "present_user_ids":[ 4, 1 ], "users_email_body":"Dear {name},\n\nthis is your personal OpenSlides login:\n\n{url}\nUsername: {username}\nPassword: {password}\n\n\nThis email was generated automatically.", "poll_countdown_id":4, "poll_default_type":"analog", "all_projection_ids":[ 5, 6, 7 ], "users_email_sender":"OpenSlides", "applause_max_amount":0, "applause_min_amount":1, "applause_show_level":false, "export_csv_encoding":"utf-8", "export_pdf_fontsize":10, "export_pdf_pagesize":"A4", "motion_workflow_ids":[ 3, 4 ], "motions_line_length":85, "motions_number_type":"per_category", "users_email_subject":"OpenSlides access data", "agenda_item_creation":"default_no", "export_csv_separator":",", "list_of_speakers_ids":[ 17, 18, 19 ], "motion_submitter_ids":[ 5, 6, 7 ], "motions_export_title":"Motions", "organization_tag_ids":[ ], "poll_default_backend":"fast", "agenda_numeral_system":"arabic", "agenda_show_subtitles":false, "conference_open_video":false, "poll_couple_countdown":true, "users_pdf_welcometext":"[Place for your welcome and help text.]", "default_projector_$_id":[ "agenda_all_items", "topics", "list_of_speakers", "current_list_of_speakers", "motion", "amendment", "motion_block", "assignment", "user", "mediafile", "projector_message", "projector_countdowns", "assignment_poll", "motion_poll", "poll" ], "reference_projector_id":3, "users_pdf_welcometitle":"Welcome to OpenSlides", "agenda_enable_numbering":true, "conference_auto_connect":false, "motions_default_sorting":"number", "motions_reason_required":false, "projector_countdown_ids":[ 3, 4 ], "assignments_export_title":"Elections", "motion_poll_default_type":"pseudoanonymous", "motions_statutes_enabled":false, "users_enable_vote_weight":true, "motions_amendments_prefix":"-\u00c4", "motions_number_min_digits":2, "motions_number_with_blank":false, "conference_enable_helpdesk":false, "conference_los_restriction":true, "conference_open_microphone":false, "default_projector_$poll_id":3, "default_projector_$user_id":3, "motions_amendments_enabled":true, "users_enable_presence_view":false, "motion_poll_default_backend":"fast", "motions_default_workflow_id":3, "assignment_poll_default_type":"pseudoanonymous", "default_projector_$motion_id":3, "default_projector_$topics_id":3, "is_active_in_organization_id":1, "motions_amendments_text_mode":"paragraph", "users_allow_self_set_present":true, "list_of_speakers_countdown_id":3, "motion_poll_default_group_ids":[ 8 ], "motions_supporters_min_amount":0, "poll_default_100_percent_base":"YNA", "assignment_poll_default_method":"Y", "motions_default_line_numbering":"outside", "motions_show_referring_motions":true, "motions_show_sequential_number":true, "assignment_poll_default_backend":"fast", "default_projector_$amendment_id":3, "default_projector_$mediafile_id":3, "export_pdf_pagenumber_alignment":"center", "motion_poll_ballot_paper_number":8, "motions_amendments_in_main_list":true, "default_projector_$assignment_id":3, "motions_amendments_of_amendments":false, "motions_enable_text_on_projector":true, "motions_recommendation_text_mode":"diff", "projector_countdown_default_time":60, "projector_countdown_warning_time":0, "assignment_poll_default_group_ids":[ 8 ], "default_projector_$motion_poll_id":3, "list_of_speakers_couple_countdown":true, "list_of_speakers_initially_closed":false, "default_projector_$motion_block_id":3, "motion_poll_ballot_paper_selection":"CUSTOM_NUMBER", "motions_enable_reason_on_projector":false, "agenda_new_items_default_visibility":"internal", "assignment_poll_ballot_paper_number":8, "list_of_speakers_present_users_only":false, "motions_enable_sidebox_on_projector":false, "motion_poll_default_100_percent_base":"YNA", "motions_export_follow_recommendation":false, "conference_auto_connect_next_speakers":0, "default_projector_$assignment_poll_id":3, "motions_default_amendment_workflow_id":3, "assignment_poll_ballot_paper_selection":"CUSTOM_NUMBER", "default_projector_$agenda_all_items_id":3, "default_projector_$list_of_speakers_id":3, "motions_amendments_multiple_paragraphs":true, "agenda_show_internal_items_on_projector":true, "default_projector_$projector_message_id":3, "motions_export_submitter_recommendation":true, "assignment_poll_default_100_percent_base":"valid", "list_of_speakers_show_first_contribution":false, "assignment_poll_sort_poll_result_by_votes":true, "list_of_speakers_amount_last_on_projector":0, "list_of_speakers_amount_next_on_projector":-1, "list_of_speakers_enable_pro_contra_speech":false, "default_projector_$projector_countdowns_id":3, "list_of_speakers_can_set_contribution_self":false, "list_of_speakers_speaker_note_for_everyone":true, "motions_enable_recommendation_on_projector":true, "motions_default_statute_amendment_workflow_id":3, "default_projector_$current_list_of_speakers_id":3, "list_of_speakers_enable_point_of_order_speakers":true, "list_of_speakers_show_amount_of_speakers_on_slide":true, "assignment_poll_add_candidates_to_list_of_speakers":false } ```

jsangmeister commented 2 years ago

I cannot replicate your error. Can you try again with https://github.com/OpenSlides/openslides-backend/pull/1243 and post the occuring error? I added some more context to the thrown exceptions.

r-peschke commented 2 years ago

Look at the default_vote_weight: It is a defined as a decimal-field with the default-value of 1 and a minimum of 0. In your payload you try to st it null. This comparison with the minimum value raises the exception.

jsangmeister commented 2 years ago

Ah thank you! I was confused by the code snippet from @GabrielInTheWorld in the other issue, which was another place ;) But in this case, this is easy to fix.

jsangmeister commented 2 years ago

done with https://github.com/OpenSlides/openslides-backend/pull/1243