Exemplo n.º 1
0
def api_to_dict():
    """Convert Jina API to a dict
    :return: dict
    """
    from jina import __version__
    from jina.parsers import get_main_parser

    parsers = get_main_parser()._actions[-1].choices

    all_d = {
        'name': 'Jina',
        'description': 'Jina is the cloud-native neural search solution powered by state-of-the-art AI and deep '
        'learning technology',
        'license': 'Apache 2.0',
        'vendor': 'Jina AI Limited',
        'source': 'https://github.com/jina-ai/jina/tree/'
        + os.environ.get('JINA_VCS_VERSION', 'master'),
        'url': 'https://jina.ai',
        'docs': 'https://docs.jina.ai',
        'authors': '*****@*****.**',
        'version': __version__,
        'methods': [],
        'revision': os.environ.get('JINA_VCS_VERSION'),
    }

    for p_name in parsers.keys():
        d = {'name': p_name, 'options': []}
        for ddd in _export_parser_args(
            lambda *x: get_main_parser()._actions[-1].choices[p_name], type_as_str=True
        ):
            d['options'].append(ddd)
        all_d['methods'].append(d)

    return all_d
Exemplo n.º 2
0
def _update_autocomplete():
    from jina.parsers import get_main_parser

    def _gaa(key, parser):
        _result = {}
        _compl = []
        for v in parser._actions:
            if v.option_strings:
                _compl.extend(v.option_strings)
            elif v.choices:
                _compl.extend(v.choices)
                if isinstance(v.choices, dict):
                    for kk, vv in v.choices.items():
                        _result.update(_gaa(' '.join([key, kk]).strip(), vv))
        # filer out single dash, as they serve as abbrev
        _compl = [
            k for k in _compl if (not k.startswith('-') or k.startswith('--'))
        ]
        _result.update({key: _compl})
        return _result

    compl = _gaa('', get_main_parser())
    cmd = compl.pop('')
    compl = {'commands': cmd, 'completions': compl}

    with open(__file__, 'a') as fp:
        fp.write(f'\nac_table = {compl}\n')
Exemplo n.º 3
0
def _update_autocomplete():
    from jina.parsers import get_main_parser

    def _gaa(key, parser):
        _result = {}
        _compl = []
        for v in parser._actions:
            if v.option_strings:
                _compl.extend(v.option_strings)
            elif v.choices:
                _compl.extend(v.choices)
                for kk, vv in v.choices.items():
                    _result.update(_gaa(" ".join([key, kk]).strip(), vv))
        # filer out single dash, as they serve as abbrev
        _compl = [
            k for k in _compl if (not k.startswith("-") or k.startswith("--"))
        ]
        _result.update({key: _compl})
        return _result

    compl = _gaa("", get_main_parser())
    cmd = compl.pop("")
    compl = {"commands": cmd, "completions": compl}

    with open(__file__, "a") as fp:
        fp.write(f"\nac_table = {compl}\n")
Exemplo n.º 4
0
def _get_run_args(print_args: bool = True):
    from jina.logging import default_logger
    from jina.parsers import get_main_parser
    from jina.helper import colored

    parser = get_main_parser()
    if len(sys.argv) > 1:
        from argparse import _StoreAction, _StoreTrueAction
        args = parser.parse_args()
        if print_args:
            from pkg_resources import resource_filename
            p = parser._actions[-1].choices[sys.argv[1]]
            default_args = {a.dest: a.default for a in p._actions if
                            isinstance(a, _StoreAction) or isinstance(a, _StoreTrueAction)}

            with open(resource_filename('jina', '/'.join(('resources', 'jina.logo')))) as fp:
                logo_str = fp.read()
            param_str = []
            for k, v in sorted(vars(args).items()):
                j = f'{k.replace("_", "-"): >30.30} = {str(v):30.30}'
                if default_args.get(k, None) == v:
                    param_str.append('   ' + j)
                else:
                    param_str.append('🔧️ ' + colored(j, 'blue', 'on_yellow'))
            param_str = '\n'.join(param_str)
            default_logger.info(f'\n{logo_str}\n▶️  {" ".join(sys.argv)}\n{param_str}\n')
        return args
    else:
        parser.print_help()
        exit()
