3 ft`@sddlmZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl mZmZmZddlZejjjZejjjZejjjZejjjZedZedZdd ZGd d d eZ 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|jS)N)getName)profiler !/usr/lib/python3.6/module_base.py_profile_comparison_key'sr c@seZdZddZddZddZdBdd ZdCd d Zd d ZddZ ddZ ddZ ddZ ddZ dDddZddZddZddZd d!Zd"d#ZdEd%d&Zd'd(Zd)d*Zd+d,ZdFd-d.Zd/d0Zed1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dAS)G ModuleBasecCs ||_dS)N)base)selfrr r r __init__.szModuleBase.__init__c Csn|j|\}}}}x8|jD],\}\}}|jrtjtdj|j|jqW|sX|sX|rjtj j |||ddS)Nz%Ignoring unnecessary profile: '{}/{}')no_match_group_specserror_group_specsmodule_depsolv_errors) !_resolve_specs_enable_update_sackitemsr rinforformatnamednf exceptions MarkingErrors) r module_specsno_match_specs error_specs solver_errors module_dictsspecnsvcap module_dictr r r enable2s  zModuleBase.enablecCs,|j|t\}}|s|r(tjj||ddS)N)rr)_modules_reset_or_disableSTATE_DISABLEDrrr)rrrrr r r disable?szModuleBase.disableTc sj|\}}}}tj}i}t} d} xt|jD]f\} \} } xV| jD]H\}}x<|jD].\}}fdd|D}|stjtdj| |||j | qbg}j |}|j |krtd}tj |j|j |d} | jrd|j|j| j|s(|j}|r>djtdd|D}td j| |||}ntd j| }tj||j | qbnĈjjj||}|s|j}|rdjtd d|D}td j|||}ntd j||}tj||j | xNt|D]B}|j|}|stjtdj||||j | |j|qWxJ|D]B}jjj||jx&|jD]}|j|tj| qPWq.Wx|D]}| j|jqzWqbWqLWq2W| rtjjtdj | ||\}}|r|j||s|s|rtjj!|||ddS)NFcs"g|]}jjj|jr|qSr )r_moduleContainerisModuleActivegetId).0x)rr r Ssz&ModuleBase.install..zAAll matches for argument '{0}' in module '{1}:{2}' are not activezDInstalling module '{0}' from Fail-Safe repository {1} is not allowedTz, cSsg|] }|jqSr )r)r+r r r r r-gszKUnable to match profile for argument {}. Available profiles for '{}:{}': {}z'Unable to match profile for argument {}cSsg|] }|jqSr )r)r+r r r r r-wsz| jD]0\} }x"|jD]\}}fd d |D}|stjtd j| | ||j| q@g}j|}|j|krtd }tj|j|j|d}| jrJ|j |j| j|s|j}|r"djtdd |D} tdj| | || }ntdj| }tj||j| q@nT| |krxH|| D]<}!|j|!}"|"stjtdj|!| |q^|j |"q^WxJ|D]B}!jjj||!j x&|!j!D]}|j"|tj | qWqWxh|D]`} | j}#|j#|#xF|#D]>}|j ddd}||kr.q |j ddd}|j |q WqWq@Wq*WqW|r|t$j%j&tdj'|||\}$}%|%r|j |%t}&|&j#||&j#|jj(jj)dd}'jj(jj)ddgdj*}(x|&D]}|(j+|d})|)j,}*|*sq|)j-}+|+sJtjtdj|||kr|'j.|)}'q|)j/|$},|,r^|,})t$j0j1jj(}-|-j|)djj2j3|-dqWjj4|'|s|s|rt$j%j5|||ddS)Nnosrcsrc.-rFcs"g|]}jjj|jr|qSr )rr(r)r*)r+r,)rr r r-sz(ModuleBase.switch_to..z8No active matches for argument '{0}' in module '{1}:{2}'zDInstalling module '{0}' from Fail-Safe repository {1} is not allowedTz, cSsg|] }|jqSr )r)r+r r r r r-szKUnable to match profile for argument {}. Available profiles for '{}:{}': {}z'Unable to match profile for argument {}zEInstalled profile '{0}' is not available in module '{1}' stream '{2}'z:Installing module from Fail-Safe repository is not allowed)empty) arch__neq)rz9No packages available to distrosync for package name '{}')pkg)select)rrr)6_resolve_specs_enabler0rkeysrr(queryr)rArsplitr? _update_sack_enable_dependenciesr7r.r/ZgetRemovedProfilesrr1rrr2r3r4r5r6r r8r9r:Zwarningr<rr=r>r@rrrBrCsackfiltermapplyfilter installed availableunion intersectionselectorSelector_goalZ distupgrade_remove_if_unneededr).rrrDrrr Znew_artifacts_namesZactive_artifacts_namesZ src_archesr!r"rIrrUartifactarchrTrdependency_error_specrErFrGrHZremoved_profilesrJrKrLrMrNrOrPrQrRr rS artifactsinstall_base_queryrWZ all_namesZ remove_querybase_no_source_queryrermrnZonly_new_modulesltrr )rr switch_tos                  (           zModuleBase.switch_tocCs(|j|t\}}|r$tjj||ddS)N)rr)r% STATE_UNKNOWNrrr)rrrrr r r resetszModuleBase.resetcs,g}tj}d}jjjjddgdj}x|D]}j|\}}|sV|j|q2fdd|D} | st j t dj |q2j | |d} t} x| jD]\} } x| jD]\}}| jj||j|}|j|kr t d}t j|j |j|d }|jrH|j|j}|s(qx|D]}| j|jq.Wqx |jD]}| j|jqRWxD|jD]8}tj|}x&|jtjgd D]}| j|jqWqtWqWqW| st j t d j ||j| d }|r2t j!j"jj}|j|d jj#j$|dq2W|r(t j%j&t d|S)NFrYrX)r`cs"g|]}jjj|jr|qSr )rr(r)r*)r+r,)rr r r-3sz&ModuleBase.upgrade..zUnable to resolve argument {}zCUpgrading module '{0}' from Fail-Safe repository {1} is not allowedT)Zformsz&Unable to match profile in argument {})r)ra)rbz9Upgrading module from Fail-Safe repository is not allowed)'r.r/rrirerjrk _get_modulesr2rr1rr_create_module_dict_and_enabler0rr@)_get_package_name_set_and_remove_profilesr3r4r5r6r r8r=rASubjectZget_nevra_possibilitiesZ FORM_NEVRAr?rrlrrqrrrsupgraderrB)rrrrErHrzr!rLr"Zupdate_module_listr#Zupgrade_package_setrrJrKmodule_list_from_dictrOrP profiles_setr rusubjZ nevra_objrer{r )rr r%sb         zModuleBase.upgradecCsg}t}x|D]}|j|\}}|s2|j|q|j||d}g}x>|jD]2\} } x(| jD]\} } |j|j| |dq`WqNW|stjt dj ||j |qW|r|j j j} |j| }|r|j jjjj|d}|r|j j||S)NFTz&Unable to match profile in argument {})r)r0rr2rrr7rrr1rrr@rr(ZgetInstalledPkgNames differencerirermrjrt)rrrZremove_package_setr!rLr"r#Zremove_packages_namesrrJrKrZkeep_pkg_namesrer r r remove_s0     zModuleBase.removecCs |j|S)N)r)r module_specr r r get_modules|szModuleBase.get_modulesc Cstj|}x|jD]}|jr$|jnd}|jr4|jnd}d}|jrH|jnd}|jrX|jnd}|jrv|jdkrvt|j}|j j j |||||} | r| |fSqWfdfS)NrZr\) r.rZnsvcap_possibilitiesrrKcontextrvversionstrrr(re) rrrr"rrKrrrvmodulesr r r rs   zModuleBase._get_modulescCs>d}|r:|d}x(|ddD]}|j|jkr|}qW|S)Nrr\)Z getVersionNum)rrLlatestrUr r r r3szModuleBase._get_latestc Csvi}x.|D]&}|j|jij|jgj|q Wx:|jD],\}}|jjj|}t|dkrF|t kr|t kr|t krdj t |jtj|jjjd} tdj|t|| |d} t|| |t kr|jjj|} n|jjj|} | s| |krt|xjt |jD]0} | | kr8|r|jjj|| q|| =qWq@|r@x"|jD]} |jjj|| qTWq@W|S)Nr\z', ')keyzArgument '{argument}' matches {stream_count} streams ('{streams}') of module '{module}', but none of the streams are enabled or default)ZargumentZ stream_countZstreamsrU)r>r getStreamr2rrr(ZgetModuleStatelen STATE_DEFAULT STATE_ENABLEDr&r9r:rd functools cmp_to_keyriZevr_cmprrrZgetEnabledStreamgetDefaultStreamr$) rrLr!r$ moduleDictrUZ moduleName streamDictZ moduleStateZ streams_strrPrKrr r r rs> "   z)ModuleBase._create_module_dict_and_enablec Csg}g}i}x|D]}|j|\}}|s4|j|qy|j||d}||f||<Wqttfk r} z2|j|tjt| tjtdj |WYdd} ~ XqXqW|||fS)NTzUnable to resolve argument {}) rr2r RuntimeErrorrrr1rrr) rrr error_specr r!rLr"r#er r r rcs    *z ModuleBase._resolve_specs_enablecCsdd|jjjD}y4|jjj|jj||jjj|jjjd|jjj d}Wn4t j k r~}zt j jt|WYdd}~XnX|S)NcSsg|]}|jr|jqSr )module_hotfixesid)r+ir r r r-sz+ModuleBase._update_sack..T)Z update_onlyZ debugsolver)rrepos iter_enabledriZfilter_modulesr(confZ installrootZmodule_platform_idZ debug_solverr. ExceptionrrrBr)r hot_fix_reposrrr r r rgs "zModuleBase._update_sackc Csg}x|jD]\}\}}x|jD]}xz|jD]n}y|jjjtjj|Wq2tk r}z2|j |t j t |t j t dj|WYdd}~Xq2Xq2Wq$WqW|S)NzUnable to resolve argument {})rvaluesrr(ZenableDependencyTreelibdnfrUZVectorModulePackagePtrrr2rr1rrr) rr rr!r"rrrrr r r rhs 2zModuleBase._enable_dependenciescCs<|j|\}}}|j}|j|}|r0|j|||||fS)N)rcrgrhr7)rrrrr rrwr r r rs   z,ModuleBase._resolve_specs_enable_update_sackc Csg}x|D]}|j|\}}|s@tjtdj||j|q |js^|js^|js^|j s^|j rrtj tdj|t }x|D]}|j |jq~Wx8|D]0} |tkr|jjj| |tkr|jjj| qWq W|j} || fS)NzUnable to resolve argument {}zMOnly module name is required. Ignoring unneeded information in argument: '{}')rrr1rrr2rKrrrvr rr0r?rr}rr(r~r&r'rg) rrZto_staterr!rLr"Z module_namesrUrrr r r r%s(     z$ModuleBase._modules_reset_or_disableFc Cst}|j|}t|jjj|j}|s0tS|jr|j|j}|sLtSx|D]6}|j|krR|rz|jjj||j|j |j qRWnDxB|D]:} |r|jjj|| x |j| D]}|j |j qWqW|S)N) r0r3rr(getInstalledProfilesrr r8Z uninstallr@r=) rrLr"rZpackage_name_setrOZinstalled_profiles_stringsrr Zprofile_stringr r r r s*       z4ModuleBase._get_package_name_set_and_remove_profilesc Cst}x|D]}|j|\}}|s8tjtdj|q |jrXtjtdj|j|jxl|D]d}t}|j |d<x8t |j t dD]$}dj dd|jD||j<qW|j|j|jq^Wq Wdj t |S) NzUnable to resolve argument {}z%Ignoring unnecessary profile: '{}/{}'Name)r cSsg|]}|qSr r )r+ZpkgNamer r r r-5sz1ModuleBase._get_info_profiles..z )r0rrrrrr rrgetFullIdentifierr:r8r r9r=rr?_create_simple_tabletoString) rroutputrrLr"rUlinesr r r r _get_info_profiles#s"     zModuleBase._get_info_profilescCs|jjj|j}|j}d}xTt|tdD]D}|dj|j|j|krLdnd7}||j|krj|rjdnd7}q,W|ddS) NrZ)rz{}{}z [d]z [i], z, r^)rr(rrr8r:r r)r modulePackagedefault_profiles enabled_strZinstalled_profilesrQ profiles_strr r r r _profile_report_formatter:s  z$ModuleBase._profile_report_formattercCs|jjddS)Nr )stripreplace)rZsummaryr r r _summary_report_formatterFsz$ModuleBase._summary_report_formattercCsd}d}d}|j|jjj|jkr*d}|jjj|rJ|s@d}|d7}n|jjj|rh|s`d}|d7}|r|jjj|r|sd}|d7}|||fS)NrZz [d]rz[e]z[x]z[a])rrr(rrZ isEnabledZ isDisabledr))rr markActive default_strr disabled_strr r r _module_strs_formatterIs&  z!ModuleBase._module_strs_formatterc Cst}x|D]}|j|\}}|s.F)r)rrrZ setTermforceZTermForce_AUTOZ enableMaxoutrrrrverboseZhiddenrrrr(r;rrrrrrr)rrrrZ column_streamZcolumn_profilesZ column_infoZlatest_per_repoZnameStreamArchrZactiverrrrrrZ summary_strr )rr _create_and_fill_tablesD              z!ModuleBase._create_and_fill_tablecCsg}|r0x2|D]}|j|\}}|j|qWn |jjj}|jjj||}|sTdS|j|}d} d} y"|jj|dddjj } Wn(t k r|dddj} YnXt |d} |j |} |j | }|| 7}xtd|jD]}| | |kr| | 7} | d7} y"|jj|| ddjj } Wn*t k rX|| ddj} YnXt || } |d7}||j | 7}|| 7}|j|}||j||7}qW|tS)NrZrr\r)rr7rr(rZgetLatestModulesPerReporrr4rKeyErrorr_format_header_format_repoidrangeZgetNumberOfLinesgetLinerMODULE_TABLE_HINT)rrZ module_staterr!rLr"rrZcurrent_repo_id_indexZalready_printed_lines repo_nameZversionsheaderrrrr r r _get_brief_descriptionsH   "     z!ModuleBase._get_brief_descriptioncCs&|jd}|j||jddddS)Nrrr\)rrsplit)rrrr r r r.s zModuleBase._format_headercCsdj|jjjj|S)Nz{} )rrrrr)rrr r r r2szModuleBase._format_repoidcCs|jjjjddgdj}|j|d}g}dd|jjjD}|j||jd}|j |}x|j D]\} } |j| d} | s|j| d} | sx | D]} t j t d j| qWt j t d j| |j| qh|jjjj| tjj|jj} | j| d |jjj| | d qhW||fS) NrYrX)r`)rcSsg|]}|jr|jqSr )rr)r+rr r r r-<sz9ModuleBase._install_profiles_internal..)Zreponamer)rzUnable to resolve argument {}zNo match for package {})ra)rbZoptional)rrirerjrkrlrrrdrorrr1rrr7rsZ group_membersr?rrqrrr0r<)rrGrFrDrzryrrZhotfix_packagesrTZ set_specsrer!r{r r r rC5s,       z%ModuleBase._install_profiles_internalN)T)T)T)F)F)#__name__ __module__ __qualname__rr$r'r<r|r~rrrrr3rrcrgrhrr%rrrrrr staticmethodrrrrrrrrCr r r r r +s@  U : %     - (**r cCs&tjj|}djtddt||gS)NrzModular dependency problem:zModular dependency problems:)rutilZ_format_resolve_problemsr9rr)errorsrPr r r format_modular_solver_errorsSs r)" collectionsrr.Zlibdnf.smartcolsrZ libdnf.moduleZ dnf.selectorrZdnf.exceptionsZdnf.module.exceptionsrZdnf.utilrZdnf.i18nrrrrrUZModulePackageContainerZModuleState_DEFAULTrZModuleState_ENABLEDrZModuleState_DISABLEDr&ZModuleState_UNKNOWNr}rrr objectr rr r r r s0       .