class Application(object): """\ An application interface for configuring and loading the various necessities for any given web framework. """ def __init__(self, usage=None): self.log = logging.getLogger(__name__) self.cfg = Config(usage) self.callable = None parser = self.cfg.parser() opts, args = parser.parse_args() cfg = self.init(parser, opts, args) # Load up the any app specific configuration if cfg: for k, v in list(cfg.items()): self.cfg.set(k.lower(), v) # Load up the config file if its found. if opts.config and os.path.exists(opts.config): cfg = { "__builtins__": __builtins__, "__name__": "__config__", "__file__": opts.config, "__doc__": None, "__package__": None } try: execfile(opts.config, cfg, cfg) except Exception, e: print "Failed to read config file: %s" % opts.config traceback.print_exc() sys.exit(1) for k, v in list(cfg.items()): # Ignore unknown names if k not in self.cfg.settings: continue try: self.cfg.set(k.lower(), v) except: sys.stderr.write("Invalid value for %s: %s\n\n" % (k, v)) raise # Lastly, update the configuration with any command line # settings. for k, v in list(opts.__dict__.items()): if v is None: continue self.cfg.set(k.lower(), v) self.configure_logging()
class GunicornApp(VanillaGunicornApp): """Implement Gunicorn application.""" def __init__(self, usage=None, prog=None, config=None): """Initialize self.""" self._cfg = config super(GunicornApp, self).__init__(usage=usage, prog=prog) def init(self, parser, opts, args): """Initialize the application.""" if len(args) < 1: parser.error("No application module specified.") self.app_uri = args[0] self.cfg.set("default_proc_name", self.app_uri) logging.captureWarnings(True) if self.cfg.config: self.load_config_from_file(self.cfg.config) def load_default_config(self): """Prepare default configuration.""" self.cfg = VanillaGunicornConfig(self.usage, prog=self.prog) # Remove unused settings del self.cfg.settings['paste'] del self.cfg.settings['django_settings'] self.cfg.settings['worker_class'].default = 'muffin.worker.GunicornWorker' self.cfg.set('worker_class', 'muffin.worker.GunicornWorker') if self._cfg: self.cfg.set('config', self._cfg) os.environ[CONFIGURATION_ENVIRON_VARIABLE] = self._cfg def load_config(self): """Load configuration.""" parser = self.cfg.parser() args, _ = parser.parse_known_args() self.init(parser, args, args.args) def load(self): """Load a Muffin application.""" # Fix paths os.chdir(self.cfg.chdir) sys.path.insert(0, self.cfg.chdir) app = self.app_uri if not isinstance(app, Application): app = import_app(app) return app
class GunicornApp(VanillaGunicornApp): """ Support Gunicorn. """ def __init__(self, usage=None, prog=None, config=None): self._cfg = config super(GunicornApp, self).__init__(usage=usage, prog=prog) def init(self, parser, opts, args): """ Initialize the application. """ if len(args) < 1: parser.error("No application module specified.") self.app_uri = args[0] self.cfg.set("default_proc_name", self.app_uri) logging.captureWarnings(True) if self.cfg.config: self.load_config_from_file(self.cfg.config) def load_default_config(self): """ Prepare default configuration. """ self.cfg = VanillaGunicornConfig(self.usage, prog=self.prog) # Remove unused settings del self.cfg.settings['paste'] del self.cfg.settings['django_settings'] self.cfg.settings[ 'worker_class'].default = 'muffin.worker.GunicornWorker' self.cfg.set('worker_class', 'muffin.worker.GunicornWorker') if self._cfg: self.cfg.set('config', self._cfg) os.environ[CONFIGURATION_ENVIRON_VARIABLE] = self._cfg def load_config(self): parser = self.cfg.parser() args, _ = parser.parse_known_args() self.init(parser, args, args.args) def load(self): """ Load a Muffin application. """ # Fix paths os.chdir(self.cfg.chdir) sys.path.insert(0, self.cfg.chdir) app = self.app_uri if not isinstance(app, Application): app = import_app(app) return app
class Application(object): """\ An application interface for configuring and loading the various necessities for any given web framework. """ def __init__(self, usage=None, prog=None): self.usage = usage self.cfg = None self.callable = None self.prog = prog self.logger = None self.do_load_config() def do_load_config(self): try: self.load_config() except Exception as e: sys.stderr.write("\nError: %s\n" % str(e)) sys.stderr.flush() sys.exit(1) def load_config(self): # init configuration self.cfg = Config(self.usage, prog=self.prog) # parse console args parser = self.cfg.parser() args = parser.parse_args() # optional settings from apps cfg = self.init(parser, args, args.args) # Load up the any app specific configuration if cfg and cfg is not None: for k, v in cfg.items(): self.cfg.set(k.lower(), v) # Load up the config file if its found. if args.config and os.path.exists(args.config): cfg = { "__builtins__": __builtins__, "__name__": "__config__", "__file__": args.config, "__doc__": None, "__package__": None } try: execfile_(args.config, cfg, cfg) except Exception: print("Failed to read config file: %s" % args.config) traceback.print_exc() sys.exit(1) for k, v in cfg.items(): # Ignore unknown names if k not in self.cfg.settings: continue try: self.cfg.set(k.lower(), v) except: sys.stderr.write("Invalid value for %s: %s\n\n" % (k, v)) raise # Lastly, update the configuration with any command line # settings. for k, v in args.__dict__.items(): if v is None: continue if k == "args": continue self.cfg.set(k.lower(), v) def init(self, parser, opts, args): raise NotImplementedError def load(self): raise NotImplementedError def reload(self): self.do_load_config() if self.cfg.spew: debug.spew() def wsgi(self): if self.callable is None: self.callable = self.load() return self.callable def run(self): if self.cfg.check_config: try: self.load() except: sys.stderr.write("\nError while loading the application:\n\n") traceback.print_exc() sys.stderr.flush() sys.exit(1) sys.exit(0) if self.cfg.spew: debug.spew() if self.cfg.daemon: util.daemonize() # set python paths if self.cfg.pythonpath and self.cfg.pythonpath is not None: paths = self.cfg.pythonpath.split(",") for path in paths: pythonpath = os.path.abspath(self.cfg.pythonpath) if pythonpath not in sys.path: sys.path.insert(0, pythonpath) try: Arbiter(self).run() except RuntimeError as e: sys.stderr.write("\nError: %s\n\n" % e) sys.stderr.flush() sys.exit(1)
class Application(object): """\ An application interface for configuring and loading the various necessities for any given web framework. """ def __init__(self, usage=None): self.usage = usage self.cfg = None self.callable = None self.logger = None self.do_load_config() def do_load_config(self): try: self.load_config() except Exception as e: sys.stderr.write("\nError: %s\n" % str(e)) sys.stderr.flush() sys.exit(1) def load_config(self): # init configuration self.cfg = Config(self.usage) # parse console args parser = self.cfg.parser() opts, args = parser.parse_args() # optional settings from apps cfg = self.init(parser, opts, args) # Load up the any app specific configuration if cfg and cfg is not None: for k, v in cfg.items(): self.cfg.set(k.lower(), v) # Load up the config file if its found. if opts.config and os.path.exists(opts.config): cfg = { "__builtins__": __builtins__, "__name__": "__config__", "__file__": opts.config, "__doc__": None, "__package__": None } try: execfile_(opts.config, cfg, cfg) except Exception: print("Failed to read config file: %s" % opts.config) traceback.print_exc() sys.exit(1) for k, v in cfg.items(): # Ignore unknown names if k not in self.cfg.settings: continue try: self.cfg.set(k.lower(), v) except: sys.stderr.write("Invalid value for %s: %s\n\n" % (k, v)) raise # Lastly, update the configuration with any command line # settings. for k, v in opts.__dict__.items(): if v is None: continue self.cfg.set(k.lower(), v) def init(self, parser, opts, args): raise NotImplementedError def load(self): raise NotImplementedError def reload(self): self.do_load_config() if self.cfg.spew: debug.spew() def wsgi(self): if self.callable is None: self.callable = self.load() return self.callable def run(self): if self.cfg.check_config: try: self.load() except: sys.stderr.write("\nError while loading the application:\n\n") traceback.print_exc() sys.stderr.flush() sys.exit(1) sys.exit(0) if self.cfg.spew: debug.spew() if self.cfg.daemon: util.daemonize() # set python paths if self.cfg.pythonpath and self.cfg.pythonpath is not None: paths = self.cfg.pythonpath.split(",") for path in paths: pythonpath = os.path.abspath(self.cfg.pythonpath) if pythonpath not in sys.path: sys.path.insert(0, pythonpath) try: Arbiter(self).run() except RuntimeError as e: sys.stderr.write("\nError: %s\n\n" % e) sys.stderr.flush() sys.exit(1)