a
    ©!cA¢  ã                   @   sÄ   d dl mZ d dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZmZmZ d dlZejjjZejjjZejjjZejjjZedƒZedƒZdd	„ ZG d
d„ deƒZ dd„ Z!dS )é    )ÚOrderedDictN)ÚEnableMultipleStreamsException)Úlogger)Ú_ÚP_Úucdz6

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalledz@

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctivec                 C   s   |   ¡ S ©N©ÚgetName)Úprofile© r   ú:/usr/lib/python3.9/site-packages/dnf/module/module_base.pyÚ_profile_comparison_key'   s    r   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ ZdBdd	„ZdCd
d„Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdDdd„Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ ZdEd%d&„Zd'd(„ Zd)d*„ Zd+d,„ ZdFd-d.„Zd/d0„ Zed1d2„ ƒZd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAS )GÚ
ModuleBasec                 C   s
   || _ d S r   )Úbase)Úselfr   r   r   r   Ú__init__.   s    zModuleBase.__init__c           	      C   sj   |   |¡\}}}}| ¡ D ],\}\}}|jrt tdƒ |j|j¡¡ q|sT|sT|rftj	j
|||d‚d S )Nú%Ignoring unnecessary profile: '{}/{}'©Úno_match_group_specsZerror_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   Úenable2   s    ÿ
ÿþzModuleBase.enablec                 C   s,   |   |t¡\}}|s|r(tjj||d‚d S ©N)r   r   )Ú_modules_reset_or_disableÚSTATE_DISABLEDr   r   r   ©r   r   r    r"   r   r   r   Údisable?   s
    ÿzModuleBase.disableTc                    sÜ  ˆ   |¡\}}}}tj}i }tƒ }	d}
