sendgrid / sendgrid-python

The Official Twilio SendGrid Python API Library
https://sendgrid.com
MIT License
1.55k stars 714 forks source link

"TypeError: Object of type Content is not JSON serializable" #1004

Closed john0017 closed 3 years ago

john0017 commented 3 years ago

`sg = sendgrid.SendGridAPIClient(api_key=API_KEY)

from_email = Email("xzy@abc.com") to_email = To("fgh@abc.com") subject = "Sending with SendGrid is Fun" content = Content("text/plain", "hi")

attachment = Attachment() attachment.file_content = FileContent(csv) attachment.file_type = FileType('text/csv') attachment.file_name = FileName('test.csv') attachment.disposition = Disposition('attachment')

mail = Mail(from_email, to_email, subject, content) mail.attachment = attachment

response = sg.client.mail.send.post(request_body=mail.get()) `print(response.status_code)``

The csv above is a pandas df converted to csv and then encoded.

The code works fine on jupyter notebook, however on VScode/ Pycharm i get the error "TypeError: Object of type Content is not JSON serializable"

shwetha-manvinkurke commented 3 years ago

Can you post the stack trace of the exception?

john0017 commented 3 years ago

Can you post the stack trace of the exception?

Traceback (most recent call last): File "--path--/backupScript.py", line 37, in response = sg.client.mail.send.post(request_body=mail.get()) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/python_http_client/client.py", line 257, in http_request data = json.dumps(request_body).encode('utf-8') File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/init.py", line 231, in dumps return _default_encoder.encode(obj) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/encoder.py", line 199, in encode chunks = self.iterencode(o, _one_shot=True) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/encoder.py", line 257, in iterencode return _iterencode(o, 0) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/encoder.py", line 179, in default raise TypeError(f'Object of type {o.class.name} ' TypeError: Object of type Content is not JSON serializable

john0017 commented 3 years ago

Can you post the stack trace of the exception?

Hi,

Any thoughts on this?

eshanholtz commented 3 years ago

How is the variable csv being defined?

john0017 commented 3 years ago

How is the variable csv being defined?

Thank you for your response. The code works fine on jupiter notebook but not on Pycharm or VS code.

The csv file is defined as -

with open('filename.csv', 'rb') as f: data = f.read() csv = base64.b64encode(data).decode()

eshanholtz commented 3 years ago

Can you please print the output of printing the request body and post it here? Make sure to redact sensitive information. You can follow our troubleshooting guide for guidance on how to properly print the request body.

john0017 commented 3 years ago

Can you please print the output of printing the request body and post it here? Make sure to redact sensitive information. You can follow our troubleshooting guide for guidance on how to properly print the request body.

Is this what you are looking for?

{ "attachments": [ { "content":"--csv in bytes--", "disposition": "attachment", "filename": "test.csv", "type": "text/csv" } ], "content": [ { "type": "text/plain", "value": "and easy to do anywhere, even with Python" } ], "from": { "email": "abc@mail.com" }, "personalizations": [ { "to": [ { "email": "xyz@mail.com" } ] } ], "subject": "Sending with SendGrid is Fun" }

john0017 commented 3 years ago

Can you please print the output of printing the request body and post it here? Make sure to redact sensitive information. You can follow our troubleshooting guide for guidance on how to properly print the request body.

hi, any update?

JenniferMah commented 3 years ago

Hi @john0017, Can you update to the latest version of the sendgrid-python library v6.8.1 and try re-running your code to see if you still see the JSON serializable error?

john0017 commented 3 years ago

Hi @john0017, Can you update to the latest version of the sendgrid-python library v6.8.1 and try re-running your code to see if you still see the JSON serializable error?

Thank you for your response. However, that did not work either. I updated the script by not using the Mail helper class and that seems to work.