Skip to content

Commit b26ec5b

Browse files
authored
Improve error handling (#49)
1 parent f781289 commit b26ec5b

2 files changed

Lines changed: 31 additions & 2 deletions

File tree

src/youtubeaio/youtube.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from typing import Any, TypeVar
77

88
import async_timeout
9-
from aiohttp import ClientResponse, ClientSession
9+
from aiohttp import ClientError, ClientResponse, ClientSession
1010

1111
from youtubeaio.helper import (
1212
build_url,
@@ -16,6 +16,7 @@
1616
from youtubeaio.types import (
1717
AuthScope,
1818
MissingScopeError,
19+
UnauthorizedError,
1920
YouTubeAPIError,
2021
YouTubeBackendError,
2122
YouTubeResourceNotFoundError,
@@ -76,8 +77,13 @@ async def _check_request_return(self, response: ClientResponse) -> ClientRespons
7677
)
7778
if response.status == 404:
7879
raise YouTubeResourceNotFoundError
80+
if response.status == 401:
81+
raise UnauthorizedError
7982
if 400 <= response.status < 500:
80-
raise YouTubeAPIError
83+
try:
84+
response.raise_for_status()
85+
except ClientError as exc:
86+
raise YouTubeAPIError from exc
8187
return response
8288

8389
async def _api_get_request(

tests/test_youtube.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from aresponses import Response, ResponsesMockServer
88

99
from youtubeaio.types import (
10+
UnauthorizedError,
1011
YouTubeAPIError,
1112
YouTubeBackendError,
1213
YouTubeResourceNotFoundError,
@@ -164,3 +165,25 @@ async def test_bad_request(
164165
with pytest.raises(YouTubeAPIError):
165166
await youtube.get_video(video_id="Ks-_Mh1QhMc")
166167
await youtube.close()
168+
169+
170+
async def test_unauthorized(
171+
aresponses: ResponsesMockServer,
172+
) -> None:
173+
"""Test handling being unauthorized."""
174+
aresponses.add(
175+
YOUTUBE_URL,
176+
"/youtube/v3/videos",
177+
"GET",
178+
aresponses.Response(
179+
status=401,
180+
headers={"Content-Type": "application/json"},
181+
text='{"message":"Something went wrong"}',
182+
),
183+
)
184+
185+
async with aiohttp.ClientSession() as session:
186+
youtube = YouTube(session=session)
187+
with pytest.raises(UnauthorizedError):
188+
await youtube.get_video(video_id="Ks-_Mh1QhMc")
189+
await youtube.close()

0 commit comments

Comments
 (0)