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

1import gws 

2 

3 

4class Object(gws.MiddlewareManager): 

5 objectMap: dict[str, gws.Node] 

6 deps: dict[str, list[str]] 

7 names: list[str] 

8 

9 def __init__(self): 

10 self.objectMap = {} 

11 self.deps = {} 

12 self.names = [] 

13 self.sorted = False 

14 

15 def register(self, obj, name, depends_on=None): 

16 self.objectMap[name] = obj 

17 self.deps[name] = depends_on 

18 self.sorted = False 

19 

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] 

25 

26 def _sort(self): 

27 self.names = [] 

28 colors = {} 

29 for name in self.objectMap: 

30 self._sort_visit(name, colors, []) 

31 

32 def _sort_visit(self, name, colors, stack): 

33 stack = stack + [name] 

34 

35 if colors.get(name) == 2: 

36 return 

37 if colors.get(name) == 1: 

38 raise gws.Error('middleware: cyclic dependency: ' + '->'.join(stack)) 

39 

40 if name not in self.objectMap: 

41 raise gws.Error('middleware: not found: ' + '->'.join(stack)) 

42 

43 colors[name] = 1 

44 

45 depends_on = self.deps[name] 

46 if depends_on: 

47 for d in depends_on: 

48 self._sort_visit(d, colors, stack) 

49 

50 colors[name] = 2 

51 self.names.append(name)