IndexError when printing dashboard response containing empty group_by list
Les mainteneurs répondent en général sous 2 jours
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 75/100
Piste de recherche
Commencez dans .generator/src/generator/templates/model_utils.j2, en vous concentrant sur model_to_dict() et get_oneof_instance(), qui génèrent src/datadog_api_client/model_utils.py. Reproduisez le cas d’un group_by vide via DashboardsApi.get_dashboard() et affichez print(response) ou to_dict(). C’est terminé lorsque la response se sérialise et s’affiche sans IndexError lorsque _composed_instances est vide.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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]
- Langage dominant
- Python
- Étoiles
- 167
- Forks
- 55
- Merge moyen
- 2 j 23 h
- PR mergées (30 j)
- 74
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de DataDog/datadog-api-client-python
-
Python 3.13/3.14 SyntaxWarning in v1 LogsPipelinesApi docstringPeut-être pris @Mirochill l’a pris il y a 144 jours. Ouvertestale
Difficulté 1/5 1-3 heures Accessibilité débutants 72/100
DataDog/datadog-api-client-python#3535 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
kind/bug stale
Difficulté 3/5 1-2 jours Accessibilité débutants 66/100
DataDog/datadog-api-client-python#3717 · 3 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
kind/bug stale
Difficulté 3/5 1-2 jours Accessibilité débutants 38/100
DataDog/datadog-api-client-python#3120 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
stale
Difficulté 3/5 1-2 jours Accessibilité débutants 45/100
DataDog/datadog-api-client-python#2986 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
kind/feature-request stale
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 20/100
DataDog/datadog-api-client-python#2878 · 3 commentaires ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de DataDog/datadog-api-client-python
Issues similaires
-
Difficulté 1/5 1-3 heures Accessibilité débutants 87/100
adri0/scadustats#128 ·
Les mainteneurs répondent en général sous 1 jour
-
`TIMESTAMP`, `TIMESTAMP_NTZ`, `TINYINT` and the other `TypeDecorator`s don't declare `python_type`Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
RPBCOuverteawaiting policy acceptance precheck-passed
Difficulté 1/5 Moins d'une heure Accessibilité débutants 78/100
Bioconductor/BiocContributions#240 · 1 commentaire ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
documentation good first issue launch
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
FlologixAI/etchwork#4 ·