Esempio n. 1
0
def _update_autocomplete():
    from jina.parser import get_main_parser

    def _gaa(parser):
        _compl = []
        for v in parser._actions:
            if v.option_strings:
                _compl.extend(v.option_strings)
            elif v.choices:
                _compl.extend(v.choices)
        # filer out single dash, as they serve as abbrev
        _compl = [
            k for k in _compl if (not k.startswith('-') or k.startswith('--'))
        ]
        return _compl

    compl = {
        'commands': _gaa(get_main_parser()),
        'completions': {
            k: _gaa(v)
            for k, v in get_main_parser()._actions[-1].choices.items()
        }
    }

    with open(__file__, 'a') as fp:
        fp.write(f'\nac_table = {compl}\n')
Esempio n. 2
0
def api_to_dict():
    from jina.enums import BetterEnum
    from jina import __version__
    from jina.parser 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
Esempio n. 3
0
def _update_autocomplete():
    from jina.parser 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')
Esempio n. 4
0
def _get_run_args(print_args: bool = True):
    from jina.logging import default_logger
    from jina.parser 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()