1 | from synergine.core.config.ConfigurationManager import ConfigurationManager |
||
2 | from synergine.synergy.object.SynergyObject import SynergyObject |
||
3 | from synergine.core.exception.NotFoundError import NotFoundError |
||
4 | |||
5 | |||
6 | class ObjectVisualizer(): |
||
7 | """ |
||
8 | TODO: Il y a eu un ajout, notion de surface directement en plus des objets. |
||
9 | Du coups c'est sale et pas DRY. A reviser. |
||
10 | """ |
||
11 | |||
12 | def __init__(self, config: dict, context): |
||
13 | config_manager = ConfigurationManager(config) |
||
14 | self._visualisation_configuration = config_manager.get('objects', {}) |
||
15 | self._surface_configuration = config_manager.get('surfaces', {}) |
||
16 | self._objects_class_mapped = {} |
||
17 | self._context = context |
||
18 | self._callback_position = config_manager.get('callbacks.position', 0) |
||
19 | |||
20 | def get_visual(self, obj: SynergyObject): |
||
21 | visualisation_definition = self._get_visual_definition(obj) |
||
22 | if 'callbacks' in visualisation_definition: |
||
23 | for callback in visualisation_definition['callbacks']: |
||
24 | callback_return = callback(obj, self._context) |
||
25 | # TODO: Exception au lieu de False |
||
26 | if callback_return is not False: |
||
27 | return self._apply_modifiers_on_visual(visualisation_definition, obj, callback_return) |
||
28 | return self._apply_modifiers_on_visual(visualisation_definition, obj, visualisation_definition['default']) |
||
29 | |||
30 | def _apply_modifiers_on_visual(self, visualisation_definition, obj, visual): |
||
31 | new_visual = visual |
||
32 | if 'modifiers' in visualisation_definition: |
||
33 | for modifier in visualisation_definition['modifiers']: |
||
34 | new_visual = modifier(obj, self._context, visual) |
||
35 | return new_visual |
||
36 | |||
37 | def get_surface(self, surface_name, parameters={}): |
||
38 | surface_definition = self._get_surface_definition(surface_name) |
||
39 | if 'callbacks' in surface_definition: |
||
40 | for callback in surface_definition['callbacks']: |
||
41 | callback_return = callback(parameters, self._context) |
||
42 | # TODO: Exception au lieu de False |
||
43 | if callback_return is not False: |
||
44 | return callback_return.get_surface() |
||
45 | return surface_definition['default'].get_surface() |
||
46 | |||
47 | def get_for_position(self, position, objects): |
||
48 | if self._callback_position: |
||
49 | return self._callback_position(position, objects, self._context) |
||
50 | return None, [] |
||
51 | |||
52 | # TODO: fix bug: on doit mettre en cache dans self._objects_class_mapped le dict {default... et non pas le resultat |
||
53 | def _get_visual_definition_for_class(self, class_name, obj): |
||
0 ignored issues
–
show
|
|||
54 | if obj.__class__ in self._visualisation_configuration: |
||
55 | return self._visualisation_configuration[obj.__class__] |
||
56 | for object_visualisation_class in self._visualisation_configuration: |
||
57 | if isinstance(obj, object_visualisation_class): |
||
58 | return self._visualisation_configuration[object_visualisation_class] |
||
59 | raise NotFoundError() |
||
60 | |||
61 | def _get_default_visualisation(self): |
||
62 | if SynergyObject not in self._visualisation_configuration: |
||
63 | raise Exception("Enable to found SynergyObject visualisation") |
||
64 | return self._visualisation_configuration[SynergyObject]['default'] |
||
65 | |||
66 | def _get_visual_definition(self, obj: SynergyObject): |
||
67 | class_name = obj.__class__.__name__ |
||
68 | if class_name not in self._objects_class_mapped: |
||
69 | try: |
||
70 | object_visualisation_definition = self._get_visual_definition_for_class(class_name, obj) |
||
71 | except NotFoundError: |
||
72 | object_visualisation_definition = self._get_default_visualisation() |
||
73 | self._objects_class_mapped[class_name] = object_visualisation_definition |
||
74 | |||
75 | return self._objects_class_mapped[class_name] |
||
76 | |||
77 | def _get_surface_definition(self, surface_name): |
||
78 | return self._surface_configuration[surface_name] |
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.