Coverage for apps/ptf/cmds/base_cmds.py: 90%

75 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-05-19 19:20 +0000

1##################################################################### 

2# 

3# baseCmd: base class of all commands 

4# 

5# Set self.required_params to declare the required params 

6# They are checked at the beginning of the do() 

7# 

8# All strings params are converted to unicode, except for "body" 

9# body is used in xml cmds (see xml_cmds.py): 

10# etree will give an error if you pass unicode to the fromstring function 

11# with an XML that defines its encoding (<?xml version="1.0" encoding="utf-8"?>) 

12# 

13# sub cmds can be declared by passing the parent command in the .do() function 

14# sub cmds are undoed in the reverse order during .undo() 

15# 

16###################################################################### 

17 

18 

19def make_int(value): 

20 if value is None or not value: 

21 return 0 

22 

23 if not isinstance(value, int): 

24 value = value.split("-")[0] 

25 try: 

26 value = int(value) 

27 except ValueError: 

28 value = "".join(char for char in value if char.isdigit()) 

29 try: 

30 value = int(value) 

31 except ValueError: 

32 value = 0 

33 else: 

34 pass 

35 return value 

36 

37 

38class baseCmd: 

39 def __init__(self, params={}): 

40 super().__init__() 

41 

42 self.from_folder = None 

43 self.to_folder = None 

44 self.set_params(params) 

45 

46 self.required_params = [] 

47 self.cmds = [] 

48 

49 self.is_add_cmd = True 

50 self.has_do_been_called = False 

51 self.required_delete_params = [] 

52 self.warnings = [] 

53 

54 def set_params(self, params): 

55 if params is not None: 

56 for key in params: 

57 setattr(self, key, params[key]) 

58 

59 # def set_if_not_defined(self, name, value): 

60 # if not hasattr(self, name) or not getattr(self, name): 

61 # setattr(self, name, value) 

62 

63 def check_params(self): 

64 required_params = self.required_params if self.is_add_cmd else self.required_delete_params 

65 

66 for name in required_params: 

67 if not hasattr(self, name) or not getattr(self, name): 

68 raise ValueError( 

69 "required param " + name + " est vide : " + self.__class__.__name__ 

70 ) 

71 

72 def set_additional_info(self, data, infos): 

73 for info in infos: 

74 value = getattr(self, info) 

75 if value: 

76 data[info] = value 

77 

78 def do(self, parent=None): 

79 self.has_do_been_called = True 

80 self.cmds = [] 

81 self.check_params() 

82 self.pre_do() # Ex: add required things, like a provider for addPublisherDatabaseCmd 

83 obj = self.internal_do() 

84 if obj is not None: 

85 self.post_do(obj) # Ex: add other things, like ResourceId 

86 

87 if parent: 

88 parent.cmds.append(self) 

89 

90 return obj 

91 

92 def pre_do(self): 

93 pass 

94 

95 def internal_do(self): 

96 return None 

97 

98 def post_do(self, obj): 

99 pass 

100 

101 def undo(self): 

102 if not self.has_do_been_called: 

103 self.is_add_cmd = False 

104 

105 self.check_params() 

106 self.pre_undo() 

107 id = self.internal_undo() 

108 self.post_undo() 

109 

110 return id 

111 

112 def pre_undo(self): 

113 for cmd in reversed(self.cmds): 

114 cmd.undo() 

115 

116 def internal_undo(self): 

117 pass 

118 

119 def post_undo(self): 

120 pass 

121 

122 def get_warnings(self): 

123 return self.warnings