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