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
« 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######################################################################
19def make_int(value):
20 if value is None or not value:
21 return 0
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
38class baseCmd:
39 def __init__(self, params={}):
40 super().__init__()
42 self.from_folder = None
43 self.to_folder = None
44 self.set_params(params)
46 self.required_params = []
47 self.cmds = []
49 self.is_add_cmd = True
50 self.has_do_been_called = False
51 self.required_delete_params = []
52 self.warnings = []
54 def set_params(self, params):
55 if params is not None:
56 for key in params:
57 setattr(self, key, params[key])
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)
63 def check_params(self):
64 required_params = self.required_params if self.is_add_cmd else self.required_delete_params
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 )
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
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
87 if parent:
88 parent.cmds.append(self)
90 return obj
92 def pre_do(self):
93 pass
95 def internal_do(self):
96 return None
98 def post_do(self, obj):
99 pass
101 def undo(self):
102 if not self.has_do_been_called:
103 self.is_add_cmd = False
105 self.check_params()
106 self.pre_undo()
107 id = self.internal_undo()
108 self.post_undo()
110 return id
112 def pre_undo(self):
113 for cmd in reversed(self.cmds):
114 cmd.undo()
116 def internal_undo(self):
117 pass
119 def post_undo(self):
120 pass
122 def get_warnings(self):
123 return self.warnings