Source code for gws.ext.ows.provider.wms.search
import gws.common.search.provider
import gws.gis.ows
import gws.gis.source
import gws.gis.util
import gws.types as t
from . import provider
[docs]class Config(gws.common.search.provider.Config, provider.Config):
sourceLayers: t.Optional[gws.gis.source.LayerFilter] #: source layers to use
[docs]class Object(gws.common.search.provider.Object):
[docs] def configure(self):
super().configure()
self.capabilties = gws.common.search.provider.CAPS_GEOMETRY
layer = self.var('layer')
if layer:
self.provider: provider.Object = layer.provider
self.source_layers = self.var('source_layers')
else:
self.provider: provider.Object = gws.gis.ows.shared_provider(provider.Object, self, self.config)
self.source_layers = gws.gis.source.filter_layers(
self.provider.source_layers,
self.var('sourceLayers'),
queryable_only=True
)
if not self.source_layers:
gws.log.warn(f'{self.uid!r}: no source layers')
self.active = False
[docs] def can_run(self, args):
return (
super().can_run(args)
and self.provider.operation('GetFeatureInfo')
and args.shapes
and len(args.shapes) == 1
and args.shapes[0].type == t.GeometryType.point)
[docs] def run(self, layer: t.ILayer, args: t.SearchArgs) -> t.List[t.IFeature]:
args.source_layer_names = [sl.name for sl in self.source_layers]
return self.provider.find_features(args)