Beispiel #1
0
    def describe(self, identifiers):
        if not identifiers:
            raise MissingParameterValue('', 'identifier')
        
        identifier_elements = []
        # 'all' keyword means all processes
        if 'all' in (ident.lower() for ident in identifiers):
            for process in self.processes:
                try:
                    identifier_elements.append(self.processes[process].describe_xml())
                except Exception as e:
                    raise NoApplicableCode(e)
        else:
            for identifier in identifiers:
                try:
                    process = self.processes[identifier]
                except KeyError:
                    raise InvalidParameterValue("Unknown process %r" % identifier, "identifier")
                else:
                    try:
                        identifier_elements.append(process.describe_xml())
                    except Exception as e:
                        raise NoApplicableCode(e)

        doc = WPS.ProcessDescriptions(
            *identifier_elements
        )
        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'
        doc.attrib['service'] = 'WPS'
        doc.attrib['version'] = '1.0.0'
        doc.attrib['{http://www.w3.org/XML/1998/namespace}lang'] = 'en-CA'
        return xml_response(doc)
Beispiel #2
0
 def __call__(self, request):
     # This function must return a valid response.
     try:
         doc = self.get_response_doc()
         return xml_response(doc)
     except NoApplicableCode as e:
         return e
     except Exception as e:
         return NoApplicableCode(str(e))
Beispiel #3
0
 def __call__(self, request):
     # This function must return a valid response.
     try:
         doc = self.get_response_doc()
         return xml_response(doc)
     except NoApplicableCode as e:
         return e
     except Exception as e:
         return NoApplicableCode(str(e))
Beispiel #4
0
    def __call__(self, request):
        doc = None
        try:
            doc = self._construct_doc()
        except HTTPException as httpexp:
            raise httpexp
        except Exception as exp:
            raise NoApplicableCode(exp)

        return xml_response(doc)
Beispiel #5
0
    def __call__(self, request):
        doc = None
        try:
            doc = self._construct_doc()
        except HTTPException as httpexp:
            raise httpexp
        except Exception as exp:
            raise NoApplicableCode(exp)

        return xml_response(doc)
Beispiel #6
0
    def __call__(self, request):
        doc = None
        try:
            doc = self._construct_doc()
        except HTTPException as httpexp:
            raise httpexp
        except Exception as exp:
            raise NoApplicableCode(exp)

        if self.status >= STATUS.DONE_STATUS:
            self.process.clean()

        return xml_response(doc)
Beispiel #7
0
    def __call__(self, request):
        doc = None
        try:
            doc = self._construct_doc()
        except HTTPException as httpexp:
            raise httpexp
        except Exception as exp:
            raise NoApplicableCode(exp)

        if self.status >= STATUS.DONE_STATUS:
            self.process.clean()

        return xml_response(doc)
Beispiel #8
0
    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)
Beispiel #9
0
 def __call__(self, request):
     doc = self.get_response_doc()
     return xml_response(doc)
Beispiel #10
0
 def __call__(self, request):
     return xml_response(self._construct_doc())
Beispiel #11
0
    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-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)

        # Operations Metadata
        operations_metadata_doc = OWS.OperationsMetadata(
            OWS.Operation(
                OWS.DCP(
                    OWS.HTTP(
                        OWS.Get({"{http://www.w3.org/1999/xlink}href": config.get_config_value("server", "url")}),
                        OWS.Post({"{http://www.w3.org/1999/xlink}href": config.get_config_value("server", "url")}),
                    )
                ),
                name="GetCapabilities",
            ),
            OWS.Operation(
                OWS.DCP(
                    OWS.HTTP(
                        OWS.Get({"{http://www.w3.org/1999/xlink}href": config.get_config_value("server", "url")}),
                        OWS.Post({"{http://www.w3.org/1999/xlink}href": config.get_config_value("server", "url")}),
                    )
                ),
                name="DescribeProcess",
            ),
            OWS.Operation(
                OWS.DCP(
                    OWS.HTTP(
                        OWS.Get({"{http://www.w3.org/1999/xlink}href": config.get_config_value("server", "url")}),
                        OWS.Post({"{http://www.w3.org/1999/xlink}href": config.get_config_value("server", "url")}),
                    )
                ),
                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 xml_response(doc)
Beispiel #12
0
 def __call__(self, request):
     doc = self.get_response_doc()
     return xml_response(doc)