| ¡ D ]J\}\}}| ¡ D ]2\}}| ¡ D ]\}}‡ fdd„|D ƒ}|sšt tdƒ |||¡¡ | 	|¡ qVg }ˆ  
|¡}| ¡ |krÖtdƒ}t | | ¡ |¡¡ d}
|jrX| | |j¡¡ |s| ¡ }|r2d tdd„ |D ƒƒ¡}td	ƒ ||||¡}ntd
ƒ |¡}t |¡ | 	|¡ qVnÀˆ jj ||¡}|sÌ| ¡ }|r¨d tdd„ |D ƒƒ¡}tdƒ |||¡}ntdƒ ||¡}t |¡ | 	|¡ t|ƒD ]B}| |¡}|s
t tdƒ |||¡¡ | 	|¡ | |¡ qÔ|D ]>}ˆ jj || ¡ ¡ | ¡ D ]}| |tƒ ¡ |¡ q<q|D ]}|	 | ¡ ¡ q`qVqDq.|
r’tj tdƒ¡‚ˆ   |	||¡\}}|r´| |¡ |sÆ|sÆ|rØtjj!|||d‚d S )NFc                    s"   g | ]}ˆ j j | ¡ ¡r|‘qS r   ©r   Ú_moduleContainerÚisModuleActiveZgetId©Ú.0Úx©r   r   r   Ú
<listcomp>S   s   ÿz&ModuleBase.install.<locals>.<listcomp>zAAll matches for argument '{0}' in module '{1}:{2}' are not activeúDInstalling module '{0}' from Fail-Safe repository {1} is not allowedTú, c                 S   s   g | ]}|  ¡ ‘qS r   r	   ©r1   r   r   r   r   r4   g   ó    úKUnable to match profile for argument {}. Available profiles for '{}:{}': {}ú'Unable to match profile for argument {}c                 S   s   g | ]}|  ¡ ‘qS r   r	   r7   r   r   r   r4   w   r8   z<No default profiles for module {}:{}. Available profiles: {}zNo profiles for module {}:{}z0Default profile {} not available in module {}:{}ú:Installing module from Fail-Safe repository is not allowedr   )"r   ÚhawkeyÚMODULE_FAIL_SAFE_REPO_NAMEÚsetr   r   Úerrorr   r   ÚappendÚ_get_latestÚ	getRepoIDÚcriticalÚgetNameStreamr   ÚextendÚgetProfilesÚjoinÚsortedr   r.   ÚgetDefaultProfilesÚinstallr
   Ú
getContentÚ
setdefaultÚaddÚupdateÚgetArtifactsr   r   ÚErrorÚ_install_profiles_internalr   )r   r   Ústrictr    r!   r"   r#   Úfail_safe_repoÚinstall_dictÚinstall_set_artifactsÚfail_safe_repo_usedr$   r%   Ú
moduledictr   Ú
streamdictÚstreamÚmodule_listÚinstall_module_listÚprofilesÚlatest_moduleÚmsgÚavailable_profilesÚprofile_namesZprofiles_stringsr   Úmodule_profilesÚpkg_nameÚmoduleÚ__Úprofiles_errorsr   r3   r   rJ   F   s¨    ÿ
ÿ

ÿÿþ

ÿÿþ


ÿÿ
ÿÿ
þzModuleBase.installc           .         sˆ  ˆ   |¡\}}}tƒ }tƒ }ddh}| ¡ D ]†\}	\}
}| ¡ D ]p}ˆ jj |dddd¡D ]T}ˆ jj |¡rZ| ¡ D ]8}| 	dd¡d }||v r’qt| 	dd¡d }| 
|¡ qtqZq@q,ˆ  ¡ }ˆ  |¡}|rÔ| |¡ tj}i }tƒ }d	}ˆ jj ¡ }| ¡ D ].\}	\}
}| ¡ D ]\}}| ¡ D ] \}}‡ fd
d„|D ƒ}|slt tdƒ |	||¡¡ | |	¡ q$g }ˆ  |¡}| ¡ |krªtdƒ}t | | ¡ |¡¡ d}|
jr.| | |
j¡¡ |s~| ¡ }|rd tdd„ |D ƒƒ¡} tdƒ |	||| ¡}ntdƒ |	¡}t |¡ | |	¡ q$nP||v r~|| D ]<}!| |!¡}"|"spt tdƒ |!||¡¡ q@| |"¡ q@|D ]>}!ˆ jj ||!  ¡ ¡ |! !¡ D ]}| "|tƒ ¡ 
|	¡ q¢q‚|D ]\}| ¡ }#| #|#¡ |#D ]>}| 	dd¡d }||v rqà| 	dd¡d }| 
|¡ qàqÆq$qqü|rDt$j% &tdƒ¡‚ˆ  '|||¡\}$}%|%rf| |%¡ tƒ }&|& #|¡ |& #|¡ ˆ jj( ¡ j)dd}'ˆ jj( ¡ j)ddgd *¡ }(|&D ]ž}|(j+|d})|) ,¡ }*|*sÖq´|) -¡ }+|+st tdƒ |¡¡ ||vr´|' .|)¡}'q´|) /|$¡},|,r$|,})t$j0 1ˆ jj(¡}-|-j|)d ˆ jj2j3|-d q´ˆ j 4|'¡ |sr|sr|r„t$j%j5|||d‚d S )NÚnosrcÚsrcÚ Ú.é   ú-é   r   Fc                    s"   g | ]}ˆ j j | ¡ ¡r|‘qS r   r-   r0   r3   r   r   r4   À   s   ÿz(ModuleBase.switch_to.<locals>.<listcomp>z8No active matches for argument '{0}' in module '{1}:{2}'r5   Tr6   c                 S   s   g | ]}|  ¡ ‘qS r   r	   r7   r   r   r   r4   Õ   r8   r9   r:   zEInstalled profile '{0}' is not available in module '{1}' stream '{2}'r;   ©Úempty©Z	arch__neq©r   z9No packages available to distrosync for package name '{}'©Úpkg©Úselectr   )6Ú_resolve_specs_enabler>   r   Úkeysr   r.   Úqueryr/   rO   ÚrsplitrM   Ú_update_sackÚ_enable_dependenciesrE   r<   r=   ZgetRemovedProfilesr   r?   r   r   r@   rA   rB   rC   rD   r   rF   rG   rH   ZwarningrJ   r
   rK   rL   rN   r   r   rP   rQ   ÚsackÚfiltermÚapplyÚfilterÚ	installedÚ	availableÚunionÚintersectionÚselectorÚSelectorÚ_goalZdistupgradeÚ_remove_if_unneededr   ).r   r   rR   r    r!   r#   Znew_artifacts_namesZactive_artifacts_namesZ
src_archesr$   r%   rW   r   rc   ÚartifactÚarchrb   r"   Údependency_error_specrS   rT   rU   rV   Zremoved_profilesrX   rY   rZ   r[   r\   r]   r^   r_   r`   r   ra   Ú	artifactsÚinstall_base_queryre   Z	all_namesZremove_queryÚbase_no_source_queryrw   r   r€   Zonly_new_moduleÚsltrr   r3   r   Ú	switch_to›   sî    

