@@ -699,14 +699,17 @@ def _create_run_from_xml(xml):
699699
700700
701701def _create_trace_from_description (xml ):
702- result_dict = xmltodict .parse (xml )['oml:trace' ]
702+ result_dict = xmltodict .parse (xml , force_list = ( 'oml:trace_iteration' ,) )['oml:trace' ]
703703
704704 run_id = result_dict ['oml:run_id' ]
705705 trace = dict ()
706706
707707 if 'oml:trace_iteration' not in result_dict :
708708 raise ValueError ('Run does not contain valid trace. ' )
709709
710+ assert type (result_dict ['oml:trace_iteration' ]) == list , \
711+ type (result_dict ['oml:trace_iteration' ])
712+
710713 for itt in result_dict ['oml:trace_iteration' ]:
711714 repeat = int (itt ['oml:repeat' ])
712715 fold = int (itt ['oml:fold' ])
@@ -854,7 +857,7 @@ def _list_runs(api_call):
854857
855858 xml_string = _perform_api_call (api_call )
856859
857- runs_dict = xmltodict .parse (xml_string )
860+ runs_dict = xmltodict .parse (xml_string , force_list = ( 'oml:run' ,) )
858861 # Minimalistic check if the XML is useful
859862 if 'oml:runs' not in runs_dict :
860863 raise ValueError ('Error in return XML, does not contain "oml:runs": %s'
@@ -869,15 +872,11 @@ def _list_runs(api_call):
869872 '"http://openml.org/openml": %s'
870873 % str (runs_dict ))
871874
872- if isinstance (runs_dict ['oml:runs' ]['oml:run' ], list ):
873- runs_list = runs_dict ['oml:runs' ]['oml:run' ]
874- elif isinstance (runs_dict ['oml:runs' ]['oml:run' ], dict ):
875- runs_list = [runs_dict ['oml:runs' ]['oml:run' ]]
876- else :
877- raise TypeError ()
875+ assert type (runs_dict ['oml:runs' ]['oml:run' ]) == list , \
876+ type (runs_dict ['oml:runs' ])
878877
879878 runs = dict ()
880- for run_ in runs_list :
879+ for run_ in runs_dict [ 'oml:runs' ][ 'oml:run' ] :
881880 run_id = int (run_ ['oml:run_id' ])
882881 run = {'run_id' : run_id ,
883882 'task_id' : int (run_ ['oml:task_id' ]),
0 commit comments