Exemplo n.º 5
0
def _get_run_args(print_args: bool = True):
    from jina.parsers import get_main_parser

    silent_print = {'help', 'hub'}

    parser = get_main_parser()
    if len(sys.argv) > 1:
        from argparse import _StoreAction, _StoreTrueAction

        args, unknown = parser.parse_known_args()

        if unknown:
            from jina.helper import warn_unknown_args

            warn_unknown_args(unknown)

        if args.cli not in silent_print and print_args:
            from jina.helper import colored
            from jina import __resources_path__

            p = parser._actions[-1].choices[sys.argv[1]]
            default_args = {
                a.dest: a.default
                for a in p._actions
                if isinstance(a, (_StoreAction, _StoreTrueAction))
            }

            with open(os.path.join(__resources_path__, 'jina.logo')) as fp:
                logo_str = fp.read()
            param_str = []
            for k, v in sorted(vars(args).items()):
                j = f'{k.replace("_", "-"): >30.30} = {str(v):30.30}'
                if default_args.get(k, None) == v:
                    param_str.append('   ' + j)
                else:
                    param_str.append('🔧️ ' + colored(j, 'blue', 'on_yellow'))
            param_str = '\n'.join(param_str)
            print(f'\n{logo_str}\n▶️  {" ".join(sys.argv)}\n{param_str}\n')
        return args
    else:
        parser.print_help()
        exit()
Exemplo n.º 6
0
def _get_run_args(print_args: bool = True):
    from jina.helper import get_rich_console
    from jina.parsers import get_main_parser

    console = get_rich_console()

    silent_print = {'help', 'hub', 'export'}

    parser = get_main_parser()
    if len(sys.argv) > 1:
        from argparse import _StoreAction, _StoreTrueAction

        from rich import box
        from rich.table import Table

        args, unknown = parser.parse_known_args()

        if unknown:
            from jina.helper import warn_unknown_args

            unknown = list(filter(lambda x: x.startswith('--'), unknown))
            warn_unknown_args(unknown)

        if args.cli not in silent_print and print_args:
            from jina import __resources_path__

            p = parser._actions[-1].choices[sys.argv[1]]
            default_args = {
                a.dest: a.default
                for a in p._actions
                if isinstance(a, (_StoreAction, _StoreTrueAction))
            }

            with open(os.path.join(__resources_path__, 'jina.logo')) as fp:
                logo_str = fp.read()

            param_str = Table(
                title=' '.join(sys.argv),
                box=box.ROUNDED,
                highlight=True,
                title_justify='left',
            )
            param_str.add_column('Argument', justify='right')
            param_str.add_column('Value', justify='left')

            for k, v in sorted(vars(args).items()):
                param = k.replace('_', '-')
                value = str(v)

                if not default_args.get(k, None) == v:
                    value = f'[b]{value}[/]'

                param_str.add_row(param, value)

            if 'JINA_LOG_NO_COLOR' not in os.environ:
                print(f'\n{logo_str}\n')
            console.print(param_str)
        return args
    else:
        parser.print_help()
        exit()
Exemplo n.º 7
0
def api_to_dict():
    from jina.enums import BetterEnum
    from jina import __version__
    from jina.parsers import get_main_parser

    from argparse import _StoreAction, _StoreTrueAction
    port_attr = ('help', 'choices', 'default', 'required', 'option_strings',
                 'dest')

    parsers = get_main_parser()._actions[-1].choices

    all_d = {
        'name':
        'Jina',
        'description':
        'Jina is the cloud-native neural search solution powered by state-of-the-art AI and deep learning technology',
        'license':
        'Apache 2.0',
        'vendor':
        'Jina AI Limited',
        'source':
        'https://github.com/jina-ai/jina/tree/' +
        os.environ.get('JINA_VCS_VERSION', 'master'),
        'url':
        'https://jina.ai',
        'docs':
        'https://docs.jina.ai',
        'authors':
        '*****@*****.**',
        'version':
        __version__,
        'methods': [],
        'revision':
        os.environ.get('JINA_VCS_VERSION')
    }

    for p_name in parsers.keys():
        d = {'name': p_name, 'options': []}
        parser = get_main_parser()._actions[-1].choices[p_name]
        parser2 = get_main_parser()._actions[-1].choices[p_name]
        random_dest = set()
        for a, b in zip(parser._actions, parser2._actions):
            if a.default != b.default:
                random_dest.add(a.dest)
        for a in parser._actions:
            if isinstance(a, _StoreAction) or isinstance(a, _StoreTrueAction):
                ddd = {p: getattr(a, p) for p in port_attr}
                if a.type:
                    ddd['type'] = a.type.__name__ if isinstance(
                        a.type, type) else type(a.type).__name__
                elif isinstance(a, _StoreTrueAction):
                    ddd['type'] = 'bool'
                else:
                    ddd['type'] = a.type
                if ddd['choices']:
                    ddd['choices'] = [
                        str(k) if isinstance(k, BetterEnum) else k
                        for k in ddd['choices']
                    ]
                if isinstance(ddd['default'], BetterEnum):
                    ddd['default'] = str(ddd['default'])
                if a.dest in random_dest:
                    ddd['default_random'] = True
                else:
                    ddd['default_random'] = False
                ddd['name'] = ddd.pop('dest')

                d['options'].append(ddd)
        all_d['methods'].append(d)
    return all_d