Ejemplo n.º 1
0
def main():
    """
    Command line main entry

    Start lyrebird

    * start in default config
    ```
    lyrebird
    ```
    * start with verbose mode
    ```
    lyrebird -v
    ```
    * start without open a web browser
    ```
    lyrebird -b
    ```
    * start with a specified config file
    ```
    lyrebird -c /path/to/your/config/file
    ```
    * start with multipart args
    ```
    lyrebird -v --mock 8080 -c /path/to/your/config/file
    ```
    """
    parser = argparse.ArgumentParser(prog='lyrebird')

    parser.add_argument('-V', '--version', dest='version', action='store_true', help='show lyrebird version')
    parser.add_argument('-v', dest='verbose', action='count', default=0, help='Show verbose log')
    parser.add_argument('--ip', dest='ip', help='Set device ip')
    parser.add_argument('--mock', dest='mock', type=int, help='Set mock server port, default port is 9090')
    parser.add_argument('--extra-mock', dest='extra_mock', type=int, help='Set extra mock server port, default port is 9999')
    parser.add_argument('--proxy', dest='proxy', type=int, help='Set proxy server port, default port is 4272')
    parser.add_argument('--data', dest='data', help='Set data dir, default is "./data/"')
    parser.add_argument('-b', '--no_browser', dest='no_browser',
                        action='store_true', help='Start without open a browser')
    parser.add_argument('-c', '--config', dest='config',
                        help='Start with a config file. Default is "~/.lyrebird/conf.json"')
    parser.add_argument('--log', dest='log', help='Set output log file path')
    parser.add_argument('--script', action='append', help='Set a checker script path')
    parser.add_argument('--plugin', action='append', help='Set a plugin project path')
    parser.add_argument('--database', dest='database', help='Set a database path. Default is "~/.lyrebird/lyrebird.db"')

    subparser = parser.add_subparsers(dest='sub_command')

    gen_parser = subparser.add_parser('gen')
    gen_parser.add_argument('path', help='Create plugin project')

    args = parser.parse_args()

    if args.version:
        print(version.LYREBIRD)
        return

    Path('~/.lyrebird').expanduser().mkdir(parents=True, exist_ok=True)

    if args.config:
        application._cm = ConfigManager(conf_path=args.config)
    else:
        application._cm = ConfigManager()

    # set current ip to config
    if args.ip:
        application._cm.config['ip'] = args.ip
    else:
        try:
            application._cm.config['ip'] = _get_ip()
        except socket.gaierror as e:
            logger.error(f'Failed to get local IP address, error occurs on {e}')

    # init file logger after config init
    application._cm.config['verbose'] = args.verbose
    log.init(args.log)

    if args.mock:
        application._cm.config['mock.port'] = args.mock
    if args.proxy:
        application._cm.config['proxy.port'] = args.proxy
    if args.data:
        application._cm.config['mock.data'] = str(Path(args.data).expanduser().absolute())

    # Set extra mock port
    if args.extra_mock:
        _extra_mock_port = args.extra_mock
    else:
        _extra_mock_port = 9999
    if utils.is_port_in_use(_extra_mock_port):
        _extra_mock_port = utils.find_free_port()
    application._cm.config['extra.mock.port'] = _extra_mock_port

    logger.debug(f'Read args: {args}')

    if args.sub_command == 'gen':
        logger.debug('EXEC: Plugin project generator')
        gen(args)
    else:
        logger.debug('EXEC: LYREBIRD START')
        run(args)
Ejemplo n.º 2
0
def main():
    """
    Command line main entry

    Start lyrebird

    * start in default config
    ```
    lyrebird
    ```
    * start with verbose mode
    ```
    lyrebird -v
    ```
    * start without open a web browser
    ```
    lyrebird -b
    ```
    * start with a specified config file
    ```
    lyrebird -c /path/to/your/config/file
    ```
    * start with multipart args
    ```
    lyrebird -v --mock 8080 -c /path/to/your/config/file
    ```
    """
    parser = argparse.ArgumentParser(prog='lyrebird')

    parser.add_argument('-v',
                        dest='verbose',
                        action='store_true',
                        help='Show verbose log')
    parser.add_argument('--mock',
                        dest='mock',
                        type=int,
                        help='Set mock server port, default port is 4272')
    parser.add_argument('--proxy',
                        dest='proxy',
                        type=int,
                        help='Set proxy server port, default port is 9090')
    parser.add_argument('--data',
                        dest='data',
                        help='Set data dir, default is "./data/"')
    parser.add_argument('-b',
                        '--no_browser',
                        dest='no_browser',
                        action='store_true',
                        help='Start without open a browser')
    parser.add_argument(
        '-c',
        '--config',
        dest='config',
        help='Start with a config file. Default is "~/.lyrebird/conf.json"')
    parser.add_argument('--log', dest='log', help='Set output log file path')

    subparser = parser.add_subparsers(dest='sub_command')
    src_parser = subparser.add_parser('src')
    src_parser.add_argument('uri')
    subparser.add_parser('plugin')

    args = parser.parse_args()

    if args.config:
        application._cm = ConfigManager(conf_path=args.config)
    else:
        application._cm = ConfigManager()
    application._src = Rescource()

    # set current ip to config
    try:
        application._cm.config['ip'] = _get_ip()
    except socket.gaierror as e:
        logger.error('Failed to get local IP address, error occurs on %s' % e)

    if args.verbose:
        application._cm.config['verbose'] = True

    # init file logger after config init
    log.init(args.log)

    if args.mock:
        application._cm.config['mock.port'] = args.mock
    if args.proxy:
        application._cm.config['proxy.port'] = args.proxy
    if args.data:
        application._cm.config['mock.data'] = args.data

    logger.debug(f'Read args: {args}')

    if args.sub_command == 'src':
        logger.debug('EXEC SUBCMD:SRC')
        src(args)
    elif args.sub_command == 'plugin':
        logger.debug('EXEC SUBCMD:PLUGIN')
        plugin(args)
    else:
        logger.debug('EXEC LYREBIRD START')
        run(args)