ÿ

ÿÿþ



ÿÿ

ÿÿ


ÿ


þzModuleBase.switch_toc                 C   s(   |   |t¡\}}|r$tjj||d‚d S r(   )r)   ÚSTATE_UNKNOWNr   r   r   r+   r   r   r   Úreset  s
    ÿzModuleBase.resetc              	      s  g }t j}d}ˆ jj ¡ jddgd ¡ }|D ]º}ˆ  |¡\}}|sR| |¡ q.‡ fdd„|D ƒ}	|	s~t	 
tdƒ |¡¡ q.ˆ  |	|d¡}
tƒ }|
 ¡ D ]ø\}}| ¡ D ]æ\}}| ˆ  ||¡¡ ˆ  |¡}| ¡ |krütdƒ}t	 | | ¡ |¡¡ d	}|jr4| |j¡}|sqª|D ]}| | ¡ ¡ qqª| ¡ D ]}| | ¡ ¡ q<| ¡ D ]4}t  |¡}|jt jgd
D ]}| |j¡ qxqZqªqš|s®t	 
tdƒ |¡¡ |j|d}|r.t j! "ˆ jj¡}|j|d ˆ jj#j$|d q.|rt j% &tdƒ¡‚|S )NFrg   rf   ro   c                    s"   g | ]}ˆ j j | ¡ ¡r|‘qS r   r-   r0   r3   r   r   r4   3  s   ÿz&ModuleBase.upgrade.<locals>.<listcomp>úUnable to resolve argument {}zCUpgrading module '{0}' from Fail-Safe repository {1} is not allowedT)Zformsú&Unable to match profile in argument {}rp   rq   rs   z9Upgrading module from Fail-Safe repository is not allowed)'r<   r=   r   r{   rw   r|   r}   Ú_get_modulesr@   r   r?   r   r   Ú_create_module_dict_and_enabler>   r   rN   Ú)_get_package_name_set_and_remove_profilesrA   rB   rC   rD   r   rF   rK   rO   ÚSubjectZget_nevra_possibilitiesZ
FORM_NEVRArM   r   r~   r   rƒ   r„   r…   Úupgrader   rP   )r   r   r    rS   rV   rŒ   r$   rZ   r%   Zupdate_module_listr&   Zupgrade_package_setr   rX   rY   Úmodule_list_from_dictr]   r^   Úprofiles_setr   r‡   ÚsubjZ	nevra_objrw   r   r   r3   r   r—   %  sj    

ÿ
ÿ
ÿ
ÿzModuleBase.upgradec              
   C   sè   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”   r   rE   r•   r   r?   r   r   rN   r   r.   ZgetInstalledPkgNamesÚ
