Skip to content

Commit da2ebcf

Browse files
authored
Merge pull request #200 from GeekMasher/octokit-errors
feat(octo): Improve error handling in Octokit
2 parents c0f1814 + 24cb04f commit da2ebcf

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

src/ghastoolkit/octokit/octokit.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import inspect
33
import logging
44
from string import Template
5-
from typing import Any, Optional, Union
5+
from typing import Any, Callable, Optional, Union
66
from dataclasses import field, is_dataclass
77

88
from requests import Session
@@ -178,6 +178,7 @@ def get(
178178
expected: Optional[int] = 200,
179179
authenticated: bool = False,
180180
display_errors: bool = True,
181+
error_handler: Optional[Callable[[int, dict], Any]] = None,
181182
) -> Union[dict, list[dict]]:
182183
"""Get Request.
183184
@@ -208,6 +209,7 @@ def get(
208209
params["page"] = page
209210

210211
response = self.session.get(url, params=params)
212+
# Every response should be a JSON (including errors)
211213
response_json = response.json()
212214

213215
if expected and response.status_code != expected:
@@ -218,11 +220,16 @@ def get(
218220
known_error = __OCTOKIT_ERRORS__.get(response.status_code)
219221
if known_error:
220222
raise Exception(known_error)
221-
raise Exception("REST Request failed :: non-expected server error")
222223

224+
# Handle errors in the response
223225
if isinstance(response_json, dict) and response_json.get("errors"):
226+
# Custom error handler callback
227+
if error_handler:
228+
return error_handler(response.status_code, response_json)
229+
230+
# Default error handling
224231
logger.error(response_json.get("message"))
225-
raise Exception("REST Request failed :: error from server")
232+
raise Exception("REST Request failed :: non-expected server error")
226233

227234
if isinstance(response_json, dict):
228235
return response_json

0 commit comments

Comments
 (0)