Skip to content

Commit 564664d

Browse files
authored
Merge pull request #10 from jampp/FS-1668-fix-pydruid-error-handling
FS:1668: fix pydruid error handling
2 parents 260d4c1 + 25a84a8 commit 564664d

File tree

5 files changed

+33
-3
lines changed

5 files changed

+33
-3
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## Change Log
22

3+
### 0.9.1j (Unreleased)
4+
- [FS-1668](https://jampphq.atlassian.net/browse/FS-1668) Fix error handling ('KeyError: errorClass' raised)
5+
36
### 0.9.0j (Unreleased)
47
- [#7](https://github.com/jampp/pydruid/pull/7) Add support for async SQL API
58

pydruid/db/api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,8 @@ def _handle_http_error(response):
370370
"errorClass": "Unknown",
371371
"errorMessage": response.text,
372372
}
373+
if "errorClass" not in payload and "errorCode" in payload:
374+
payload["errorClass"] = payload["errorCode"]
373375
msg = "{error} ({errorClass}): {errorMessage}".format(**payload)
374376
raise exceptions.ProgrammingError(msg)
375377

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ six==1.16.0
2525
sniffio==1.2.0
2626
sqlalchemy==1.4.15
2727
tabulate==0.8.9
28-
tornado==5.1.1
28+
tornado==6.5.1
2929
typing-extensions==4.3.0
3030
ujson==2.0.3
3131
urllib3==1.26.4

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
setup(
1818
name="pydruid",
19-
version="0.9.0+j",
19+
version="0.9.1+j",
2020
author="Druid Developers",
2121
author_email="[email protected]",
2222
packages=find_packages(),

tests/db/test_cursor.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from requests.models import Response
1111

1212
from pydruid.db.api import apply_parameters, Cursor
13-
13+
from pydruid.db import exceptions
1414

1515
class CursorTestSuite(unittest.TestCase):
1616
@patch("requests.post")
@@ -28,6 +28,31 @@ def test_execute(self, requests_post_mock):
2828
expected = [Row(name="alice"), Row(name="bob"), Row(name="charlie")]
2929
self.assertEqual(result, expected)
3030

31+
@patch("requests.post")
32+
def test_execute_error(self, requests_post_mock):
33+
response = Response()
34+
response.status_code = 500
35+
response.raw = BytesIO(b'{"error": "Internal Server Error", "errorClass": "some error class", "errorMessage": "some error message"}')
36+
requests_post_mock.return_value = response
37+
38+
cursor = Cursor("http://example.com/")
39+
with self.assertRaises(exceptions.ProgrammingError) as cm:
40+
cursor.execute("SELECT * FROM table")
41+
self.assertEqual(cm.exception.args[0], "Internal Server Error (some error class): some error message")
42+
43+
@patch("requests.post")
44+
def test_execute_error_no_errorClass(self, requests_post_mock):
45+
response = Response()
46+
response.status_code = 500
47+
response.raw = BytesIO(b'{"error": "druidException", "errorCode": "invalidInput", "persona": "USER", "category": "INVALID_INPUT", "errorMessage": "Aggregate expressions cannot be nested (line [1], column [215])", "context": {"sourceType": "sql", "line": "1", "column": "215", "endLine": "1", "endColumn": "1691"}}')
48+
requests_post_mock.return_value = response
49+
50+
cursor = Cursor("http://example.com/")
51+
with self.assertRaises(exceptions.ProgrammingError) as cm:
52+
cursor.execute("SELECT * FROM table")
53+
self.assertEqual(cm.exception.args[0], "druidException (invalidInput): Aggregate expressions cannot be nested (line [1], column [215])")
54+
55+
3156
@patch("requests.post")
3257
def test_execute_empty_result(self, requests_post_mock):
3358
response = Response()

0 commit comments

Comments
 (0)