differencer{   rw   r   r|   r†   )r   r   r    Zremove_package_setr$   rZ   r%   r&   Zremove_packages_namesr   rX   rY   r˜   Zkeep_pkg_namesrw   r   r   r   Úremove_  s2    
ÿ

zModuleBase.removec                 C   s
   |   |¡S r   )r“   )r   Úmodule_specr   r   r   Úget_modules|  s    zModuleBase.get_modulesc           
      C   s    t  |¡}| ¡ D ]ˆ}|jr"|jnd}|jr2|jnd}d}|jrF|jnd}|jrV|jnd}|jrt|jdkrtt|jƒ}| j	j
 |||||¡}	|	r|	|f  S qdS )Nrh   éÿÿÿÿ)r   N)r<   r–   Znsvcap_possibilitiesr   rY   Úcontextrˆ   ÚversionÚstrr   r.   rw   )
r   r   rš   r%   r   rY   r¡   r    rˆ   Úmodulesr   r   r   r“   €  s    

zModuleBase._get_modulesc                 C   s:   d }|r6|d }|dd … D ]}|  ¡ |  ¡ kr|}q|S )Nr   rj   )ZgetVersionNum)r   rZ   Úlatestrc   r   r   r   rA     s    zModuleBase._get_latestc                 C   s`  i }|D ]&}|  | ¡ i ¡  | ¡ g ¡ |¡ q| ¡ D ] \}}| jj |¡}t|ƒdkr6|t	kr¼|t
kr¼|tkr¼d t| ¡ t | jjj¡d¡}	tdƒj|t|ƒ|	|d}
t||
ƒ‚|t
krÔ| jj |¡}n| jj |¡}|rî||vröt|ƒ‚t| ¡ ƒD ]0}||kr*|r| jj ||¡ q||= qq8|r8| ¡ D ]}| jj ||¡ qBq8|S )Nrj   z', '©Úkeyz‡Argument '{argument}' matches {stream_count} streams ('{streams}') of module '{module}', but none of the streams are enabled or default)ZargumentZstream_countZstreamsrc   )rL   r
   Ú	getStreamr@   r   r   r.   ZgetModuleStateÚlenÚSTATE_DEFAULTÚSTATE_ENABLEDr*   rG   rH   rv   Ú	functoolsÚ
cmp_to_keyr{   Zevr_cmpr   r   r   ZgetEnabledStreamÚgetDefaultStreamr'   )r   rZ   r$   r'   Ú
moduleDictrc   Z
moduleNameÚ
streamDictZmoduleStateZstreams_strr^   rY   r¦   r   r   r   r”   ™  sN    ÿÿÿÿÿ
ü

z)ModuleBase._create_module_dict_and_enablec           
      C   s²   g }g }i }|D ]–}|   |¡\}}|s2| |¡ qz|  ||d¡}||f||< W q ttfy¤ }	 z8| |¡ t t|	ƒ¡ t tdƒ 	|¡¡ W Y d }	~	qd }	~	0 0 q|||fS )NTr‘   )
r“   r@   r”   ÚRuntimeErrorr   r   r?   r   r   r   )
r   r   r    Ú
error_specr#   r$   rZ   r%   r&   Úer   r   r   ru   ¾  s     

,z ModuleBase._resolve_specs_enablec              
   C   s†   dd„ | j j ¡ D ƒ}z4| j jj| j j|| j jj| j jjd| j jj	d}W n6 t
jy€ } ztj t|ƒ¡‚W Y d }~n
d }~0 0 |S )Nc                 S   s   g | ]}|j r|j‘qS r   ©Zmodule_hotfixesÚid©r1   Úir   r   r   r4   Ñ  r8   z+ModuleBase._update_sack.<locals>.<listcomp>T)Zupdate_onlyZdebugsolver)r   ÚreposÚiter_enabledr{   Zfilter_modulesr.   ÚconfZinstallrootZmodule_platform_idZdebug_solverr<   Ú	Exceptionr   r   rP   r   )r   Úhot_fix_reposr"   r²   r   r   r   ry   Ð  s    
ý
&zModuleBase._update_sackc           	      C   s¦   g }|  ¡ D ]”\}\}}| ¡ D ]~}| ¡ D ]p}z| jj tj |¡¡ W q, tyš } z8| 	|¡ t
 t|ƒ¡ t
 tdƒ |¡¡ W Y d }~q,d }~0 0 q,q q|S )Nr‘   )r   Úvaluesr   r.   ZenableDependencyTreeÚlibdnfrc   ZVectorModulePackagePtrr°   r@   r   r?   r   r   r   )	r   r#   r±   r$   r%   r®   r¯   r£   r²   r   r   r   rz   Û  s    
ÿ
0zModuleBase._enable_dependenciesc                 C   s<   |   |¡\}}}|  ¡ }|  |¡}|r0| |¡ ||||fS r   )ru   ry   rz   rE   )r   r   r    r±   r#   r"   r‰   r   r   r   r   é  s    

z,ModuleBase._resolve_specs_enable_update_sackc                 C   sÖ   g }|D ]¼}|   |¡\}}|s>t tdƒ |¡¡ | |¡ q|js\|js\|js\|j	s\|j
rpt tdƒ |¡¡ tƒ }|D ]}| | ¡ ¡ qz|D ]0}	|tkr¬| jj |	¡ |tkr’| jj |	¡ q’q|  ¡ }
||
fS )Nr‘   zMOnly module name is required. Ignoring unneeded information in argument: '{}')r“   r   r?   r   r   r@   rY   r¡   r    rˆ   r   r   r>   rM   r
   r   r   r.   r   r*   r,   ry   )r   r   Zto_stater    r$   rZ   r%   Zmodule_namesrc   r   r"   r   r   r   r)   ô  s*    
ÿz$ModuleBase._modules_reset_or_disableFc           
      C   sÊ   t ƒ }|  |¡}t | jj | ¡ ¡ƒ}|s0t ƒ S |jrŠ| |j¡}|sLt ƒ S |D ]6}| ¡ |v rP|rx| jj || ¡ ¡ | 	| 
¡ ¡ qPn<|D ]6}	|r¦| jj ||	¡ | |	¡D ]}| 	| 
¡ ¡ q°qŽ|S r   )r>   rA   r   r.   ÚgetInstalledProfilesr
   r   rF   Z	uninstallrN   rK   )
r   rZ   r%   rœ   Zpackage_name_setr]   Zinstalled_profiles_stringsr™   r   Zprofile_stringr   r   r   r•     s,    

ÿz4ModuleBase._get_package_name_set_and_remove_profilesc           	      C   sÌ   t ƒ }|D ]²}|  |¡\}}|s6t tdƒ |¡¡ q
|jrVt tdƒ |j|j¡¡ |D ]`}tƒ }| 	¡ |d< t
| ¡ tdD ]$}d dd„ | ¡ D ƒ¡|| ¡ < q€| |  |¡ ¡ ¡ qZq
d t
|ƒ¡S )	Nr‘   r   ÚNamer¥   Ú
c                 S   s   g | ]}|‘qS r   r   )r1   ZpkgNamer   r   r   r4   5  r8   z1ModuleBase._get_info_profiles.<locals>.<listcomp>ú

)r>   r“   r   r   r   r   r   r   r   ÚgetFullIdentifierrH   rF   r   rG   rK   r
   rM   Ú_create_simple_tableÚtoString)	r   r   Úoutputr   rZ   r%   rc   Úlinesr   r   r   r   Ú_get_info_profiles#  s&    ÿÿzModuleBase._get_info_profilesc                 C   s|   | j j | ¡ ¡}| ¡ }d}t|tdD ]D}|d | ¡ | ¡ |v rJdnd¡7 }|| ¡ |v rh|rhdnd7 }q*|d d… S )Nrh   r¥   z{}{}ú [d]z [i], r6   éþÿÿÿ)r   r.   r¾   r
   rF   rH   r   r   )r   ÚmodulePackageÚdefault_profilesÚenabled_strZinstalled_profilesr_   Úprofiles_strr   r   r   r   Ú_profile_report_formatter:  s    ÿÿÿz$ModuleBase._profile_report_formatterc                 C   s   |  ¡  dd¡S )NrÀ   ú )ÚstripÚreplace)r   Zsummaryr   r   r   Ú_summary_report_formatterF  s    z$ModuleBase._summary_report_formatterc                 C   s”   d}d}d}|  ¡ | jj | ¡ ¡kr*d}| jj |¡rJ|s@d}|d7 }n| jj |¡rh|s`d}|d7 }|rŠ| jj |¡rŠ|s‚d}|d7 }|||fS )Nrh   rÈ   rÏ   z[e]z[x]z[a])r§   r   r.   r­   r
   Z	isEnabledZ
isDisabledr/   )r   rÊ   Ú
markActiveÚdefault_strrÌ   Údisabled_strr   r   r   Ú_module_strs_formatterI  s(    ÿ
z!ModuleBase._module_strs_formatterc                 C   sò  t ƒ }|D ]Ä}|  |¡\}}|s8t tdƒ |¡¡ q
|jrXt tdƒ |j|j¡¡ |D ]p}| j|dd\}}}	| j	j
 | ¡ | ¡ ¡}
|  ||
|¡}tƒ }| ¡ |d< | ¡ | | |	 |d< | ¡ |d< | ¡ |d< | ¡ |d	< ||d
< d |
¡|d< | ¡ |d< | ¡ |d< | ¡ |d< t ƒ }| ¡ D ]B}| ¡ D ]2}| ¡ D ]"\}}| d |d |¡¡¡ qJq>q2d t|ƒ¡|d< | ¡ }|r¤d |¡|d< d t| ¡ ƒ¡|d< | |  |¡ ¡ ¡ q\q
d t|ƒ¡}|rî|t 7 }|S )Nr‘   r   T©rÓ   r¿   ÚStreamZVersionZContextZArchitectureÚProfilesrÏ   zDefault profilesÚRepoÚSummaryZDescriptionz{}:[{}]ú,rÀ   ZRequireszDemodularized rpmsZ	ArtifactsrÁ   )!r>   r“   r   r   r   r   r   r   rÖ   r   r.   rI   r
   r§   rÎ   r   Z
getVersionZ
getContextZgetArchrG   rB   Ú
getSummaryZgetDescriptionZgetModuleDependenciesZgetRequiresr   rM   rH   ZgetDemodularizedRpmsrO   rÃ   rÄ   ÚMODULE_INFO_TABLE_HINT)r   r   rÅ   r   rZ   r%   rÊ   rÔ   rÌ   rÕ   rË   rÍ   rÆ   Zreq_setZreqZrequire_dictZmod_requirerY   ZdemodularizedÚ	str_tabler   r   r   Ú	_get_info^  s`    
ÿ
ÿÿÿÿ$zModuleBase._get_infoc                 C   sœ   t j ¡ }| d¡ | d¡ | d¡}| d¡}| d¡ | d¡ | ¡  |  	¡ D ]@\}}|d u rjd}| 
¡ }| |¡ |¡ | |¡ t|ƒ¡ qV|S )NTz : r¿   ZValuerÀ   rh   )r½   Ú	smartcolsÚTableZenableNoheadingsZsetColumnSeparatorÚ	newColumnÚsetWrapZsetSafecharsZsetNewlineWrapFunctionr   ÚnewLineÚgetColumnCellÚsetDatar¢   )rÆ   ÚtableÚcolumn_nameZcolumn_valueZ	line_nameÚvalueÚliner   r   r   rÃ   Ž  s    






