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
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
1"""Common configuration utilities."""
3from typing import Optional, cast
5import gws
6import gws.gis.source
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 = []
13 p = obj.cfg('templates')
14 if p:
15 obj.templates.extend(gws.u.compact(fn(c) for c in p))
17 if extra:
18 obj.templates.extend(gws.u.compact(fn(c) for c in extra))
20 return len(obj.templates) > 0
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 = []
27 p = obj.cfg('models')
28 if p:
29 obj.models = gws.u.compact(fn(c) for c in p)
30 return True
32 if with_default:
33 obj.models = [fn(None)]
34 return True
36 return False
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 = []
43 p = obj.cfg('finders')
44 if p:
45 obj.finders = gws.u.compact(fn(c) for c in p)
46 return True
48 if with_default:
49 obj.finders = [fn(None)]
50 return True
52 return False
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)
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
75 p = obj.cfg('_defaultSourceLayers')
76 if p:
77 obj.sourceLayers = p
78 return True
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
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
96 p = obj.cfg('_defaultProvider')
97 if p and isinstance(p, cls):
98 obj.serviceProvider = p
99 return True
101 raise gws.Error(f'no provider {cls!r} found for {obj!r}')
104def configure_database_provider_for(obj: gws.Node, ext_type: Optional[str] = None) -> bool:
105 mgr = obj.root.app.databaseMgr
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')
115 p = obj.cfg('_defaultDb')
116 if p:
117 obj.db = p
118 return True
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
127 raise gws.Error(f'no database providers of type {ext_type!r} configured')