Bug: drafts.create() fails with TypeError for multipart requests (attachments > 3MB)

Đang mở
#454 3 bình luận 0 reaction 1 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Issue này chưa được đánh giá.

Mô tả

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
Ngôn ngữ chính
Python
Star
109
Fork
85
Merge trung bình
1 ngày 21 giờ
Pull request đã merge (30 ngày)
1

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của nylas/nylas-python

Tất cả issue của nylas/nylas-python

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.