Esempio n. 1
0
    def __call__(self, apacheReq):
        try:
            reqparams = util.FieldStorage(apacheReq, keep_blank_values=1)
            if not reqparams:
                eh = ExceptionHandler130(self.debug)
                response = eh.getresponse(reqparams)
                apacheReq.content_type = response.content_type
            else:
                reqparams = lowerparams(reqparams)
                port = apacheReq.connection.local_addr[1]
                onlineresource = 'http://%s:%s%s?' % (
                    apacheReq.hostname, port,
                    apacheReq.subprocess_env['SCRIPT_NAME'])
                if not reqparams.has_key('request'):
                    raise OGCException('Missing Request parameter.')
                request = reqparams['request']
                del reqparams['request']
                if request == 'GetCapabilities' and not reqparams.has_key(
                        'service'):
                    raise OGCException('Missing service parameter.')
                if request in ['GetMap', 'GetFeatureInfo']:
                    service = 'WMS'
                else:
                    service = reqparams['service']
                if reqparams.has_key('service'):
                    del reqparams['service']
                try:
                    ogcserver = __import__('ogcserver.' + service)
                except:
                    raise OGCException('Unsupported service "%s".' % service)
                ServiceHandlerFactory = getattr(ogcserver,
                                                service).ServiceHandlerFactory
                servicehandler = ServiceHandlerFactory(
                    self.conf, self.mapfactory, onlineresource,
                    reqparams.get('version', None))
                if reqparams.has_key('version'):
                    del reqparams['version']
                if request not in servicehandler.SERVICE_PARAMS.keys():
                    raise OGCException(
                        'Operation "%s" not supported.' % request,
                        'OperationNotSupported')

                # Get parameters and pass to WMSFactory in custom "setup" method
                ogcparams = servicehandler.processParameters(
                    request, reqparams)
                try:
                    requesthandler = getattr(servicehandler, request)
                except:
                    raise OGCException(
                        'Operation "%s" not supported.' % request,
                        'OperationNotSupported')

                response = requesthandler(ogcparams)
                apacheReq.content_type = response.content_type
                apacheReq.status = apache.HTTP_OK
        except Exception, E:
            return self.traceback(apacheReq, E)
Esempio n. 2
0
 def traceback(self, req):
     reqparams = lowerparams(req.params)
     version = reqparams.get('version', None)
     if not version:
         version = Version()
     else:
         version = Version(version)
     if version >= '1.3.0':
         eh = ExceptionHandler130(self.debug)
     else:
         eh = ExceptionHandler111(self.debug)
     response = eh.getresponse(reqparams)
     req.set_header('Content-Type', response.content_type)
     req.set_header('Content-Length', str(len(response.content)))
     req.write(response.content)
Esempio n. 3
0
 def traceback(self, apacheReq, E):
     reqparams = lowerparams(util.FieldStorage(apacheReq))
     version = reqparams.get('version', None)
     if not version:
         version = Version()
     else:
         version = Version(version)
     if version >= '1.3.0':
         eh = ExceptionHandler130(self.debug)
     else:
         eh = ExceptionHandler111(self.debug)
     response = eh.getresponse(reqparams)
     apacheReq.content_type = response.content_type
     apacheReq.headers_out.add('Content-Length', str(len(response.content)))
     apacheReq.send_http_header()
     apacheReq.write(response.content)
     return apache.OK
Esempio n. 4
0
    def __call__(self, environ, start_response):
        reqparams = {}
        base = True
        for key, value in parse_qs(environ['QUERY_STRING'], True).items():
            reqparams[key.lower()] = value[0]
            base = False

        if self.conf.has_option_with_value('service', 'baseurl'):
            onlineresource = '%s' % self.conf.get('service', 'baseurl')
        else:
            # if there is no baseurl in the config file try to guess a valid one
            onlineresource = 'http://%s%s%s?' % (environ['HTTP_HOST'], environ['SCRIPT_NAME'], environ['PATH_INFO'])

        try:
            if not reqparams.has_key('request'):
                raise OGCException('Missing request parameter.')
            request = reqparams['request']
            del reqparams['request']
            if request == 'GetCapabilities' and not reqparams.has_key('service'):
                raise OGCException('Missing service parameter.')
            if request in ['GetMap', 'GetFeatureInfo']:
                service = 'WMS'
            else:
                try:
                    service = reqparams['service']
                except:
                    service = 'WMS'
                    request = 'GetCapabilities'
            if reqparams.has_key('service'):
                del reqparams['service']
            try:
                ogcserver = do_import('ogcserver')
            except:
                raise OGCException('Unsupported service "%s".' % service)
            ServiceHandlerFactory = getattr(ogcserver, service).ServiceHandlerFactory
            servicehandler = ServiceHandlerFactory(self.conf, self.mapfactory, onlineresource, reqparams.get('version', None))
            if reqparams.has_key('version'):
                del reqparams['version']
            if request not in servicehandler.SERVICE_PARAMS.keys():
                raise OGCException('Operation "%s" not supported.' % request, 'OperationNotSupported')
            ogcparams = servicehandler.processParameters(request, reqparams)
            try:
                requesthandler = getattr(servicehandler, request)
            except:
                raise OGCException('Operation "%s" not supported.' % request, 'OperationNotSupported')

            # stick the user agent in the request params
            # so that we can add ugly hacks for specific buggy clients
            ogcparams['HTTP_USER_AGENT'] = environ.get('HTTP_USER_AGENT', '')

            response = requesthandler(ogcparams)
        except:
            version = reqparams.get('version', None)
            if not version:
                version = Version()
            else:
                version = Version(version)
            if version >= '1.3.0':
                eh = ExceptionHandler130(self.debug,base,self.home_html)
            else:
                eh = ExceptionHandler111(self.debug,base,self.home_html)
            response = eh.getresponse(reqparams)
        response_headers = [('Content-Type', response.content_type),('Content-Length', str(len(response.content)))]
        if self.max_age:
            response_headers.append(('Cache-Control', self.max_age))
        start_response('200 OK', response_headers)
        yield response.content
