
import os
import sys
import copy
from wsgiref.simple_server import make_server

import mapscript


########################################################################
class PubMapWEB:

    #----------------------------------------------------------------------
    def __init__(self, mapfile, port=3007, host='0.0.0.0'):
        self.wsgi_host = host
        self.wsgi_port = port
        self.mapscript_obj = mapscript.mapObj(mapfile)
    
    def application(self, env, start_response):
    
        request = mapscript.OWSRequest()
        mapscript.msIO_installStdoutToBuffer()
        request.loadParamsFromURL(env['QUERY_STRING'])
        rec_obj = self.mapscript_obj.clone()
    
        status_id = rec_obj.OWSDispatch(request)
        
        content_type = mapscript.msIO_stripStdoutBufferContentType()
        result = mapscript.msIO_getStdoutBufferBytes()
        mapscript.msIO_resetHandlers()

        # status:
        if status_id == mapscript.MS_SUCCESS:
            status = '200 OK'
        else:
            status = '400 Bad request'

        start_response(status, [('Content-type', str(content_type))])
        return [result]
    
    def wsgi(self):
        httpd = make_server(
            self.wsgi_host,
            self.wsgi_port,
            self.application
        )
        print('Serving on port %d...' % self.wsgi_port)
        httpd.serve_forever()
        
    def __call__(self):
        self.wsgi()
        

if __name__ == "__main__":
    map_web = PubMapWEB(sys.argv[1])
    map_web.wsgi()
