3 ©ft`2Jã@s’dZddlmZddlmZddlmZddlZddlZddlZddlm Z ddl m Z ddl m Z mZdd lmZd d „ZGd d „d e jƒZdS)zUpdateInfo CLI command.é)Úabsolute_import)Úprint_function)Úunicode_literalsN)Úcommands)Ú OptionParser)Ú_Ú exact_width)ÚunicodecCstdd„|DƒƒS)z7Return maximum length of items in a non-empty iterable.css|]}t|ƒVqdS)N)r)Ú.0Úitem©r ú /usr/lib/python3.6/updateinfo.pyú &sz_maxlen..)Úmax)Úiterabler r r Ú_maxlen$src s.eZdZdZejedƒejedƒejedƒej edƒej edƒiZ edƒedƒed ƒed ƒd œZ d d d d d d ddœZ dgee jƒƒZedƒZdZdddegZ‡fdd„Zedd„ƒZdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Z d.d/„Z!d0d1„Z"d2d3„Z#d4d5„Z$‡Z%S)6ÚUpdateInfoCommandz)Implementation of the UpdateInfo command.ÚbugfixÚ enhancementÚsecurityÚunknownÚ newpackagez Critical/Sec.zImportant/Sec.z Moderate/Sec.zLow/Sec.)ÚCriticalÚ ImportantÚModerateÚLowÚlistÚinfoÚsummary)zlist-updateinfoz list-securityzlist-seczinfo-updateinfoz info-securityzinfo-seczsummary-updateinfoZ updateinfoz!display advisories about packagesÚ availableÚ installedÚupdatesÚallcstt|ƒj|ƒd|_dS)zInitialize the command.N)ÚsuperrÚ__init__Ú_installed_query)ÚselfÚcli)Ú __class__r r r$CszUpdateInfoCommand.__init__c Cs|jƒ}|jddddtdƒd�|jddddtd ƒd�|jd dd dtd ƒd�|jd dddtdƒd�dddg}|jƒ}|jddddtdƒd�|jddddtdƒd�|jddddtdƒd�|jddddtdƒd�|jd d!ddtd"ƒd�|jd#d$d%||d&tjtd'ƒd(�dS))Nz --availableÚ _availabilityrÚ store_constz?advisories about newer versions of installed packages (default))ÚdestÚconstÚactionÚhelpz --installedr z?advisories about equal and older versions of installed packagesz --updatesr!zbadvisories about newer versions of those installed packages for which a newer version is availablez--allr"z3advisories about any versions of installed packagesrrrz --summaryÚ _spec_actionz$show summary of advisories (default)z--listzshow list of advisoriesz--infozshow info of advisoriesz --with-cveÚwith_cveFÚ store_truez'show only advisories with CVE reference)r+Údefaultr-r.z --with-bzÚwith_bzz,show only advisories with bugzilla referenceÚspecÚ*ZSPECrzPackage specification)ÚnargsÚmetavarÚchoicesr2r-r.)Zadd_mutually_exclusive_groupÚ add_argumentrrZPkgNarrowCallback)ÚparserÚ availabilityZcmdsZ output_formatr r r Ú set_argparserHsD                zUpdateInfoCommand.set_argparsercCsæd|jj_d|jj_|jj|jkr6|j|jj|j_n|jjrJ|jj|j_|jj r`|jj |j_ n:|jj s||jj d|j krˆ|j |j_ n|jj jdƒ|j_ tƒ|j_|jjr¼|jjjtjƒ|jjrÔ|jjjtjƒ|jjrì|jjjtjƒ|jj�r|jjjtjƒ|jj �rÆ|jj jdƒ}|dk�r:|jjjtjƒnŒ|dk�rV|jjjtjƒnp|d k�rr|jjjtjƒnT|dk�rŽ|jjjtjƒn8|d k�r¢d|j_n$|d k�r¶d|j_n|jj jd|ƒ|jj�râ|jj j|jjƒd S)zADo any command-specific configuration based on command arguments.TrrrrÚsecrÚ bugzillasÚbzsÚcvesN)rr=)r>r?) r'ZdemandsZavailable_reposZsack_activationÚoptsZcommandÚdirect_commandsÚ spec_actionr/r)r;r4ÚavailabilitiesÚavailability_defaultÚpopÚsetÚ_advisory_typesrÚaddÚhawkeyÚADVISORY_BUGFIXrÚADVISORY_ENHANCEMENTrÚADVISORY_NEWPACKAGErÚADVISORY_SECURITYr3r0ÚinsertÚadvisoryÚextend)r&r4r r r Ú configurensJ                zUpdateInfoCommand.configurecCsÂ|jjdkr$|j|jjƒ}tdƒ}n^|jjdkrH|j|jjƒ}tdƒ}n:|jjdkrl|j|jjƒ}tdƒ}n|j|jjƒ}tdƒ}|jjdkrš|j |ƒn$|jjdkr²|j |ƒn |j ||ƒdS)z#Execute the command with arguments.r r!r"rrrN) rAr;Úinstalled_apkg_adv_instsr4rÚupdating_apkg_adv_instsÚall_apkg_adv_instsÚavailable_apkg_adv_instsrCÚ display_listÚ display_infoÚdisplay_summary)r&Úapkg_adv_instsÚ descriptionr r r Úrun¤s           zUpdateInfoCommand.runcCs@|jdkr |jjjƒjƒjƒ|_|jj|j|jd�}t |ƒdkS)N)ÚnameZevr__gter) r%ÚbaseÚsackÚqueryr ZapplyÚfilterr]ÚevrÚlen)r&ÚapackageÚqr r r Ú_newer_equal_installedºs z(UpdateInfoCommand._newer_equal_installedcs,|jj rJ|jj rJ|jj rJ|jj rJ|jj rJ|jj rJ|jj rJdSˆj|jjkr\dSt ‡fdd„|jjDƒƒrzdS|jjr”ˆj|jjkr”dS|jjrºt ‡fdd„|jjDƒƒrºdS|jjràt ‡fdd„|jjDƒƒràdS|jj�rt dd„ˆj Dƒƒ�rdS|jj�r(t dd„ˆj Dƒƒ�r(dSd S) NTc3s|]}tjˆj|ƒVqdS)N)ÚfnmatchÚ fnmatchcaseÚid)r Úpat)rPr r rËsz6UpdateInfoCommand._advisory_matcher..csg|]}ˆj|ƒ‘qSr )Z match_bug)r Zbug)rPr r ú Ïsz7UpdateInfoCommand._advisory_matcher..csg|]}ˆj|ƒ‘qSr )Z match_cve)r Zcve)rPr r rkÑscSsg|]}|jtjk‘qSr )ÚtyperJÚ REFERENCE_CVE)r Úrefr r r rkÔscSsg|]}|jtjk‘qSr )rlrJÚREFERENCE_BUGZILLA)r rnr r r rk×sF) rArHr4ÚseverityZbugzillar@r0r3rlÚanyÚ references)r&rPr )rPr Ú_advisory_matcherÀs2       ""  z#UpdateInfoCommand._advisory_matcherc#shxb|j|ƒD]T‰ˆj|jjƒ}|j|ƒ}t‡fdd„|jjDƒƒ}|sJ|r |jˆƒ}ˆ||fVq WdS)z4Return (adv. package, advisory, installed) triplets.c3s|]}tjˆj|ƒVqdS)N)rgrhr])r rj)rdr r ràszAUpdateInfoCommand._apackage_advisory_installed..N) Zget_advisory_pkgsZ get_advisoryr^r_rsrqrAr4rf)r&Z pkgs_queryZcmptypeÚspecsrPZadvisory_matchZapackage_matchr r )rdr Ú_apackage_advisory_installedÛs   z.UpdateInfoCommand._apackage_advisory_installedcCs@|jj}|jƒjdd�}|jƒ}|r<|j|jƒj|jd�ƒ}|S)z.z %*s %sé)r„ÚprintrrJrMrNrKrLÚADVISORY_UNKNOWNrr r^ÚconfZautocheck_running_kernelr'Z_check_running_kernel) r&rZr[Ztyp2cntZ label_countsÚwidthÚindentÚlabelÚcountr r r rYs2 $ z!UpdateInfoCommand.display_summaryc sÞ‡fdd„}‡fdd„}tƒ}xÂ|D]º\}}}d|j|j|jf}ˆjjsRˆjjrºxŠ|jD]Z} | jt j krxˆjj rxqZn| jt j kr�ˆjj r�qZ|j|j f|j |||jftƒƒ| j<qZWq$|j|j f|j |||jftƒƒ|j<q$Wg} d} } } xŠt|jƒdd„d �D]r\\}}}}t| t|ƒƒ} xR|jƒD]F\}}t| t|ƒƒ} ||Ž}t| t|ƒƒ} | j||ƒ||||fƒ�q.W�qWxZ| D]R\}}}}}ˆjjj�r¼td || || || ||fƒntd || || ||fƒ�q„Wd S) zDisplay the list of advisories.cs ˆjjdksdS|rdSdSdS)Nr"Úzi z )rAr;)Úinst)r&r r Ú inst2mark2s  z1UpdateInfoCommand.display_list..inst2markcs2|tjkrˆjj|tdƒƒSˆjj|tdƒƒSdS)Nz Unknown/Sec.r)rJrNÚSECURITY2LABELÚgetrÚ TYPE2LABEL)ÚtypZsev)r&r r Ú type2label:s z2UpdateInfoCommand.display_list..type2labelz%s-%s.%srcSs|dS)Nrr )Úxr r r ÚRsz0UpdateInfoCommand.display_list..)Úkeyz%s%-*s %-*s %-*s %sz%s%-*s %-*s %sN)Údictr]rbÚarchrAr0r3rrrlrJrormrpÚ setdefaultÚupdatedriÚsortedÚitemsrrcÚappendr^rŠÚverboserˆ)r&rZr‘r–Znevra_inst_dictrƒrPr ZnevrarnZadvlistZidwZtlwZnwr�Zaupdatedr‚ZaidZatypesevr�r )r&r rW0s4   *( $$ zUpdateInfoCommand.display_listc s°ˆjjjƒ‰ˆjjj‰tdƒtdƒtdƒtdƒtdƒtdƒtdƒtdƒtd ƒtd ƒf ‰‡‡‡‡fd d „}tƒ}x"|D]\}}}|j|||ƒƒqtWtd j t |dd„d�ƒƒdS)z/Display the details about available advisories.z Update IDZTypeZUpdatedZBugsZCVEsZ DescriptionZSeverityZRightsZFilesZ Installedc sÐ|jgˆjj|jtdƒƒgt|jƒggg|jp0djƒ|j g|j pBdjƒt t ‡fdd„|j Dƒƒƒdg }xV|jD]L}|jtjkrž|djdj|j|jp–dƒƒqn|jtjkrn|dj|jƒqnW|djƒ|djƒˆsêd|d<d|d <ˆjjd k�r|�rtd ƒntd ƒg|d <tˆƒ}g}|jddƒ|jd|jƒ|jddƒxxtˆ|ƒD]j\}}|ddgfk�rt�qXxJt|ƒD]>\}} |dk�r”|nd} |t| ƒ} |jd| d| | fƒ�q~W�qXWdj|ƒS)Nrr�c3s|]}|jˆkr|jVqdS)N)r›Úfilename)r Zpkg)Úarchesr r rsszHUpdateInfoCommand.display_info..advisory2info..éz{} - {}r‡éér"ÚtrueZfalseé ú=éOz rz %*s%s: %sÚ )rir”r“rlrr r�r[Ú splitlinesrpZrightsržrGZpackagesrrrJror ÚformatÚtitlermÚsortrAr;rÚzipÚ enumeraterÚjoin) rPr Z attributesrnr‹Úlinesr�Z atr_linesÚiÚliner™Z key_padding)r£Úlabelsr&r¡r r Ú advisory2infoisF          "z5UpdateInfoCommand.display_info..advisory2infoz cSs|jƒS)N)Úlower)r—r r r r˜•sz0UpdateInfoCommand.display_info..)r™N) r^r_Z list_archesrŠr¡rrGrIrˆr²rž)r&rZr·Z advisoriesrƒrPr r )r£r¶r&r¡r rXas  (zUpdateInfoCommand.display_info)&Ú__name__Ú __module__Ú __qualname__Ú__doc__rJrKrrLrNr‰rMr”r’rBrÚkeysÚaliasesrrErDr$Ú staticmethodr<rRr\rfrsrurzrVrSrTrUr„rYrWrXÚ __classcell__r r )r(r r)sJ        &6   1r)r¼Z __future__rrrrrgrJZdnf.clirZdnf.cli.option_parserrZdnf.i18nrrZ dnf.pycompr rZCommandrr r r r Ús