fastai / ghapi

A delightful and complete interface to GitHub's amazing API
https://ghapi.fast.ai/
Apache License 2.0
609 stars 62 forks source link

Return error description functionality #138

Open skaina00 opened 2 years ago

skaina00 commented 2 years ago

Hey guys,

Do you know if is possible get the error message in Python instead a generic error message?

If yes, please let me know. If not, could be a good solution to help troubleshooting.

Expected error output: Error: Branch feature/test-api-github2 not found File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\ghapi\core.py", line 63, in call return self.client(self.path, self.verb, headers=headers, route=route_p, query=query_p, data=data_p) File "C:\Users\victo\AppData\Roaming\Python\Python310\site-packages\ghapi\core.py", line 112, in call res,self.recv_hdrs = urlsend(path, verb, headers=headers or None, debug=self.debug, return_headers=True, File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\fastcore\net.py", line 212, in urlsend return urlread(req, return_json=return_json, return_headers=return_headers) File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\fastcore\net.py", line 113, in urlread if 400 <= e.code < 500: raise ExceptionsHTTP[e.code](e.url, e.hdrs, e.fp) from None

Current the error output: File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\ghapi\core.py", line 63, in call return self.client(self.path, self.verb, headers=headers, route=route_p, query=query_p, data=data_p) File "C:\Users\victo\AppData\Roaming\Python\Python310\site-packages\ghapi\core.py", line 112, in call res,self.recv_hdrs = urlsend(path, verb, headers=headers or None, debug=self.debug, return_headers=True, File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\fastcore\net.py", line 212, in urlsend return urlread(req, return_json=return_json, return_headers=return_headers) File "C:\Users\xxx\AppData\Roaming\Python\Python310\site-packages\fastcore\net.py", line 113, in urlread if 400 <= e.code < 500: raise ExceptionsHTTP[e.code](e.url, e.hdrs, e.fp) from None

Lawouach commented 2 years ago

Ping indeed. This is not really ideal to not know.

Maybe, remove the from None to prevent making the original exception silent?

myahl-uncomn commented 1 year ago

I know this is old, but for anyone who lands here, you can catch the HTTPError exception (from urllib.error import HTTPError) or the more specific errors like HTTP4xxClientError or HTTP404NotFoundError (from fastcore.net import HTTP4xxClientError, HTTP404NotFoundError). Your type checker may not like the specific ones like HTTP401UnauthorizedError, HTTP404NotFoundError, etc. but they are legit. e.g.

from fastcore.net import HTTP401UnauthorizedError
from ghapi.all import GhApi

api = GhApi(owner='foo', repo='bar', key='bad key')
try:
    res = api.get_branch('my_branch')
except HTTP401UnauthorizedError as e:
    print(e.reason)

Unauthorized ====Error Body==== { "message": "Bad credentials", "documentation_url": "https://docs.github.com/rest" }