Skip to content

Commit 0fbe4ef

Browse files
committed
refactor: extract _build_multipart helper and fix json/data mutual exclusion in http clients
1 parent 96e8f9b commit 0fbe4ef

3 files changed

Lines changed: 21 additions & 34 deletions

File tree

resend/contacts/imports/_contact_imports.py

Lines changed: 19 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -90,21 +90,12 @@ class ListParams(TypedDict):
9090
Cursor for backward pagination (exclusive).
9191
"""
9292

93-
@classmethod
94-
def create(cls, params: CreateParams) -> CreateContactImportResponse:
95-
"""
96-
Create a new contact import from a CSV file.
97-
see more: https://resend.com/docs/api-reference/contacts/create-contact-import
98-
99-
Args:
100-
params (CreateParams): Import parameters including the CSV file content.
101-
102-
Returns:
103-
CreateContactImportResponse: The created import job with its ID.
104-
"""
93+
@staticmethod
94+
def _build_multipart(
95+
params: "ContactImports.CreateParams",
96+
) -> tuple:
10597
if not params.get("file"):
10698
raise ValueError("file is required")
107-
10899
filename = params.get("filename", "import.csv")
109100
files: Dict[str, Any] = {
110101
"file": (filename, params["file"], "text/csv"),
@@ -120,7 +111,21 @@ def create(cls, params: CreateParams) -> CreateContactImportResponse:
120111
)
121112
if "topics" in params:
122113
form_data["topics"] = json_lib.dumps(params["topics"])
114+
return files, form_data
115+
116+
@classmethod
117+
def create(cls, params: CreateParams) -> CreateContactImportResponse:
118+
"""
119+
Create a new contact import from a CSV file.
120+
see more: https://resend.com/docs/api-reference/contacts/create-contact-import
121+
122+
Args:
123+
params (CreateParams): Import parameters including the CSV file content.
123124
125+
Returns:
126+
CreateContactImportResponse: The created import job with its ID.
127+
"""
128+
files, form_data = cls._build_multipart(params)
124129
resp = request.Request[ContactImports.CreateContactImportResponse](
125130
path="/contacts/imports",
126131
params={},
@@ -185,25 +190,7 @@ async def create_async(cls, params: CreateParams) -> CreateContactImportResponse
185190
Returns:
186191
CreateContactImportResponse: The created import job with its ID.
187192
"""
188-
if not params.get("file"):
189-
raise ValueError("file is required")
190-
191-
filename = params.get("filename", "import.csv")
192-
files: Dict[str, Any] = {
193-
"file": (filename, params["file"], "text/csv"),
194-
}
195-
form_data: Dict[str, str] = {}
196-
if "column_map" in params:
197-
form_data["column_map"] = json_lib.dumps(params["column_map"])
198-
if "on_conflict" in params:
199-
form_data["on_conflict"] = params["on_conflict"]
200-
if "segments" in params:
201-
form_data["segments"] = json_lib.dumps(
202-
[{"id": sid} for sid in params["segments"]]
203-
)
204-
if "topics" in params:
205-
form_data["topics"] = json_lib.dumps(params["topics"])
206-
193+
files, form_data = cls._build_multipart(params)
207194
resp = await AsyncRequest[ContactImports.CreateContactImportResponse](
208195
path="/contacts/imports",
209196
params={},

resend/http_client_httpx.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ async def request(
3737
method=method,
3838
url=url,
3939
headers=headers,
40-
json=json,
40+
json=json if data is None else None,
4141
data=data,
4242
)
4343
return resp.content, resp.status_code, resp.headers

resend/http_client_requests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def request(
3737
method=method,
3838
url=url,
3939
headers=headers,
40-
json=json,
40+
json=json if data is None else None,
4141
data=data,
4242
timeout=self._timeout,
4343
)

0 commit comments

Comments
 (0)