Skip to content

Commit a1dbc6f

Browse files
authored
✨ add httpx exception catch
1 parent c8c24e7 commit a1dbc6f

File tree

3 files changed

+47
-25
lines changed

3 files changed

+47
-25
lines changed

githubkit/core.py

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
import httpx
2323

2424
from .response import Response
25-
from .exception import RequestFailed
2625
from .config import Config, get_config
26+
from .exception import RequestError, RequestFailed, RequestTimeout
2727
from .auth import BaseAuthStrategy, TokenAuthStrategy, UnauthAuthStrategy
2828
from .typing import (
2929
URLTypes,
@@ -228,17 +228,22 @@ def _request(
228228
cookies: Optional[CookieTypes] = None,
229229
) -> httpx.Response:
230230
with self.get_sync_client() as client:
231-
return client.request(
232-
method,
233-
url,
234-
params=params,
235-
content=content,
236-
data=data,
237-
files=files,
238-
json=json,
239-
headers=headers,
240-
cookies=cookies,
241-
)
231+
try:
232+
return client.request(
233+
method,
234+
url,
235+
params=params,
236+
content=content,
237+
data=data,
238+
files=files,
239+
json=json,
240+
headers=headers,
241+
cookies=cookies,
242+
)
243+
except httpx.TimeoutException as e:
244+
raise RequestTimeout(e.request) from e
245+
except Exception as e:
246+
raise RequestError(repr(e)) from e
242247

243248
# async request
244249
async def _arequest(
@@ -255,17 +260,22 @@ async def _arequest(
255260
cookies: Optional[CookieTypes] = None,
256261
) -> httpx.Response:
257262
async with self.get_async_client() as client:
258-
return await client.request(
259-
method,
260-
url,
261-
params=params,
262-
content=content,
263-
data=data,
264-
files=files,
265-
json=json,
266-
headers=headers,
267-
cookies=cookies,
268-
)
263+
try:
264+
return await client.request(
265+
method,
266+
url,
267+
params=params,
268+
content=content,
269+
data=data,
270+
files=files,
271+
json=json,
272+
headers=headers,
273+
cookies=cookies,
274+
)
275+
except httpx.TimeoutException as e:
276+
raise RequestTimeout(e.request) from e
277+
except Exception as e:
278+
raise RequestError(repr(e)) from e
269279

270280
# check and parse response
271281
def _check(

githubkit/exception.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from typing import TYPE_CHECKING
22

3+
import httpx
4+
35
if TYPE_CHECKING:
46
from .response import Response
57
from .graphql import GraphQLResponse
@@ -17,10 +19,22 @@ class AuthExpiredError(GitHubException):
1719
"""Auth Expired Error"""
1820

1921

22+
class RequestError(GitHubException):
23+
"""Simple API request failed with unknown error"""
24+
25+
26+
class RequestTimeout(GitHubException):
27+
"""Simple API request timeout"""
28+
29+
def __init__(self, request: httpx.Request):
30+
self.request = request
31+
32+
2033
class RequestFailed(GitHubException):
2134
"""Simple API request failed with error status code"""
2235

2336
def __init__(self, response: "Response"):
37+
self.request = response.raw_request
2438
self.response = response
2539

2640
def __repr__(self) -> str:

githubkit/github.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@
3333

3434

3535
class GitHub(GitHubCore[A]):
36-
# high level methods
37-
3836
# copy github instance with other auth
3937
def with_auth(self, auth: A_o) -> "GitHub[A_o]":
4038
return GitHub(auth=auth, config=self.config.copy())

0 commit comments

Comments
 (0)