Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

IndexError when printing dashboard response containing empty group_by list

Aberta
#3,656 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 2 dias

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
75/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Pouca atividade
Stack de tecnologia
python
Domínio
api, tooling

Direção de pesquisa

Comece em .generator/src/generator/templates/model_utils.j2, concentrando-se em model_to_dict() e get_oneof_instance(), que geram src/datadog_api_client/model_utils.py. Reproduza o caso de group_by vazio por meio de DashboardsApi.get_dashboard() e execute print(response) ou to_dict(). Está concluído quando a response é serializada e impressa sem IndexError quando _composed_instances está vazio.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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]
    
Linguagem predominante
Python
Estrelas
167
Forks
55
Merge médio
2d 23h
PRs com merge (30d)
74

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de DataDog/datadog-api-client-python

Todas as issues de DataDog/datadog-api-client-python

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.