a ©!cA¢ã@sÄddlmZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl mZmZmZddlZejjjZejjjZejjjZejjjZedƒZedƒZdd „ZGd d „d eƒZ d d „Z!dS)é)Ú OrderedDictN)ÚEnableMultipleStreamsException)Úlogger)Ú_ÚP_Úucdz6 Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalledz@ Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctivecCs| ¡S©N©ÚgetName)Úprofile©r ú:/usr/lib/python3.9/site-packages/dnf/module/module_base.pyÚ_profile_comparison_key'src@seZdZdd„Zdd„Zdd„ZdBdd „ZdCd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dDdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„ZdEd%d&„Zd'd(„Zd)d*„Zd+d,„ZdFd-d.„Zd/d0„Zed1d2„ƒZd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAS)GÚ ModuleBasecCs ||_dSr)Úbase)Úselfrr r r Ú__init__.szModuleBase.__init__c Csj| |¡\}}}}| ¡D],\}\}}|jrt tdƒ |j|j¡¡q|sT|sT|rftj j |||d‚dS)Nú%Ignoring unnecessary profile: '{}/{}'©Úno_match_group_specsZerror_group_specsÚmodule_depsolv_errors) Ú!_resolve_specs_enable_update_sackÚitemsr rÚinforÚformatÚnameÚdnfÚ exceptionsÚ MarkingErrors) rÚ module_specsÚno_match_specsÚ error_specsÚ solver_errorsÚ module_dictsÚspecÚnsvcapÚ module_dictr r r Úenable2sÿ  ÿ þzModuleBase.enablecCs,| |t¡\}}|s|r(tjj||d‚dS©N)rr)Ú_modules_reset_or_disableÚSTATE_DISABLEDrrr©rrr r"r r r Údisable?s ÿzModuleBase.disableTc s܈ |¡\}}}}tj}i}tƒ} d} | ¡D]J\} \} } |  ¡D]2\}}| ¡D]\}}‡fdd„|Dƒ}|sšt tdƒ | ||¡¡|  | ¡qVg}ˆ  |¡}|  ¡|krÖtdƒ}t  | |  ¡|¡¡d} | jrX| | | j¡¡|s| ¡}|r2d tdd„|Dƒƒ¡}td ƒ | |||¡}ntd ƒ | ¡}t |¡|  | ¡qVnÀˆjj ||¡}|sÌ| ¡}|r¨d td d„|Dƒƒ¡}td ƒ |||¡}ntd ƒ ||¡}t |¡|  | ¡t|ƒD]B}| |¡}|s t tdƒ |||¡¡|  | ¡| |¡qÔ|D]>}ˆjj || ¡¡| ¡D]}| |tƒ¡ | ¡q<q|D]}|  | ¡¡q`qVqDq.| r’tj tdƒ¡‚ˆ  | ||¡\}}|r´| |¡|sÆ|sÆ|rØtjj!|||d‚dS)NFcs"g|]}ˆjj | ¡¡r|‘qSr ©rÚ_moduleContainerÚisModuleActiveZgetId©Ú.0Úx©rr r Ú Ssÿz&ModuleBase.install..zAAll matches for argument '{0}' in module '{1}:{2}' are not activeúDInstalling module '{0}' from Fail-Safe repository {1} is not allowedTú, cSsg|] }| ¡‘qSr r ©r1r r r r r4góúKUnable to match profile for argument {}. Available profiles for '{}:{}': {}ú'Unable to match profile for argument {}cSsg|] }| ¡‘qSr r r7r r r r4wr8z}!ˆjj ||!  ¡¡|! !¡D]}| "|tƒ¡  | ¡q¢q‚|D]\} |  ¡}#| #|#¡|#D]>}|  dd¡d}||vrqà|  dd¡d}|  |¡qàqÆq$qqü|rDt$j% &tdƒ¡‚ˆ '|||¡\}$}%|%rf|  |%¡tƒ}&|& #|¡|& #|¡ˆjj( ¡j)dd}'ˆjj( ¡j)ddgd *¡}(|&D]ž}|(j+|d})|) ,¡}*|*sÖq´|) -¡}+|+st tdƒ |¡¡||vr´|' .|)¡}'q´|) /|$¡},|,r$|,})t$j0 1ˆjj(¡}-|-j|)dˆjj2j3|-dq´ˆj 4|'¡|sr|sr|r„t$j%j5|||d‚dS)NÚnosrcÚsrcÚÚ.éú-érFcs"g|]}ˆjj | ¡¡r|‘qSr r-r0r3r r r4Àsÿz(ModuleBase.switch_to..z8No active matches for argument '{0}' in module '{1}:{2}'r5Tr6cSsg|] }| ¡‘qSr r r7r r r r4Õr8r9r:zEInstalled profile '{0}' is not available in module '{1}' stream '{2}'r;©Úempty©Z arch__neq©rz9No packages available to distrosync for package name '{}'©Úpkg©Úselectr)6Ú_resolve_specs_enabler>rÚkeysrr.Úqueryr/rOÚrsplitrMÚ _update_sackÚ_enable_dependenciesrEr<r=ZgetRemovedProfilesrr?rrr@rArBrCrDr rFrGrHZwarningrJr rKrLrNrrrPrQÚsackÚfiltermÚapplyÚfilterÚ installedÚ availableÚunionÚ intersectionÚselectorÚSelectorÚ_goalZ distupgradeÚ_remove_if_unneededr).rrrRr r!r#Znew_artifacts_namesZactive_artifacts_namesZ src_archesr$r%rWrrcÚartifactÚarchrbr"Údependency_error_specrSrTrUrVZremoved_profilesrXrYrZr[r\r]r^r_r`r raÚ artifactsÚinstall_base_queryreZ all_namesZ remove_queryÚbase_no_source_queryrwrr€Zonly_new_moduleÚsltrr r3r Ú switch_to›sî      ÿ  ÿ ÿþ     ÿÿ   ÿÿ     ÿ     þzModuleBase.switch_tocCs(| |t¡\}}|r$tjj||d‚dSr()r)Ú STATE_UNKNOWNrrrr+r r r Úresets ÿzModuleBase.resetc sg}tj}d}ˆjj ¡jddgd ¡}|D]º}ˆ |¡\}}|sR| |¡q.‡fdd„|Dƒ} | s~t   t dƒ  |¡¡q.ˆ  | |d¡} tƒ} |  ¡D]ø\} } |  ¡D]æ\}}|  ˆ ||¡¡ˆ |¡}| ¡|krüt dƒ}t  |  | ¡|¡¡d }|jr4| |j¡}|sqª|D]}|  | ¡¡qqª| ¡D]}|  | ¡¡q<| ¡D]4}t |¡}|jtjgd D]}|  |j¡qxqZqªqš| s®t   t d ƒ  |¡¡|j| d }|r.t j! "ˆjj¡}|j|d ˆjj#j$|dq.|rt j% &t dƒ¡‚|S)NFrgrfrocs"g|]}ˆjj | ¡¡r|‘qSr r-r0r3r r r43sÿz&ModuleBase.upgrade..úUnable to resolve argument {}zCUpgrading module '{0}' from Fail-Safe repository {1} is not allowedT)Zformsú&Unable to match profile in argument {}rprqrsz9Upgrading module from Fail-Safe repository is not allowed)'r<r=rr{rwr|r}Ú _get_modulesr@rr?rrÚ_create_module_dict_and_enabler>rrNÚ)_get_package_name_set_and_remove_profilesrArBrCrDr rFrKrOÚSubjectZget_nevra_possibilitiesZ FORM_NEVRArMrr~rrƒr„r…ÚupgraderrP)rrr rSrVrŒr$rZr%Zupdate_module_listr&Zupgrade_package_setrrXrYÚmodule_list_from_dictr]r^Ú profiles_setr r‡ÚsubjZ nevra_objrwrr r3r r—%sj  ÿ  ÿ    ÿ   ÿzModuleBase.upgradec Csèg}tƒ}|D]Ž}| |¡\}}|s0| |¡q| ||d¡}g}| ¡D].\} } |  ¡D]\} } | | | |d¡¡qZqJ|s’t t dƒ  |¡¡|  |¡q|rä|j j  ¡} | | ¡}|rä|j j ¡ ¡j|d}|rä|j  |¡|S)NFTr’rp)r>r“r@r”rrEr•rr?rrrNrr.ZgetInstalledPkgNamesÚ differencer{rwrr|r†)rrr Zremove_package_setr$rZr%r&Zremove_packages_namesrrXrYr˜Zkeep_pkg_namesrwr r r Úremove_s2 ÿ     zModuleBase.removecCs | |¡Sr)r“)rÚ module_specr r r Ú get_modules|szModuleBase.get_modulesc Cs t |¡}| ¡D]ˆ}|jr"|jnd}|jr2|jnd}d}|jrF|jnd}|jrV|jnd}|jrt|jdkrtt|jƒ}|j j   |||||¡} | r| |fSqdS)Nrhéÿÿÿÿ)r N) r<r–Znsvcap_possibilitiesrrYÚcontextrˆÚversionÚstrrr.rw) rrršr%rrYr¡r rˆÚmodulesr r r r“€s   zModuleBase._get_modulescCs:d}|r6|d}|dd…D]}| ¡| ¡kr|}q|S)Nrrj)Z getVersionNum)rrZÚlatestrcr r r rAszModuleBase._get_latestc Csri}|D]&}| | ¡i¡ | ¡g¡ |¡q| ¡D]2\}}|jj |¡}t|ƒdkr6|t kr¼|t kr¼|t kr¼d  t | ¡t |jjj¡d¡} tdƒj|t|ƒ| |d} t|| ƒ‚|t krÔ|jj |¡} n|jj |¡} | rî| |vröt|ƒ‚t | ¡ƒD]0} | | kr*|r|jj || ¡q|| =qn&|r\| ¡D]} |jj || ¡qDt|ƒdks8J‚q8|S)Nrjz', '©Úkeyz‡Argument '{argument}' matches {stream_count} streams ('{streams}') of module '{module}', but none of the streams are enabled or default)ÚargumentZ stream_countZstreamsrc)rLr Ú getStreamr@rrr.ZgetModuleStateÚlenÚ STATE_DEFAULTÚ STATE_ENABLEDr*rGrHrvÚ functoolsÚ cmp_to_keyr{Zevr_cmprrrZgetEnabledStreamÚgetDefaultStreamr') rrZr$r'Ú moduleDictrcZ moduleNameÚ streamDictZ moduleStateZ streams_strr^rYr¦r r r r”™sNÿÿÿÿÿ ü     z)ModuleBase._create_module_dict_and_enablec Cs²g}g}i}|D]–}| |¡\}}|s2| |¡qz| ||d¡}||f||<Wqttfy¤} z8| |¡t t| ƒ¡t tdƒ  |¡¡WYd} ~ qd} ~ 00q|||fS)NTr‘) r“r@r”Ú RuntimeErrorrrr?rrr) rrr Ú error_specr#r$rZr%r&Úer r r ru¾s   ,z ModuleBase._resolve_specs_enablec Cs†dd„|jj ¡Dƒ}z4|jjj|jj||jjj|jjjd|jjj d}Wn6t j y€}zt j  t|ƒ¡‚WYd}~n d}~00|S)NcSsg|]}|jr|j‘qSr ©Zmodule_hotfixesÚid©r1Úir r r r4Ñr8z+ModuleBase._update_sack..T)Z update_onlyZ debugsolver)rÚreposÚ iter_enabledr{Zfilter_modulesr.ÚconfZ installrootZmodule_platform_idZ debug_solverr<Ú ExceptionrrrPr)rÚ hot_fix_reposr"r³r r r ryÐs ý &zModuleBase._update_sackc Cs¦g}| ¡D]”\}\}}| ¡D]~}| ¡D]p}z|jj tj |¡¡Wq,tyš}z8|  |¡t   t |ƒ¡t   t dƒ |¡¡WYd}~q,d}~00q,q q |S)Nr‘)rÚvaluesrr.ZenableDependencyTreeÚlibdnfrcZVectorModulePackagePtrr±r@rr?rrr) rr#r²r$r%r¯r°r£r³r r r rzÛs   ÿ 0zModuleBase._enable_dependenciescCs<| |¡\}}}| ¡}| |¡}|r0| |¡||||fSr)ruryrzrE)rrr r²r#r"r‰r r r rés   z,ModuleBase._resolve_specs_enable_update_sackc CsÖg}|D]¼}| |¡\}}|s>t tdƒ |¡¡| |¡q|js\|js\|js\|j s\|j rpt  tdƒ |¡¡t ƒ}|D]}|  | ¡¡qz|D]0} |tkr¬|jj | ¡|tkr’|jj | ¡q’q| ¡} || fS)Nr‘zMOnly module name is required. Ignoring unneeded information in argument: '{}')r“rr?rrr@rYr¡r rˆr rr>rMr rrr.rr*r,ry) rrZto_stater r$rZr%Z module_namesrcrr"r r r r)ôs*  ÿz$ModuleBase._modules_reset_or_disableFc CsÊtƒ}| |¡}t|jj | ¡¡ƒ}|s0tƒS|jrŠ| |j¡}|sLtƒS|D]6}| ¡|vrP|rx|jj || ¡¡|  |  ¡¡qPn<|D]6} |r¦|jj || ¡| | ¡D]}|  |  ¡¡q°qŽ|Sr) r>rArr.ÚgetInstalledProfilesr r rFZ uninstallrNrK) rrZr%rœZpackage_name_setr]Zinstalled_profiles_stringsr™r Zprofile_stringr r r r• s,  ÿ  z4ModuleBase._get_package_name_set_and_remove_profilesc CsÌtƒ}|D]²}| |¡\}}|s6t tdƒ |¡¡q |jrVt tdƒ |j|j¡¡|D]`}tƒ}|  ¡|d<t |  ¡t dD]$}d  dd„| ¡Dƒ¡|| ¡<q€| | |¡ ¡¡qZq d  t |ƒ¡S) Nr‘rÚNamer¥Ú cSsg|]}|‘qSr r )r1ZpkgNamer r r r45r8z1ModuleBase._get_info_profiles..ú )r>r“rrrrr rrÚgetFullIdentifierrHrFrrGrKr rMÚ_create_simple_tableÚtoString) rrÚoutputrrZr%rcÚlinesr r r r Ú_get_info_profiles#s& ÿ ÿzModuleBase._get_info_profilescCs||jj | ¡¡}| ¡}d}t|tdD]D}|d | ¡| ¡|vrJdnd¡7}|| ¡|vrh|rhdnd7}q*|dd…S)Nrhr¥z{}{}ú [d]z [i], r6éþÿÿÿ)rr.r¿r rFrHrr)rÚ modulePackageÚdefault_profilesÚ enabled_strZinstalled_profilesr_Ú profiles_strr r r r Ú_profile_report_formatter:sÿÿÿz$ModuleBase._profile_report_formattercCs| ¡ dd¡S)NrÁú )ÚstripÚreplace)rZsummaryr r r Ú_summary_report_formatterFsz$ModuleBase._summary_report_formattercCs”d}d}d}| ¡|jj | ¡¡kr*d}|jj |¡rJ|s@d}|d7}n|jj |¡rh|s`d}|d7}|rŠ|jj |¡rŠ|s‚d}|d7}|||fS)NrhrÉrÐz[e]z[x]z[a])r¨rr.r®r Z isEnabledZ isDisabledr/)rrËÚ markActiveÚ default_strrÍÚ disabled_strr r r Ú_module_strs_formatterIs(ÿ z!ModuleBase._module_strs_formatterc Csòtƒ}|D]Ä}| |¡\}}|s8t tdƒ |¡¡q |jrXt tdƒ |j|j¡¡|D]p}|j|dd\}}} |j j   |  ¡|  ¡¡} | || |¡} tƒ} |  ¡| d<|  ¡||| | d<| ¡| d<| ¡| d<| ¡| d <| | d <d  | ¡| d <| ¡| d <| ¡| d<| ¡| d<tƒ} | ¡D]B}| ¡D]2}| ¡D]"\}}|  d |d |¡¡¡qJq>q2d t| ƒ¡| d<| ¡}|r¤d |¡| d<d t| ¡ƒ¡| d<| | | ¡ ¡¡q\q d t|ƒ¡}|rî|t 7}|S)Nr‘rT©rÔrÀÚStreamZVersionZContextZ ArchitectureÚProfilesrÐzDefault profilesÚRepoÚSummaryZ Descriptionz{}:[{}]ú,rÁZRequireszDemodularized rpmsZ ArtifactsrÂ)!r>r“rrrrr rr×rr.rIr r¨rÏrZ getVersionZ getContextZgetArchrGrBÚ getSummaryZgetDescriptionZgetModuleDependenciesZ getRequiresrrMrHZgetDemodularizedRpmsrOrÄrÅÚMODULE_INFO_TABLE_HINT)rrrÆrrZr%rËrÕrÍrÖrÌrÎrÇZreq_setZreqZ require_dictZ mod_requirerYZ demodularizedÚ str_tabler r r Ú _get_info^s`  ÿ ÿ  ÿÿ ÿ        $zModuleBase._get_infocCsœtj ¡}| d¡| d¡| d¡}| d¡}| d¡| d¡| ¡|  ¡D]@\}}|durjd}|  ¡}|  |¡  |¡|  |¡  t |ƒ¡qV|S)NTz : rÀZValuerÁrh)r¾Ú smartcolsÚTableZenableNoheadingsZsetColumnSeparatorÚ newColumnÚsetWrapZ setSafecharsZsetNewlineWrapFunctionrÚnewLineÚ getColumnCellÚsetDatar¢)rÇÚtableÚ column_nameZ column_valueZ line_nameÚvalueÚliner r r rÄŽs       zModuleBase._create_simple_tablec CsŠtƒ}|D]l}| |¡\}}|s6t tdƒ |¡¡q |jrVt tdƒ |j|j¡¡|D]}| ¡}|rZ|  |¡qZq d  t |ƒ¡}|S)Nr‘rrÂ) r>r“rrrrr rZgetYamlrMrGrH) rrrÆrrZr%rËrZ output_stringr r r Ú_get_full_info£s  ÿzModuleBase._get_full_infoc Csrtƒ}|jj ¡}|jj ¡jdd ¡}|jjjtj d}|D].}t j   |¡}|  |j|jjddd|d¡}q@| ¡|D]æ}| ¡} | sŽq||j| d} | r|| D]¾} d} g} t| ¡tdD] }| j| ¡vr¾|  | ¡¡q¾tƒ}| ¡|d <d  t| ƒ¡|d <| ¡|d <| ¡|d <| |¡}| d |jjj  !t"| ƒ¡¡7} | d | #¡¡7} | $| ¡q¢q|d t|ƒ¡S)NTrm)ÚflagsF)Z with_nevraZ with_providesZwith_filenamesrw©Z nevra_strictrhr¥ZModulerÐrÚrÛrÜú{} z{}rÂ)%r>rr.ÚgetModulePackagesr{rwr|r}r<ZIGNORE_MODULAR_EXCLUDESrZsubjectr–rZget_best_queryrOr~rHrFrrrKr@r rrÃrGrBrÞrÄrrÆÚtermÚboldr¢rÅrM)rZ rpm_specsrÆZmodulePackagesZ baseQueryZgetBestInitQueryr$ršrËrŠrwrrZ string_outputr\r rÇrér r r Ú_what_providesµsB   þ      zModuleBase._what_providescsjtj ¡}| tjjj¡| d¡| d¡}| d¡}| d¡}| d¡| d¡}| d¡ˆjj j spd|_ |D]ð}|D]æ}t |ƒdkr–|d} n(‡fdd „|Dƒ} | r¶| d} n|d} |  ¡} ˆj| d d \} } }ˆjj |  ¡|  ¡¡}ˆ | || ¡}|  |¡ |  ¡¡|  |¡ |  ¡| | |¡|  |¡ |¡ˆ |  ¡¡}|  |¡ |¡q|qt|S) NTrÀrÙrÚrÜrjrcsg|]}ˆjj |¡r|‘qSr )rr.r/)r1rcr3r r r4ðsÿz5ModuleBase._create_and_fill_table..FrØ)r¾rârãZ setTermforceZTermForce_AUTOZ enableMaxouträrårrºÚverboseZhiddenr©rær×r.rIr r¨rÏrçrèrÓrÞ)rr¤rérêZ column_streamZcolumn_profilesZ column_infoZlatest_per_repoZnameStreamArchrËZactiverìrÕrÍrÖrÌrÎZ summary_strr r3r Ú_create_and_fill_tableÝsN            ÿ  ÿÿÿþz!ModuleBase._create_and_fill_tablec Csžg}|r,|D]}| |¡\}}| |¡q n |jj ¡}|jj ||¡}|sPdS| |¡}d} d} z"|jj|ddd ¡j } Wn&t yª|ddd ¡} Yn0t |dƒ} |  |¡} |  | ¡}|| 7}td| ¡ƒD]²}| | |krz| | 7} | d7} z"|jj|| dd ¡j } Wn(t yN|| dd ¡} Yn0t || ƒ} |d7}||  | ¡7}|| 7}| |¡}|| ||¡7}qâ|tS)NrhrrjrÁ)r“rErr.rñZgetLatestModulesPerReporör¸rBrÚKeyErrorr©Ú_format_headerÚ_format_repoidÚrangeZgetNumberOfLinesÚgetLinerÅÚMODULE_TABLE_HINT)rrZ module_stater£r$rZr%r¤réZcurrent_repo_id_indexZalready_printed_linesÚ repo_nameZversionsÚheaderràr·rìr r r Ú_get_brief_descriptionsJ  "    ÿ   z!ModuleBase._get_brief_descriptioncCs&| d¡}| ||¡ dd¡ddS)NrrÁrj)rûrÅÚsplit)rrérìr r r rø1s zModuleBase._format_headercCsd |jjj |¡¡S)Nrð)rrrÆròró)rrýr r r rù5szModuleBase._format_repoidcCs|jj ¡jddgd ¡}|j|d}g}dd„|jj ¡Dƒ}|j|| ¡d}|  |¡}|  ¡D]¦\} } |j| d} | sÌ|j| d} | sÌ| D]} t   t d ƒ | ¡¡q’t   t d ƒ | ¡¡| | ¡qf|jjj | ¡tj |jj¡} | j| d |jjj| | d qf||fS) NrgrfrorïcSsg|]}|jr|j‘qSr r´r¶r r r r4?r8z9ModuleBase._install_profiles_internal..)Zreponamerrpr‘zNo match for package {}rq)rtZoptional)rr{rwr|r}r~r¸r¹rvrrrr?rrrEr…Z group_membersrMrrƒr„r>rJ)rrUrTrRrŒr‹r!r¼Zhotfix_packagesrbZ set_specsrwr$rr r r rQ8s. ÿ     z%ModuleBase._install_profiles_internalN)T)T)T)F)F)#Ú__name__Ú __module__Ú __qualname__rr'r,rJrŽrr—rœržr“rAr”ruryrzrr)r•rÈrÏrÓr×ráÚ staticmethodrÄrírôrörÿrørùrQr r r r r+sB  U : %     0 (**rcCs&tj |¡}d tddt|ƒƒ|g¡S)NrÁzModular dependency problem:zModular dependency problems:)rÚutilZ_format_resolve_problemsrGrr©)Úerrorsr^r r r Úformat_modular_solver_errorsVs ÿr)"Ú collectionsrr<Zlibdnf.smartcolsr¾Z libdnf.moduleZ dnf.selectorrZdnf.exceptionsZdnf.module.exceptionsrZdnf.utilrZdnf.i18nrrrr¬rcZModulePackageContainerZModuleState_DEFAULTrªZModuleState_ENABLEDr«ZModuleState_DISABLEDr*ZModuleState_UNKNOWNrrürßrÚobjectrrr r r r Ús0       1