Bug 1997236 - Don't try to re-parse JSON in util.taskcluster.get_arti…#846
Merged
Eijebong merged 1 commit intotaskcluster:mainfrom Oct 30, 2025
Merged
Bug 1997236 - Don't try to re-parse JSON in util.taskcluster.get_arti…#846Eijebong merged 1 commit intotaskcluster:mainfrom
Eijebong merged 1 commit intotaskcluster:mainfrom
Conversation
bhearsum
approved these changes
Oct 30, 2025
…fact
The previous code was only checking if the returned response from the
taskcluster API was a dict to verify if it had been parsed or not. That
works well until the JSON file we're getting contains something like a
list in which case we skip the first condition, end up with a parsed
response in `if path.endswith(".json")` and boom `AttributeError: 'list'
object has no attribute 'json'`.
Since we already rely on the response type being `requests.Request`, I
changed the logic to be:
- If we receive a dict, it might be either the parsed artifact content,
or taskcluster giving us `{"response": requests.Response}` because it
was unable to parse it.
- In the case where it's taskcluster's (detected by checking if
"response" is in the dict and if it has the right type), peel it off,
response is now the `Response` object and we can read from it.
- At this point we have 2 choices again, either response is a
`request.Response` that we have to read, or anything else. If it is
anything else then it's already been parsed by taskcluster so we just
return it as is.
- Continue with the previous logic, try to parse the file based on the
extension. I left the JSON case in there even though we should not be
hitting it because it will raise on invalid JSON, which was the case
previously too. Taskcluster masks JSON failures by returning the
response object instead.
3b787b3 to
80a0818
Compare
abhishekmadan30
pushed a commit
to abhishekmadan30/taskgraph
that referenced
this pull request
Dec 24, 2025
…fact (taskcluster#846) The previous code was only checking if the returned response from the taskcluster API was a dict to verify if it had been parsed or not. That works well until the JSON file we're getting contains something like a list in which case we skip the first condition, end up with a parsed response in `if path.endswith(".json")` and boom `AttributeError: 'list' object has no attribute 'json'`. Since we already rely on the response type being `requests.Request`, I changed the logic to be: - If we receive a dict, it might be either the parsed artifact content, or taskcluster giving us `{"response": requests.Response}` because it was unable to parse it. - In the case where it's taskcluster's (detected by checking if "response" is in the dict and if it has the right type), peel it off, response is now the `Response` object and we can read from it. - At this point we have 2 choices again, either response is a `request.Response` that we have to read, or anything else. If it is anything else then it's already been parsed by taskcluster so we just return it as is. - Continue with the previous logic, try to parse the file based on the extension. I left the JSON case in there even though we should not be hitting it because it will raise on invalid JSON, which was the case previously too. Taskcluster masks JSON failures by returning the response object instead.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
…fact
The previous code was only checking if the returned response from the taskcluster API was a dict to verify if it had been parsed or not. That works well until the JSON file we're getting contains something like a list in which case we skip the first condition, end up with a parsed response in
if path.endswith(".json")and boomAttributeError: 'list' object has no attribute 'json'.Since we already rely on the response type being
requests.Request, I changed the logic to be:{"response": requests.Response}because it was unable to parse it.Responseobject and we can read from it.request.Responsethat we have to read, or anything else. If it is anything else then it's already been parsed by taskcluster so we just return it as is.