Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

403 ClientError is misleading when export is too large #906

Open
seanstory opened this issue Sep 8, 2020 · 1 comment
Open

403 ClientError is misleading when export is too large #906

seanstory opened this issue Sep 8, 2020 · 1 comment
Labels
type: feature request ‘Nice-to-have’ improvement, new feature or different behavior or design.

Comments

@seanstory
Copy link

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.

@yoshi-automation yoshi-automation added triage me I really want to be triaged. 🚨 This issue needs some love. labels Sep 9, 2020
@dazuma dazuma added type: feature request ‘Nice-to-have’ improvement, new feature or different behavior or design. and removed 🚨 This issue needs some love. triage me I really want to be triaged. labels Sep 14, 2020
@syakovyn
Copy link

I have a workaround that requires one extra call to export_file to get the full error message. Whenever client.export_file(file.id, 'application/pdf', :download_dest => StringIO.new).string is raising an error I'm performing one more request without specifying download_dest parameter: client.export_file(file.id, 'application/pdf').string. That time it returns the full body in JSON format as a part of the exception.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: feature request ‘Nice-to-have’ improvement, new feature or different behavior or design.
Projects
None yet
Development

No branches or pull requests

4 participants