Coverage for gws-app/gws/config/util.py: 0%

80 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-17 01:37 +0200

1"""Common configuration utilities.""" 

2 

3from typing import Optional, cast 

4 

5import gws 

6import gws.gis.source 

7 

8 

9def configure_templates_for(obj: gws.Node, extra: Optional[list] = None) -> bool: 

10 fn = _create_fn(obj, 'create_template', gws.ext.object.template) 

11 obj.templates = [] 

12 

13 p = obj.cfg('templates') 

14 if p: 

15 obj.templates.extend(gws.u.compact(fn(c) for c in p)) 

16 

17 if extra: 

18 obj.templates.extend(gws.u.compact(fn(c) for c in extra)) 

19 

20 return len(obj.templates) > 0 

21 

22 

23def configure_models_for(obj: gws.Node, with_default=False) -> bool: 

24 fn = _create_fn(obj, 'create_model', gws.ext.object.model) 

25 obj.models = [] 

26 

27 p = obj.cfg('models') 

28 if p: 

29 obj.models = gws.u.compact(fn(c) for c in p) 

30 return True 

31 

32 if with_default: 

33 obj.models = [fn(None)] 

34 return True 

35 

36 return False 

37 

38 

39def configure_finders_for(obj: gws.Node, with_default=False) -> bool: 

40 fn = _create_fn(obj, 'create_finder', gws.ext.object.finder) 

41 obj.finders = [] 

42 

43 p = obj.cfg('finders') 

44 if p: 

45 obj.finders = gws.u.compact(fn(c) for c in p) 

46 return True 

47 

48 if with_default: 

49 obj.finders = [fn(None)] 

50 return True 

51 

52 return False 

53 

54 

55def _create_fn(obj, name: str, cls: type): 

56 fn = getattr(obj, name, None) 

57 if fn: 

58 return fn 

59 return lambda c: obj.create_child(cls, c) 

60 

61 

62def configure_source_layers_for( 

63 obj: gws.Node, 

64 layers: list[gws.SourceLayer], 

65 is_group: bool = None, 

66 is_image: bool = None, 

67 is_queryable: bool = None, 

68 is_visible: bool = None, 

69) -> bool: 

70 p = obj.cfg('sourceLayers') 

71 if p: 

72 obj.sourceLayers = gws.gis.source.filter_layers(layers, p) 

73 return True 

74 

75 p = obj.cfg('_defaultSourceLayers') 

76 if p: 

77 obj.sourceLayers = p 

78 return True 

79 

80 obj.sourceLayers = gws.gis.source.filter_layers( 

81 layers, 

82 is_group=is_group, 

83 is_image=is_image, 

84 is_queryable=is_queryable, 

85 is_visible=is_visible, 

86 ) 

87 return True 

88 

89 

90def configure_service_provider_for(obj: gws.Node, cls: type) -> bool: 

91 p = obj.cfg('provider') 

92 if p: 

93 obj.serviceProvider = obj.root.create_shared(cls, p) 

94 return True 

95 

96 p = obj.cfg('_defaultProvider') 

97 if p and isinstance(p, cls): 

98 obj.serviceProvider = p 

99 return True 

100 

101 raise gws.Error(f'no provider {cls!r} found for {obj!r}') 

102 

103 

104def configure_database_provider_for(obj: gws.Node, ext_type: Optional[str] = None) -> bool: 

105 mgr = obj.root.app.databaseMgr 

106 

107 uid = obj.cfg('dbUid') 

108 if uid: 

109 p = mgr.find_provider(uid=uid) 

110 if p: 

111 obj.db = p 

112 return True 

113 raise gws.Error(f'database provider {uid!r} not found') 

114 

115 p = obj.cfg('_defaultDb') 

116 if p: 

117 obj.db = p 

118 return True 

119 

120 ext_type = ext_type or obj.extType 

121 if ext_type: 

122 p = mgr.find_provider(ext_type=ext_type) 

123 if p: 

124 obj.db = p 

125 return True 

126 

127 raise gws.Error(f'no database providers of type {ext_type!r} configured')