Coverage for gws-app/gws/plugin/ows_client/wms/grabber.py: 95%
20 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-23 20:06 +0200
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-23 20:06 +0200
1"""WMS grabber."""
3import gws
4import gws.base.grabber.box
5import gws.lib.image
7from . import provider
10class Object(gws.base.grabber.box.Object):
11 """Box grabber that fetches map images from a WMS service with GetMap."""
13 provider: provider.Object
14 """WMS service provider."""
15 sourceLayers: list[gws.SourceLayer]
16 """Source layers to render."""
17 sourceMimeType: str
18 """MIME type of GetMap requests, the default of the operation if empty."""
20 def __init__(self, opts: gws.base.grabber.Options, provider: provider.Object, sourceLayers: list[gws.SourceLayer], sourceCrs: gws.Crs):
21 """Create the grabber.
23 Args:
24 opts: Grabber options.
25 provider: WMS service provider.
26 sourceLayers: Source layers to render.
27 sourceCrs: CRS of the GetMap requests.
28 """
29 super().__init__(opts)
30 self.provider = provider
31 self.sourceLayers = sourceLayers
32 self.sourceCrs = sourceCrs
33 self.maxRequestPixels = self.provider.maxRequestPixels
34 op = self.provider.get_operation(gws.OwsVerb.GetMap)
35 self.sourceMimeType = gws.lib.image.format.best_mime_type(self.imageFormat, op.mimeTypes if op else [])
37 def fetch_box_as_bytes(self, bounds, w, h, params=None):
38 return self.provider.get_map(
39 bounds,
40 w,
41 h,
42 self.sourceLayers,
43 self.sourceMimeType,
44 )
46 def fetch_box_as_image(self, bounds, w, h, params=None):
47 return self.to_image(self.fetch_box_as_bytes(bounds, w, h, params))