<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
ft`                 @   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   | j  S )N)getName)profile r
   !/usr/lib/python3.6/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 )N)base)selfr   r
   r
   r   __init__.   s    zModuleBase.__init__c       	      C   sn   | j |\}}}}x8|j D ],\}\}}|jrtjtdj|j|j qW |sX|sX|rjtj	j
|||dd S )Nz%Ignoring unnecessary profile: '{}/{}')no_match_group_specs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,   | j |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   j |\}}}}tj}i }t }	d}
xt|j D ]f\}\}}xV|j D ]H\}}x<|j D ].\}} fdd|D }|stjtdj||| |j	| qbg } j
|}|j |krtd}tj|j|j | d}
|jrd|j|j|j |s(|j }|r>djtdd |D }td	j||||}ntd
j|}tj| |j	| qbnĈ jjj||}|s|j }|rdjtdd |D }tdj|||}ntdj||}tj| |j	| xNt|D ]B}|j|}|stjtdj||| |j	| |j| qW xJ|D ]B} jjj||j  x&|j D ]}|j|t j| qPW q.W x|D ]}|	j|j  qzW qbW qLW q2W |
rtjjtd j |	||\}}|r|j| |s|s|rtjj!|||dd S )NFc                s"   g | ]} j jj|j r|qS r
   )r   _moduleContainerisModuleActive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 activezDInstalling module '{0}' from Fail-Safe repository {1} is not allowedTz, c             S   s   g | ]}|j  qS r
   )r   )r+   r	   r
   r
   r   r-   g   s    zKUnable to match profile for argument {}. Available profiles for '{}:{}': {}z'Unable to match profile for argument {}c             S   s   g | ]}|j  qS r
   )r   )r+   r	   r
   r
   r   r-   w   s    z<No default profiles for module {}:{}. Available profiles: {}zNo profiles for module {}:{}z0Default profile {} not available in module {}:{}z:Installing module from Fail-Safe repository is not allowed)r   r   r   )"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
   )r   r   r<   F   s    








 
 
zModuleBase.installc       .   	      s   j |\}}}t }t }ddh}x|j D ]\}	\}
}x|j D ]x}xr jjj|ddddD ]X} jjj|r`xD|j D ]8}|j	ddd }||krq||j	ddd }|j
| q|W q`W qDW q.W  j } j|}|r|j| tj}i }t }d	} jjj }x^|j D ]P\}	\}
}x>|j D ]0\}}x"|j D ]\}} fd
d|D }|stjtdj|	|| |j|	 q@g } j|}|j |krtd}tj|j|j | d}|
jrJ|j|j|
j |s|j }|r"djtdd |D } tdj|	||| }ntdj|	}tj| |j|	 q@nT||krxH|| D ]<}!|j|!}"|"stjtdj|!|| q^|j|" q^W xJ|D ]B}! jjj||!j   x&|!j! D ]}|j"|t j
|	 qW qW xh|D ]`}|j }#|j#|# xF|#D ]>}|j	ddd }||kr.q|j	ddd }|j
| qW qW q@W q*W qW |r|t$j%j&td j'|||\}$}%|%r|j|% t }&|&j#| |&j#|  jj(j j)dd}' jj(j j)ddgdj* }(x|&D ]}|(j+|d})|)j, }*|*sq|)j- }+|+sJtjtdj| ||kr|'j.|)}'q|)j/|$},|,r^|,})t$j0j1 jj(}-|-j|)d  jj2j3|-d qW  jj4|' |s|s|rt$j%j5|||dd S )Nnosrcsrc .   -   r   Fc                s"   g | ]} j jj|j r|qS r
   )r   r(   r)   r*   )r+   r,   )r   r
   r   r-      s    z(ModuleBase.switch_to.<locals>.<listcomp>z8No active matches for argument '{0}' in module '{1}:{2}'zDInstalling module '{0}' from Fail-Safe repository {1} is not allowedTz, c             S   s   g | ]}|j  qS r
   )r   )r+   r	   r
   r
   r   r-      s    zKUnable 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)r   z9No packages available to distrosync for package name '{}')pkg)select)r   r   r   )6_resolve_specs_enabler0   r   keysr   r(   queryr)   rA   rsplitr?   _update_sack_enable_dependenciesr7   r.   r/   ZgetRemovedProfilesr   r1   r   r   r2   r3   r4   r5   r6   r	   r8   r9   r:   Zwarningr<   r   r=   r>   r@   r   r   rB   rC   sackfiltermapplyfilter	installed	availableunionintersectionselectorSelector_goalZdistupgrade_remove_if_unneededr   ).r   r   rD   r   r   r    Znew_artifacts_namesZactive_artifacts_namesZ
