コード例 #1
0
ファイル: WmsRelay.py プロジェクト: monoid/WMS-Mash
    def process(self):
        """ TODO: parsing request
        0. Traslate params to canonic form
        1. Is it a WMS? (SERVICE=WMS, VERSION=1.x)
        2. Check type (REQUEST=GetMap etc)
        3. Create an appropriate handler.
        4. Handler gets data from database and remote servers.
        """

        try:
            parsed = urlparse.urlparse(self.uri)
            qs = Wms.wmsParseQuery(parsed[4])

            layerset = qs['SET'] # TODO: parse URL instead
            
            if self.ensureWms(qs):
                reqtype = qs['REQUEST'].upper()
                if reqtype == 'GETCAPABILITIES':
                    return self.handleGetCapabilities(qs)
                elif reqtype == 'GETMAP':
                    return self.handleGetMap(qs)
                elif reqtype == 'GETFEATUREINFO':
                    return self.handleGetFeatureInfo(qs)
                else:
                    self.reportWmsError("Sorry, not implemented yet.", "NotImplemented")
            else:
                self.reportWmsError("Invalid WMS request", "InvalidRequest")
        except Exception as ex:
            self.reportWmsError("Internal error: %s %s" % (type(ex), ex), "InternalError")
コード例 #2
0
ファイル: handlers.py プロジェクト: monoid/WMS-Mash
    def connectionMade(self):
        # s.f.remote is either path or full url if it is proxy connection
        parsed = urlparse.urlparse(self.factory.remote)
        self._params = self.factory.params.copy()
        del self._params['SET']
        host = parsed.netloc # hostname:port
        login = self.factory.login
        password = self.factory.password

        parsed_list = list(parsed)
        # TODO: this should be handled carefully: we have to merge remote's
        # params, not overwrite
        parsed_list[4] = Wms.wmsBuildQuery(self._params)

        self.sendCommand('GET', urlparse.urlunparse(parsed_list))
        self.sendHeader('Host', host)
        self.sendHeader('User-Agent', SERVER_AGENT)
        if login and password:
            b64str = base64.encodestring(login+':'+password)[:-1]
            self.sendHeader('Authorization', 'Basic ' + b64str)
        self.endHeaders()
        self.factory.connectionMade()
コード例 #3
0
ファイル: WmsRelay.py プロジェクト: monoid/WMS-Mash
 def reportWmsError(self, errorMessage, code):
     xml = Wms.wmsErrorXmlString(errorMessage, code)
     self.setHeader('Content-type', 'application/vnd.ogc.se_xml')
     self.setHeader('Length', str(len(xml)))
     self.write(xml)
     self.finish()