コード例 #1
0
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
コード例 #2
0
ファイル: __init__.py プロジェクト: Tisseo/synthese
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
コード例 #3
0
ファイル: cli.py プロジェクト: yvc74/synthese
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'