zModuleBase._create_simple_tablec           	      C   sŠ   t ƒ }|D ]l}|  |¡\}}|s6t tdƒ |¡¡ q
|jrVt tdƒ |j|j¡¡ |D ]}| ¡ }|rZ| 	|¡ qZq
d 
t|ƒ¡}|S )Nr‘   r   rÁ   )r>   r“   r   r   r   r   r   r   ZgetYamlrM   rG   rH   )	r   r   rÅ   r   rZ   r%   rÊ   r   Zoutput_stringr   r   r   Ú_get_full_info£  s     ÿzModuleBase._get_full_infoc              
   C   sr  t ƒ }| jj ¡ }| jj ¡ jdd ¡ }| jjjtj	d}|D ].}t
j |¡}| |j| jjddd|d¡}q@| ¡  |D ]æ}| ¡ }	|	sŽq||j|	d}
|
r||
D ]¾}d}g }t| ¡ tdD ] }|j| ¡ v r¾| | ¡ ¡ q¾tƒ }| ¡ |d	< d
 t|ƒ¡|d< | ¡ |d< | ¡ |d< |  |¡}|d | jjj  !t"|ƒ¡¡7 }|d | #¡ ¡7 }| $|¡ q¢q|d t|ƒ¡S )NTrm   )ÚflagsF)Z
