importosimportsysfromrichimportprintaspprintfromrich.tableimportTablefromrichimportboxfromjina.helperimportget_rich_consoledef_get_run_args(print_args:bool=True):fromjina.parsersimportget_main_parserconsole=get_rich_console()silent_print={'help','hub'}parser=get_main_parser()iflen(sys.argv)>1:fromargparseimport_StoreAction,_StoreTrueActionargs,unknown=parser.parse_known_args()ifunknown:fromjina.helperimportwarn_unknown_argsunknown=list(filter(lambdax:x.startswith('--'),unknown))warn_unknown_args(unknown)ifargs.clinotinsilent_printandprint_args:fromjinaimport__resources_path__p=parser._actions[-1].choices[sys.argv[1]]default_args={a.dest:a.defaultforainp._actionsifisinstance(a,(_StoreAction,_StoreTrueAction))}withopen(os.path.join(__resources_path__,'jina.logo'))asfp:logo_str=fp.read()param_str=Table(title=None,box=box.ROUNDED,highlight=True)param_str.add_column('')param_str.add_column('Parameters',justify='right')param_str.add_column('Value',justify='left')fork,vinsorted(vars(args).items()):sign=' 'ifdefault_args.get(k,None)==velse'🔧️'param=f'{k.replace("_","-"): >30.30}'value=f'= {str(v):30.30}'style=Noneifdefault_args.get(k,None)==velse'blue on yellow'param_str.add_row(sign,param,value,style=style)print(f'\n{logo_str}\n')console.print(f'▶️ {" ".join(sys.argv)}')console.print(param_str)returnargselse:parser.print_help()exit()def_quick_ac_lookup():fromcli.autocompleteimportac_tableiflen(sys.argv)>1:ifsys.argv[1]=='commands':forkinac_table['commands']:print(k)exit()elifsys.argv[1]=='completions':# search with the longest shared prefixforjinrange(len(sys.argv),2,-1):_input=' '.join(sys.argv[2:j]).strip()if_inputinac_table['completions']:compl=ac_table['completions'][_input]forkincompl:ifknotinsys.argv:print(k)breakexit()def_is_latest_version(suppress_on_error=True):try:fromurllib.requestimportRequest,urlopenimportjsonfromjinaimport__version__importwarningsreq=Request('https://api.jina.ai/latest',headers={'User-Agent':'Mozilla/5.0'})withurlopen(req,timeout=5)asresp:# 'with' is important to close the resource after uselatest_ver=json.load(resp)['version']frompackaging.versionimportVersionlatest_ver=Version(latest_ver)cur_ver=Version(__version__)ifcur_ver<latest_ver:fromjina.logging.predefinedimportdefault_loggerdefault_logger.warning(f'You are using Jina version {cur_ver}, however version {latest_ver} is available. 'f'You should consider upgrading via the "pip install --upgrade jina" command.')returnFalsereturnTrueexcept:# no network, two slow, api.jina.ai is downifnotsuppress_on_error:raise
[docs]defmain():"""The main entrypoint of the CLI """_quick_ac_lookup()fromcliimportapiargs=_get_run_args()# checking version info in another threadimportthreadingthreading.Thread(target=_is_latest_version,daemon=True).start()getattr(api,args.cli.replace('-','_'))(args)