IndexError when printing dashboard response containing empty group_by list
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
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
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
- Create a dashboard with a
query_valuewidget using a logs query withgroup_byset to an empty list. - Call
get_dashboard()using the Python API client. - Call
print(response)on the returned object. - 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
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-clientversion: 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):
-
Guard the loop in
model_to_dict()to only enter when_composed_instancesis also non-empty:while model._composed_schemas and model._composed_instances: -
Make
get_oneof_instance()fall back toselfinstead of crashing when_composed_instancesis 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
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de DataDog/datadog-api-client-python
-
Python 3.13/3.14 SyntaxWarning in v1 LogsPipelinesApi docstringTalvez já em andamento @Mirochill assumiu há 145 dias. Abertastale
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 72/100
DataDog/datadog-api-client-python#3535 · 1 comentário ·
Mantenedores costumam responder em até 2 dias
-
kind/bug stale
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 66/100
DataDog/datadog-api-client-python#3717 · 3 comentários ·
Mantenedores costumam responder em até 2 dias
-
kind/bug stale
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 38/100
DataDog/datadog-api-client-python#3120 · 1 comentário ·
Mantenedores costumam responder em até 2 dias
-
stale
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 45/100
DataDog/datadog-api-client-python#2986 · 1 comentário ·
Mantenedores costumam responder em até 2 dias
-
kind/feature-request stale
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 20/100
DataDog/datadog-api-client-python#2878 · 3 comentários ·
Mantenedores costumam responder em até 2 dias
Todas as issues de DataDog/datadog-api-client-python
Issues semelhantes
-
fix(accounts): Balance Sheet and Profit and Loss crash on PostgreSQL due to MySQL force_indexAberta
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
Discord webhook notifications fail with HTTP 403 (Cloudflare blocks default urllib User-Agent)Aberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
tharje/spooler-v2#20 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 1 dia
-
Bump version of azure-servicebusTalvez já em andamento @joostlek assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
home-assistant/core#186275 ·
Mantenedores costumam responder em até 1 dia
-
documentation
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 72/100