Esempio n. 5
0
    def process(self, req):
        base = False
        if not req.params:
            base = True

        reqparams = lowerparams(req.params)

        if self.conf.has_option_with_value('service', 'baseurl'):
            onlineresource = '%s' % self.conf.get('service', 'baseurl')
        else:
            # if there is no baseurl in the config file try to guess a valid one
            onlineresource = 'http://%s%s?' % (req.environ['HTTP_HOST'],
                                               req.environ['SCRIPT_NAME'])

        try:
            if not reqparams.has_key('request'):
                raise OGCException('Missing request parameter.')
            request = reqparams['request']
            del reqparams['request']
            if request == 'GetCapabilities' and not reqparams.has_key(
                    'service'):
                raise OGCException('Missing service parameter.')
            if request in ['GetMap', 'GetFeatureInfo']:
                service = 'WMS'
            else:
                service = reqparams['service']
            if reqparams.has_key('service'):
                del reqparams['service']
            try:
                ogcserver = __import__('ogcserver.' + service)
            except:
                raise OGCException('Unsupported service "%s".' % service)
            ServiceHandlerFactory = getattr(ogcserver,
                                            service).ServiceHandlerFactory
            servicehandler = ServiceHandlerFactory(
                self.conf, self.mapfactory, onlineresource,
                reqparams.get('version', None))
            if reqparams.has_key('version'):
                del reqparams['version']
            if request not in servicehandler.SERVICE_PARAMS.keys():
                raise OGCException('Operation "%s" not supported.' % request,
                                   'OperationNotSupported')
            ogcparams = servicehandler.processParameters(request, reqparams)
            try:
                requesthandler = getattr(servicehandler, request)
            except:
                raise OGCException('Operation "%s" not supported.' % request,
                                   'OperationNotSupported')

            # stick the user agent in the request params
            # so that we can add ugly hacks for specific buggy clients
            ogcparams['HTTP_USER_AGENT'] = req.environ['HTTP_USER_AGENT']

            response = requesthandler(ogcparams)
        except:
            version = reqparams.get('version', None)
            if not version:
                version = Version()
            else:
                version = Version(version)
            if version >= '1.3.0':
                eh = ExceptionHandler130(self.debug, base, self.home_html)
            else:
                eh = ExceptionHandler111(self.debug, base, self.home_html)
            response = eh.getresponse(reqparams)

        req.set_header('Content-Type', response.content_type)
        req.set_header('Content-Length', str(len(response.content)))
        req.write(response.content)
Esempio n. 6
0
    def request_mapnik(self, env, mapdata, que=None):
        """
        render on mapnik request
        """
        if self.mapnik_ver >= 300000:
            map_obj = mapdata
        else:
            map_obj = self.ogcserver_constructor(mapdata)
        reqparams = {}
        base = True
        for key, value in parse_qs(env['QUERY_STRING'], True).items():
            reqparams[key.lower()] = value[0]
            base = False

        if self.ogcconf.has_option_with_value('service', 'baseurl'):
            onlineresource = '%s' % self.ogcconf.get('service', 'baseurl')
        else:
            onlineresource = 'http://%s%s%s?' % (
                env['HTTP_HOST'], 
                env['SCRIPT_NAME'], 
                env['PATH_INFO']
            )

        try:
            if not reqparams.has_key('request'):
                raise OGCException('Missing request parameter.')
            request = reqparams['request']
            del reqparams['request']
            if request == 'GetCapabilities' and not reqparams.has_key('service'):
                raise OGCException('Missing service parameter.')
            if request in ['GetMap', 'GetFeatureInfo']:
                service = 'WMS'
            else:
                try:
                    service = reqparams['service']
                except:
                    service = 'WMS'
                    request = 'GetCapabilities'
            if reqparams.has_key('service'):
                del reqparams['service']
            ServiceHandlerFactory = getattr(self.ogcserver, service).ServiceHandlerFactory
            servicehandler = ServiceHandlerFactory(
                self.ogcconf, 
                map_obj, 
                onlineresource, 
                reqparams.get('version', None)
            )
            if reqparams.has_key('version'):
                del reqparams['version']
            if request not in servicehandler.SERVICE_PARAMS.keys():
                raise OGCException(
                    'Operation "%s" not supported.' % request, 
                    'OperationNotSupported'
                )
            ogcparams = servicehandler.processParameters(request, reqparams)
            try:
                requesthandler = getattr(servicehandler, request)
            except:
                raise OGCException(
                    'Operation "%s" not supported.' % request, 
                    'OperationNotSupported'
                )

            ogcparams['HTTP_USER_AGENT'] = env.get('HTTP_USER_AGENT', '')

            response = requesthandler(ogcparams)
        except:
            version = reqparams.get('version', None)
            if not version:
                version = Version()
            else:
                version = Version(version)
            if version >= '1.3.0':
                eh = ExceptionHandler130(self.debug,base,self.home_html)
            else:
                eh = ExceptionHandler111(self.debug,base,self.home_html)
            response = eh.getresponse(reqparams)
            
        out_response = (response.content_type, response.content)
        if que is None:
            return out_response
        else:
            que.put(out_response)