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

1"""Generic OWS finder.""" 

2 

3import gws 

4import gws.base.model 

5import gws.base.search 

6import gws.config.util 

7import gws.gis.source 

8 

9 

10class Object(gws.base.search.finder.Object): 

11 """Generic OWS finder. 

12 

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 """ 

16 

17 supportsGeometrySearch = True 

18 provider: gws.OwsServiceProvider 

19 """Service provider.""" 

20 sourceLayers: list[gws.SourceLayer] 

21 """Source layers to search.""" 

22 

23 def configure(self): 

24 self.configure_provider() 

25 self.configure_sources() 

26 self.configure_models() 

27 self.configure_templates() 

28 

29 def configure_provider(self): 

30 """Configure the service provider. Must be implemented by subclasses.""" 

31 pass 

32 

33 def configure_sources(self): 

34 """Configure the source layers. 

35 

36 Raises: 

37 ``ValueError``: If the provider is ``None``. 

38 ``gws.Error``: If there are no queryable source layers. 

39 """ 

40 

41 gws.u.require(self.provider, 'failed to configure service provider') 

42 

43 self.configure_source_layers() 

44 if not self.sourceLayers: 

45 raise gws.Error(f'no queryable layers in {self.provider}') 

46 

47 def configure_source_layers(self): 

48 """Select the queryable source layers of the provider, or those given in the configuration. 

49 

50 Returns: 

51 Always ``True``. 

52 """ 

53 

54 return gws.config.util.configure_source_layers_for(self, self.provider.sourceLayers, is_queryable=True) 

55 

56 def configure_models(self): 

57 return gws.config.util.configure_models_for(self, with_default=True) 

58 

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. 

61 

62 Args: 

63 cfg: Model configuration, or ``None`` for the default model. 

64 

65 Returns: 

66 The model object. 

67 """ 

68 

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 )