def get_application(bootstrap_config={}, project=None): if not project: assert bootstrap_config config = synthesepy.config.Config() env = synthesepy.env.create_env(bootstrap_config['env_type'], bootstrap_config['env_path'], bootstrap_config['mode'], config) project = project_manager.Project(bootstrap_config['project_path'], env=env) config.update_finished(env) app = Flask(__name__) app.project = project app.debug = project.config.web_debug app.secret_key = project.config.web_secret_key @app.context_processor def inject_context(): return dict(i18n=synthesepy.i18n, project_name=project.config.project_name) app.register_blueprint(manager.manager, url_prefix='/manager') if project.manager_module and hasattr(project.manager_module, 'get_webapp'): app = project.manager_module.get_webapp(project, app) return app
def get_application(bootstrap_config={}, project=None): if not project: assert bootstrap_config config = synthesepy.config.Config() env = synthesepy.env.create_env( bootstrap_config["env_type"], bootstrap_config["env_path"], bootstrap_config["mode"], config ) project = project_manager.Project(bootstrap_config["project_path"], env=env) config.update_finished(env) app = Flask(__name__) app.project = project app.debug = project.config.web_debug app.secret_key = project.config.web_secret_key @app.context_processor def inject_context(): return dict(i18n=synthesepy.i18n, project_name=project.config.project_name) app.register_blueprint(manager.manager, url_prefix="/manager") if project.manager_module and hasattr(project.manager_module, "get_webapp"): app = project.manager_module.get_webapp(project, app) return app
def main(): # Phase 1: Initialize config from files. config_parser = argparse.ArgumentParser(add_help=False) config_parser.add_argument( '--config-path', help='Directory containing the configuration files') config_parser.add_argument( '-c', '--config', dest='config_names', default='', help='Configuration entries to use') config_args, remaining_argv = config_parser.parse_known_args() # Hack to get logging before argument parsing is done. logging.basicConfig( level=(logging.DEBUG if '-v' in sys.argv else logging.INFO), format='%(asctime)s:%(levelname)s:%(name)s:%(message)s') config = synthesepy.config.Config() if config_args.config_path: config.config_path = config_args.config_path config.update_from_files( [c for c in config_args.config_names.split(',') if c], config_args.config_path) # Phase 2: Process project settings. project_parser = argparse.ArgumentParser(add_help=False) project_parser.set_defaults(**config.__dict__) project_parser.add_argument( '-p', '--project-path', help='Path to the synthese project to use') args, remaining_argv = project_parser.parse_known_args(remaining_argv) project = None if args.project_path: log.info('Got a project path: %s', args.project_path) project = project_manager.Project(args.project_path, config=config) log.debug('New config: %s', config) # config from files overrides project config. if config_args.config_names: config.update_from_files( config_args.config_names.split(','), config_args.config_path) # Phase 3: Handle all command line options. parser = argparse.ArgumentParser( parents=[config_parser, project_parser], description='Synthese management tool') parser.register('action', 'parsers', AliasedSubParsersAction) parser.set_defaults(**config.__dict__) # Global options parser.add_argument( '-v', '--verbose', action='store_true', default=False, help='Be verbose') parser.add_argument( '-u', '--dummy', action='store_true', help='Dummy mode, doesn\'t execute commands or have side effects ' 'WARNING: NOT FULLY IMPLEMENTED YET') # Environment options parser.add_argument( '-t', '--env-type', choices=['cmake', 'installed']) parser.add_argument('-b', '--env-path', help='Env path') parser.add_argument( '-m', '--mode', choices=['debug', 'release', 'relwithdebinfo']) parser.add_argument( '--beep', dest='beep_when_done', action='store_true', help='Emit a beep on completion') # Daemon options parser.add_argument('--port', type=int) parser.add_argument('--no-proxy', action='store_true') parser.add_argument('--site-id', type=int) parser.add_argument('-d', '--dbconn', dest='conn_string') parser.add_argument('-l', '--log-level', help='Daemon log level') parser.add_argument( '-s', '--stdout', action='store_true', dest='log_stdout', help='Log daemon output to stdout') parser.add_argument( '--static-dir', help='Directory containing static files served by the HTTP proxy') parser.add_argument( '-e', '--extra-params', help='Daemon extra parameters, using format ' '"param0=value0 param1=value1"') parser.add_argument( '--gdb', action='store_true', help='Run daemon under gdb') parser.add_argument( '--restart-if-crashed', action='store_true', help='Automatically restart the daemon if it crashes') parser.add_argument( '--no-root-check', action='store_true', help='Disable root user checks') parser.add_argument( '-n', '--env-config-names', help='Environment configs to use (comma separated)') subparsers = parser.add_subparsers(help='sub-command help') if project: add_project_subparsers(subparsers) else: add_default_subparsers(subparsers) args = parser.parse_args(remaining_argv) log.debug('Final arguments: %s', args) logging.getLogger().setLevel( level=(logging.DEBUG if args.verbose else logging.INFO)) config.update_from_dict(args.__dict__) config.wsgi_proxy = not args.no_proxy config.wsgi_proxy_port = config.port + 1 env = synthesepy.env.create_env( args.env_type, args.env_path, args.mode, config) config.update_finished(env) try: if project: project.set_env(env) if hasattr(args, 'project_func'): res = args.project_func(project) else: res = args.func(project, args, env) if isinstance(res, project_manager.CommandsResult): commands_result = res if config.verbose: log.debug('Commands Result summary: %s', commands_result.summary()) if not commands_result.success: raise Exception('Failure while executing: %s' % commands_result.title) else: root_required = getattr(args.func, 'root_required', False) if not args.no_root_check and env.platform != 'win': is_root = os.geteuid() == 0 if root_required and not is_root: raise Exception('You must run this command as root') if not root_required and is_root: raise Exception('You can\'t run this command as root') args.func(args, env) finally: if config.beep_when_done: if env.platform == 'win': import winsound winsound.Beep(7000, 600) else: print '\a'