# -*- coding: utf-8 -*- """ *************************************************************************** layergroup.py --------------------- Date : November 2012 Copyright : (C) 2012 by David Winslow Email : dwins at opengeo dot com *************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * *************************************************************************** """ __author__ = 'David Winslow' __date__ = 'November 2012' __copyright__ = '(C) 2012, David Winslow' # This will get replaced with a git SHA1 when you do a git archive __revision__ = '$Format:%H$' from support import ResourceInfo, bbox, \ write_bbox, write_string, xml_property, url def _maybe_text(n): if n is None: return None else: return n.text def _layer_list(node): if node is not None: return [_maybe_text(n.find('name')) for n in node.findall('layer')] def _style_list(node): if node is not None: return [_maybe_text(n.find('name')) for n in node.findall('style')] def _write_layers(builder, layers): builder.start('layers', dict()) for l in layers: builder.start('layer', dict()) if l is not None: builder.start('name', dict()) builder.data(l) builder.end('name') builder.end('layer') builder.end('layers') def _write_styles(builder, styles): builder.start('styles', dict()) for s in styles: builder.start('style', dict()) if s is not None: builder.start('name', dict()) builder.data(s) builder.end('name') builder.end('style') builder.end('styles') class LayerGroup(ResourceInfo): """Represents a layer group in geoserver. """ resource_type = 'layerGroup' save_method = 'PUT' def __init__(self, catalog, name): super(LayerGroup, self).__init__() assert isinstance(name, basestring) self.catalog = catalog self.name = name @property def href(self): return url(self.catalog.service_url, ['layergroups', self.name + '.xml' ]) styles = xml_property('styles', _style_list) layers = xml_property('layers', _layer_list) bounds = xml_property('bounds', bbox) writers = dict(name=write_string('name'), styles=_write_styles, layers=_write_layers, bounds=write_bbox('bounds')) def __str__(self): return '' % self.name __repr__ = __str__ class UnsavedLayerGroup(LayerGroup): save_method = 'POST' def __init__(self, catalog, name, layers, styles, bounds): super(UnsavedLayerGroup, self).__init__(catalog, name) self.dirty.update(name=name, layers=layers, styles=styles, bounds=bounds) @property def href(self): return '%s/layergroups?name=%s' % (self.catalog.service_url, self.name)