users.list(include_totals=False) raises ParsingError on a successful 200 response
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 68/100
Piste de recherche
Commencez par src/auth0/management/users/raw_client.py dans RawUsersClient.list, puis examinez ListUsersOffsetPaginatedResponseContent et la reproduction fournie avec include_totals=False. Vérifiez que la réponse array réussie est acceptée et que SyncPager produit des éléments UserResponseSchema, comme dans le comportement de include_totals=True.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Checklist
- I have looked into the Readme and have not found a suitable solution or answer.
- I have looked into the API documentation and have not found a suitable solution or answer.
- I have searched the issues and have not found a suitable solution or answer.
- I have searched the Auth0 Community forums and have not found a suitable solution or answer.
- I agree to the terms within the Auth0 Code of Conduct.
Description
ManagementClient.users.list(..., include_totals=False, ...) raises auth0.management.core.parse_error.ParsingError (wrapping a Pydantic ValidationError) on a successful HTTP 200 response from the Management API.
The SDK unconditionally validates the response body against ListUsersOffsetPaginatedResponseContent, which is a dict-shaped Pydantic model. But the Management API — per its public documentation and per the SDK's own docstring — returns a bare JSON array when include_totals=false. The two shapes are incompatible, and there is no branch in the SDK to handle the array case.
Observed
ParsingError: headers: {...}, status_code: 200, body: [{'user_id': 'auth0|...'}], cause: 1 validation error for ListUsersOffsetPaginatedResponseContent
Input should be a valid dictionary or instance of ListUsersOffsetPaginatedResponseContent [type=model_type, input_value=[{'user_id': 'auth0|...'}], input_type=list]
For further information visit https://errors.pydantic.dev/2.12/v/model_type
Note the status_code: 200 and the body: [...] (a JSON array). The API responded successfully and in the documented shape; the SDK then failed to parse the response.
Expected
The SyncPager yields UserResponseSchema items, equivalent to the behavior when include_totals=True.
Reproduction
from auth0.management import ManagementClient
client = ManagementClient(domain=..., token=...)
list(client.users.list(
q='username:"someuser"',
include_totals=False,
fields="user_id",
))
Additional context
Root cause
In src/auth0/management/users/raw_client.py, RawUsersClient.list has a single success branch:
There is no if include_totals: branch, and the Pydantic model itself is dict-only:
There is no RootModel/list-validation fallback, so parse_obj_as cannot accept the array shape that the API returns.
Contradiction between the SDK's parameter default and the API's contract
The SDK signature:
include_totals: typing.Optional[bool] = True,
…but the SDK's own docstring (copied from the API spec) reads:
Return results inside an object that contains the total result count (
true) or as a direct array of results (false, default).
And the public Management API documentation at https://auth0.com/docs/api/management/v2/users/get-users agrees: include_totals=false returns "a direct array of results."
So the API's default behavior (false) is exactly the case the SDK parser cannot handle. This very likely masked the bug in CI — the SDK's own default value (True) takes the only branch the parser supports.
Evidence that the error originates inside the SDK, not from the API
The Auth0 API returned HTTP 200 with the documented response shape. The ParsingError.__str__ formatter in src/auth0/management/core/parse_error.py produces exactly the wire format we see:
def __str__(self) -> str:
cause_str = f", cause: {self.cause}" if self.cause is not None else ""
return f"headers: {self.headers}, status_code: {self.status_code}, body: {self.body}{cause_str}"
The cause is a Pydantic ValidationError against ListUsersOffsetPaginatedResponseContent — i.e., the SDK choking on a valid response.
auth0-python version
5.4.0
Python version
3.10
- Langage dominant
- Python
- Étoiles
- 578
- Forks
- 190
- Merge moyen
- 15 h
- PR mergées (30 j)
- 6
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 auth0/auth0-python
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
auth0/auth0-python#852 ·
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
auth0/auth0-python#798 · 1 commentaire · 1 réaction ·
-
bug
Difficulté 3/5 1-2 jours Accessibilité débutants 45/100
auth0/auth0-python#789 · 1 commentaire · 1 réaction ·
Toutes les issues de auth0/auth0-python
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
fabriziosalmi/certmate#1207 ·
Les mainteneurs répondent en général sous 1 jour
-
[work-item] adam-adae-onset-emergence: document the minute-precision datetime coercion (ASTTMF not derivable)Peut-être pris @muse-yamaa-bot l’a pris aujourd’hui. Ouvertework-item
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
CommunityToolkit/Aspire#2231 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
volcengine/OpenViking#5711 ·
Les mainteneurs répondent en général sous 1 jour