- Add support for named styles in GetCapabilities. Not yet supported by GetMap however.
- Add finalize() to BaseWMSFactory to run sanity checks.
This commit is contained in:
parent
bde3b7ae51
commit
ab7d66ee8c
2 changed files with 31 additions and 4 deletions
|
@ -23,6 +23,7 @@ from common import Version
|
|||
from exceptions import OGCException, ServerConfigurationError
|
||||
from wms111 import ServiceHandler as ServiceHandler111
|
||||
from wms130 import ServiceHandler as ServiceHandler130
|
||||
from mapnik import Style, Layer
|
||||
|
||||
def ServiceHandlerFactory(conf, mapfactory, onlineresource, version):
|
||||
|
||||
|
@ -41,13 +42,29 @@ class BaseWMSFactory:
|
|||
self.layers = {}
|
||||
self.styles = {}
|
||||
|
||||
def register_layer(self, layer):
|
||||
def register_layer(self, layer, extrastyles=()):
|
||||
layername = layer.name()
|
||||
if not layername:
|
||||
raise ServerConfigurationError('There is an un-named layer.')
|
||||
raise ServerConfigurationError('Attempted to register an unnamed layer.')
|
||||
self.layers[layername] = layer
|
||||
if isinstance(extrastyles, tuple):
|
||||
layer.wmsextrastyles = extrastyles
|
||||
else:
|
||||
raise ServerConfigurationError('Layer "%s" was passed an invalid list of extra styles. List must be a tuple of strings.' % layername)
|
||||
|
||||
def register_style(self, name, style):
|
||||
if not name:
|
||||
raise ServerConfigurationError('There is an un-named style.')
|
||||
self.styles[name] = style
|
||||
raise ServerConfigurationError('Attempted to register a style without providing a name.')
|
||||
if not isinstance(style, Style):
|
||||
raise ServerConfigurationError('Bad style object passed to register_style() for style "%s".' % name)
|
||||
self.styles[name] = style
|
||||
|
||||
def finalize(self):
|
||||
if len(self.layers) == 0:
|
||||
raise ServerConfigurationError('No layers defined!')
|
||||
if len(self.styles) == 0:
|
||||
raise ServerConfigurationError('No styles defined!')
|
||||
for layer in self.layers.values():
|
||||
for style in list(layer.styles) + list(layer.wmsextrastyles):
|
||||
if style not in self.styles.keys():
|
||||
raise ServerConfigurationError('Layer "%s" refers to undefined style "%s".' % (layer.name(), style))
|
|
@ -182,6 +182,16 @@ class ServiceHandler(WMSBaseServiceHandler):
|
|||
layere.append(layertitle)
|
||||
layere.append(layerexgbb)
|
||||
layere.append(layerbbox)
|
||||
if len(layer.wmsextrastyles) > 0:
|
||||
for extrastyle in list(layer.wmsextrastyles):
|
||||
style = ElementTree.Element('Style')
|
||||
stylename = ElementTree.Element('Name')
|
||||
stylename.text = extrastyle
|
||||
styletitle = ElementTree.Element('Title')
|
||||
styletitle.text = extrastyle
|
||||
style.append(stylename)
|
||||
style.append(styletitle)
|
||||
layere.append(style)
|
||||
rootlayerelem.append(layere)
|
||||
|
||||
self.capabilities = '<?xml version="1.0" encoding="UTF-8"?>' + ElementTree.tostring(capetree)
|
||||
|
|
Loading…
Add table
Reference in a new issue