Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions openml/_api/clients/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -453,14 +453,17 @@ def _validate_response(
code, message = self._parse_exception_response(response)

except (requests.exceptions.JSONDecodeError, xml.parsers.expat.ExpatError) as e:
extra = f"Status code: {response.status_code}\n{response.text}"
parse_error = OpenMLServerError(
f"Unexpected server error when calling {url}. Please contact the "
f"developers!\n{extra}"
)

if method != "GET":
extra = f"Status code: {response.status_code}\n{response.text}"
raise OpenMLServerError(
f"Unexpected server error when calling {url}. Please contact the "
f"developers!\n{extra}"
) from e
raise parse_error from e

exception = e
parse_error.__cause__ = e
exception = parse_error

except Exception as e:
# If we failed to parse it out,
Expand Down
25 changes: 23 additions & 2 deletions tests/test_api/test_http.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from pathlib import Path
from urllib.parse import urljoin, urlparse
from openml.enums import APIVersion
from openml.exceptions import OpenMLAuthenticationError
from openml.exceptions import OpenMLAuthenticationError, OpenMLServerError
from openml._api import HTTPClient, HTTPCache
import openml

Expand Down Expand Up @@ -160,10 +160,31 @@ def test_get_with_api_key(http_client, sample_path, test_apikey_v1):

@pytest.mark.test_server()
def test_get_without_api_key_raises(http_client):
with openml.config.overwrite_config_context({"apikey": None}), pytest.raises(OpenMLAuthenticationError):
with openml.config.overwrite_config_context({"apikey": None}), pytest.raises(
OpenMLAuthenticationError
):
http_client.get("task/1", use_api_key=True)


def test_get_with_invalid_error_xml_shows_response(http_client, sample_url_v1):
response = Response()
response.status_code = 500
response._content = b"<invalid"
response.headers = {"Content-Type": "text/xml", "Content-Encoding": "gzip"}

with (
openml.config.overwrite_config_context({"connection_n_retries": 1}),
patch.object(Session, "request", return_value=response),
pytest.raises(OpenMLServerError) as exc_info,
):
http_client.get("task/1")

assert str(exc_info.value) == (
f"Unexpected server error when calling {sample_url_v1}. Please contact the developers!\n"
"Status code: 500\n<invalid"
)


@pytest.mark.test_server()
def test_download_creates_file(http_client, sample_download_url_v1):
dummy_content = b"this is dummy content"
Expand Down