Bug: drafts.create() fails with TypeError for multipart requests (attachments > 3MB)
Nadie ha tomado este issue todavía.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
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
- Lenguaje dominante
- Python
- Estrellas
- 109
- Forks
- 85
- Merge medio
- 1 d 21 h
- PR fusionados (30 d)
- 1
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de nylas/nylas-python
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 48/100
nylas/nylas-python#455 ·
-
bug
nylas/nylas-python#448 · 1 comentario · 2 asignados ·
-
enhancement
nylas/nylas-python#412 · 1 comentario · 5 reacciones · 1 asignado ·
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 38/100
nylas/nylas-python#402 · 1 reacción ·
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
nylas/nylas-python#401 ·
Todos los issues de nylas/nylas-python
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
zostera/django-bootstrap4#894 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
use-agent-os/agent-os#3276 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
NousResearch/hermes-agent#117848 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
zilliztech/memsearch#759 ·