Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

IndexError when printing dashboard response containing empty group_by list

Đang mở
#3,656 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
75/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
python
Lĩnh vực
api, tooling

Hướng nghiên cứu

Bắt đầu trong .generator/src/generator/templates/model_utils.j2, tập trung vào model_to_dict() và get_oneof_instance(), các hàm tạo ra src/datadog_api_client/model_utils.py. Tái hiện trường hợp group_by rỗng thông qua DashboardsApi.get_dashboard() và thực thi print(response) hoặc to_dict(). Được xem là hoàn tất khi response được tuần tự hóa và in ra mà không có IndexError khi _composed_instances rỗng.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

kind/bug stale

Describe the bug
Calling print(response) on a dashboard response raises IndexError: list index out of range when the dashboard contains a query_value widget with a logs query that has "group_by": [] (empty list).

Labels: kind/bug, severity/major

To Reproduce

  1. Create a dashboard with a query_value widget using a logs query with group_by set to an empty list.
  2. Call get_dashboard() using the Python API client.
  3. Call print(response) on the returned object.
  4. See IndexError: list index out of range.

Minimal reproduction:

from datadog_api_client import Configuration, ApiClient
from datadog_api_client.v1.api.dashboards_api import DashboardsApi

configuration = Configuration()
with ApiClient(configuration) as api_client:
    api = DashboardsApi(api_client)
    response = api.get_dashboard(dashboard_id="<dashboard-id>")
    print(response)  # raises IndexError

Expected behavior
The response should be printed (or serialized via to_dict()) without raising any exception.

Screenshots

Image
Traceback (most recent call last):
  File "main.py", line 8, in <module>
    print(response)
  File ".venv/lib/python3.14/site-packages/datadog_api_client/model_utils.py", line 194, in __repr__
    return self.to_str()
  File ".venv/lib/python3.14/site-packages/datadog_api_client/model_utils.py", line 422, in to_str
    return pprint.pformat(self.to_dict())
  File ".venv/lib/python3.14/site-packages/datadog_api_client/model_utils.py", line 418, in to_dict
    return model_to_dict(self, serialize=False)
  File ".venv/lib/python3.14/site-packages/datadog_api_client/model_utils.py", line 1502, in model_to_dict
    model = model.get_oneof_instance()
  File ".venv/lib/python3.14/site-packages/datadog_api_client/model_utils.py", line 581, in get_oneof_instance
    return self._composed_instances[0]
IndexError: list index out of range

Root cause
group_by is typed as FormulaAndFunctionEventQueryGroupByConfig, a ModelComposed class with a oneOf of two variants: a list of group-by objects and a fields object. When the API returns "group_by": [], the oneOf matcher cannot determine which variant the empty list belongs to, so _composed_instances is left empty.

model_to_dict() in model_utils.py enters its traversal loop based on _composed_schemas being non-empty, without checking whether _composed_instances is populated, and then crashes at get_oneof_instance() which unconditionally accesses self._composed_instances[0].

Workaround
Set configuration.preload_content = False to skip deserialization and parse the raw JSON manually:

import json
from datadog_api_client import Configuration, ApiClient
from datadog_api_client.v1.api.dashboards_api import DashboardsApi

configuration = Configuration()
configuration.preload_content = False
with ApiClient(configuration) as api_client:
    api = DashboardsApi(api_client)
    response = api.get_dashboard(dashboard_id="<dashboard-id>")
    data = json.loads(response.data)
    print(json.dumps(data, indent=2))

Environment and Versions (please complete the following information):

  • datadog-api-client version: 2.55.0 (latest)
  • Python version: 3.14
  • OS: macOS

Additional context
The fix requires two changes in .generator/src/generator/templates/model_utils.j2 (the template that generates src/datadog_api_client/model_utils.py):

  1. Guard the loop in model_to_dict() to only enter when _composed_instances is also non-empty:

    while model._composed_schemas and model._composed_instances:
    
  2. Make get_oneof_instance() fall back to self instead of crashing when _composed_instances is empty:

    def get_oneof_instance(self):
        if not self._composed_instances:
            return self
        return self._composed_instances[0]
    
Ngôn ngữ chính
Python
Star
166
Fork
55
Merge trung bình
2 ngày 17 giờ
Pull request đã merge (30 ngày)
73

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của DataDog/datadog-api-client-python

Tất cả issue của DataDog/datadog-api-client-python

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.