src_archesr!   r"   rI   r   rU   artifactarchrT   r   dependency_error_specrE   rF   rG   rH   Zremoved_profilesrJ   rK   rL   rM   rN   rO   rP   rQ   rR   r	   rS   	artifactsinstall_base_queryrW   Z	all_namesZremove_querybase_no_source_queryre   rm   rn   Zonly_new_modulesltrr
   )r   r   	switch_to   s    








 



(






zModuleBase.switch_toc             C   s(   | j |t\}}|r$tjj||dd S )N)r   r   )r%   STATE_UNKNOWNr   r   r   )r   r   r   r   r
   r
   r   reset  s    zModuleBase.resetc                s,  g }t j}d} jjj jddgdj }x|D ]} j|\}}|sV|j| q2 fdd|D }	|	st	j
tdj| q2 j|	|d}
t }x|
j D ]\}}x|j D ]\}}|j j||  j|}|j |krtd}t	j|j|j | d	}|jrH|j|j}|s(qx|D ]}|j|j  q.W qx |j D ]}|j|j  qRW xD|j D ]8}t j|}x&|jt jgd
D ]}|j|j qW qtW qW qW |st	j
tdj| |j|d}|r2t j!j" jj}|j|d  jj#j$|d q2W |r(t j%j&td|S )NFrY   rX   )r`   c                s"   g | ]} j jj|j r|qS r
   )r   r(   r)   r*   )r+   r,   )r   r
   r   r-   3  s    z&ModuleBase.upgrade.<locals>.<listcomp>zUnable to resolve argument {}zCUpgrading module '{0}' from Fail-Safe repository {1} is not allowedT)Zformsz&Unable to match profile in argument {})r   )ra   )rb   z9Upgrading module from Fail-Safe repository is not allowed)'r.   r/   r   ri   re   rj   rk   _get_modulesr2   r   r1   r   r   _create_module_dict_and_enabler0   r   r@   )_get_package_name_set_and_remove_profilesr3   r4   r5   r6   r	   r8   r=   rA   SubjectZget_nevra_possibilitiesZ
FORM_NEVRAr?   r   rl   r   rq   rr   rs   upgrader   rB   )r   r   r   rE   rH   rz   r!   rL   r"   Zupdate_module_listr#   Zupgrade_package_setr   rJ   rK   module_list_from_dictrO   rP   profiles_setr	   ru   subjZ	nevra_objre   r{   r
   )r   r   r   %  sb    




 zModuleBase.upgradec             C   s   g }t  }x|D ]}| j|\}}|s2|j| q| j||d}g }x>|j D ]2\}	}
