def setup_server(): config = BlueberryPyConfiguration(app_config=testconfig) if config.use_email and config.email_config: email.configure(config.email_config) if config.use_logging and config.logging_config: cherrypy.engine.logging = LoggingPlugin(cherrypy.engine, config=config.logging_config) if config.use_redis: cherrypy.lib.sessions.RedisSession = RedisSession if config.use_sqlalchemy: cherrypy.engine.sqlalchemy = SQLAlchemyPlugin(cherrypy.engine, config=config.sqlalchemy_config) cherrypy.tools.orm_session = SQLAlchemySessionTool() if config.use_jinja2: if config.webassets_env: configure_jinja2(assets_env=config.webassets_env, **config.jinja2_config) else: configure_jinja2(**config.jinja2_config) cherrypy.config.update(config.app_config) # mount the controllers for script_name, section in config.controllers_config.viewitems(): section = section.copy() controller = section.pop("controller") if isinstance(controller, cherrypy.dispatch.RoutesDispatcher): routes_config = {'/': {"request.dispatch": controller}} for path in section.viewkeys(): if path.strip() == '/': routes_config['/'].update(section['/']) else: routes_config[path] = section[path].copy() app_config = config.app_config.copy() app_config.pop("controllers") routes_config.update(app_config) cherrypy.tree.mount(None, script_name=script_name, config=routes_config) else: app_config = config.app_config.copy() app_config.pop("controllers") controller_config = section.copy() controller_config.update(app_config) cherrypy.tree.mount(controller(), script_name=script_name, config=controller_config)
def setup_server(): config = BlueberryPyConfiguration(app_config=testconfig) if config.use_email and config.email_config: email.configure(config.email_config) if config.use_logging and config.logging_config: cherrypy.engine.logging = LoggingPlugin(cherrypy.engine, config=config.logging_config) if config.use_redis: cherrypy.lib.sessions.RedisSession = RedisSession if config.use_sqlalchemy: cherrypy.engine.sqlalchemy = SQLAlchemyPlugin(cherrypy.engine, config=config.sqlalchemy_config) cherrypy.tools.orm_session = SQLAlchemySessionTool() if config.use_jinja2: if config.webassets_env: configure_jinja2(assets_env=config.webassets_env, **config.jinja2_config) else: configure_jinja2(**config.jinja2_config) cherrypy.config.update(config.app_config) # mount the controllers for script_name, section in config.controllers_config.viewitems(): section = section.copy() controller = section.pop("controller") if isinstance(controller, cherrypy.dispatch.RoutesDispatcher): routes_config = {"/": {"request.dispatch": controller}} for path in section.viewkeys(): if path.strip() == "/": routes_config["/"].update(section["/"]) else: routes_config[path] = section[path].copy() app_config = config.app_config.copy() app_config.pop("controllers") routes_config.update(app_config) cherrypy.tree.mount(None, script_name=script_name, config=routes_config) else: app_config = config.app_config.copy() app_config.pop("controllers") controller_config = section.copy() controller_config.update(app_config) cherrypy.tree.mount(controller(), script_name=script_name, config=controller_config)
def serve(**kwargs): """ Spawn a new running Cherrypy process usage: blubeberry serve [options] options: -h, --help show this help message and exit -b BINDING, --bind BINDING the address and port to bind to. [default: 127.0.0.1:8080] -e ENVIRONMENT, --environment ENVIRONMENT apply the given config environment -C ENV_VAR_NAME, --env-var ENV_VAR_NAME add the given config from environment variable name [default: BLUEBERRYPY_CONFIG] -f start a fastcgi server instead of the default HTTP server -s start a scgi server instead of the default HTTP server -d, --daemonize run the server as a daemon. [default: False] -p, --drop-privilege drop privilege to separately specified umask, uid and gid. [default: False] -P PIDFILE, --pidfile PIDFILE store the process id in the given file -u UID, --uid UID setuid to uid [default: www] -g GID, --gid GID setgid to gid [default: www] -m UMASK, --umask UMASK set umask [default: 022] """ config = BlueberryPyConfiguration(config_dir=kwargs.get('config_dir'), env_var_name=kwargs.get('env_var')) cpengine = cherrypy.engine cpenviron = kwargs.get("environment") if cpenviron: config = BlueberryPyConfiguration(config_dir=kwargs.get('config_dir'), env_var_name=kwargs.get('env_var'), environment=cpenviron) cherrypy.config.update({"environment": cpenviron}) if config.use_email and config.email_config: from blueberrypy import email email.configure(config.email_config) if config.use_logging and config.logging_config: from blueberrypy.plugins import LoggingPlugin cpengine.logging = LoggingPlugin(cpengine, config=config.logging_config) if config.use_redis: from blueberrypy.session import RedisSession cherrypy.lib.sessions.RedisSession = RedisSession if config.use_sqlalchemy: from blueberrypy.plugins import SQLAlchemyPlugin cpengine.sqlalchemy = SQLAlchemyPlugin(cpengine, config=config.sqlalchemy_config) from blueberrypy.tools import SQLAlchemySessionTool cherrypy.tools.orm_session = SQLAlchemySessionTool() if config.use_jinja2: if config.webassets_env: configure_jinja2(assets_env=config.webassets_env, **config.jinja2_config) else: configure_jinja2(**config.jinja2_config) # update global config first, so subsequent command line options can # override the settings in the config files cherrypy.config.update(config.app_config) if kwargs.get("bind"): address, port = kwargs.get("bind").strip().split(":") cherrypy.server.socket_host = address cherrypy.server.socket_port = int(port) if kwargs.get("daemonize"): cherrypy.config.update({'log.screen': False}) Daemonizer(cpengine).subscribe() if kwargs.get("drop_privilege"): cherrypy.config.update({'engine.autoreload_on': False}) DropPrivileges(cpengine, umask=int(kwargs.get("umask")), uid=kwargs.get("uid") or "www", gid=kwargs.get("gid") or "www").subscribe() if kwargs.get("pidfile"): PIDFile(cpengine, kwargs.get("pidfile")).subscribe() fastcgi, scgi = kwargs.get("fastcgi"), kwargs.get("scgi") if fastcgi and scgi: cherrypy.log.error("You may only specify one of the fastcgi and " "scgi options.", 'ENGINE') sys.exit(1) elif fastcgi or scgi: # Turn off autoreload when using *cgi. cherrypy.config.update({'engine.autoreload_on': False}) # Turn off the default HTTP server (which is subscribed by default). cherrypy.server.unsubscribe() addr = cherrypy.server.bind_addr if fastcgi: f = servers.FlupFCGIServer(application=cherrypy.tree, bindAddress=addr) elif scgi: f = servers.FlupSCGIServer(application=cherrypy.tree, bindAddress=addr) s = servers.ServerPlugin(cpengine, httpserver=f, bind_addr=addr) s.subscribe() if hasattr(cpengine, 'signal_handler'): cpengine.signal_handler.subscribe() # for win32 only if hasattr(cpengine, "console_control_handler"): cpengine.console_control_handler.subscribe() # mount the controllers for script_name, section in config.controllers_config.viewitems(): section = section.copy() controller = section.pop("controller") if isinstance(controller, cherrypy.dispatch.RoutesDispatcher): routes_config = {'/': {"request.dispatch": controller}} for path in section.viewkeys(): if path.strip() == '/': routes_config['/'].update(section['/']) else: routes_config[path] = section[path].copy() app_config = config.app_config.copy() app_config.pop("controllers") routes_config.update(app_config) cherrypy.tree.mount(None, script_name=script_name, config=routes_config) else: app_config = config.app_config.copy() app_config.pop("controllers") controller_config = section.copy() controller_config.update(app_config) cherrypy.tree.mount(controller(), script_name=script_name, config=controller_config) # Add the blueberrypy config files into CP's autoreload monitor # Jinja2 templates are monitored by Jinja2 itself and will autoreload if # needed if config.config_file_paths: for path in config.config_file_paths: cpengine.autoreload.files.add(path) try: cpengine.start() except: sys.exit(1) else: cpengine.block()
def serve(**kwargs): """ Spawn a new running Cherrypy process usage: blubeberry serve [options] options: -h, --help show this help message and exit -b BINDING, --bind BINDING the address and port to bind to. [default: 127.0.0.1:8080] -e ENVIRONMENT, --environment ENVIRONMENT apply the given config environment -f start a fastcgi server instead of the default HTTP server -s start a scgi server instead of the default HTTP server -d, --daemonize run the server as a daemon. [default: False] -p, --drop-privilege drop privilege to separately specified umask, uid and gid. [default: False] -P PIDFILE, --pidfile PIDFILE store the process id in the given file -u UID, --uid UID setuid to uid [default: www] -g GID, --gid GID setgid to gid [default: www] -m UMASK, --umask UMASK set umask [default: 022] """ config = BlueberryPyConfiguration(config_dir=kwargs.get("config_dir")) cpengine = cherrypy.engine cpenviron = kwargs.get("environment") if cpenviron: config = BlueberryPyConfiguration(config_dir=kwargs.get("config_dir"), environment=cpenviron) cherrypy.config.update({"environment": cpenviron}) if config.use_email and config.email_config: from blueberrypy import email email.configure(config.email_config) if config.use_logging and config.logging_config: from blueberrypy.plugins import LoggingPlugin cpengine.logging = LoggingPlugin(cpengine, config=config.logging_config) if config.use_redis: from blueberrypy.session import RedisSession cherrypy.lib.sessions.RedisSession = RedisSession if config.use_sqlalchemy: from blueberrypy.plugins import SQLAlchemyPlugin cpengine.sqlalchemy = SQLAlchemyPlugin(cpengine, config=config.sqlalchemy_config) from blueberrypy.tools import SQLAlchemySessionTool cherrypy.tools.orm_session = SQLAlchemySessionTool() if config.use_jinja2: if config.webassets_env: configure_jinja2(assets_env=config.webassets_env, **config.jinja2_config) else: configure_jinja2(**config.jinja2_config) # update global config first, so subsequent command line options can # override the settings in the config files cherrypy.config.update(config.app_config) if kwargs.get("bind"): address, port = kwargs.get("bind").strip().split(":") cherrypy.server.socket_host = address cherrypy.server.socket_port = int(port) if kwargs.get("daemonize"): cherrypy.config.update({'log.screen': False}) Daemonizer(cpengine).subscribe() if kwargs.get("drop_privilege"): cherrypy.config.update({'engine.autoreload_on': False}) DropPrivileges(cpengine, umask=int(kwargs.get("umask")), uid=kwargs.get("uid") or "www", gid=kwargs.get("gid") or "www").subscribe() if kwargs.get("pidfile"): PIDFile(cpengine, kwargs.get("pidfile")).subscribe() fastcgi, scgi = kwargs.get("fastcgi"), kwargs.get("scgi") if fastcgi and scgi: cherrypy.log.error("You may only specify one of the fastcgi and " "scgi options.", 'ENGINE') sys.exit(1) elif fastcgi or scgi: # Turn off autoreload when using *cgi. cherrypy.config.update({'engine.autoreload_on': False}) # Turn off the default HTTP server (which is subscribed by default). cherrypy.server.unsubscribe() addr = cherrypy.server.bind_addr if fastcgi: f = servers.FlupFCGIServer(application=cherrypy.tree, bindAddress=addr) elif scgi: f = servers.FlupSCGIServer(application=cherrypy.tree, bindAddress=addr) s = servers.ServerPlugin(cpengine, httpserver=f, bind_addr=addr) s.subscribe() if hasattr(cpengine, 'signal_handler'): cpengine.signal_handler.subscribe() # for win32 only if hasattr(cpengine, "console_control_handler"): cpengine.console_control_handler.subscribe() # mount the controllers for script_name, section in config.controllers_config.viewitems(): section = section.copy() controller = section.pop("controller") if isinstance(controller, cherrypy.dispatch.RoutesDispatcher): routes_config = {'/': {"request.dispatch": controller}} for path in section.viewkeys(): if path.strip() == '/': routes_config['/'].update(section['/']) else: routes_config[path] = section[path].copy() app_config = config.app_config.copy() app_config.pop("controllers") routes_config.update(app_config) cherrypy.tree.mount(None, script_name=script_name, config=routes_config) else: app_config = config.app_config.copy() app_config.pop("controllers") controller_config = section.copy() controller_config.update(app_config) cherrypy.tree.mount(controller(), script_name=script_name, config=controller_config) # Add the blueberrypy config files into CP's autoreload monitor # Jinja2 templates are monitored by Jinja2 itself and will autoreload if # needed if config.config_file_paths: for path in config.config_file_paths: cpengine.autoreload.files.add(path) try: cpengine.start() except: sys.exit(1) else: cpengine.block()