a
    !cq:                     @   s   d dl mZ d dl mZ d dlmZ d dlmZ d dlmZm	Z	 d dl
Zd dlZd dlZd dlZd dlZedZG dd	 d	ejZdS )
    )absolute_import)unicode_literals)
CompsQuery)commands)_ucdNdnfc                       s   e Zd ZdZdddddddZdee  ZedZ	d	dd
Z
dZdZdd Z fddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zed#d$ Zd%d& Zd'd( Zd)d* Z  ZS )+GroupCommandz; Single sub-command interface for most groups interaction. listinstallremoveinfo)Z	grouplistZgroupinstallZgroupupdateZgroupremoveZ
grouperaseZ	groupinfo)groupgroupsgrpz'display, or use, the groups informationupgrade)updateZerase)r   r   )summaryr
   r   r   r   r   markc                 C   sn   | j | jj}|r<| jjd ur4| jjd| jj || j_| jjd u rPd| j_| j| jj| jj| j_d S )Nr   r   )direct_commandsgetoptsZcommandsubcmdargsinsert_CMD_ALIASES)selfZdirect r   :/usr/lib/python3.9/site-packages/dnf/cli/commands/group.py
_canonical6   s    zGroupCommand._canonicalc                    s   t t| | d| _d S )NF)superr	   __init___remark)r   cli	__class__r   r   r!   C   s    zGroupCommand.__init__c                 C   s$   t d}t| jjs tj|d S )Nz4No group data available for configured repositories.)r   lenbasecompsr   
exceptionsZ
CompsError)r   msgr   r   r   _assert_compsG   s    zGroupCommand._assert_compsc                    sT    fdd}    |d u r( jjj}n jjd|}tjt	tj
||S )Nc                    s    j jj| j}| S N)r'   historyenvr   id)r.   Z	env_foundr   r   r   available_predM   s    z7GroupCommand._environment_lists.<locals>.available_pred,)r+   r'   r(   environmentsenvironments_by_patternjoinr   utilZmapallr
   	partition)r   patternsr1   envsr   r0   r   _environment_listsL   s    zGroupCommand._environment_listsc           	         sz    fdd}g }g }    |d u r0 jjj}n jjd|}|D ](}|}||r\|}|rf|jrH|| qH||fS )Nc                    s    j jj| j}|rdS dS )NTF)r'   r-   r   r   r/   )r   Zgroup_foundr0   r   r   installed_predZ   s    z1GroupCommand._group_lists.<locals>.installed_predr2   )r+   r'   r(   r   groups_by_patternr5   uservisibleappend)	r   r=   r8   r;   	installed	availableZgrpsr   Ztgt_listr   r0   r   _group_listsY   s    
zGroupCommand._group_listsc                 C   sr   |D ]d}d}| j j|D ]}| j| d}q| j j|D ]}| j| d}q>|stt	d| qdg fS )NFTz!Warning: Group %s does not exist.r   )
r'   r(   r4   outputZdisplay_groups_in_environmentr<   Zdisplay_pkgs_in_groupsloggererrorr   )r   userlistZstrngZgroup_matchedr.   r   r   r   r   _infoq   s    zGroupCommand._infoc                    sh  d}d}d}| j jjp| jj|r|d dkr>d}|d q|d dkrZd}|d q|d dkrvd}|d q|d dkrd|d qqq| jjrd}| jjrd}| jjrd}|sd }d}|d ur4|D ]P}| j j	}t
||dk}t
||dk}	|s|	sttd	d
 | d}q|r4dg fS | |\}
}| ||\}} fdd}fdd}|s|td| |s|td|
 |sd |D ]$}|jrq|td| d qd |D ]$}|jsq|td| d q|rdg fS d |D ]$}|jrq|td| d qd |D ]$}|jsJq:|td| d q:dg fS )N   r   hiddenr?   r@   idsTFzWarning: No groups match:z
   %sc                    sV    st |  dtj|j }r0|d|j 7 }|jrD|d|j 7 }t d| d S )N   %s (%s)z [%s]z{})printr   r6   _name_unset_wrapperui_namer/   	lang_onlyformat)sectr   r*   done	print_idsr   r   _out_grp   s    z$GroupCommand._list.<locals>._out_grpc                    sF   |rt |  |D ]0}dtj|j } r8|d|j 7 }t | qd S )NrJ   rK   )rL   r   r6   rM   rN   r/   )rQ   r9   er*   )rT   r   r   _out_env   s    z$GroupCommand._list.<locals>._out_envzAvailable Environment Groups:zInstalled Environment Groups:Installed Groups:Installed Language Groups:Available Groups:Available Language Groups:)r'   confverboser   rI   poprH   r?   r@   r(   r&   r<   r4   rC   rD   r   r:   rA   rO   )r   rE   r=   ZshowinstalledZshowavailableZerrsr   r(   Zin_groupZin_environmentZenv_instZ	env_availr?   r@   rU   rW   r   rR   r   _list   s    

	zGroupCommand._listc           	      C   s   t | jj| jjt jt jB t jt jB }| j }|j	| }| j
