1 | from synergine.core.exception.NotFoundError import NotFoundError |
||
2 | |||
3 | |||
4 | class ActionManager(): |
||
5 | """ |
||
6 | Manaer of Action object |
||
7 | """ |
||
8 | |||
9 | def get_steps_for_actions(self, actions: list): |
||
10 | """ |
||
11 | Return a list of hierarchical list of action where an action is always |
||
12 | placed in list after list containing his Action dependencies |
||
13 | :param actions: list of Action |
||
14 | :return: list of steps where step contain list of Event |
||
15 | """ |
||
16 | actions_copy = actions[:] |
||
17 | steps = [[]] |
||
18 | count = 0 |
||
19 | for action in actions_copy: |
||
20 | count += 1 |
||
21 | if count > 10000: # TODO: hard code |
||
22 | raise Exception("Impossible to find dependencies of action", actions) |
||
23 | last_action = action |
||
24 | action_dependencies = action.get_dependencies() |
||
25 | if action_dependencies: |
||
26 | try: |
||
27 | step_index = self._get_step_index_for_dependencies(steps, action_dependencies) |
||
28 | if step_index is not None: |
||
29 | try: |
||
30 | steps[step_index+1].append(action) |
||
31 | except IndexError: |
||
32 | steps.append([action]) |
||
33 | else: |
||
34 | step = [] |
||
35 | step.extend(action_dependencies) |
||
36 | steps.append(step) |
||
37 | # Si une des dependences n'est pas encore dans les steps, on s'occupera de cette action plus tard |
||
38 | except NotFoundError: |
||
39 | # TODO: Prevoir le cas ou la dependance n'existera jamais dans la liste et lever une erreur |
||
40 | actions_copy.append(action) |
||
41 | else: |
||
42 | steps[0].append(action) |
||
43 | return steps |
||
44 | |||
45 | def _get_step_index_for_dependencies(self, steps, dependencies): |
||
0 ignored issues
–
show
|
|||
46 | step_index_found = None |
||
47 | for dependency in dependencies: |
||
48 | step_index = self._get_step_index_for_dependency(steps, dependency) |
||
49 | if step_index_found is None: |
||
50 | step_index_found = step_index |
||
51 | else: |
||
52 | if step_index > step_index_found: |
||
53 | step_index_found = step_index |
||
54 | return step_index_found |
||
55 | |||
56 | def _get_step_index_for_dependency(self, steps, dependency): |
||
57 | for step_index, step_actions in enumerate(steps): |
||
58 | for step_action in step_actions: |
||
59 | if issubclass(step_action, dependency): |
||
60 | return step_index |
||
61 | raise NotFoundError() |
This check looks for invalid names for a range of different identifiers.
You can set regular expressions to which the identifiers must conform if the defaults do not match your requirements.
If your project includes a Pylint configuration file, the settings contained in that file take precedence.
To find out more about Pylint, please refer to their site.