x(|
j D ]\}}|j| j||d q`W qNW |stjt	dj
| |j| qW |r| jjj }|j|}|r| jjj j j|d}|r| jj| |S )NFTz&Unable to match profile in argument {})r   )r0   r   r2   r   r   r7   r   r   r1   r   r   r@   r   r(   ZgetInstalledPkgNames
differenceri   re   rm   rj   rt   )r   r   r   Zremove_package_setr!   rL   r"   r#   Zremove_packages_namesr   rJ   rK   r   Zkeep_pkg_namesre   r
   r
   r   remove_  s0    


zModuleBase.removec             C   s
   | j |S )N)r   )r   module_specr
   r
   r   get_modules|  s    zModuleBase.get_modulesc       
      C   s   t j|}x|j D ]}|jr$|jnd}|jr4|jnd}d}|jrH|jnd}|jrX|jnd}|jrv|jdkrvt|j}| j	j
j|||||}	|	r|	|fS qW f d fS )NrZ   r\   )r.   r   Znsvcap_possibilitiesr   rK   contextrv   versionstrr   r(   re   )
r   r   r   r"   r   rK   r   r   rv   modulesr
   r
   r   r     s    

zModuleBase._get_modulesc             C   s>   d }|r:|d }x(|dd  D ]}|j  |j  kr|}qW |S )Nr   r\   )ZgetVersionNum)r   rL   latestrU   r
   r
   r   r3     s    zModuleBase._get_latestc             C   sv  i }x.|D ]&}|j |j i j |j g j| q
W x:|j D ],\}}| jjj|}t|dkrF|t	kr|t
kr|tkrdjt|j tj| jjjd}	tdj|t||	|d}
t||
|t
kr| jjj|}n| jjj|}| s||krt|xjt|j D ]0}||kr8|r| jjj|| q||= qW q@|r@x"|j D ]}| jjj|| qTW q@W |S )Nr\   z', ')keyzArgument '{argument}' matches {stream_count} streams ('{streams}') of module '{module}', but none of the streams are enabled or default)ZargumentZstream_countZstreamsrU   )r>   r   	getStreamr2   r   r   r(   ZgetModuleStatelenSTATE_DEFAULTSTATE_ENABLEDr&   r9   r:   rd   	functools
cmp_to_keyri   Zevr_cmpr   r   r   ZgetEnabledStreamgetDefaultStreamr$   )r   rL   r!   r$   
moduleDictrU   Z
moduleName
streamDictZmoduleStateZstreams_strrP   rK   r   r
   r
   r   r     s>    
"


z)ModuleBase._create_module_dict_and_enablec       
      C   s   g }g }i }x|D ]}| j |\}}|s4|j| qy| j||d}||f||< W q ttfk
r }	 z2|j| tjt|	 tjtdj	| W Y d d }	~	X qX qW |||fS )NTzUnable to resolve argument {})
r   r2   r   RuntimeErrorr   r   r1   r   r   r   )
r   r   r   
error_specr    r!   rL   r"   r#   er
   r
   r   rc     s     


*z ModuleBase._resolve_specs_enablec             C   s   dd | j jj D }y4| j jj| j j|| j jj| j jjd| j jj	d}W n4 t
jk
r~ } ztjjt|W Y d d }~X nX |S )Nc             S   s   g | ]}|j r|jqS r
   )module_hotfixesid)r+   ir
   r
   r   r-     s    z+ModuleBase._update_sack.<locals>.<listcomp>T)Zupdate_onlyZdebugsolver)r   repositer_enabledri   Zfilter_modulesr(   confZinstallrootZmodule_platform_idZdebug_solverr.   	Exceptionr   r   rB   r   )r   hot_fix_reposr   r   r
   r
   r   rg     s    
"zModuleBase._update_sackc       	      C   s   g }x|j  D ]\}\}}x|j D ]}xz|j D ]n}y| jjjtjj| W q2 tk
r } z2|j	| t
jt| t
jtdj| W Y d d }~X q2X q2W q$W qW |S )NzUnable to resolve argument {})r   valuesr   r(   ZenableDependencyTreelibdnfrU   ZVectorModulePackagePtrr   r2   r   r1   r   r   r   )	r   r    r   r!   r"   r   r   r   r   r
   r
   r   rh     s    
2zModuleBase._enable_dependenciesc             C   s<   | j |\}}}| j }| j|}|r0|j| ||||fS )N)rc   rg   rh   r7   )r   r   r   r   r    r   rw   r
   r
   r   r     s    

z,ModuleBase._resolve_specs_enable_update_sackc             C   s   g }x|D ]}| j |\}}|s@tjtdj| |j| q
|js^|js^|js^|j	s^|j
rrtjtdj| t }x|D ]}|j|j  q~W x8|D ]0}	|tkr| jjj|	 |tkr| jjj|	 qW q
W | j }
||
fS )NzUnable to resolve argument {}zMOnly module name is required. Ignoring unneeded information in argument: '{}')r   r   r1   r   r   r2   rK   r   r   rv   r	   r   r0   r?   r   r}   r   r(   r~   r&   r'   rg   )r   r   Zto_stater   r!   rL   r"   Zmodule_namesrU   r   r   r
   r
   r   r%     s(    



z$ModuleBase._modules_reset_or_disableFc       
      C   s   t  }| j|}t | jjj|j }|s0t  S |jr|j|j}|sLt  S x|D ]6}|j |krR|rz| jjj||j  |j	|j
  qRW nDxB|D ]:}	|r| jjj||	 x |j|	D ]}|j	|j
  qW qW |S )N)r0   r3   r   r(   getInstalledProfilesr   r	   r8   Z	uninstallr@   r=   )
r   rL   r"   r   Zpackage_name_setrO   Zinstalled_profiles_stringsr   r	   Zprofile_stringr
   r
   r   r     s*    



z4ModuleBase._get_package_name_set_and_remove_profilesc       	      C   s   t  }x|D ]}| j|\}}|s8tjtdj| q|jrXtjtdj|j|j xl|D ]d}t }|j	 |d< x8t
|j tdD ]$}djdd |j D ||j < qW |j| j|j  q^W qW djt
|S )	NzUnable to resolve argument {}z%Ignoring unnecessary profile: '{}/{}'Name)r   
c             S   s   g | ]}|qS r
   r
   )r+   ZpkgNamer
   r
   r   r-   5  s    z1ModuleBase._get_info_profiles.<locals>.<listcomp>z

)r0   r   r   r   r   r   r	   r   r   getFullIdentifierr:   r8   r   r9   r=   r   r?   _create_simple_tabletoString)	r   r   outputr   rL   r"   rU   linesr	   r
   r
   r   _get_info_profiles#  s"    

 zModuleBase._get_info_profilesc             C   s   | j jj|j }|j }d}xTt|tdD ]D}|dj|j |j |krLdnd7 }||j |krj|rjdnd7 }q,W |d d S )	NrZ   )r   z{}{}z [d]z [i], z, r^   )r   r(   r   r   r8   r:   r   r   )r   modulePackagedefault_profilesenabled_strZinstalled_profilesrQ   profiles_strr	   r
   r
   r   _profile_report_formatter:  s    

z$ModuleBase._profile_report_formatterc             C   s   |j  j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jj|j kr*d}| jjj|rJ|s@d}|d7 }n| jjj|rh|s`d}|d7 }|r| jjj|r|sd}|d7 }|||fS )NrZ   z [d]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  }x|D ]}| j|\}}|s<tjtdj| q|jr\tjtdj|j|j xj|D ]`}| j|dd\}}}	| j	j
j|j |j }
| j||
|}t }|j |d< |j | | |	 |d< |j |d< |j |d< |j |d	< ||d
< dj|
|d< |j |d< |j |d< |j |d< t  }xV|j D ]J}xB|j D ]6}x.|j D ]"\}}|jdj|dj| qXW qJW q<W djt||d< djt|j |d< |j| j|j  qdW qW djt|}|r|t7 }|S )NzUnable to resolve argument {}z%Ignoring unnecessary profile: '{}/{}'T)r   r   StreamZVersionZContextZArchitectureProfilesr   zDefault profilesRepoSummaryZDescriptionz{}:[{}],r   ZRequiresZ	Artifactsz

) r0   r   r   r   r   r   r	   r   r   r   r(   r;   r   r   r   r   Z
getVersionZ
getContextZgetArchr9   r4   
getSummaryZgetDescriptionZgetModuleDependenciesZgetRequiresr   r?   r:   rA   r   r   MODULE_INFO_TABLE_HINT)r   r   r   r   rL   r"   r   r   r   r   r   r   r   Zreq_setZreqZrequire_dictZmod_requirerK   	str_tabler
   r
   r   	_get_info^  sP    

*zModuleBase._get_infoc             C   s   t jj }|jd |jd |jd}|jd}|jd |jd |j  xL| j	 D ]@\}}|d krld}|j
 }|j|j| |j|jt| qXW |S )NTz : r   ZValuer   rZ   )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  }xx|D ]p}| j|\}}|s8tjtdj| q|jrXtjtdj|j|j x"|D ]}|j }|r^|j	| q^W qW dj
t|}|S )NzUnable to resolve argument {}z%Ignoring unnecessary profile: '{}/{}'z

)r0   r   r   r   r   r   r	   r   ZgetYamlr?   r9   r:   )	r   r   r   r   rL   r"   r   r   Zoutput_stringr
   r
   r   _get_full_info  s    

zModuleBase._get_full_infoc          	   C   s  t  }| jjj }| jjj jddj }| jjjtj	d}x6|D ].}t
jj|}|j|j| jjddd|d}qBW |j  x|D ]}|j }	|	sq|j|	d}
|
rx|
D ]}d}g }x4t|j tdD ] }|j|j kr|j|j  qW t }|j |d	< d
jt||d< |j |d< |j |d< | j|}|dj| jjj j!t"|7 }|dj|j# 7 }|j$| qW qW djt|S )NT)r_   )flagsF)Z
with_nevraZwith_providesZwith_filenamesre   )nevra_strictrZ   )r   ZModuler   r   r   r   z{}
z{}z

)%r0   r   r(   getModulePackagesri   re   rj   rk   r.   ZIGNORE_MODULAR_EXCLUDESr   Zsubjectr   ro   Zget_best_queryrA   rl   r:   r8   r   r   r=   r2   r   r   r   r9   r4   r   r   r   r   termboldr   r   r?   )r   Z	rpm_specsr   ZmodulePackagesZ	baseQueryZgetBestInitQueryr!   r   r   rx   re   ra   Zstring_outputrN   r	   r   r   r
   r
   r   _what_provides  s@    



zModuleBase._what_providesc                sr  t jj }|jt jjj |jd |jd}|jd}|jd}|jd |jd}|jd  jj	j
spd|_x|D ]}x|D ]}t|dkr|d }	n( fdd	|D }
|
r|
d }	n|d }	|j } j|	d
d\}}} jjj|	j |	j } j|	||}|j|j|	j  |j|j|	j | | |  |j|j|  j|	j }|j|j| qW qvW |S )NTr   r   r   r   r\   r   c                s   g | ]} j jj|r|qS r
   )r   r(   r)   )r+   rU   )r   r
   r   r-     s    z5ModuleBase._create_and_fill_table.<locals>.<listcomp>F)r   )r   r   r   ZsetTermforceZTermForce_AUTOZenableMaxoutr   r   r   r   verboseZhiddenr   r   r   r(   r;   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
   )r   r   _create_and_fill_table  sD    












z!ModuleBase._create_and_fill_tablec             C   s  g }|r0x2|D ]}| j |\}}|j| qW n| jjj }| jjj||}|sTdS | j|}d}	d}
y"| jj|d d d j  j	}W n( t
k
r   |d d d j }Y nX t|d }| j|}| j|}||7 }xtd|j D ]}||
 |kr|
|7 }
|	d7 }	y"| jj||	 d d j  j	}W n* t
k
rX   ||	 d d j }Y nX t||	 }|d7 }|| j|7 }||7 }|j|}||j||7 }qW |t S )NrZ   r   r\   r   )r   r7   r   r(   r   ZgetLatestModulesPerRepor   r   r4   r   KeyErrorr   _format_header_format_repoidrangeZgetNumberOfLinesgetLiner   MODULE_TABLE_HINT)r   r   Zmodule_stater   r!   rL   r"   r   r   Zcurrent_repo_id_indexZalready_printed_lines	repo_nameZversionsheaderr   r   r   r
   r
   r   _get_brief_description  sH    

"


z!ModuleBase._get_brief_descriptionc             C   s&   |j d}|j||jddd d S )Nr   r   r\   )r   r   split)r   r   r   r
   r
   r   r   .  s    
zModuleBase._format_headerc             C   s   dj | jjjj|S )Nz{}
)r   r   r   r   r   )r   r   r
   r
   r   r   2  s    zModuleBase._format_repoidc             C   s  | j jj jddgdj }|j|d}g }dd | j jj D }|j||j d}|j	|}x|j
 D ]\}	}
|j|	d}|s|j|	d}|sx |
D ]}tjtd	j| qW tjtd
j|	 |j|
 qh| j jjj|	 tjj| j j}|j|d | j jj|| d qhW ||fS )NrY   rX   )r`   )r   c             S   s   g | ]}|j r|jqS r
   )r   r   )r+   r   r
   r
   r   r-   <  s    z9ModuleBase._install_profiles_internal.<locals>.<listcomp>)Zreponamer   )r   zUnable to resolve argument {}zNo match for package {})ra   )rb   Zoptional)r   ri   re   rj   rk   rl   r   r   rd   ro   r   r   r1   r   r   r7   rs   Zgroup_membersr?   r   rq   rr   r0   r<   )r   rG   rF   rD   rz   ry   r   r   Zhotfix_packagesrT   Z	set_specsre   r!   r{   r
   r
   r   rC   5  s,    


z%ModuleBase._install_profiles_internalN)T)T)T)F)F)#__name__
__module____qualname__r   r$   r'   r<   r|   r~   r   r   r   r   r3   r   rc   rg   rh   r   r%   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   rC   r
   r
   r
   r   r   +   s@   
U
 :	
%

-(**r   c             C   s&   t jj| }djtddt| |gS )Nr   zModular dependency problem:zModular dependency problems:)r   utilZ_format_resolve_problemsr9   r   r   )errorsrP   r
   r
   r   format_modular_solver_errorsS  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   rU   ZModulePackageContainerZModuleState_DEFAULTr   ZModuleState_ENABLEDr   ZModuleState_DISABLEDr&   ZModuleState_UNKNOWNr}   r   r   r   objectr   r   r
   r
   r
   r   <module>   s0   



      .