Coverage for gws-app/gws/plugin/ows_server/wcs/__init__.py: 100%

0 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-17 01:37 +0200

1"""WCS service. 

2 

3@TODO to be implemented 

4 

5""" 

6 

7# import gws 

8# import gws.base.web 

9# import gws.gis.crs 

10# import gws.gis.bounds 

11# import gws.base.ows.server 

12# 

13# 

14# gws.ext.new.owsService('wcs') 

15# 

16# 

17# class Config(gws.base.ows.server.service.Config): 

18# """WCS Service configuration""" 

19# pass 

20# 

21# 

22# class Object(gws.base.ows.server.service.Object): 

23# protocol = gws.OwsProtocol.WCS 

24# supportedVersions = ['2.0.1', '1.0.0'] 

25# is_raster_ows = True 

26# 

27# @property 

28# def service_link(self): 

29# if self.project: 

30# return gws.Data(url=self.url_path(self.project), scheme='OGC:WCS', function='search') 

31# 

32# @property 

33# def default_templates(self): 

34# return [ 

35# gws.Config( 

36# type='py', 

37# path=gws.u.dirname(__file__) + '/templates/getCapabilities.cx.py', 

38# subject='ows.GetCapabilities', 

39# mimeTypes=['xml'], 

40# access=gws.c.PUBLIC, 

41# ), 

42# gws.Config( 

43# type='py', 

44# path=gws.u.dirname(__file__) + '/templates/describeCoverage.cx.py', 

45# subject='ows.DescribeCoverage', 

46# mimeTypes=['xml'], 

47# access=gws.c.PUBLIC, 

48# ), 

49# ] 

50# 

51# @property 

52# def default_metadata(self): 

53# return gws.Data( 

54# inspireDegreeOfConformity='notEvaluated', 

55# inspireMandatoryKeyword='infoMapAccessService', 

56# inspireResourceType='service', 

57# inspireSpatialDataServiceType='view', 

58# isoScope='dataset', 

59# isoSpatialRepresentationType='vector', 

60# ) 

61# 

62# ## 

63# 

64# # @TODO wcs needs more work 

65# 

66# def handle_getcapabilities(self, rd: core.Request): 

67# lcs = self.layer_caps_list(rd) 

68# return self.template_response(rd, gws.OwsVerb.GetCapabilities, context={ 

69# 'layer_caps_list': lcs, 

70# 'version': self.request_version(rd), 

71# }) 

72# 

73# def handle_describecoverage(self, rd: core.Request): 

74# lcs = self.layer_caps_list_from_request(rd, ['coverageid', 'coverage', 'identifier'], self.SCOPE_LEAF) 

75# if not lcs: 

76# raise gws.base.web.error.NotFound() 

77# return self.template_response(rd, gws.OwsVerb.DescribeCoverage, context={ 

78# 'layer_caps_list': lcs, 

79# 'version': self.request_version(rd), 

80# }) 

81# 

82# def handle_getcoverage(self, rd: core.Request): 

83# request_crs = rd.project.map.crs 

84# p = rd.req.param('srsName') 

85# if p: 

86# crs = gws.gis.crs.get(p) 

87# if not crs: 

88# raise gws.base.web.error.BadRequest('Invalid CRS') 

89# request_crs = crs 

90# 

91# bounds = gws.gis.bounds.from_request_bbox(rd.req.param('bbox'), request_crs, invert_axis_if_geographic=True) 

92# if not bounds: 

93# raise gws.base.web.error.BadRequest('Invalid BBOX') 

94# 

95# lcs = self.layer_caps_list_from_request(rd, ['coverageid', 'coverage', 'identifier'], self.SCOPE_LEAF) 

96# if not lcs: 

97# raise gws.base.web.error.NotFound('No layers found') 

98# 

99# return self.render_map_bbox_from_layer_caps_list(rd, lcs, bounds)