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

1"""WMS grabber.""" 

2 

3import gws 

4import gws.base.grabber.box 

5import gws.lib.image 

6 

7from . import provider 

8 

9 

10class Object(gws.base.grabber.box.Object): 

11 """Box grabber that fetches map images from a WMS service with GetMap.""" 

12 

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

19 

20 def __init__(self, opts: gws.base.grabber.Options, provider: provider.Object, sourceLayers: list[gws.SourceLayer], sourceCrs: gws.Crs): 

21 """Create the grabber. 

22 

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 []) 

36 

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 ) 

45 

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