403 ClientError is misleading when export is too large
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 45/100
Research direction
Start by tracing client.export_file and the Google::Apis::ClientError handling to see where the API response body is processed. Reproduce the oversized export response and verify that the ClientError exposes the JSON error body or another usable representation, without losing other 403 details.
Written by the indexing model from the issue text.
Description
Thanks for stopping by to let us know something could be better!
PLEASE READ: If you have a support contract with Google, please create an issue in the support console instead of filing on GitHub. This will ensure a timely response.
Is your feature request related to a problem? Please describe.
My team is using the client to download files. A line like:
client.export_file(file.id, 'application/pdf', :download_dest => StringIO.new).string
Is raising a Google::Apis::ClientError with an e.inspect like:
#<Google::Apis::ClientError: Invalid request status_code: 403 header: #<HTTP::Message::Headers:0x66aececb @body_encoding=#<Encoding:UTF-8>, @request_absolute_uri=nil, @dumped=false, @request_method="GET", @reason_phrase="Forbidden", @request_uri=#<Addressable::URI:0x9a0 URI:https://www.googleapis.com/drive/v3/files/FILE_ID_HERE/export?alt=media&mimeType=application%2Fpdf>, @http_version="1.1", @body_date=nil, @is_request=false, @request_query={"alt"=>"media", "mimeType"=>"application/pdf"}, @body_size=0, @status_code=403, @body_type=nil, @chunked=false, @header_item=[["Vary", "Origin"], ["Vary", "X-Origin"], ["Content-Type", "application/json; charset=UTF-8"], ["Content-Encoding", "gzip"], ["Date", "Tue, 08 Sep 2020 18:00:04 GMT"], ["Expires", "Tue, 08 Sep 2020 18:00:04 GMT"], ["Cache-Control", "private, max-age=0"], ["X-Content-Type-Options", "nosniff"], ["X-Frame-Options", "SAMEORIGIN"], ["Content-Security-Policy", "frame-ancestors 'self'"], ["X-XSS-Protection", "1; mode=block"], ["Server", "GSE"], ["Alt-Svc", "h3-29=\":443\"; ma=2592000,h3-27=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""], ["Transfer-Encoding", "chunked"]], @body_charset=nil>>
This threw us for a real loop, because most of these requests work just fine, it was just an occasional file that consistently got a 403. We finally tested the specific file in https://developers.google.com/drive/api/v3/reference/files/export and found that the full response from the API is:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "exportSizeLimitExceeded",
"message": "This file is too large to be exported."
}
],
"code": 403,
"message": "This file is too large to be exported."
}
}
Describe the solution you'd like
It would be great to get that JSON object back in the ClientError's body field, or some other mechanism.
Describe alternatives you've considered
Right now, we're just having to assume that a 403 from this endpoint means that the file is too large. But that's not great, since https://developers.google.com/drive/api/v3/handle-errors lists a whole bunch of reasons that we might be getting a 403.
- Dominant language
- Ruby
- Stars
- 2.9k
- Forks
- 888
- Avg merge
- 8m
- Merged PRs (30d)
- 242
Getting set up
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from googleapis/google-api-ruby-client
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
googleapis/google-api-ruby-client#28001 · 5 reactions ·
Maintainers usually reply within 1 day
-
googleapis/google-api-ruby-client#27757 · 1 assignee ·
Maintainers usually reply within 1 day
-
google-apis-core: CompositeIO does not maintain the IO read contractPossibly taken @torreypayne claimed this 3 days ago. Open
googleapis/google-api-ruby-client#27758 · 1 assignee ·
Maintainers usually reply within 1 day
-
google-apis-core: singular PagedResults ignores maxPossibly taken @torreypayne claimed this 3 days ago. Open
googleapis/google-api-ruby-client#27759 · 1 assignee ·
Maintainers usually reply within 1 day
-
api: storage type: feature request
Difficulty 3/5 1-2 days Newbie friendliness 55/100
googleapis/google-api-ruby-client#27339 ·
Maintainers usually reply within 1 day
All issues in googleapis/google-api-ruby-client
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
TheOdinProject/curriculum#31423 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
oxidize-rb/rb-sys#807 ·