batch response bodies are dropped when they are JSON objects

Aperta
#737 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
python
Ambito
api, backend

Direzione di ricerca

Inizia dal deserializzatore del body in src/msgraph_core/requests/batch_response_item.py, poi esamina JsonParseNode._get_bytes_value() nel kiota serialization JSON package e il flusso di BatchResponseContent. Riproduci tramite BatchRequestBuilder una risposta batch il cui singolo body sia un oggetto JSON; il lavoro è completato quando l’oggetto viene conservato in BatchResponseItem.body invece di diventare None.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

After upgrading to the Kiota Python version containing #646, batch responses from Microsoft Graph can no longer be deserialized correctly when an individual response body is a JSON object.

I am updating SharePoint list items in a batch request. The HTTP adapter returns the batch response body as a Python dict. During deserialization, BatchResponseItem passes that value to JsonParseNode.get_bytes_value(). The current _get_bytes_value() implementation only handles str values and returns None for dictionaries, so the response body is silently swallowed.

Before #646, non-string values were converted to a JSON string/UTF-8 byte sequence. That byte sequence was later parsed again as JSON, restoring the response body as a dictionary. #646 removed the non-string fallback needed for JSON object bodies.

This issue might originally stem from incorrect use of JsonParseNode in https://github.com/microsoftgraph/msgraph-sdk-python-core/blob/d23507bf38497aa514763f3ffa56b8ed8eceef70/src/msgraph_core/requests/batch_response_item.py#L159 but it didn't occur until the changes made in #646. If a fix should rather be made in msgraph-core, please let me know and I will raise the issue there.

Environment

  • Python: 3.13
  • microsoft-kiota-bundle: 1.12.3
  • microsoft-kiota-serialization-json: 1.12.3
  • microsoft-kiota-http: 1.12.3
  • msgraph-core: 1.5.1

Reproduction

  1. Create a Microsoft Graph batch request containing SharePoint list-item updates.
  2. Send the request through msgraph_core.requests.batch_request_builder.BatchRequestBuilder.
  3. Return a successful response whose individual body is a JSON object.
  4. Deserialize the batch response as BatchResponseContent.

The individual BatchResponseItem.body is expected to contain the JSON object, but it becomes None during deserialization.

Debugger call stack

I'm including a trace to where my app is hitting this regression.

Traceback (most recent call last):
  File ".venv/Lib/site-packages/msgraph_core/requests/batch_request_builder.py", line 103, in _post_batch_collection
    response = await self.post(batch_request_content, error_map)
  File ".venv/Lib/site-packages/msgraph_core/requests/batch_request_builder.py", line 65, in post
    response = await self._request_adapter.send_async(
  File ".venv/Lib/site-packages/kiota_http/httpx_request_adapter.py", line 198, in send_async
    value = root_node.get_object_value(parsable_factory)
  File ".venv/Lib/site-packages/kiota_serialization_json/json_parse_node.py", line 213, in get_object_value
    self._assign_field_values(result)
  File ".venv/Lib/site-packages/kiota_serialization_json/json_parse_node.py", line 352, in _assign_field_values
    field_deserializer(JsonParseNode(field_value))
  File ".venv/Lib/site-packages/msgraph_core/requests/batch_response_content.py", line 156, in <lambda>
    return {'responses': lambda n: set_responses(n)}
  File ".venv/Lib/site-packages/msgraph_core/requests/batch_response_content.py", line 150, in set_responses
    values = n.get_collection_of_object_values(BatchResponseItem)
  File ".venv/Lib/site-packages/kiota_serialization_json/json_parse_node.py", line 153, in <lambda>
    lambda x: self._create_new_node(x).get_object_value(factory),
  File ".venv/Lib/site-packages/kiota_serialization_json/json_parse_node.py", line 213, in get_object_value
    self._assign_field_values(result)
  File ".venv/Lib/site-packages/kiota_serialization_json/json_parse_node.py", line 352, in _assign_field_values
    field_deserializer(JsonParseNode(field_value))
  File ".venv/Lib/site-packages/msgraph_core/requests/batch_response_item.py", line 159, in <lambda>
    "body": lambda x: setattr(self, "body", x.get_bytes_value()),
  File ".venv/Lib/site-packages/kiota_serialization_json/json_parse_node.py", line 223, in get_bytes_value
    return self._get_bytes_value(self._json_node)
  File ".venv/Lib/site-packages/kiota_serialization_json/json_parse_node.py", line 296, in _get_bytes_value
    return None
Lingua principale
Python
Stelle
31
Fork
39
Merge medio
13h 21m
PR unite (30g)
46

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di microsoft/kiota-python

Tutte le issue di microsoft/kiota-python

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.