Skip to content

Commit 9d80010

Browse files
fix request calls to use httpx
1 parent 84d8dc8 commit 9d80010

5 files changed

Lines changed: 123 additions & 105 deletions

File tree

samples/python/api/platform_api.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
#!/usr/bin/env python
22
"""Platform API client for Nitro Platform integrations."""
33

4+
from __future__ import annotations
5+
46
import json
57
import mimetypes
68
import os
79
import time
810
from dataclasses import dataclass, field
911
from typing import TYPE_CHECKING, Any, Literal
1012

11-
import requests
13+
import httpx
1214
from dotenv import load_dotenv
1315

1416
if TYPE_CHECKING:
@@ -34,7 +36,7 @@ def _get_token(self) -> str:
3436
if self._token and time.time() < self._token_expiry:
3537
return self._token
3638

37-
response = requests.post(
39+
response = httpx.post(
3840
f"{self.base_url}/oauth/token",
3941
json={"clientID": self.client_id, "clientSecret": self.client_secret},
4042
)
@@ -61,7 +63,7 @@ def _request(
6163
files = {"file": (file_path.name, file_path.read_bytes(), mime_type)}
6264
data = {"method": method, "params": json.dumps(params or {})}
6365

64-
response = requests.post(
66+
response = httpx.post(
6567
f"{self.base_url}/{endpoint}", headers=headers, files=files, data=data
6668
)
6769

@@ -85,7 +87,7 @@ def _request_bytes(
8587
files = {"file": (file_path.name, file_path.read_bytes(), mime_type)}
8688
data = {"method": method, "params": json.dumps(params or {})}
8789

88-
response = requests.post(
90+
response = httpx.post(
8991
f"{self.base_url}/{endpoint}", headers=headers, files=files, data=data
9092
)
9193

@@ -94,7 +96,7 @@ def _request_bytes(
9496

9597
# Download from S3 URL
9698
download_url = result["result"]["file"]["URL"]
97-
download_response = requests.get(download_url)
99+
download_response = httpx.get(download_url)
98100
download_response.raise_for_status()
99101
return download_response.content
100102

@@ -155,7 +157,7 @@ def merge(self, file_paths: list[Path]) -> bytes:
155157
files = [("file", f) for f in opened_files]
156158
data = {"method": "merge", "params": "{}"}
157159

158-
response = requests.post(
160+
response = httpx.post(
159161
f"{self.base_url}/transformations", headers=headers, files=files, data=data
160162
)
161163
response.raise_for_status()

samples/python/api/sign_api.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
#!/usr/bin/env python
22
"""Sign API client for Nitro Sign integrations (eSignature operations)."""
33

4+
from __future__ import annotations
5+
46
import json
57
import os
68
import time
79
from dataclasses import dataclass, field
810
from typing import TYPE_CHECKING, Any
911

10-
import requests
12+
import httpx
1113
from dotenv import load_dotenv
1214

1315
if TYPE_CHECKING:
@@ -33,7 +35,7 @@ def _get_token(self) -> str:
3335
if self._token and time.time() < self._token_expiry:
3436
return self._token
3537

36-
response = requests.post(
38+
response = httpx.post(
3739
f"{self.base_url}/oauth/token",
3840
json={"clientID": self.client_id, "clientSecret": self.client_secret},
3941
)
@@ -53,7 +55,7 @@ def _request(
5355
"""Make authenticated API request returning JSON."""
5456
headers = {"Authorization": f"Bearer {self._get_token()}"}
5557

56-
response = requests.request(
58+
response = httpx.request(
5759
method=method,
5860
url=f"{self.base_url}{endpoint}",
5961
headers=headers,
@@ -63,7 +65,7 @@ def _request(
6365

6466
try:
6567
response.raise_for_status()
66-
except requests.exceptions.HTTPError:
68+
except httpx.HTTPError:
6769
# Try to get error details from response
6870
try:
6971
error_detail = response.json()
@@ -80,7 +82,7 @@ def _request_bytes(
8082
"""Make authenticated API request returning binary data."""
8183
headers = {"Authorization": f"Bearer {self._get_token()}"}
8284

83-
response = requests.request(
85+
response = httpx.request(
8486
method=method, url=f"{self.base_url}{endpoint}", headers=headers, params=params
8587
)
8688

@@ -150,7 +152,7 @@ def delete_envelope(self, envelope_id: str) -> None:
150152
envelope_id: UUID of the envelope
151153
"""
152154
headers = {"Authorization": f"Bearer {self._get_token()}"}
153-
response = requests.delete(f"{self.base_url}/sign/envelopes/{envelope_id}", headers=headers)
155+
response = httpx.delete(f"{self.base_url}/sign/envelopes/{envelope_id}", headers=headers)
154156
response.raise_for_status()
155157

156158
# ========== Document Management ==========
@@ -186,7 +188,7 @@ def create_document(
186188

187189
headers = {"Authorization": f"Bearer {self._get_token()}"}
188190

189-
response = requests.post(
191+
response = httpx.post(
190192
f"{self.base_url}/sign/envelopes/{envelope_id}/documents", headers=headers, files=files
191193
)
192194

samples/python/helper_functions/sign_helpers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
Sign API helper utilities for envelope operations.
33
"""
44

5+
from __future__ import annotations
6+
57
import csv
68
import json
79
import time
@@ -140,9 +142,9 @@ def create_signature_envelope(
140142

141143
headers = {"Authorization": f"Bearer {sign_client._get_token()}"}
142144

143-
import requests
145+
import httpx
144146

145-
response = requests.post( # noqa: S113
147+
response = httpx.post(
146148
f"{sign_client.base_url}/sign/envelopes/{envelope_id}/documents",
147149
headers=headers,
148150
files=files,

samples/python/quickstart.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import os
22

3-
import requests
3+
import httpx
44
from dotenv import load_dotenv
55

66
load_dotenv()
@@ -15,7 +15,7 @@ def get_access_token() -> str:
1515
url = f"{BASE_URL}/oauth/token"
1616
data = {"clientID": CLIENT_ID, "clientSecret": CLIENT_SECRET}
1717

18-
response = requests.post(url, json=data)
18+
response = httpx.post(url, json=data)
1919
response.raise_for_status()
2020
return response.json()["accessToken"]
2121

@@ -26,14 +26,14 @@ def test_connection(token: str) -> bool | None:
2626
headers = {"Authorization": f"Bearer {token}"}
2727

2828
try:
29-
response = requests.get(url, headers=headers)
29+
response = httpx.get(url, headers=headers)
3030
# 404 is expected for non-existent job, but proves auth works
3131
if response.status_code == 404:
3232
print("✅ Authentication successful (404 expected for test job ID)")
3333
return True
3434
response.raise_for_status()
3535
return True # noqa: TRY300
36-
except requests.exceptions.HTTPError as e:
36+
except httpx.HTTPError as e:
3737
if e.response.status_code == 404:
3838
print("✅ Authentication successful (404 expected for test job ID)")
3939
return True

0 commit comments

Comments
 (0)