3 ft`2J@sdZddlmZddlmZddlmZddlZddlZddlZddlm Z ddl m Z ddl m Z mZdd lmZd d ZGd d d e jZdS)zUpdateInfo CLI command.)absolute_import)print_function)unicode_literalsN)commands) OptionParser)_ exact_width)unicodecCstdd|DS)z7Return maximum length of items in a non-empty iterable.css|]}t|VqdS)N)r).0itemr /usr/lib/python3.6/updateinfo.py &sz_maxlen..)max)iterabler r r _maxlen$src s.eZdZdZejedejedejedej edej ediZ ededed ed d Z d d d d d d ddZ dgee jZedZdZdddegZfddZeddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Z d.d/Z!d0d1Z"d2d3Z#d4d5Z$Z%S)6UpdateInfoCommandz)Implementation of the UpdateInfo command.bugfix enhancementsecurityunknown newpackagez Critical/Sec.zImportant/Sec.z Moderate/Sec.zLow/Sec.)Critical ImportantModerateLowlistinfosummary)zlist-updateinfoz list-securityzlist-seczinfo-updateinfoz info-securityzinfo-seczsummary-updateinfoZ updateinfoz!display advisories about packages available installedupdatesallcstt|j|d|_dS)zInitialize the command.N)superr__init___installed_query)selfcli) __class__r r r$CszUpdateInfoCommand.__init__c Cs|j}|jddddtdd|jddddtd d|jd dd dtd d|jd dddtdddddg}|j}|jddddtdd|jddddtdd|jddddtdd|jddddtdd|jd d!ddtd"d|jd#d$d%||d&tjtd'd(dS))Nz --available _availabilityr store_constz?advisories about newer versions of installed packages (default))destconstactionhelpz --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-cvewith_cveF store_truez'show only advisories with CVE reference)r+defaultr-r.z --with-bzwith_bzz,show only advisories with bugzilla referencespec*ZSPECrzPackage specification)nargsmetavarchoicesr2r-r.)Zadd_mutually_exclusive_group add_argumentrrZPkgNarrowCallback)parser availabilityZcmdsZ output_formatr r r set_argparserHsD                zUpdateInfoCommand.set_argparsercCsd|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|jjr|jjjtj|jj r|jj jd}|dkr:|jjjtjn|dkrV|jjjtjnp|d krr|jjjtjnT|dkr|jjjtjn8|d krd|j_n$|d krd|j_n|jj jd||jjr|jj j|jjd S)zADo any command-specific configuration based on command arguments.Trrrrsecr bugzillasbzscvesN)rr=)r>r?) r'ZdemandsZavailable_reposZsack_activationoptsZcommanddirect_commands spec_actionr/r)r;r4availabilitiesavailability_defaultpopset_advisory_typesraddhawkeyADVISORY_BUGFIXrADVISORY_ENHANCEMENTrADVISORY_NEWPACKAGErADVISORY_SECURITYr3r0insertadvisoryextend)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_instsr4rupdating_apkg_adv_instsall_apkg_adv_instsavailable_apkg_adv_instsrC display_list display_infodisplay_summary)r&apkg_adv_insts descriptionr r r runs           zUpdateInfoCommand.runcCs@|jdkr |jjjjj|_|jj|j|jd}t |dkS)N)nameZevr__gter) r%basesackqueryr Zapplyfilterr]evrlen)r&apackageqr r r _newer_equal_installeds z(UpdateInfoCommand._newer_equal_installedcs,|jj rJ|jj rJ|jj rJ|jj rJ|jj rJ|jj rJ|jj rJdSj|jjkr\dSt fdd|jjDrzdS|jjrj|jjkrdS|jjrt fdd|jjDrdS|jjrt fdd|jjDrdS|jjrt ddj DrdS|jjr(t ddj Dr(dSd S) NTc3s|]}tjj|VqdS)N)fnmatch fnmatchcaseid)r pat)rPr r rsz6UpdateInfoCommand._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 rkscSsg|]}|jtjkqSr )typerJ REFERENCE_CVE)r refr r r rkscSsg|]}|jtjkqSr )rlrJREFERENCE_BUGZILLA)r rnr r r rksF) rArHr4severityZbugzillar@r0r3rlany references)r&rPr )rPr _advisory_matchers2       ""  z#UpdateInfoCommand._advisory_matcherc#shxb|j|D]Tj|jj}|j|}tfdd|jjD}|sJ|r |j}||fVq WdS)z4Return (adv. package, advisory, installed) triplets.c3s|]}tjj|VqdS)N)rgrhr])r rj)rdr r rszAUpdateInfoCommand._apackage_advisory_installed..N) Zget_advisory_pkgsZ get_advisoryr^r_rsrqrAr4rf)r&Z pkgs_queryZcmptypespecsrPZadvisory_matchZapackage_matchr r )rdr _apackage_advisory_installeds   z.UpdateInfoCommand._apackage_advisory_installedcCs@|jj}|jjdd}|j}|r<|j|jj|jd}|S)z.z %*s %s)rprintrrJrMrNrKrLADVISORY_UNKNOWNrr r^confZautocheck_running_kernelr'Z_check_running_kernel) r&rZr[Ztyp2cntZ label_countswidthindentlabelcountr r r rYs2 $ z!UpdateInfoCommand.display_summaryc sfdd}fdd}t}x|D]\}}}d|j|j|jf}jjsRjjrx|jD]Z} | jt j krxjj rxqZn| jt j krjj rqZ|j|j f|j |||jft| j<qZWq$|j|j f|j |||jft|j<q$Wg} d} } } xt|jddd D]r\\}}}}t| t|} xR|jD]F\}}t| t|} ||}t| t|} | j||||||fq.WqWxZ| D]R\}}}}}jjjrtd || || || ||fntd || || ||fqWd S) zDisplay the list of advisories.cs jjdksdS|rdSdSdS)Nr"zi z )rAr;)inst)r&r r inst2mark2s  z1UpdateInfoCommand.display_list..inst2markcs2|tjkrjj|tdSjj|tdSdS)Nz Unknown/Sec.r)rJrNSECURITY2LABELgetr 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]rbarchrAr0r3rrrlrJrormrp setdefaultupdatedrisorteditemsrrcappendr^rverboser)r&rZrrZnevra_inst_dictrrPr ZnevrarnZadvlistZidwZtlwZnwrZaupdatedrZaidZatypesevrr )r&r rW0s4   *( $$ zUpdateInfoCommand.display_listc sjjjjjjtdtdtdtdtdtdtdtdtd td f fd d }t}x"|D]\}}}|j|||qtWtd j t |ddddS)z/Display the details about available advisories.z Update IDZTypeZUpdatedZBugsZCVEsZ DescriptionZSeverityZRightsZFilesZ Installedc s|jgjj|jtdgt|jggg|jp0dj|j g|j pBdjt t fdd|j Ddg }xV|jD]L}|jtjkr|djdj|j|jpdqn|jtjkrn|dj|jqnW|dj|djsd|d<d|d <jjd kr|rtd ntd g|d <t}g}|jdd|jd|j|jddxxt|D]j\}}|ddgfkrtqXxJt|D]>\}} |dkr|nd} |t| } |jd| d| | fq~WqXWdj|S)Nrrc3s|]}|jkr|jVqdS)N)rfilename)r Zpkg)archesr r rsszHUpdateInfoCommand.display_info..advisory2info..z{} - {}rr"trueZfalse =Oz rz %*s%s: %s )rirrrlrr rr[ splitlinesrpZrightsrrGZpackagesrrrJrorformattitlermsortrAr;rzip enumeraterjoin) rPr Z attributesrnrlinesrZ atr_linesilinerZ key_padding)rlabelsr&rr r advisory2infoisF          "z5UpdateInfoCommand.display_info..advisory2infoz cSs|jS)N)lower)rr r r rsz0UpdateInfoCommand.display_info..)rN) r^r_Z list_archesrrrrGrIrrr)r&rZrZ advisoriesrrPr r )rrr&rr rXas  (zUpdateInfoCommand.display_info)&__name__ __module__ __qualname____doc__rJrKrrLrNrrMrrrBrkeysaliasesrrErDr$ staticmethodr<rRr\rfrsrurzrVrSrTrUrrYrWrX __classcell__r r )r(r r)sJ        &6   1r)rZ __future__rrrrrgrJZdnf.clirZdnf.cli.option_parserrZdnf.i18nrrZ dnf.pycompr rZCommandrr r r r s