with_nevraZwith_providesZwith_filenamesrw   ©Znevra_strictrh   r¥   ZModulerÏ   rÙ   rÚ   rÛ   ú{}
z{}rÁ   )%r>   r   r.   ÚgetModulePackagesr{   rw   r|   r}   r<   ZIGNORE_MODULAR_EXCLUDESr   Zsubjectr–   r   Zget_best_queryrO   r~   rH   rF   r   r   rK   r@   r
   r   rÂ   rG   rB   rÝ   rÃ   r   rÅ   ÚtermÚboldr¢   rÄ   rM   )r   Z	rpm_specsrÅ   ZmodulePackagesZ	baseQueryZgetBestInitQueryr$   rš   rÊ   rŠ   rw   rr   Zstring_outputr\   r   rÆ   rè   r   r   r   Ú_what_providesµ  sB    þ

zModuleBase._what_providesc                    sj  t j ¡ }| t jjj¡ | d¡ | d¡}| d¡}| d¡}| d¡ | d¡}| d¡ ˆ jj	j
spd|_|D ]ð}|D ]æ}t|ƒdkr–|d }	n(‡ fdd	„|D ƒ}
|
r¶|
d }	n|d }	| ¡ }ˆ j|	d
d\}}}ˆ jj |	 ¡ |	 ¡ ¡}ˆ  |	||¡}| |¡ |	 ¡ ¡ | |¡ |	 ¡ | | | ¡ | |¡ |¡ ˆ  |	 ¡ ¡}| |¡ |¡ q|qt|S )NTr¿   rØ   rÙ   rÛ   rj   r   c                    s   g | ]}ˆ j j |¡r|‘qS r   )r   r.   r/   )r1   rc   r3   r   r   r4   ð  s   ÿz5ModuleBase._create_and_fill_table.<locals>.<listcomp>Fr×   )r½   rá   râ   ZsetTermforceZTermForce_AUTOZenableMaxoutrã   rä   r   r¹   ÚverboseZhiddenr¨   rå   rÖ   r.   rI   r
   r§   rÎ   ræ   rç   rÒ   rÝ   )r   r¤   rè   ré   Zcolumn_streamZcolumn_profilesZcolumn_infoZlatest_per_repoZnameStreamArchrÊ   Zactiverë   rÔ   rÌ   rÕ   rË   rÍ   Zsummary_strr   r3   r   Ú_create_and_fill_tableÝ  sN    










