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')
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
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')
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()