def describe_xml(self): """Generate DescribeProcess element """ default_format_el = self.supported_formats[0].describe_xml() supported_format_elements = [f.describe_xml() for f in self.supported_formats] doc = E.Output( OWS.Identifier(self.identifier), OWS.Title(self.title) ) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) for m in self.metadata: doc.append(OWS.Metadata(dict(m))) doc.append( E.ComplexOutput( E.Default(default_format_el), E.Supported(*supported_format_elements) ) ) return doc
def execute_xml(self): doc = WPS.Output( OWS.Identifier(self.identifier), OWS.Title(self.title) ) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) data_doc = WPS.Data() bbox_data_doc = OWS.BoundingBox() bbox_data_doc.attrib['crs'] = self.crs bbox_data_doc.attrib['dimensions'] = str(self.dimensions) bbox_data_doc.append(OWS.LowerCorner('{0[0]} {0[1]}'.format(self.data))) bbox_data_doc.append(OWS.UpperCorner('{0[2]} {0[3]}'.format(self.data))) data_doc.append(bbox_data_doc) doc.append(data_doc) return doc
def describe_xml(self): doc = E.Output( OWS.Identifier(self.identifier), OWS.Title(self.title) ) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) for m in self.metadata: doc.append(OWS.Metadata(dict(m))) bbox_data_doc = E.BoundingBoxOutput() doc.append(bbox_data_doc) default_doc = E.Default() default_doc.append(E.CRS(self.crss[0])) supported_doc = E.Supported() for c in self.crss: supported_doc.append(E.CRS(c)) bbox_data_doc.append(default_doc) bbox_data_doc.append(supported_doc) return doc
def execute_xml(self): """Render Execute response XML node :return: node :rtype: ElementMaker """ node = None if self.as_reference: node = self._execute_xml_reference() else: node = self._execute_xml_data() doc = WPS.Input( OWS.Identifier(self.identifier), OWS.Title(self.title) ) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) doc.append(node) return doc
def describe_xml(self): """Return Describe process element """ default_format_el = self.supported_formats[0].describe_xml() supported_format_elements = [f.describe_xml() for f in self.supported_formats] doc = E.Input( OWS.Identifier(self.identifier), OWS.Title(self.title) ) doc.attrib['minOccurs'] = str(self.min_occurs) doc.attrib['maxOccurs'] = str(self.max_occurs) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) for m in self.metadata: doc.append(OWS.Metadata(dict(m))) doc.append( E.ComplexData( E.Default(default_format_el), E.Supported(*supported_format_elements) ) ) return doc
def describe_xml(self): input_elements = [i.describe_xml() for i in self.inputs] output_elements = [i.describe_xml() for i in self.outputs] doc = E.ProcessDescription(OWS.Identifier(self.identifier), OWS.Title(self.title)) doc.attrib[ '{http://www.opengis.net/wps/1.0.0}processVersion'] = self.version if self.store_supported == 'true': doc.attrib['storeSupported'] = self.store_supported if self.status_supported == 'true': doc.attrib['statusSupported'] = self.status_supported if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) for m in self.metadata: doc.append(OWS.Metadata(dict(m))) for p in self.profile: doc.append(WPS.Profile(p)) if input_elements: doc.append(E.DataInputs(*input_elements)) doc.append(E.ProcessOutputs(*output_elements)) return doc
def describe_xml(self): """Return DescribeProcess Output element """ doc = E.Input( OWS.Identifier(self.identifier), OWS.Title(self.title) ) doc.attrib['minOccurs'] = str(self.min_occurs) doc.attrib['maxOccurs'] = str(self.max_occurs) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) for m in self.metadata: doc.append(OWS.Metadata(dict(m))) literal_data_doc = E.LiteralData() if self.data_type: data_type = OWS.DataType(self.data_type) data_type.attrib['{%s}reference' % NAMESPACES['ows']] = OGCTYPE[self.data_type] literal_data_doc.append(data_type) if self.uoms: default_uom_element = self.uoms[0].describe_xml() supported_uom_elements = [u.describe_xml() for u in self.uoms] literal_data_doc.append( E.UOMs( E.Default(default_uom_element), E.Supported(*supported_uom_elements) ) ) doc.append(literal_data_doc) # TODO: refer to table 29 and 30 if self.any_value: literal_data_doc.append(OWS.AnyValue()) else: literal_data_doc.append(self._describe_xml_allowedvalues()) # TODO: is default value handled correctly here? if self.data: literal_data_doc.append(E.DefaultValue(str(self.data))) return doc
def execute_xml_lineage(self): doc = WPS.Output( OWS.Identifier(self.identifier), OWS.Title(self.title) ) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) return doc
def capabilities_xml(self): doc = WPS.Process(OWS.Identifier(self.identifier), OWS.Title(self.title)) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) for m in self.metadata: doc.append(OWS.Metadata(dict(m))) if self.profile: doc.append(OWS.Profile(self.profile)) if self.version != 'None': doc.attrib[ '{http://www.opengis.net/wps/1.0.0}processVersion'] = self.version else: doc.attrib[ '{http://www.opengis.net/wps/1.0.0}processVersion'] = 'undefined' return doc
def execute_xml(self): """ :return: execute response element """ node = self._execute_xml_data() doc = WPS.Input( OWS.Identifier(self.identifier), OWS.Title(self.title) ) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) doc.append(node) return doc
def describe_xml(self): doc = E.Output( OWS.Identifier(self.identifier), OWS.Title(self.title) ) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) for m in self.metadata: doc.append(OWS.Metadata(dict(m))) literal_data_doc = E.LiteralOutput() if self.data_type: data_type = OWS.DataType(self.data_type) data_type.attrib['{%s}reference' % NAMESPACES['ows']] = OGCTYPE[self.data_type] literal_data_doc.append(data_type) if self.uoms: default_uom_element = self.uom.describe_xml() supported_uom_elements = [u.describe_xml() for u in self.uoms] literal_data_doc.append( E.UOMs( E.Default(default_uom_element), E.Supported(*supported_uom_elements) ) ) doc.append(literal_data_doc) return doc
def execute_xml(self): doc = WPS.Output( OWS.Identifier(self.identifier), OWS.Title(self.title) ) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) data_doc = WPS.Data() literal_data_doc = WPS.LiteralData(text_type(self.data)) literal_data_doc.attrib['dataType'] = OGCTYPE[self.data_type] if self.uom: literal_data_doc.attrib['uom'] = self.uom.execute_attribute() data_doc.append(literal_data_doc) doc.append(data_doc) return doc
def describe_xml(self): """ :return: describeprocess response xml element """ doc = E.Input( OWS.Identifier(self.identifier), OWS.Title(self.title) ) doc.attrib['minOccurs'] = str(self.min_occurs) doc.attrib['maxOccurs'] = str(self.max_occurs) if self.abstract: doc.append(OWS.Abstract(self.abstract)) if self.keywords: kws = map(OWS.Keyword, self.keywords) doc.append(OWS.Keywords(*kws)) for m in self.metadata: doc.append(OWS.Metadata(dict(m))) bbox_data_doc = E.BoundingBoxData() doc.append(bbox_data_doc) default_doc = E.Default() default_doc.append(E.CRS(self.crss[0])) supported_doc = E.Supported() for c in self.crss: supported_doc.append(E.CRS(c)) bbox_data_doc.append(default_doc) bbox_data_doc.append(supported_doc) return doc
def get_capabilities(self): process_elements = [p.capabilities_xml() for p in self.processes.values()] doc = WPS.Capabilities() doc.attrib['service'] = 'WPS' doc.attrib['version'] = '1.0.0' doc.attrib['{http://www.w3.org/XML/1998/namespace}lang'] = 'en-CA' doc.attrib['{http://www.w3.org/2001/XMLSchema-instance}schemaLocation'] = 'http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsDescribeProcess_response.xsd' # TODO: check Table 7 in OGC 05-007r7 doc.attrib['updateSequence'] = '1' # Service Identification service_ident_doc = OWS.ServiceIdentification( OWS.Title(config.get_config_value('wps', 'title')) ) if config.get_config_value('wps', 'abstract'): service_ident_doc.append(OWS.Abstract(config.get_config_value('wps', 'abstract'))) if config.get_config_value('wps', 'keywords'): keywords_doc = OWS.Keywords() for k in config.get_config_value('wps', 'keywords').split(','): if k: keywords_doc.append(OWS.Keyword(k)) service_ident_doc.append(keywords_doc) service_ident_doc.append(OWS.ServiceType('WPS')) for v in config.get_config_value('wps', 'version').split(','): service_ident_doc.append(OWS.ServiceTypeVersion(v)) service_ident_doc.append(OWS.Fees(config.get_config_value('wps', 'fees'))) for con in config.get_config_value('wps', 'constraints').split(','): service_ident_doc.append(OWS.AccessConstraints(con)) if config.get_config_value('wps', 'profile'): service_ident_doc.append(OWS.Profile(config.get_config_value('wps', 'profile'))) doc.append(service_ident_doc) # Service Provider service_prov_doc = OWS.ServiceProvider(OWS.ProviderName(config.get_config_value('provider', 'providerName'))) if config.get_config_value('provider', 'providerSite'): service_prov_doc.append(OWS.ProviderSite( {'{http://www.w3.org/1999/xlink}href': config.get_config_value('provider', 'providerSite')}) ) # Service Contact service_contact_doc = OWS.ServiceContact() # Add Contact information only if a name is set if config.get_config_value('provider', 'individualName'): service_contact_doc.append(OWS.IndividualName(config.get_config_value('provider', 'individualName'))) if config.get_config_value('provider', 'positionName'): service_contact_doc.append(OWS.PositionName(config.get_config_value('provider', 'positionName'))) contact_info_doc = OWS.ContactInfo() phone_doc = OWS.Phone() if config.get_config_value('provider', 'phoneVoice'): phone_doc.append(OWS.Voice(config.get_config_value('provider', 'phoneVoice'))) if config.get_config_value('provider', 'phoneFacsimile'): phone_doc.append(OWS.Facsimile(config.get_config_value('provider', 'phoneFacsimile'))) # Add Phone if not empty if len(phone_doc): contact_info_doc.append(phone_doc) address_doc = OWS.Address() if config.get_config_value('provider', 'deliveryPoint'): address_doc.append(OWS.DeliveryPoint(config.get_config_value('provider', 'deliveryPoint'))) if config.get_config_value('provider', 'city'): address_doc.append(OWS.City(config.get_config_value('provider', 'city'))) if config.get_config_value('provider', 'postalCode'): address_doc.append(OWS.PostalCode(config.get_config_value('provider', 'postalCode'))) if config.get_config_value('provider', 'country'): address_doc.append(OWS.Country(config.get_config_value('provider', 'country'))) if config.get_config_value('provider', 'electronicalMailAddress'): address_doc.append( OWS.ElectronicMailAddress(config.get_config_value('provider', 'electronicalMailAddress')) ) # Add Address if not empty if len(address_doc): contact_info_doc.append(address_doc) if config.get_config_value('provider', 'onlineResource'): contact_info_doc.append(OWS.OnlineResource( {'{http://www.w3.org/1999/xlink}href': config.get_config_value('provider', 'onlineResource')}) ) if config.get_config_value('provider', 'hoursOfService'): contact_info_doc.append(OWS.HoursOfService(config.get_config_value('provider', 'hoursOfService'))) if config.get_config_value('provider', 'contactInstructions'): contact_info_doc.append(OWS.ContactInstructions(config.get_config_value('provider', 'contactInstructions'))) # Add Contact information if not empty if len(contact_info_doc): service_contact_doc.append(contact_info_doc) if config.get_config_value('provider', 'role'): service_contact_doc.append(OWS.Role(config.get_config_value('provider', 'role'))) # Add Service Contact only if ProviderName and PositionName are set if len(service_contact_doc): service_prov_doc.append(service_contact_doc) doc.append(service_prov_doc) # Operations Metadata operations_metadata_doc = OWS.OperationsMetadata( OWS.Operation( OWS.DCP( OWS.HTTP( OWS.Get({'{http://www.w3.org/1999/xlink}href': '%s:%s%s' % ( config.get_config_value('wps', 'serveraddress'), config.get_config_value('wps', 'serverport'), '/wps?' )}), OWS.Post({'{http://www.w3.org/1999/xlink}href': '%s:%s%s' % ( config.get_config_value('wps', 'serveraddress'), config.get_config_value('wps', 'serverport'), '/wps' )}) ) ), name="GetCapabilities" ), OWS.Operation( OWS.DCP( OWS.HTTP( OWS.Get({'{http://www.w3.org/1999/xlink}href': '%s:%s%s' % ( config.get_config_value('wps', 'serveraddress'), config.get_config_value('wps', 'serverport'), '/wps?' )}), OWS.Post({'{http://www.w3.org/1999/xlink}href': '%s:%s%s' % ( config.get_config_value('wps', 'serveraddress'), config.get_config_value('wps', 'serverport'), '/wps' )}) ) ), name="DescribeProcess" ), OWS.Operation( OWS.DCP( OWS.HTTP( OWS.Get({'{http://www.w3.org/1999/xlink}href': '%s:%s%s' % ( config.get_config_value('wps', 'serveraddress'), config.get_config_value('wps', 'serverport'), '/wps?' )}), OWS.Post({'{http://www.w3.org/1999/xlink}href': '%s:%s%s' % ( config.get_config_value('wps', 'serveraddress'), config.get_config_value('wps', 'serverport'), '/wps' )}) ) ), name="Execute" ) ) doc.append(operations_metadata_doc) doc.append(WPS.ProcessOfferings(*process_elements)) languages = config.get_config_value('wps', 'lang').split(',') languages_doc = WPS.Languages( WPS.Default( OWS.Language(languages[0]) ) ) lang_supported_doc = WPS.Supported() for l in languages: lang_supported_doc.append(OWS.Language(l)) languages_doc.append(lang_supported_doc) doc.append(languages_doc) doc.append(WPS.WSDL({'{http://www.w3.org/1999/xlink}href': '%s:%s%s' % ( config.get_config_value('wps', 'serveraddress'), config.get_config_value('wps', 'serverport'), '/wps?WSDL') })) return xml_response(doc)
def _construct_doc(self): process_elements = [ p.capabilities_xml() for p in self.processes.values() ] doc = WPS.Capabilities() doc.attrib['service'] = 'WPS' doc.attrib['version'] = '1.0.0' doc.attrib['{http://www.w3.org/XML/1998/namespace}lang'] = 'en-US' doc.attrib['{http://www.w3.org/2001/XMLSchema-instance}schemaLocation'] = \ 'http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsGetCapabilities_response.xsd' # TODO: check Table 7 in OGC 05-007r7 doc.attrib['updateSequence'] = '1' # Service Identification service_ident_doc = OWS.ServiceIdentification( OWS.Title( config.get_config_value('metadata:main', 'identification_title'))) if config.get_config_value('metadata:main', 'identification_abstract'): service_ident_doc.append( OWS.Abstract( config.get_config_value('metadata:main', 'identification_abstract'))) if config.get_config_value('metadata:main', 'identification_keywords'): keywords_doc = OWS.Keywords() for k in config.get_config_value( 'metadata:main', 'identification_keywords').split(','): if k: keywords_doc.append(OWS.Keyword(k)) service_ident_doc.append(keywords_doc) if config.get_config_value('metadata:main', 'identification_keywords_type'): keywords_type = OWS.Type( config.get_config_value('metadata:main', 'identification_keywords_type')) keywords_type.attrib['codeSpace'] = 'ISOTC211/19115' keywords_doc.append(keywords_type) service_ident_doc.append(OWS.ServiceType('WPS')) # TODO: set proper version support service_ident_doc.append(OWS.ServiceTypeVersion('1.0.0')) service_ident_doc.append( OWS.Fees( config.get_config_value('metadata:main', 'identification_fees'))) for con in config.get_config_value( 'metadata:main', 'identification_accessconstraints').split(','): service_ident_doc.append(OWS.AccessConstraints(con)) if config.get_config_value('metadata:main', 'identification_profile'): service_ident_doc.append( OWS.Profile( config.get_config_value('metadata:main', 'identification_profile'))) doc.append(service_ident_doc) # Service Provider service_prov_doc = OWS.ServiceProvider( OWS.ProviderName( config.get_config_value('metadata:main', 'provider_name'))) if config.get_config_value('metadata:main', 'provider_url'): service_prov_doc.append( OWS.ProviderSite({ '{http://www.w3.org/1999/xlink}href': config.get_config_value('metadata:main', 'provider_url') })) # Service Contact service_contact_doc = OWS.ServiceContact() # Add Contact information only if a name is set if config.get_config_value('metadata:main', 'contact_name'): service_contact_doc.append( OWS.IndividualName( config.get_config_value('metadata:main', 'contact_name'))) if config.get_config_value('metadata:main', 'contact_position'): service_contact_doc.append( OWS.PositionName( config.get_config_value('metadata:main', 'contact_position'))) contact_info_doc = OWS.ContactInfo() phone_doc = OWS.Phone() if config.get_config_value('metadata:main', 'contact_phone'): phone_doc.append( OWS.Voice( config.get_config_value('metadata:main', 'contact_phone'))) if config.get_config_value('metadata:main', 'contaact_fax'): phone_doc.append( OWS.Facsimile( config.get_config_value('metadata:main', 'contact_fax'))) # Add Phone if not empty if len(phone_doc): contact_info_doc.append(phone_doc) address_doc = OWS.Address() if config.get_config_value('metadata:main', 'deliveryPoint'): address_doc.append( OWS.DeliveryPoint( config.get_config_value('metadata:main', 'contact_address'))) if config.get_config_value('metadata:main', 'city'): address_doc.append( OWS.City( config.get_config_value('metadata:main', 'contact_city'))) if config.get_config_value('metadata:main', 'contact_stateorprovince'): address_doc.append( OWS.AdministrativeArea( config.get_config_value('metadata:main', 'contact_stateorprovince'))) if config.get_config_value('metadata:main', 'contact_postalcode'): address_doc.append( OWS.PostalCode( config.get_config_value('metadata:main', 'contact_postalcode'))) if config.get_config_value('metadata:main', 'contact_country'): address_doc.append( OWS.Country( config.get_config_value('metadata:main', 'contact_country'))) if config.get_config_value('metadata:main', 'contact_email'): address_doc.append( OWS.ElectronicMailAddress( config.get_config_value('metadata:main', 'contact_email'))) # Add Address if not empty if len(address_doc): contact_info_doc.append(address_doc) if config.get_config_value('metadata:main', 'contact_url'): contact_info_doc.append( OWS.OnlineResource({ '{http://www.w3.org/1999/xlink}href': config.get_config_value('metadata:main', 'contact_url') })) if config.get_config_value('metadata:main', 'contact_hours'): contact_info_doc.append( OWS.HoursOfService( config.get_config_value('metadata:main', 'contact_hours'))) if config.get_config_value('metadata:main', 'contact_instructions'): contact_info_doc.append( OWS.ContactInstructions( config.get_config_value('metadata:main', 'contact_instructions'))) # Add Contact information if not empty if len(contact_info_doc): service_contact_doc.append(contact_info_doc) if config.get_config_value('metadata:main', 'contact_role'): service_contact_doc.append( OWS.Role( config.get_config_value('metadata:main', 'contact_role'))) # Add Service Contact only if ProviderName and PositionName are set if len(service_contact_doc): service_prov_doc.append(service_contact_doc) doc.append(service_prov_doc) server_href = { '{http://www.w3.org/1999/xlink}href': config.get_config_value('server', 'url') } # Operations Metadata operations_metadata_doc = OWS.OperationsMetadata( OWS.Operation(OWS.DCP( OWS.HTTP(OWS.Get(server_href), OWS.Post(server_href))), name="GetCapabilities"), OWS.Operation(OWS.DCP( OWS.HTTP(OWS.Get(server_href), OWS.Post(server_href))), name="DescribeProcess"), OWS.Operation(OWS.DCP( OWS.HTTP(OWS.Get(server_href), OWS.Post(server_href))), name="Execute")) doc.append(operations_metadata_doc) doc.append(WPS.ProcessOfferings(*process_elements)) languages = config.get_config_value('server', 'language').split(',') languages_doc = WPS.Languages(WPS.Default(OWS.Language(languages[0]))) lang_supported_doc = WPS.Supported() for l in languages: lang_supported_doc.append(OWS.Language(l)) languages_doc.append(lang_supported_doc) doc.append(languages_doc) return doc