Skip to content

Commit 1de3478

Browse files
committed
improve error handling
1 parent 5b19bc7 commit 1de3478

3 files changed

Lines changed: 57 additions & 4 deletions

File tree

taskbadger/errors.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class TaskbadgerException(Exception):
2+
pass
3+
4+
5+
class Unauthorized(TaskbadgerException):
6+
pass
7+
8+
9+
class UnexpectedStatus(TaskbadgerException):
10+
def __init__(self, status_code: int, content: bytes):
11+
self.status_code = status_code
12+
self.content = content
13+
14+
super().__init__(f"Unexpected status code: {status_code}")
15+
16+
17+
class ServerError(UnexpectedStatus):
18+
pass

taskbadger/sdk.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44

55
from _contextvars import ContextVar
66

7-
from taskbadger import Action
7+
from taskbadger.errors import ServerError, Unauthorized, UnexpectedStatus
88
from taskbadger.exceptions import ConfigurationError
9-
from taskbadger.internal import AuthenticatedClient, errors
9+
from taskbadger.integrations import Action
10+
from taskbadger.internal import AuthenticatedClient
1011
from taskbadger.internal.api.task_endpoints import task_create, task_get, task_partial_update
1112
from taskbadger.internal.models import (
1213
PatchedTaskRequest,
@@ -174,9 +175,12 @@ def _get_settings():
174175
def _check_response(response):
175176
if 200 <= response.status_code < 300:
176177
return response
177-
178+
elif response.status_code == 401:
179+
raise Unauthorized("Authentication failed")
180+
elif response.status_code == 500:
181+
raise ServerError(response.status_code, response.content)
178182
else:
179-
raise errors.UnexpectedStatus(response.status_code, response.content)
183+
raise UnexpectedStatus(response.status_code, response.content)
180184

181185

182186
@dataclasses.dataclass

tests/test_sdk_primatives.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pytest
44

55
from taskbadger import Action, EmailIntegration, StatusEnum, update_task
6+
from taskbadger.errors import ServerError, Unauthorized, UnexpectedStatus
67
from taskbadger.sdk import create_task, get_task, init
78

89

@@ -37,6 +38,36 @@ def test_create_task(httpx_mock):
3738
_verify_task(task)
3839

3940

41+
def test_create_task_error_unauthed(httpx_mock):
42+
httpx_mock.add_response(
43+
url="https://taskbadger.net/api/org/project/tasks/",
44+
method="POST",
45+
status_code=401,
46+
)
47+
with pytest.raises(Unauthorized):
48+
create_task("name")
49+
50+
51+
def test_create_task_error_server_error(httpx_mock):
52+
httpx_mock.add_response(
53+
url="https://taskbadger.net/api/org/project/tasks/",
54+
method="POST",
55+
status_code=500,
56+
)
57+
with pytest.raises(ServerError):
58+
create_task("name")
59+
60+
61+
def test_create_task_error_unknown(httpx_mock):
62+
httpx_mock.add_response(
63+
url="https://taskbadger.net/api/org/project/tasks/",
64+
method="POST",
65+
status_code=412,
66+
)
67+
with pytest.raises(UnexpectedStatus):
68+
create_task("name")
69+
70+
4071
def test_update_task(httpx_mock):
4172
expected_body = {
4273
"name": "new name",

0 commit comments

Comments
 (0)