Gmail Message with upload_file doesn't work
Closed this issue · 3 comments
Sending an gmail using /upload endpoint fails with either of there two error messages in response:
Reciepient
should be providedapplication/json
can't be used as media type
I couldn't find any restrictions in google docs but from trial and error it seems likeapplication/json
mime should be included always and should be beforemessage/rfc822
.
# Fails as `Reciepient` should be defined, happens in aiogoogle if json is None
Mime:
message/rfc822
# Fails as `application/json` can't be used as media type, happens in aiogoogle if json is not None
Mime:
message/rfc822
application/json
# Works always
Mime
application/json # can be empty
message/rfc822
Rough Code:
# works
req = gmail.users.messages.send(userId='me', json={"raw": base_64(mime.as_bytes()).decode()})
# fails Error- 1
file.write(mime.as_bytes())
req = gmail.users.messages.send(userId='me',upload_file=file.path, json={})
req.upload_file_content_type = "message/rfc822"
# fails Error- 2
file.write(mime.as_bytes())
req = gmail.users.messages.send(userId='me',upload_file=file.path, json={"threadId": "some thread id"})
req.upload_file_content_type = "message/rfc822"
For me these changes fixes the issue: nkitsaini@6f3445b. I can make a pull request if the changes seems okay.
Hey @nkitsaini
Thanks for taking the time to file this issue!
I'm suspecting that attaching a None json part might break some of the APIs supported by this lib like Google Drive and Google Cloud Store. So, I still need to test these. I'm on a vacation now, so unfortunately, I can't run any tests. Should be all done in 5-7 days.
If you're on a hurry, you can help me test these changes and I will merge your PR right after you can confirm that both Google Drive and Google Cloud Store are able to upload multipart files with:
- json = None
- json being appended before the body.
Thanks again!
Sure, no problem. I'm using the fork for now. I'll test these cases tomorrow, most probably it should work as google-api-python-client
also attaches the body part first and does it always:
https://github.com/googleapis/google-api-python-client/blob/2565803cd363f48cf3c00a23cd8760bd6db4de06/googleapiclient/discovery.py#L1138
Also can you please take a quick look at the implementation there, just to be sure I'm not missing something.
Thanks @nkitsaini
I just checked and your suggested change works as expected.
I just pushed a fix and will release it in the 2.0.1 version.