Source code for geowatchutil.codec.geowatch_codec_wfs

from geowatchutil.codec.geowatch_codec_geojson import GeoWatchCodecGeoJSON
from geowatchutil.base import GeoWatchError


[docs]class GeoWatchCodecWFS(GeoWatchCodecGeoJSON): def _build_transaction(self, default_featuretype, messages): t = '<?xml version="1.0" encoding="UTF-8"?>\n' t = t + '<wfs:Transaction xmlns:geonode="http://www.geonode.org/" xmlns:wfs="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" service= "WFS" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">\n' # noqa for message in messages: ft = None data = None if 'metadata' in message: ft = message['metadata'].get('featuretype', default_featuretype) data = message['data'] else: ft = default_featuretype data = message if ft and data: t = t + ' <wfs:Insert>\n' if 'features' in data: for f in data['features']: t = t + ' <'+ft+">\n" for k in f['properties']: if f['properties'][k]: t = t + ' <'+k+'>'+str(f['properties'][k])+'</'+k+'>\n' t = t + ' <'+f['geometry_name']+'>\n' if f['geometry']['type'] == "Point": t = t + ' <gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#4326"><gml:coordinates decimal="." cs="," ts=" ">'+(str(f['geometry']['coordinates'][0])+","+str(f['geometry']['coordinates'][1]))+'</gml:coordinates></gml:Point>\n' # noqa t = t + ' </'+f['geometry_name']+'>\n' t = t + ' </'+ft+">\n" t = t + ' </wfs:Insert>\n' t = t + '</wfs:Transaction>' return t
[docs] def encode(self, message, **kwargs): """ Encode message for sending via channel """ return self._build_transaction(kwargs.get('topic', None), [message])
[docs] def decode(self, message): """ Decode message received via channel """ raise GeoWatchError("Cannot decode wfs messages.")
[docs] def pack(self, messages, **kwargs): """ pack messages for store """ which = kwargs.get('which', None) which_index = kwargs.get('which_index', 0) key = kwargs.get('key', None) if which == "first": return self._build_transaction(key, messages[:1]) elif which == "last": return self._build_transaction(key, messages[-1:]) elif which == "index": return self._build_transaction(key, messages[which_index:(which_index+1)]) else: return self._build_transaction(key, messages)
[docs] def unpack(self, data): """ unpack data from store into messages """ raise GeoWatchError("Cannot unpack wfs messages")
def __init__(self, channel=None): super(GeoWatchCodecWFS, self).__init__(channel=channel, content_type="application/xml")