microsoftgraph / microsoftgraph/msgraph-sdk-python-core

Can't deserialize response body from batch request as the json properties are single quoted

未關閉
#807 3 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

P1 priority:p1 type:bug
主要語言
Python
星號
288
分支
52
平均合併
8 小時 10 分鐘
30 天內合併 PR
1

描述

Describe the bug

I'm trying to list applications filtered by particular IDs - there's loads of them so I'm using a batch request with 15 filters at a time (limit). This will allow me to get all the object IDs to query owners etc.

When I attempt to deserialize the BatchResponseContent object with get_response_by_id(response_id, ApplicationCollectionResponse), I get a stack telling me that it can't decode as the properties are single quoted rather than double quoted.

Traceback (most recent call last):
  File "/<project>/.venv/lib/python3.9/site-packages/msgraph_core/requests/batch_response_content.py", line 126, in response_body
    parse_node = ParseNodeFactoryRegistry().get_root_parse_node(
  File "/<project>/.venv/lib/python3.9/site-packages/kiota_abstractions/serialization/parse_node_factory_registry.py", line 41, in get_root_parse_node
    return factory.get_root_parse_node(vendor_specific_content_type, content)
  File "/<project>/.venv/lib/python3.9/site-packages/kiota_abstractions/serialization/parse_node_proxy_factory.py", line 56, in get_root_parse_node
    node = self._concrete.get_root_parse_node(content_type, content)
  File "/<project>/.venv/lib/python3.9/site-packages/kiota_serialization_json/json_parse_node_factory.py", line 37, in get_root_parse_node
    content_dict = json.loads(content_as_str)
  File "/usr/lib/python3.9/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.9/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.9/json/decoder.py", line 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

This is backed up by if I just try to do a json_loads(response.body.decode('utf-8')), which then succeeds if I do a .replace("'", '"').

Expected behavior

I should be able to provide the ApplicationCollectionResponse object to BatchResponseContent.get_response_by_id and deserialize the batch response so that I can get the ID out of the response.

How to reproduce
    for app_filter in app_filters:
        app_query_params = (
            ApplicationsRequestBuilder.ApplicationsRequestBuilderGetQueryParameters(
                select=["appId", "id", "serviceManagementReference"],
                filter=f"appId in {app_filter}",
            )
        )
        app_request_config = RequestConfiguration(query_parameters=app_query_params)
        
        batch_request_content.add_request_information(
            client.applications.to_get_request_information(
                request_configuration=app_request_config
            ),
            app_filter,
        )
 
    batch_response = await client.batch.post(batch_request_content)

    if not batch_response or not batch_response.responses:
        log.error("Batch request for application object IDs failed")
        return None

    for response_id in batch_response.responses.keys():
        batch_response.get_response_by_id(response_id, ApplicationCollectionResponse) 
SDK Version

1.17.0 of msgraph-sdk (so 1.2.0 of msgraph-core)

Latest version known to work for scenario above?

No response

Known Workarounds

No response

Debug output
Click to expand log ```
</details>


### Configuration

_No response_

### Other information

_No response_

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

從 msgraph_core/requests/batch_response_content.py 開始,特別檢查 response_body 和 get_response_by_id,並使用所示的批次要求重現問題。檢查傳遞給序列化登錄的回應本文,並將其與 JSON 剖析器的預期進行比較。當能夠從批次回應中反序列化 ApplicationCollectionResponse 並取得應用程式 ID 時,即表示完成。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
api
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。