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