import sys
import types
from gunicorn.workers.base import Worker
from gunicorn.glogging import Logger
from meinheld import server
from meinheld.mlogging import _access, _error
import os

def is_py3():
    return sys.hexversion >=  0x3000000

if not is_py3():


    class MeinheldWorker(Worker):

        def __init__(self, *args, **kwargs):
            Worker.__init__(self, *args, **kwargs)
            Logger.access = _access
            Logger.error = _error

            server.set_access_logger(self.log)
            server.set_error_logger(self.log)
        
        def watchdog(self):
            self.notify()

            if self.ppid != os.getppid():
                self.log.info("Parent changed, shutting down: %s" % self)
                server.stop(int(self.timeout))

        def run(self):
            
            if hasattr(self, "sockets"):
                fds = [s.fileno() for s in self.sockets]
            else:
                fds = [self.socket.fileno()]

            server.set_keepalive(self.cfg.keepalive)
            server.set_picoev_max_fd(self.cfg.worker_connections)
            
            server.set_fastwatchdog(self.tmp.fileno(), self.ppid, int(self.timeout))
            #server.set_watchdog(self.watchdog)
            
            server.set_listen_socket(fds)
            server.run(self.wsgi)

        def handle_quit(self, sig, frame):
            server.stop(int(self.timeout))

        def handle_exit(self, sig, frame):
            server.stop()
            sys.exit(0)

