From 83e1531850e763feddb526f2749b5691d48bd015 Mon Sep 17 00:00:00 2001
From: PGijsbers
Date: Tue, 20 Jan 2026 12:35:18 +0100
Subject: [PATCH 1/2] Use the correct path to the cache directory for the task
---
openml/tasks/functions.py | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/openml/tasks/functions.py b/openml/tasks/functions.py
index 3df2861c0..2bf1a40f4 100644
--- a/openml/tasks/functions.py
+++ b/openml/tasks/functions.py
@@ -415,9 +415,10 @@ def get_task(
if not isinstance(task_id, int):
raise TypeError(f"Task id should be integer, is {type(task_id)}")
- cache_key_dir = openml.utils._create_cache_directory_for_id(TASKS_CACHE_DIR_NAME, task_id)
- tid_cache_dir = cache_key_dir / str(task_id)
- tid_cache_dir_existed = tid_cache_dir.exists()
+ task_cache_directory = openml.utils._create_cache_directory_for_id(
+ TASKS_CACHE_DIR_NAME, task_id
+ )
+ task_cache_directory_existed = task_cache_directory.exists()
try:
task = _get_task_description(task_id)
dataset = get_dataset(task.dataset_id, **get_dataset_kwargs)
@@ -431,8 +432,8 @@ def get_task(
if download_splits and isinstance(task, OpenMLSupervisedTask):
task.download_split()
except Exception as e:
- if not tid_cache_dir_existed:
- openml.utils._remove_cache_dir_for_id(TASKS_CACHE_DIR_NAME, tid_cache_dir)
+ if not task_cache_directory_existed:
+ openml.utils._remove_cache_dir_for_id(TASKS_CACHE_DIR_NAME, task_cache_directory)
raise e
return task
From f90036debbf81fc3fd6452263d9b80e786ac2806 Mon Sep 17 00:00:00 2001
From: PGijsbers
Date: Wed, 21 Jan 2026 16:50:09 +0100
Subject: [PATCH 2/2] Push configuration of test server URL exclusively to
config.py
---
openml/cli.py | 2 +-
openml/config.py | 4 +++-
openml/testing.py | 2 +-
tests/conftest.py | 2 +-
tests/test_datasets/test_dataset_functions.py | 14 +++++---------
tests/test_flows/test_flow_functions.py | 15 +++++----------
tests/test_openml/test_config.py | 2 +-
tests/test_runs/test_run_functions.py | 9 +++------
tests/test_tasks/test_task_functions.py | 12 ++++--------
9 files changed, 24 insertions(+), 38 deletions(-)
diff --git a/openml/cli.py b/openml/cli.py
index 0afb089c2..18192a7db 100644
--- a/openml/cli.py
+++ b/openml/cli.py
@@ -109,7 +109,7 @@ def check_server(server: str) -> str:
def replace_shorthand(server: str) -> str:
if server == "test":
- return "https://test.openml.org/api/v1/xml"
+ return f"{config.TEST_SERVER_URL}/api/v1/xml"
if server == "production":
return "https://www.openml.org/api/v1/xml"
return server
diff --git a/openml/config.py b/openml/config.py
index e6104fd7f..5b2d69067 100644
--- a/openml/config.py
+++ b/openml/config.py
@@ -27,6 +27,8 @@
OPENML_SKIP_PARQUET_ENV_VAR = "OPENML_SKIP_PARQUET"
_TEST_SERVER_NORMAL_USER_KEY = "normaluser"
+TEST_SERVER_URL = "https://test.openml.org"
+
class _Config(TypedDict):
apikey: str
@@ -213,7 +215,7 @@ class ConfigurationForExamples:
_last_used_server = None
_last_used_key = None
_start_last_called = False
- _test_server = "https://test.openml.org/api/v1/xml"
+ _test_server = f"{TEST_SERVER_URL}/api/v1/xml"
_test_apikey = _TEST_SERVER_NORMAL_USER_KEY
@classmethod
diff --git a/openml/testing.py b/openml/testing.py
index 8d3bbbd5b..9ee555a91 100644
--- a/openml/testing.py
+++ b/openml/testing.py
@@ -47,7 +47,7 @@ class TestBase(unittest.TestCase):
"user": [],
}
flow_name_tracker: ClassVar[list[str]] = []
- test_server = "https://test.openml.org/api/v1/xml"
+ test_server = f"{openml.config.TEST_SERVER_URL}/api/v1/xml"
admin_key = "abc"
user_key = openml.config._TEST_SERVER_NORMAL_USER_KEY
diff --git a/tests/conftest.py b/tests/conftest.py
index bd974f3f3..29366ce37 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -277,7 +277,7 @@ def with_server(request):
openml.config.apikey = None
yield
return
- openml.config.server = "https://test.openml.org/api/v1/xml"
+ openml.config.server = f"{openml.config.TEST_SERVER_URL}/api/v1/xml"
openml.config.apikey = TestBase.user_key
yield
diff --git a/tests/test_datasets/test_dataset_functions.py b/tests/test_datasets/test_dataset_functions.py
index c41664ba7..74faa73ea 100644
--- a/tests/test_datasets/test_dataset_functions.py
+++ b/tests/test_datasets/test_dataset_functions.py
@@ -1730,7 +1730,6 @@ def test_delete_dataset(self):
@mock.patch.object(requests.Session, "delete")
def test_delete_dataset_not_owned(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = (
test_files_directory / "mock_responses" / "datasets" / "data_delete_not_owned.xml"
)
@@ -1745,14 +1744,13 @@ def test_delete_dataset_not_owned(mock_delete, test_files_directory, test_api_ke
):
openml.datasets.delete_dataset(40_000)
- dataset_url = "https://test.openml.org/api/v1/xml/data/40000"
+ dataset_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/data/40000"
assert dataset_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_dataset_with_run(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = (
test_files_directory / "mock_responses" / "datasets" / "data_delete_has_tasks.xml"
)
@@ -1767,14 +1765,13 @@ def test_delete_dataset_with_run(mock_delete, test_files_directory, test_api_key
):
openml.datasets.delete_dataset(40_000)
- dataset_url = "https://test.openml.org/api/v1/xml/data/40000"
+ dataset_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/data/40000"
assert dataset_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_dataset_success(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = (
test_files_directory / "mock_responses" / "datasets" / "data_delete_successful.xml"
)
@@ -1786,14 +1783,13 @@ def test_delete_dataset_success(mock_delete, test_files_directory, test_api_key)
success = openml.datasets.delete_dataset(40000)
assert success
- dataset_url = "https://test.openml.org/api/v1/xml/data/40000"
+ dataset_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/data/40000"
assert dataset_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_unknown_dataset(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = (
test_files_directory / "mock_responses" / "datasets" / "data_delete_not_exist.xml"
)
@@ -1808,7 +1804,7 @@ def test_delete_unknown_dataset(mock_delete, test_files_directory, test_api_key)
):
openml.datasets.delete_dataset(9_999_999)
- dataset_url = "https://test.openml.org/api/v1/xml/data/9999999"
+ dataset_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/data/9999999"
assert dataset_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@@ -2010,7 +2006,7 @@ def test_get_dataset_parquet(requests_mock, test_files_directory):
test_files_directory / "mock_responses" / "datasets" / "data_description_61.xml"
)
# While the mocked example is from production, unit tests by default connect to the test server.
- requests_mock.get("https://test.openml.org/api/v1/xml/data/61", text=content_file.read_text())
+ requests_mock.get(f"{openml.config.TEST_SERVER_URL}/api/v1/xml/data/61", text=content_file.read_text())
dataset = openml.datasets.get_dataset(61, download_data=True)
assert dataset._parquet_url is not None
assert dataset.parquet_file is not None
diff --git a/tests/test_flows/test_flow_functions.py b/tests/test_flows/test_flow_functions.py
index 2339b27c8..790686d94 100644
--- a/tests/test_flows/test_flow_functions.py
+++ b/tests/test_flows/test_flow_functions.py
@@ -453,7 +453,6 @@ def test_delete_flow(self):
@mock.patch.object(requests.Session, "delete")
def test_delete_flow_not_owned(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "flows" / "flow_delete_not_owned.xml"
mock_delete.return_value = create_request_response(
status_code=412,
@@ -466,14 +465,13 @@ def test_delete_flow_not_owned(mock_delete, test_files_directory, test_api_key):
):
openml.flows.delete_flow(40_000)
- flow_url = "https://test.openml.org/api/v1/xml/flow/40000"
+ flow_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/flow/40000"
assert flow_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_flow_with_run(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "flows" / "flow_delete_has_runs.xml"
mock_delete.return_value = create_request_response(
status_code=412,
@@ -486,14 +484,13 @@ def test_delete_flow_with_run(mock_delete, test_files_directory, test_api_key):
):
openml.flows.delete_flow(40_000)
- flow_url = "https://test.openml.org/api/v1/xml/flow/40000"
+ flow_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/flow/40000"
assert flow_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_subflow(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "flows" / "flow_delete_is_subflow.xml"
mock_delete.return_value = create_request_response(
status_code=412,
@@ -506,14 +503,13 @@ def test_delete_subflow(mock_delete, test_files_directory, test_api_key):
):
openml.flows.delete_flow(40_000)
- flow_url = "https://test.openml.org/api/v1/xml/flow/40000"
+ flow_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/flow/40000"
assert flow_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_flow_success(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "flows" / "flow_delete_successful.xml"
mock_delete.return_value = create_request_response(
status_code=200,
@@ -523,7 +519,7 @@ def test_delete_flow_success(mock_delete, test_files_directory, test_api_key):
success = openml.flows.delete_flow(33364)
assert success
- flow_url = "https://test.openml.org/api/v1/xml/flow/33364"
+ flow_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/flow/33364"
assert flow_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@@ -531,7 +527,6 @@ def test_delete_flow_success(mock_delete, test_files_directory, test_api_key):
@mock.patch.object(requests.Session, "delete")
@pytest.mark.xfail(reason="failures_issue_1544", strict=False)
def test_delete_unknown_flow(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "flows" / "flow_delete_not_exist.xml"
mock_delete.return_value = create_request_response(
status_code=412,
@@ -544,6 +539,6 @@ def test_delete_unknown_flow(mock_delete, test_files_directory, test_api_key):
):
openml.flows.delete_flow(9_999_999)
- flow_url = "https://test.openml.org/api/v1/xml/flow/9999999"
+ flow_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/flow/9999999"
assert flow_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
diff --git a/tests/test_openml/test_config.py b/tests/test_openml/test_config.py
index 7ef223504..3ff7bd55e 100644
--- a/tests/test_openml/test_config.py
+++ b/tests/test_openml/test_config.py
@@ -78,7 +78,7 @@ def test_get_config_as_dict(self):
config = openml.config.get_config_as_dict()
_config = {}
_config["apikey"] = TestBase.user_key
- _config["server"] = "https://test.openml.org/api/v1/xml"
+ _config["server"] = f"{openml.config.TEST_SERVER_URL}/api/v1/xml"
_config["cachedir"] = self.workdir
_config["avoid_duplicate_runs"] = False
_config["connection_n_retries"] = 20
diff --git a/tests/test_runs/test_run_functions.py b/tests/test_runs/test_run_functions.py
index 8f2c505b7..b8bd6abd7 100644
--- a/tests/test_runs/test_run_functions.py
+++ b/tests/test_runs/test_run_functions.py
@@ -1813,7 +1813,6 @@ def test_initialize_model_from_run_nonstrict(self):
@mock.patch.object(requests.Session, "delete")
def test_delete_run_not_owned(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "runs" / "run_delete_not_owned.xml"
mock_delete.return_value = create_request_response(
status_code=412,
@@ -1826,14 +1825,13 @@ def test_delete_run_not_owned(mock_delete, test_files_directory, test_api_key):
):
openml.runs.delete_run(40_000)
- run_url = "https://test.openml.org/api/v1/xml/run/40000"
+ run_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/run/40000"
assert run_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_run_success(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "runs" / "run_delete_successful.xml"
mock_delete.return_value = create_request_response(
status_code=200,
@@ -1843,14 +1841,13 @@ def test_delete_run_success(mock_delete, test_files_directory, test_api_key):
success = openml.runs.delete_run(10591880)
assert success
- run_url = "https://test.openml.org/api/v1/xml/run/10591880"
+ run_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/run/10591880"
assert run_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_unknown_run(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "runs" / "run_delete_not_exist.xml"
mock_delete.return_value = create_request_response(
status_code=412,
@@ -1863,7 +1860,7 @@ def test_delete_unknown_run(mock_delete, test_files_directory, test_api_key):
):
openml.runs.delete_run(9_999_999)
- run_url = "https://test.openml.org/api/v1/xml/run/9999999"
+ run_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/run/9999999"
assert run_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
diff --git a/tests/test_tasks/test_task_functions.py b/tests/test_tasks/test_task_functions.py
index d44717177..af143a26b 100644
--- a/tests/test_tasks/test_task_functions.py
+++ b/tests/test_tasks/test_task_functions.py
@@ -244,7 +244,6 @@ def test_deletion_of_cache_dir(self):
@mock.patch.object(requests.Session, "delete")
def test_delete_task_not_owned(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "tasks" / "task_delete_not_owned.xml"
mock_delete.return_value = create_request_response(
status_code=412,
@@ -257,14 +256,13 @@ def test_delete_task_not_owned(mock_delete, test_files_directory, test_api_key):
):
openml.tasks.delete_task(1)
- task_url = "https://test.openml.org/api/v1/xml/task/1"
+ task_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/task/1"
assert task_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_task_with_run(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "tasks" / "task_delete_has_runs.xml"
mock_delete.return_value = create_request_response(
status_code=412,
@@ -277,14 +275,13 @@ def test_delete_task_with_run(mock_delete, test_files_directory, test_api_key):
):
openml.tasks.delete_task(3496)
- task_url = "https://test.openml.org/api/v1/xml/task/3496"
+ task_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/task/3496"
assert task_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_success(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "tasks" / "task_delete_successful.xml"
mock_delete.return_value = create_request_response(
status_code=200,
@@ -294,14 +291,13 @@ def test_delete_success(mock_delete, test_files_directory, test_api_key):
success = openml.tasks.delete_task(361323)
assert success
- task_url = "https://test.openml.org/api/v1/xml/task/361323"
+ task_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/task/361323"
assert task_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")
@mock.patch.object(requests.Session, "delete")
def test_delete_unknown_task(mock_delete, test_files_directory, test_api_key):
- openml.config.start_using_configuration_for_example()
content_file = test_files_directory / "mock_responses" / "tasks" / "task_delete_not_exist.xml"
mock_delete.return_value = create_request_response(
status_code=412,
@@ -314,6 +310,6 @@ def test_delete_unknown_task(mock_delete, test_files_directory, test_api_key):
):
openml.tasks.delete_task(9_999_999)
- task_url = "https://test.openml.org/api/v1/xml/task/9999999"
+ task_url = f"{openml.config.TEST_SERVER_URL}/api/v1/xml/task/9999999"
assert task_url == mock_delete.call_args.args[0]
assert test_api_key == mock_delete.call_args.kwargs.get("params", {}).get("api_key")