Coverage for sparkle/CLI/remove_instances.py: 91%

46 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-09-29 10:17 +0000

1#!/usr/bin/env python3 

2"""Sparkle command to remove an instance set from the Sparkle platform.""" 

3 

4import sys 

5import argparse 

6import shutil 

7 

8from sparkle.CLI.help import global_variables as gv 

9from sparkle.platform import file_help as sfh 

10from sparkle.structures import FeatureDataFrame, PerformanceDataFrame 

11from sparkle.instance import Instance_Set 

12from sparkle.CLI.help import logging as sl 

13from sparkle.CLI.initialise import check_for_initialise 

14from sparkle.CLI.help import argparse_custom as ac 

15from sparkle.CLI.help.nicknames import resolve_object_name 

16 

17 

18def parser_function() -> argparse.ArgumentParser: 

19 """Define the command line arguments.""" 

20 parser = argparse.ArgumentParser(description="Remove instances from the platform.") 

21 parser.add_argument( 

22 *ac.InstancesPathRemoveArgument.names, **ac.InstancesPathRemoveArgument.kwargs 

23 ) 

24 return parser 

25 

26 

27def main(argv: list[str]) -> None: 

28 """Main function of the remove instances command.""" 

29 # Log command call 

30 sl.log_command(sys.argv, gv.settings().random_state) 

31 check_for_initialise() 

32 

33 # Define command line arguments 

34 parser = parser_function() 

35 

36 # Process command line arguments 

37 args = parser.parse_args(argv) 

38 instances_path = resolve_object_name( 

39 args.instances_path, 

40 nickname_dict=gv.file_storage_data_mapping[gv.instances_nickname_path], 

41 target_dir=gv.settings().DEFAULT_instance_dir, 

42 ) 

43 

44 if ( 

45 instances_path is None 

46 or not instances_path.exists() 

47 or not instances_path.is_dir() 

48 ): 

49 print(f'Could not resolve instances path arg "{args.instances_path}"!') 

50 print("Check that the path or nickname is spelled correctly.") 

51 sys.exit(-1) 

52 

53 print(f"Start removing all instances in directory {instances_path} ...") 

54 old_instance_set = Instance_Set(instances_path) 

55 # Remove from feature data and performance data 

56 feature_data = FeatureDataFrame(gv.settings().DEFAULT_feature_data_path) 

57 performance_data = PerformanceDataFrame(gv.settings().DEFAULT_performance_data_path) 

58 for instance in old_instance_set.instance_names: 

59 feature_data.remove_instances(instance) 

60 performance_data.remove_instances(instance) 

61 

62 feature_data.save_csv() 

63 performance_data.save_csv() 

64 

65 # Remove nickname, if it exists 

66 instances_nicknames = gv.file_storage_data_mapping[gv.instances_nickname_path] 

67 for key in instances_nicknames: 

68 if instances_nicknames[key] == instances_path: 

69 sfh.add_remove_platform_item( 

70 instances_path, gv.instances_nickname_path, key=key, remove=True 

71 ) 

72 break 

73 

74 # We unlink symbolics links, erase copies 

75 if instances_path.is_symlink(): 

76 instances_path.unlink() 

77 else: 

78 # Remove the directory and all its files 

79 shutil.rmtree(instances_path) 

80 

81 print(f"Removing instances set {instances_path.name} done!") 

82 sys.exit(0) 

83 

84 

85if __name__ == "__main__": 

86 main(sys.argv[1:])