|
1
|
|
|
"""Contains factory class of process with calls stages.""" |
|
2
|
|
|
|
|
3
|
1 |
|
from grortir.main.model.processes.calls_process import CallsProcess |
|
4
|
1 |
|
from grortir.main.model.stages.calls_stage import CallsStage |
|
5
|
|
|
|
|
6
|
|
|
|
|
7
|
1 |
|
class CallsProcessFactory: |
|
8
|
|
|
"""Class which produce process with the same type of stages. |
|
9
|
|
|
|
|
10
|
|
|
Attributes: |
|
11
|
|
|
structure_type (str): represent type of structure |
|
12
|
|
|
how_many_nodes (int): how many nodes should be in generated process |
|
13
|
|
|
max_calls (int): max_calls for stages |
|
14
|
|
|
process (CallsProcess): process which will be incrementally build |
|
15
|
|
|
initial_vec (tuple): initial vector |
|
16
|
|
|
""" |
|
17
|
|
|
|
|
18
|
1 |
|
def __init__(self, structure_type, how_many_nodes, max_calls, |
|
19
|
|
|
initial_vec=()): |
|
20
|
|
|
"""Constructor.""" |
|
21
|
1 |
|
self.max_calls = max_calls |
|
22
|
1 |
|
self._stages_to_add = [] |
|
23
|
1 |
|
self.structure_type = structure_type |
|
24
|
1 |
|
self.how_many_nodes = how_many_nodes |
|
25
|
1 |
|
self.process = CallsProcess() |
|
26
|
1 |
|
self.initial_vec = initial_vec |
|
27
|
|
|
|
|
28
|
1 |
|
def _update_structure(self): |
|
29
|
|
|
"""Update structure of process.""" |
|
30
|
1 |
|
if self.structure_type == "linear": |
|
31
|
1 |
|
if len(self._stages_to_add) > 1: |
|
32
|
1 |
|
self.process.add_path(self._stages_to_add) |
|
33
|
|
|
else: |
|
34
|
|
|
self.process.add_node(self._stages_to_add[0]) |
|
|
|
|
|
|
35
|
|
|
else: |
|
36
|
1 |
|
raise NotImplementedError() |
|
37
|
|
|
|
|
38
|
1 |
|
def _create_stages(self): |
|
39
|
|
|
"""Create stages which will be injected to process.""" |
|
40
|
1 |
|
for i in range(self.how_many_nodes): |
|
41
|
1 |
|
self._stages_to_add += [ |
|
42
|
|
|
CallsStage(str(i), self.max_calls, self.initial_vec)] |
|
43
|
|
|
|
|
44
|
1 |
|
def construct_process(self): |
|
45
|
|
|
"""Construct process.""" |
|
46
|
1 |
|
self._create_stages() |
|
47
|
1 |
|
self._update_structure() |
|
48
|
|
|
return self.process |
|
49
|
|
|
|
This check looks for calls to members that are non-existent. These calls will fail.
The member could have been renamed or removed.