ÿÿÿÿþz!ModuleBase._create_and_fill_tablec              	   C   sž  g }|r,|D ]}|   |¡\}}| |¡ qn| jj ¡ }| jj ||¡}|sPdS |  |¡}d}	d}
z"| jj|d d d  ¡  j	}W n& t
yª   |d d d  ¡ }Y n0 t|d ƒ}|  |¡}|  |¡}||7 }td| ¡ ƒD ]²}||
 |krz|
|7 }
|	d7 }	z"| jj||	 d d  ¡  j	}W n( t
yN   ||	 d d  ¡ }Y n0 t||	 ƒ}|d7 }||  |¡7 }||7 }| |¡}|| ||¡7 }qâ|t S )Nrh   r   rj   rÀ   )r“   rE   r   r.   rð   ZgetLatestModulesPerReporõ   r·   rB   r   ÚKeyErrorr¨   Ú_format_headerÚ_format_repoidÚrangeZgetNumberOfLinesÚgetLinerÄ   ÚMODULE_TABLE_HINT)r   r   Zmodule_stater£   r$   rZ   r%   r¤   rè   Zcurrent_repo_id_indexZalready_printed_linesÚ	repo_nameZversionsÚheaderrß   r¶   rë   r   r   r   Ú_get_brief_description  sJ    
"

