Beispiel #1
0
    def __init__(self, configuration=None, assembly=None):
        super(Runtime, self).__init__(assembly=assembly)
        self.mules = {}
        self.postforks = []
        self.signals = {}

        uwsgi.post_fork_hook = self.run_postforks

        for key in ('yaml', 'yml', 'json'):
            filename = uwsgi.opt.get(key)
            if filename:
                self.configure(filename)
                break
        else:
            raise RuntimeError()

        self.deploy()
        self.startup()

        self.dispatcher = MountDispatcher()
        for unit in self.assembly.collate(Mount):
            self.dispatcher.mount(unit)

        self._register_services(self.dispatcher)

        name = self.parameters.get('name')
        if name:
            self.register_ipython_console(name)
Beispiel #2
0
class Runtime(Runtime):
    def __init__(self, configuration=None, assembly=None):
        super(Runtime, self).__init__(assembly=assembly)
        for key in ('yaml', 'yml', 'json'):
            filename = uwsgi.opt.get(key)
            if filename:
                self.configure(filename)
                break
        else:
            raise RuntimeError()

        self.deploy()
        self.startup()

        self.dispatcher = MountDispatcher()
        for unit in self.assembly.collate(Mount):
            self.dispatcher.mount(unit)

        name = self.parameters.get('name')
        if name:
            self.register_ipython_console(name)

    def __call__(self, environ, start_response):
        return self.dispatcher.dispatch(environ, start_response)

    def register_ipython_console(self, name):
        trigger = IPYTHON_CONSOLE_TRIGGER % name
        os.close(os.open(trigger, os.O_WRONLY|os.O_CREAT, 0666))

        uwsgi.register_signal(IPYTHON_CONSOLE_SIGNAL, 'mule', activate_ipython_console)
        uwsgi.add_file_monitor(IPYTHON_CONSOLE_SIGNAL, trigger)

    def reload(self):
        uwsgi.reload()
Beispiel #3
0
    def __init__(self, address, configuration=None, assembly=None):
        super(Runtime, self).__init__(configuration, assembly)
        self.deploy()
        self.startup()

        self.dispatcher = MountDispatcher()
        for unit in self.assembly.collate(Mount):
            self.dispatcher.mount(unit)

        wsgi = self.configuration.get('wsgi')
        if wsgi and 'static-map' in wsgi:
            map = wsgi['static-map'].split('=')
            self.dispatcher = SharedDataMiddleware(self.dispatcher, {
                map[0]: os.path.abspath(map[1])
            }, cache=False)

        self.server = WsgiServer(address, self.dispatcher)
        self.server.serve()
Beispiel #4
0
class Runtime(Runtime):
    def __init__(self, configuration=None, assembly=None):
        super(Runtime, self).__init__(assembly=assembly)
        self.mules = {}
        self.postforks = []
        self.signals = {}

        uwsgi.post_fork_hook = self.run_postforks

        for key in ('yaml', 'yml', 'json'):
            filename = uwsgi.opt.get(key)
            if filename:
                self.configure(filename)
                break
        else:
            raise RuntimeError()

        self.deploy()
        self.startup()

        self.dispatcher = MountDispatcher()
        for unit in self.assembly.collate(Mount):
            self.dispatcher.mount(unit)

        self._register_services(self.dispatcher)

        name = self.parameters.get('name')
        if name:
            self.register_ipython_console(name)

    def __call__(self, environ, start_response):
        return self.dispatcher.dispatch(environ, start_response)

    @property
    def host(self):
        return uwsgi.opt['http-socket']

    @property
    def pid(self):
        return uwsgi.masterpid()

    def get_message(self):
        return uwsgi.mule_get_msg()

    def lock(self):
        uwsgi.lock()

    def notify_mule(self, name, message):
        if name in self.mules:
            self.mules[name].send(message)
        else:
            raise ValueError(name)

    def register_ipython_console(self, name):
        trigger = IPYTHON_CONSOLE_TRIGGER % name
        os.close(os.open(trigger, os.O_WRONLY|os.O_CREAT, 0666))

        uwsgi.register_signal(IPYTHON_CONSOLE_SIGNAL, 'mule', activate_ipython_console)
        uwsgi.add_file_monitor(IPYTHON_CONSOLE_SIGNAL, trigger)

    def register_mule(self, name, function):
        mule = self.mules[name] = Mule(len(self.mules) + 1, name, function)
        self.postforks.append(mule)

    def register_signal(self, name, target=None, function=None):
        id = len(self.signals) + 10
        self.signals[id], self.signals[name] = name, id

        if target:
            uwsgi.register_signal(id, target, function)

    def reload(self):
        uwsgi.reload()

    def run_postforks(self):
        purge_context_locals()
        for function in self.postforks:
            function()

    def signal(self, name):
        uwsgi.signal(self.signals[name])

    def unlock(self):
        uwsgi.unlock()

    def wait(self, signal=None):
        if signal:
            uwsgi.signal_wait(self.signals[signal])