a !c:J@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_widthunicodecCstdd|DS)z7Return maximum length of items in a non-empty iterable.css|]}t|VqdSN)r).0itemr?/usr/lib/python3.9/site-packages/dnf/cli/commands/updateinfo.py &z_maxlen..)max)iterablerrr_maxlen$src s0eZdZdZejedejedejedej edej ediZ ededed ed d Z d d d d d d ddZ ddgee ZedZdZdddegZfddZeddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Z d/d0Z!d1d2Z"d3d4Z#d5d6Z$Z%S)7UpdateInfoCommandz)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 updateinfoZupifz!display advisories about packages available installedupdatesallcstt||d|_dS)zInitialize the command.N)superr__init___installed_query)selfcli __class__rrr'CszUpdateInfoCommand.__init__c Cs|}|jddddtdd|jddddtd d|jd dd dtd d|jd dddtddgd}|}|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 packages)r!rr z --summary _spec_actionr!z$show summary of advisories (default)z--listrzshow list of advisoriesz--infor zshow info of advisoriesz --with-cvewith_cveF store_truez'show only advisories with CVE reference)r/defaultr1r2z --with-bzwith_bzz,show only advisories with bugzilla referencespec*ZSPECrzPackage specification)nargsmetavarchoicesr6r1r2)add_mutually_exclusive_group add_argumentrrZPkgNarrowCallback)parser availabilityZcmdsZ output_formatrrr set_argparserHsX      zUpdateInfoCommand.set_argparsercCsd|jj_d|jj_|jj|jvr6|j|jj|j_n|jjrJ|jj|j_|jj r`|jj |j_ n8|jj rz|jj d|j vr|j |j_ n|jj d|j_ t|j_|jjr|jjtj|jjr|jjtj|jjr|jjtj|jjr|jjtj|jj r|jj d}|dkr8|jjtjn|dkrT|jjtjnp|dvrp|jjtjnT|dkr|jjtjn8|dvrd|j_n$|dkrd|j_n|jj d||jjr|jj |jjd S) zADo any command-specific configuration based on command arguments.Trrr)rZsecr)Z bugzillasZbzscvesN) r*ZdemandsZavailable_reposZsack_activationoptsZcommanddirect_commands spec_actionr3r-r@r8availabilitiesavailability_defaultpopset_advisory_typesraddhawkeyADVISORY_BUGFIXrADVISORY_ENHANCEMENTrADVISORY_NEWPACKAGErADVISORY_SECURITYr7r4insertadvisoryextend)r)r8rrr configurensJ                zUpdateInfoCommand.configurecCs|jjdkr$||jj}td}n^|jjdkrH||jj}td}n:|jjdkrl||jj}td}n||jj}td}|jjdkr| |n$|jjdkr| |n | ||dS)z#Execute the command with arguments.r#r$r%r"rr N) rCr@installed_apkg_adv_instsr8rupdating_apkg_adv_instsall_apkg_adv_instsavailable_apkg_adv_instsrE display_list display_infodisplay_summary)r)apkg_adv_insts descriptionrrrruns           zUpdateInfoCommand.runcCs@|jdur |jj|_|jj|j|jd}t |dkS)N)nameZevr__gter) r(basesackqueryr#Zapplyfilterr_evrlen)r)apackageqrrr_newer_equal_installeds z(UpdateInfoCommand._newer_equal_installedcs|jjs<|jjs<|jjs<|jjs<|jjs<|jjs<|jjs.csg|]}|qSr)Z match_bug)r Zbugrnrr rz7UpdateInfoCommand._advisory_matcher..csg|]}|qSr)Z match_cve)r ZcvernrrrorcSsg|]}|jtjkqSr)typerL REFERENCE_CVEr refrrrrorcSsg|]}|jtjkqSr)rprLREFERENCE_BUGZILLArrrrrrorF) rCrJr8severityZbugzillarBr4r7rpany references)r)rRrrnr_advisory_matchers>"" z#UpdateInfoCommand._advisory_matcherc#sd||D]T|jj}||}tfdd|jjD}|sH|r |}||fVq dS)z4Return (adv. package, advisory, installed) triplets.c3s|]}tj|VqdSr )rirjr_rlrfrrrszAUpdateInfoCommand._apackage_advisory_installed..N) Zget_advisory_pkgsZ get_advisoryr`rarxrvrCr8rh)r)Z pkgs_queryZcmptypespecsrRZadvisory_matchZapackage_matchr#rryr_apackage_advisory_installeds   z.UpdateInfoCommand._apackage_advisory_installedcCs@|jj}|jdd}|}|r<||j|jd}|S)z.z %*s %s)rprintrrLrOrPrMrNADVISORY_UNKNOWNrr r`confZautocheck_running_kernelr*Z_check_running_kernel) r)r\r]Ztyp2cntZ label_countswidthindentlabelcountrrrr[s>      " z!UpdateInfoCommand.display_summaryc sfdd}fdd}t}|D]\}}}d|j|j|jf}jjsPjjr|jD]V} | jt j krrjjsrqVn| jt j krjjsqV|j|j f| |||jft| j<qVq"|j|j f| |||jft|j<q"g} d} } } t|ddd D]l\\}}}}t| t|} |D]F\}}t| t|} ||}t| t|} | ||||||fqq| D]R\}}}}}jjjrtd || || || ||fntd || || ||fqld S) zDisplay the list of advisories.cs jjdksdS|rdSdSdS)Nr%zi  )rCr@)instr)rr inst2mark2s  z1UpdateInfoCommand.display_list..inst2markcs2|tjkrj|tdSj|tdSdS)Nz Unknown/Sec.r)rLrPSECURITY2LABELgetr TYPE2LABEL)typZsevrrr type2label:s z2UpdateInfoCommand.display_list..type2labelz%s-%s.%srcSs|dS)NrrxrrrRrz0UpdateInfoCommand.display_list..keyz%s%-*s %-*s %-*s %sz%s%-*s %-*s %sN)dictr_rdarchrCr4r7rwrprLrtrqru setdefaultupdatedrksorteditemsrreappendr`rverboser)r)r\rrZnevra_inst_dictrrRr#ZnevrarsZadvlistZidwZtlwZnwrZaupdatedrZaidZatypesevrrrrrY0s8     " zUpdateInfoCommand.display_listc sjjjjjtdtdtdtdtdtdtdtdtd td f fd d }t}|D]\}}}||||qrtd t |ddddS)z/Display the details about available advisories.z Update IDTypeZUpdatedZBugsZCVEsZ DescriptionZSeverityZRightsZFilesZ Installedc s|jgj|jtdgt|jggg|jp0d|j g|j pBdt t fdd|j Ddg }|jD]L}|jtjkr|dd|j|jpdql|jtjkrl|d|jql|d|dsd|d<d|d <jjd kr|rtd ntd g|d <t}g}|d|d|j|dt|D]f\}}|ddgfvrfqJt|D]>\}} |dkr|nd} |t| } |d| d| | fqnqJd|S)Nrrc3s|]}|jvr|jVqdSr )rfilename)r pkg)archesrrrss zHUpdateInfoCommand.display_info..advisory2info..z{} - {}rr%trueZfalse zO===============================================================================rrz %*s%s: %s )rkrrrprr rr] splitlinesruZrightsrrIZpackagesrwrLrtrformattitlerqsortrCr@rzip enumeraterjoin) rRr#Z attributesrsrlinesrZ atr_linesilinerZ key_paddingrlabelsr)rrr advisory2infoisH            z5UpdateInfoCommand.display_info..advisory2infoz cSs|Sr )lowerrrrrrrz0UpdateInfoCommand.display_info..rN) r`raZ list_archesrrrrIrKrrr)r)r\rZ advisoriesrrRr#rrrrZas   (zUpdateInfoCommand.display_info)&__name__ __module__ __qualname____doc__rLrMrrNrPrrOrrrDrkeysaliasesr!rGrFr' staticmethodrArTr^rhrxr{rrXrUrVrWrr[rYrZ __classcell__rrr+rr)sR        %6   1r)rZ __future__rrrrrirLZdnf.clirZdnf.cli.option_parserrZdnf.i18nrrZ dnf.pycompr rZCommandrrrrrs