ÿ

z!ModuleBase._get_brief_descriptionc                 C   s&   |  d¡}| ||¡ dd¡d d S )Nr   rÀ   rj   )rú   rÄ   Úsplit)r   rè   rë   r   r   r   r÷   1  s    
zModuleBase._format_headerc                 C   s   d  | jjj |¡¡S )Nrï   )r   r   rÅ   rñ   rò   )r   rü   r   r   r   rø   5  s    zModuleBase._format_repoidc                 C   s  | j j ¡ jddgd ¡ }|j|d}g }dd„ | j j ¡ D ƒ}|j|| ¡ d}| 	|¡}| 
¡ D ]¦\}	}
|j|	d}|sÌ|j|	d}|sÌ|
D ]}t td	ƒ |¡¡ q’t td
ƒ |	¡¡ | |
¡ qf| j jj |	¡ tj | j j¡}|j|d | j jj|| d qf||fS )Nrg   rf   ro   rî   c                 S   s   g | ]}|j r|j‘qS r   r³   rµ   r   r   r   r4   ?  r8   z9ModuleBase._install_profiles_internal.<locals>.<listcomp>)Zreponamer   rp   r‘   zNo match for package {}rq   )rt   Zoptional)r   r{   rw   r|   r}   r~   r·   r¸   rv   r   r   r   r?   r   r   rE   r…   Zgroup_membersrM   r   rƒ   r„   r>   rJ   )r   rU   rT   rR   rŒ   r‹   r!   r»   Zhotfix_packagesrb   Z	set_specsrw   r$   r   r   r   r   rQ   8  s.    ÿ

z%ModuleBase._install_profiles_internalN)T)T)T)F)F)#Ú__name__Ú
__module__Ú__qualname__r   r'   r,   rJ   rŽ   r   r—   rœ   rž   r“   rA   r”   ru   ry   rz   r   r)   r•   rÇ   rÎ   rÒ   rÖ   rà   ÚstaticmethodrÃ   rì   ró   rõ   rþ   r÷   rø   rQ   r   r   r   r   r   +   sB   
U
 :	
%

0
(**r   c                 C   s&   t j | ¡}d tddt| ƒƒ|g¡S )NrÀ   zModular dependency problem:zModular dependency problems:)r   ÚutilZ_format_resolve_problemsrG   r   r¨   )Úerrorsr^   r   r   r   Úformat_modular_solver_errorsV  s    ÿr  )"Úcollectionsr   r<   Zlibdnf.smartcolsr½   Zlibdnf.moduleZdnf.selectorr   Zdnf.exceptionsZdnf.module.exceptionsr   Zdnf.utilr   Zdnf.i18nr   r   r   r«   rc   ZModulePackageContainerZModuleState_DEFAULTr©   ZModuleState_ENABLEDrª   ZModuleState_DISABLEDr*   ZModuleState_UNKNOWNr   rû   rÞ   r   Úobjectr   r  r   r   r   r   Ú<module>   s0   



      1