Coverage for gws-app/gws/base/application/middleware.py: 0%
39 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
1import gws
4class Object(gws.MiddlewareManager):
5 objectMap: dict[str, gws.Node]
6 deps: dict[str, list[str]]
7 names: list[str]
9 def __init__(self):
10 self.objectMap = {}
11 self.deps = {}
12 self.names = []
13 self.sorted = False
15 def register(self, obj, name, depends_on=None):
16 self.objectMap[name] = obj
17 self.deps[name] = depends_on
18 self.sorted = False
20 def objects(self):
21 if not self.sorted:
22 self._sort()
23 self.sorted = True
24 return [self.objectMap[name] for name in self.names]
26 def _sort(self):
27 self.names = []
28 colors = {}
29 for name in self.objectMap:
30 self._sort_visit(name, colors, [])
32 def _sort_visit(self, name, colors, stack):
33 stack = stack + [name]
35 if colors.get(name) == 2:
36 return
37 if colors.get(name) == 1:
38 raise gws.Error('middleware: cyclic dependency: ' + '->'.join(stack))
40 if name not in self.objectMap:
41 raise gws.Error('middleware: not found: ' + '->'.join(stack))
43 colors[name] = 1
45 depends_on = self.deps[name]
46 if depends_on:
47 for d in depends_on:
48 self._sort_visit(d, colors, stack)
50 colors[name] = 2
51 self.names.append(name)