Skip to content

Commit 015a0f3

Browse files
authored
Persist requests.Session for SyncClient (#279)
1 parent 80ad5d7 commit 015a0f3

File tree

2 files changed

+38
-21
lines changed

2 files changed

+38
-21
lines changed

stytch/core/http/client.py

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,26 @@ def __init__(self, project_id: str, secret: str) -> None:
3333

3434

3535
class SyncClient(ClientBase):
36-
def __init__(self, project_id: str, secret: str) -> None:
36+
def __init__(
37+
self,
38+
project_id: str,
39+
secret: str,
40+
session: Optional[requests.Session] = None,
41+
) -> None:
3742
super().__init__(project_id, secret)
3843
self.auth = requests.auth.HTTPBasicAuth(project_id, secret)
44+
self.__session = session
45+
46+
@property
47+
def _session(self) -> requests.Session:
48+
if self.__session is None:
49+
self.__session = requests.Session()
50+
return self.__session
3951

4052
@classmethod
41-
def _response_from_request(cls, r: requests.Response) -> ResponseWithJson:
53+
def _response_from_request(
54+
cls, r: requests.Response
55+
) -> ResponseWithJson[requests.Response]:
4256
try:
4357
resp_json = r.json()
4458
except Exception:
@@ -50,51 +64,53 @@ def get(
5064
url: str,
5165
params: Optional[Dict[str, Any]],
5266
headers: Optional[Dict[str, str]] = None,
53-
) -> ResponseWithJson:
67+
) -> ResponseWithJson[requests.Response]:
5468
final_headers = self.headers.copy()
5569
final_headers.update(headers or {})
56-
resp = requests.get(url, params=params, headers=final_headers, auth=self.auth)
70+
resp = self._session.get(
71+
url, params=params, headers=final_headers, auth=self.auth
72+
)
5773
return self._response_from_request(resp)
5874

5975
def post(
6076
self,
6177
url: str,
6278
json: Optional[Dict[str, Any]],
6379
headers: Optional[Dict[str, str]] = None,
64-
) -> ResponseWithJson:
80+
) -> ResponseWithJson[requests.Response]:
6581
final_headers = self.headers.copy()
6682
final_headers.update(headers or {})
67-
resp = requests.post(url, json=json, headers=final_headers, auth=self.auth)
83+
resp = self._session.post(url, json=json, headers=final_headers, auth=self.auth)
6884
return self._response_from_request(resp)
6985

7086
def post_form(
7187
self,
7288
url: str,
7389
form: Optional[Dict[str, Any]],
7490
headers: Optional[Dict[str, str]] = None,
75-
) -> ResponseWithJson:
91+
) -> ResponseWithJson[requests.Response]:
7692
final_headers = self.headers.copy()
7793
final_headers.update(headers or {})
78-
resp = requests.post(url, data=form, headers=final_headers, auth=self.auth)
94+
resp = self._session.post(url, data=form, headers=final_headers, auth=self.auth)
7995
return self._response_from_request(resp)
8096

8197
def put(
8298
self,
8399
url: str,
84100
json: Optional[Dict[str, Any]],
85101
headers: Optional[Dict[str, str]] = None,
86-
) -> ResponseWithJson:
102+
) -> ResponseWithJson[requests.Response]:
87103
final_headers = self.headers.copy()
88104
final_headers.update(headers or {})
89-
resp = requests.put(url, json=json, headers=final_headers, auth=self.auth)
105+
resp = self._session.put(url, json=json, headers=final_headers, auth=self.auth)
90106
return self._response_from_request(resp)
91107

92108
def delete(
93109
self, url: str, headers: Optional[Dict[str, str]] = None
94-
) -> ResponseWithJson:
110+
) -> ResponseWithJson[requests.Response]:
95111
final_headers = self.headers.copy()
96112
final_headers.update(headers or {})
97-
resp = requests.delete(url, headers=final_headers, auth=self.auth)
113+
resp = self._session.delete(url, headers=final_headers, auth=self.auth)
98114
return self._response_from_request(resp)
99115

100116

@@ -133,20 +149,21 @@ def __del__(self) -> None:
133149
@classmethod
134150
async def _response_from_request(
135151
cls, r: aiohttp.ClientResponse
136-
) -> ResponseWithJson:
152+
) -> ResponseWithJson[aiohttp.ClientResponse]:
137153
try:
138154
resp_json = await r.json()
139155
except Exception:
140156
resp_json = {}
141157
return ResponseWithJson(response=r, json=resp_json)
142158

159+
@classmethod
143160
async def _response_from_post_form_request(
144161
cls, r: aiohttp.ClientResponse
145-
) -> ResponseWithJson:
162+
) -> ResponseWithJson[aiohttp.ClientResponse]:
146163
try:
147164
content = await r.content.read()
148165
resp_json = json.loads(content.decode())
149-
except Exception as e:
166+
except Exception:
150167
resp_json = {}
151168
return ResponseWithJson(response=r, json=resp_json)
152169

@@ -155,7 +172,7 @@ async def get(
155172
url: str,
156173
params: Optional[Dict[str, Any]],
157174
headers: Optional[Dict[str, str]] = None,
158-
) -> ResponseWithJson:
175+
) -> ResponseWithJson[aiohttp.ClientResponse]:
159176
final_headers = self.headers.copy()
160177
final_headers.update(headers or {})
161178
resp = await self._session.get(
@@ -168,7 +185,7 @@ async def post(
168185
url: str,
169186
json: Optional[Dict[str, Any]],
170187
headers: Optional[Dict[str, str]] = None,
171-
) -> ResponseWithJson:
188+
) -> ResponseWithJson[aiohttp.ClientResponse]:
172189
final_headers = self.headers.copy()
173190
final_headers.update(headers or {})
174191
resp = await self._session.post(
@@ -181,7 +198,7 @@ async def post_form(
181198
url: str,
182199
form: Optional[Dict[str, Any]],
183200
headers: Optional[Dict[str, str]] = None,
184-
) -> ResponseWithJson:
201+
) -> ResponseWithJson[aiohttp.ClientResponse]:
185202
final_headers = self.headers.copy()
186203
final_headers.update(headers or {})
187204
resp = await self._session.post(
@@ -194,7 +211,7 @@ async def put(
194211
url: str,
195212
json: Optional[Dict[str, Any]],
196213
headers: Optional[Dict[str, str]] = None,
197-
) -> ResponseWithJson:
214+
) -> ResponseWithJson[aiohttp.ClientResponse]:
198215
final_headers = self.headers.copy()
199216
final_headers.update(headers or {})
200217
resp = await self._session.put(
@@ -204,7 +221,7 @@ async def put(
204221

205222
async def delete(
206223
self, url: str, headers: Optional[Dict[str, str]] = None
207-
) -> ResponseWithJson:
224+
) -> ResponseWithJson[aiohttp.ClientResponse]:
208225
final_headers = self.headers.copy()
209226
final_headers.update(headers or {})
210227
resp = await self._session.delete(url, headers=final_headers, auth=self.auth)

stytch/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "13.16.0"
1+
__version__ = "13.17.0"

0 commit comments

Comments
 (0)