11from __future__ import annotations
22
33from collections .abc import Iterable
4+ from typing import Any
45
56import xmltodict
67
@@ -156,7 +157,7 @@ def _create_setup_parameter_from_xml(self, result_dict: dict[str, str]) -> OpenM
156157 value = result_dict ["oml:value" ],
157158 )
158159
159- def get (self , setup_id : int ) -> OpenMLSetup :
160+ def get (self , setup_id : int ) -> tuple [ str , OpenMLSetup ] :
160161 """
161162 Downloads the setup (configuration) description from OpenML
162163 and returns a structured object
@@ -168,11 +169,40 @@ def get(self, setup_id: int) -> OpenMLSetup:
168169
169170 Returns
170171 -------
171- OpenMLSetup (an initialized openml setup object)
172+ tuple[str, OpenMLSetup]
173+ A tuple containing:
174+ - xml_content: The raw XML response from the server
175+ - setup: An initialized OpenMLSetup object parsed from the XML
172176 """
177+ url_suffix = f"/setup/{ setup_id } "
178+ setup_response = self ._http .get (url_suffix )
179+ xml_content = setup_response .text
180+ result_dict = xmltodict .parse (xml_content )
181+
182+ setup = self ._create_setup (result_dict )
183+ return xml_content , setup
184+
185+ def exists (self , file_elements : dict [str , Any ]) -> int :
186+ """
187+ Checks whether a hyperparameter configuration already exists on the server.
188+
189+ Parameters
190+ ----------
191+ file_elements : dict
192+ Dictionary containing file data for the API request
193+
194+ Returns
195+ -------
196+ setup_id : int
197+ setup id iff exists, False otherwise
198+ """
199+ api_call = "/setup/exists/"
200+ setup_response = self ._http .post (api_call , files = file_elements )
201+ xml_content = setup_response .text
202+ result_dict = xmltodict .parse (xml_content )
173203
174- def exists ( self ) -> int :
175- pass
204+ setup_id = int ( result_dict [ "oml:setup_exists" ][ "oml:id" ])
205+ return setup_id if setup_id > 0 else False
176206
177207
178208class SetupsV2 (SetupsAPI ):
@@ -192,8 +222,8 @@ def list(
192222 def _create_setup (self , result_dict : dict ) -> OpenMLSetup :
193223 raise NotImplementedError ("V2 API implementation is not yet available" )
194224
195- def get (self , setup_id : int ) -> OpenMLSetup :
225+ def get (self , setup_id : int ) -> tuple [ str , OpenMLSetup ] :
196226 raise NotImplementedError ("V2 API implementation is not yet available" )
197227
198- def exists (self ) -> int :
228+ def exists (self , file_elements : dict [ str , Any ] ) -> int :
199229 raise NotImplementedError ("V2 API implementation is not yet available" )
0 commit comments