Bug: drafts.create() fails with TypeError for multipart requests (attachments > 3MB)
Aperta
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 109
- Fork
- 85
- Merge medio
- 1g 21h
- PR unite (30g)
- 1
Descrizione
Bug Description
When creating a draft with attachments larger than 3MB (which triggers multipart upload), the SDK throws a TypeError: tuple indices must be integers or slices, not str.
Root Cause
In nylas/resources/drafts.py, the create() method (lines 117-124) doesn't properly unpack the tuple returned by _execute():
# Current buggy code (line 117-124):
if attachment_size >= MAXIMUM_JSON_ATTACHMENT_SIZE:
json_response = self._http_client._execute( # Returns (json_response, headers) tuple!
method="POST",
path=path,
data=_build_form_request(request_body),
overrides=overrides,
)
return Response.from_dict(json_response, Draft) # Fails - json_response is a tuple
Compare with the correct implementation in send() method (lines 222-228):
# Correct code in send():
json_response, headers = self._http_client._execute( # Properly unpacks tuple
method="POST",
path=f"/v3/grants/{identifier}/drafts/{urllib.parse.quote(draft_id, safe='')}",
overrides=overrides,
)
return Response.from_dict(json_response, Message, headers) # Works correctly
Steps to Reproduce
import os
import tempfile
from nylas import Client
from nylas.utils.file_utils import attach_file_request_builder
client = Client(api_key="your_api_key", api_uri="https://api.us.nylas.com")
# Create a temp file > 3MB to trigger multipart
with tempfile.NamedTemporaryFile(delete=False, suffix=".bin") as f:
f.write(b"x" * (4 * 1024 * 1024)) # 4MB file
temp_path = f.name
try:
attachment = attach_file_request_builder(temp_path)
response = client.drafts.create(
identifier="your_grant_id",
request_body={
"to": [{"email": "test@example.com"}],
"subject": "Test with large attachment",
"body": "Testing multipart upload",
"attachments": [attachment],
}
)
except TypeError as e:
print(f"Error: {e}") # "tuple indices must be integers or slices, not str"
finally:
os.remove(temp_path)
Expected Behavior
Draft should be created successfully and return a Response[Draft] object.
Actual Behavior
Throws TypeError: tuple indices must be integers or slices, not str
Suggested Fix
# In nylas/resources/drafts.py, change lines 117-124 to:
if attachment_size >= MAXIMUM_JSON_ATTACHMENT_SIZE:
json_response, headers = self._http_client._execute( # Unpack tuple
method="POST",
path=path,
data=_build_form_request(request_body),
overrides=overrides,
)
return Response.from_dict(json_response, Draft, headers) # Pass headers
Environment
- nylas-python version: 6.x (tested on latest)
- Python version: 3.12
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Valutazione
Questa issue non è ancora stata valutata.