jrXt| jjjdg }nt| jjj}tj|}|jD ]}||| qx|jD ]}||| qd S )Noptional)r   r'   r(   r-   GROUPSENVIRONMENTSZ	AVAILABLE	INSTALLED_build_comps_solverr   r   with_optionaltupler\   group_package_typeslibdnfZtransactionZlistToCompsPackageTyper3   Z_environment_installr   Z_group_install)	r   r8   qsolverrestypesZ	pkg_typesenv_idZgroup_idr   r   r   _mark_install   s    





zGroupCommand._mark_installc                 C   s   t | jj| jjt jt jB t j}| j }|j| }|j	D ]}t
j|sNJ || q:|jD ]}t
j|stJ || q`d S r,   )r   r'   r(   r-   ra   rb   rc   rd   r   r3   r   r6   Zis_string_typeZ_environment_remover   Z_group_remove)r   r8   ri   rj   rk   rm   Zgrp_idr   r   r   _mark_remove   s    




zGroupCommand._mark_removec                 C   s*   |d | j v r"|d |dd  fS d|fS )Nr   rG   r   )
_MARK_CMDS)r   extcmdsr   r   r   _mark_subcmd  s    zGroupCommand._mark_subcmdc                 C   s  d}t |dkr*|d dkr*d}|d | jjr6d}|s>d }| ||\}}dd }d}|D ]}|jrjq^|d7 }q^|td| d}|D ]}|jsq|d7 }q|td| d}|D ]}|jrq|d7 }q|td	| d}|D ]}|jsq|d7 }q|td
| dg fS )NrG   r   rH   c                 S   s   |sd S t d| | d S )Nz%s %u)rC   r   )rQ   Znumr   r   r   rU     s    z'GroupCommand._summary.<locals>._out_grprX   rY   FrZ   r[   )r&   r^   r   rH   rA   rO   r   )r   rE   r=   r?   r@   rU   rS   r   r   r   r   _summary  sH    




zGroupCommand._summaryc                 C   s   | j ddtdd |  }|j ddtdd |j ddtdd |j d	dtd
d |j ddtdd | j dddtdtjd dtjdd  d | j dddtdd d S )Nz--with-optional
store_truez$include optional packages from group)actionhelpz--hiddenzshow also hidden groupsz--installedzshow only installed groupsz--availablezshow only available groupsz--idszshow also ID of groupsr   ?ZCOMMANDz'available subcommands: {} (default), {}r   , rG   )nargsmetavarrv   r   *ZCOMMAND_ARGzargument for group subcommand)add_argumentr   Zadd_mutually_exclusive_grouprP   r	   _GROUP_SUBCOMMANDSr5   )parserZ	grpparserr   r   r   set_argparser<  s2    

zGroupCommand.set_argparserc                 C   s   |    | jj}| jj}|| jvrBttdd| j t	j
j|dv rd|sd| j
j|  t	j
j| j
j}d|_|dv rd|_d|_|dkrd|_d|_nd|_|dvrt| j |dv rt| j| j
 d S )	Nz$Invalid groups sub-command, use: %s.rx   )r   r   r   r   T)r   r   r   r   r   F)r   r   )r   r   r   r   r}   rC   Zcriticalr   r5   r   r#   ZCliErrorZ	optparserZ
print_helpdemandsZsack_activationZ	root_userZ	resolvingZallow_erasingZavailable_reposr   Z_checkEnabledRepor'   Z_checkGPGKey)r   cmdr   r   r   r   r   	configureP  s0    


zGroupCommand.configurec              
   C   s  | j j}| j j}|dkr"| |S |dkr4| |S |dkrF| |S |dkr| |\}}|dkrn| |S |dkszJ | |S |dkr4| j j	rt
| jjjdg }nt
| jjj}d| _z| j||| jjjW S  tjjy2 } z<td	}t|| jjj| tjtd
W Y d }~n
d }~0 0 |dkrJ| j|S |dkr|D ]2}z| j|g W n tjjy   Y n0 qXd S )Nr   r
   r   r   r   r   r`   TzNo package %s available.z)Unable to find a mandatory group package.r   )r   r   r   rs   r_   rF   rr   ro   rn   re   rf   r'   r\   rg   r"   Zenv_group_installstrictr   r)   ZMarkingErrorr   rC   r   rB   ZtermZboldZPackagesNotAvailableErrorZenv_group_upgradeZenv_group_removeError)r   r   rq   r   rl   rV   r*   argr   r   r   runo  sJ    








zGroupCommand.runc                 C   sb   | j s
d S | jj}| jj}|j}| jj  j|dD ]$}|j	
|}||||| q8d S )N)name)r"   r'   Z_goalr-   Zgroup_membersZsackqueryr?   ZfiltermZrpmZ
get_reasonZ
set_reasonZgroup_reason)r   Zgoalr-   namesZpkgreasonr   r   r   run_transaction  s    zGroupCommand.run_transaction)__name__
__module____qualname____doc__r   rf   keysaliasesr   r   r   rp   r}   r   r!   r+   r:   rA   rF   r_   rn   ro   rr   rs   staticmethodr   r   r   r   __classcell__r   r   r$   r   r	   $   s>   h/
*r	   )Z
__future__r   r   Z	dnf.compsr   Zdnf.clir   Zdnf.i18nr   r   Zlibdnf.transactionrh   r   Zdnf.exceptionsZdnf.utilZloggingZ	getLoggerrC   ZCommandr	   r   r   r   r   <module>   s   
