44import random
55from itertools import product
66from unittest import mock
7+ import shutil
78
89import arff
910import time
@@ -373,9 +374,9 @@ def test_get_dataset_by_name(self):
373374 def test_get_dataset_uint8_dtype (self ):
374375 dataset = openml .datasets .get_dataset (1 )
375376 self .assertEqual (type (dataset ), OpenMLDataset )
376- self .assertEqual (dataset .name , ' anneal' )
377+ self .assertEqual (dataset .name , " anneal" )
377378 df , _ , _ , _ = dataset .get_data ()
378- self .assertEqual (df [' carbon' ].dtype , ' uint8' )
379+ self .assertEqual (df [" carbon" ].dtype , " uint8" )
379380
380381 def test_get_dataset (self ):
381382 # This is the only non-lazy load to ensure default behaviour works.
@@ -1154,27 +1155,31 @@ def test_publish_fetch_ignore_attribute(self):
11541155 # test if publish was successful
11551156 self .assertIsInstance (dataset .id , int )
11561157
1158+ downloaded_dataset = self ._wait_for_dataset_being_processed (dataset .id )
1159+ self .assertEqual (downloaded_dataset .ignore_attribute , ignore_attribute )
1160+
1161+ def _wait_for_dataset_being_processed (self , dataset_id ):
11571162 downloaded_dataset = None
11581163 # fetching from server
11591164 # loop till timeout or fetch not successful
1160- max_waiting_time_seconds = 400
1165+ max_waiting_time_seconds = 600
11611166 # time.time() works in seconds
11621167 start_time = time .time ()
11631168 while time .time () - start_time < max_waiting_time_seconds :
11641169 try :
1165- downloaded_dataset = openml .datasets .get_dataset (dataset . id )
1170+ downloaded_dataset = openml .datasets .get_dataset (dataset_id )
11661171 break
11671172 except Exception as e :
11681173 # returned code 273: Dataset not processed yet
11691174 # returned code 362: No qualities found
11701175 TestBase .logger .error (
1171- "Failed to fetch dataset:{} with '{}'." .format (dataset . id , str (e ))
1176+ "Failed to fetch dataset:{} with '{}'." .format (dataset_id , str (e ))
11721177 )
11731178 time .sleep (10 )
11741179 continue
11751180 if downloaded_dataset is None :
1176- raise ValueError ("TIMEOUT: Failed to fetch uploaded dataset - {}" .format (dataset . id ))
1177- self . assertEqual ( downloaded_dataset . ignore_attribute , ignore_attribute )
1181+ raise ValueError ("TIMEOUT: Failed to fetch uploaded dataset - {}" .format (dataset_id ))
1182+ return downloaded_dataset
11781183
11791184 def test_create_dataset_row_id_attribute_error (self ):
11801185 # meta-information
@@ -1347,7 +1352,7 @@ def test_get_dataset_cache_format_feather(self):
13471352 self .assertEqual (len (categorical ), X .shape [1 ])
13481353 self .assertEqual (len (attribute_names ), X .shape [1 ])
13491354
1350- def test_data_edit (self ):
1355+ def test_data_edit_non_critical_field (self ):
13511356 # Case 1
13521357 # All users can edit non-critical fields of datasets
13531358 desc = (
@@ -1368,14 +1373,31 @@ def test_data_edit(self):
13681373 edited_dataset = openml .datasets .get_dataset (did )
13691374 self .assertEqual (edited_dataset .description , desc )
13701375
1376+ def test_data_edit_critical_field (self ):
13711377 # Case 2
13721378 # only owners (or admin) can edit all critical fields of datasets
1373- # this is a dataset created by CI, so it is editable by this test
1374- did = 315
1375- result = edit_dataset (did , default_target_attribute = "col_1" , ignore_attribute = "col_2" )
1379+ # for this, we need to first clone a dataset to do changes
1380+ did = fork_dataset (1 )
1381+ self ._wait_for_dataset_being_processed (did )
1382+ result = edit_dataset (did , default_target_attribute = "shape" , ignore_attribute = "oil" )
13761383 self .assertEqual (did , result )
1377- edited_dataset = openml .datasets .get_dataset (did )
1378- self .assertEqual (edited_dataset .ignore_attribute , ["col_2" ])
1384+
1385+ n_tries = 10
1386+ # we need to wait for the edit to be reflected on the server
1387+ for i in range (n_tries ):
1388+ edited_dataset = openml .datasets .get_dataset (did )
1389+ try :
1390+ self .assertEqual (edited_dataset .default_target_attribute , "shape" , edited_dataset )
1391+ self .assertEqual (edited_dataset .ignore_attribute , ["oil" ], edited_dataset )
1392+ break
1393+ except AssertionError as e :
1394+ if i == n_tries - 1 :
1395+ raise e
1396+ time .sleep (10 )
1397+ # Delete the cache dir to get the newer version of the dataset
1398+ shutil .rmtree (
1399+ os .path .join (self .workdir , "org" , "openml" , "test" , "datasets" , str (did ))
1400+ )
13791401
13801402 def test_data_edit_errors (self ):
13811403 # Check server exception when no field to edit is provided
0 commit comments