Coverage for gws-app/gws/base/ows/client/finder.py: 56%
27 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-05 13:35 +0200
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-05 13:35 +0200
1"""Generic OWS finder."""
3import gws
4import gws.base.model
5import gws.base.search
6import gws.config.util
7import gws.gis.source
10class Object(gws.base.search.finder.Object):
11 """Generic OWS finder.
13 Searches the queryable source layers of an OWS service provider and creates
14 models bound to the provider. Protocol-specific subclasses provide the provider.
15 """
17 supportsGeometrySearch = True
18 provider: gws.OwsServiceProvider
19 """Service provider."""
20 sourceLayers: list[gws.SourceLayer]
21 """Source layers to search."""
23 def configure(self):
24 self.configure_provider()
25 self.configure_sources()
26 self.configure_models()
27 self.configure_templates()
29 def configure_provider(self):
30 """Configure the service provider. Must be implemented by subclasses."""
31 pass
33 def configure_sources(self):
34 """Configure the source layers.
36 Raises:
37 ``ValueError``: If the provider is ``None``.
38 ``gws.Error``: If there are no queryable source layers.
39 """
41 gws.u.require(self.provider, 'failed to configure service provider')
43 self.configure_source_layers()
44 if not self.sourceLayers:
45 raise gws.Error(f'no queryable layers in {self.provider}')
47 def configure_source_layers(self):
48 """Select the queryable source layers of the provider, or those given in the configuration.
50 Returns:
51 Always ``True``.
52 """
54 return gws.config.util.configure_source_layers_for(self, self.provider.sourceLayers, is_queryable=True)
56 def configure_models(self):
57 return gws.config.util.configure_models_for(self, with_default=True)
59 def create_model(self, cfg):
60 """Create a model of the same type as the finder, bound to the provider and the source layers.
62 Args:
63 cfg: Model configuration, or ``None`` for the default model.
65 Returns:
66 The model object.
67 """
69 return self.create_child(
70 gws.ext.object.model,
71 cfg,
72 type=self.extType,
73 _defaultProvider=self.provider,
74 _defaultSourceLayers=self.sourceLayers
75 )