import os
import gunicorn.app.base
from django.core.wsgi import get_wsgi_application


class StandaloneApplication(gunicorn.app.base.BaseApplication):

    def __init__(self, app, options=None):
        self.options = options or {}
        self.application = app
        super().__init__()

    def load_config(self):
        config = {key: value for key, value in self.options.items()
                  if key in self.cfg.settings and value is not None}
        for key, value in config.items():
            self.cfg.set(key.lower(), value)

    def load(self):
        return self.application


def main():
    options = {
        'bind': os.environ.get('BIND_ADDR', '127.0.0.1:8080'),
        'workers': int(os.environ.get("GUNICORN_WORKERS", "4")),
        'capture_output': True,
        'disable_redirect_access_to_syslog': True,
        'accesslog': '-',
        'errorlog': '-',
    }
    os.environ['DJANGO_SETTINGS_MODULE'] = "settings"
    application = get_wsgi_application()
    StandaloneApplication(application, options).run()


if __name__ == '__main__':
    main()
