a !cq:@sddlmZddlmZddlmZddlmZddlmZm Z ddl Z ddlZ ddl Z ddlZ ddlZedZGdd d ejZdS) )absolute_import)unicode_literals) CompsQuery)commands)_ucdNdnfcseZdZdZdddddddZdeeZedZ d dd Z d Z d Z d dZ fddZddZddZddZddZddZddZddZdd Zd!d"Zed#d$Zd%d&Zd'd(Zd)d*ZZS)+ GroupCommandz; Single sub-command interface for most groups interaction. listinstallremoveinfo)Z grouplistZ groupinstallZ groupupdateZ groupremoveZ grouperaseZ groupinfo)groupgroupsgrpz'display, or use, the groups informationupgrade)updateZerase)r r )summaryr r r r rmarkcCsn|j|jj}|r<|jjdur4|jjd|jj||j_|jjdurPd|j_|j|jj|jj|j_dS)Nrr)direct_commandsgetoptsZcommandsubcmdargsinsert _CMD_ALIASES)selfZdirectr:/usr/lib/python3.9/site-packages/dnf/cli/commands/group.py _canonical6s   zGroupCommand._canonicalcstt||d|_dS)NF)superr __init___remark)rcli __class__rrr!CszGroupCommand.__init__cCs$td}t|jjs tj|dS)Nz4No group data available for configured repositories.)rlenbasecompsr exceptionsZ CompsError)rmsgrrr _assert_compsGs zGroupCommand._assert_compscsTfdd}|dur(jjj}njjd|}tjt tj ||S)Ncsjjj|j}| SN)r'historyenvrid)r.Z env_foundrrravailable_predMsz7GroupCommand._environment_lists..available_pred,) r+r'r( environmentsenvironments_by_patternjoinrutilZmapallr partition)rpatternsr1envsrr0r_environment_listsLs   zGroupCommand._environment_listsc szfdd}g}g}|dur0jjj}njjd|}|D](}|}||r\|}|rf|jrH||qH||fS)Ncsjjj|j}|rdSdS)NTF)r'r-rrr/)rZ group_foundr0rrinstalled_predZsz1GroupCommand._group_lists..installed_predr2)r+r'r(rgroups_by_patternr5 uservisibleappend) rr=r8r; installed availableZgrpsrZtgt_listrr0r _group_listsYs    zGroupCommand._group_listscCsr|D]d}d}|jj|D]}|j|d}q|jj|D]}|j|d}q>|stt d|qdgfS)NFTz!Warning: Group %s does not exist.r) r'r(r4outputZdisplay_groups_in_environmentr<Zdisplay_pkgs_in_groupsloggererrorr)ruserlistZstrngZ group_matchedr.rrrr_infoqs  zGroupCommand._infocshd}d}d}|jjjp|jj|r|ddkr>d}|dq|ddkrZd}|dq|ddkrvd}|dq|ddkrd|dqqq|jjrd}|jjrd}|jjrd}|sd}d}|dur4|D]P}|jj }t | |dk}t | |dk} |s| st td d |d}q|r4dgfS||\} } |||\} } fd d }fd d}|s|td| |s|td| |sd| D]$}|jrq|td|dqd| D]$}|jsq|td|dq|rdgfSd| D]$}|jrq |td|dq d| D]$}|jsJq:|td|dq:dgfS)Nrhiddenr?r@idsTFzWarning: No groups match:z %scsVs t|dtj|j}r0|d|j7}|jrD|d|j7}td|dS)N %s (%s)z [%s]z{})printrr6_name_unset_wrapperui_namer/ lang_onlyformat)sectrr*done print_idsrr_out_grpsz$GroupCommand._list.._out_grpcsF|r t||D]0}dtj|j}r8|d|j7}t|qdS)NrJrK)rLrr6rMrNr/)rQr9er*)rTrr_out_envsz$GroupCommand._list.._out_envzAvailable Environment Groups:zInstalled Environment Groups:Installed Groups:Installed Language Groups:Available Groups:Available Language Groups:)r'confverboserrIpoprHr?r@r(r&r<r4rCrDrr:rArO)rrEr=Z showinstalledZ showavailableZerrsrr(Zin_groupZin_environmentZenv_instZ env_availr?r@rUrWrrRr_lists          zGroupCommand._listc Cst|jj|jjtjtjBtjtjB}|j}|j |}|j j rXt |jj jdg}nt |jj j}tj|}|jD]}|||qx|jD]}|||qdS)Noptional)rr'r(r-GROUPS ENVIRONMENTSZ AVAILABLE INSTALLED_build_comps_solverrr with_optionaltupler\group_package_typeslibdnfZ transactionZlistToCompsPackageTyper3Z_environment_installrZ_group_install) rr8qsolverrestypesZ pkg_typesenv_idZgroup_idrrr _mark_installs       zGroupCommand._mark_installcCsdt|jj|jjtjtjBtj}|j}|j|}|j D]}| |q:|j D]}| |qPdSr,) rr'r(r-rarbrcrdrr3Z_environment_removerZ _group_remove)rr8rirjrkrmZgrp_idrrr _mark_removes      zGroupCommand._mark_removecCs*|d|jvr"|d|ddfSd|fS)NrrGr ) _MARK_CMDS)rextcmdsrrr _mark_subcmdszGroupCommand._mark_subcmdcCsd}t|dkr*|ddkr*d}|d|jjr6d}|s>d}|||\}}dd}d}|D]}|jrjq^|d7}q^|td|d}|D]}|jsq|d7}q|td|d}|D]}|jrq|d7}q|td |d}|D]}|jsq|d7}q|td |dgfS) NrGrrHcSs|sdStd||dS)Nz%s %u)rCr )rQZnumrrrrUsz'GroupCommand._summary.._out_grprXrYFrZr[)r&r^rrHrArOr)rrEr=r?r@rUrSrrrr_summary sH       zGroupCommand._summaryc Cs|jddtdd|}|jddtdd|jddtdd|jd dtd d|jd dtd d|jd ddtdtjddtjddd|jdddtdddS)Nz--with-optional store_truez$include optional packages from group)actionhelpz--hiddenzshow also hidden groupsz --installedzshow only installed groupsz --availablezshow only available groupsz--idszshow also ID of groupsr?ZCOMMANDz'available subcommands: {} (default), {}r, rG)nargsmetavarrvr*Z COMMAND_ARGzargument for group subcommand) add_argumentradd_mutually_exclusive_grouprPr _GROUP_SUBCOMMANDSr5)parserZ grpparserrrr set_argparser<s2  zGroupCommand.set_argparsercCs||jj}|jj}||jvrBttdd|jt j j |dvrd|sd|j j |t j j |j j}d|_|dvrd|_d|_|dkrd|_d|_nd|_|dvrt|j|dvrt|j|j dS) Nz$Invalid groups sub-command, use: %s.rx)r r rr T)r rr rr F)r r)rrrrr~rCZcriticalrr5rr#ZCliErrorZ optparser print_helpdemandsZsack_activationZ root_userZ resolvingZ allow_erasingZavailable_reposrZ_checkEnabledRepor'Z _checkGPGKey)rcmdrrrrr configurePs0     zGroupCommand.configurec Cs|jj}|jj}|dkr"||S|dkr4||S|dkrF||S|dkrx||\}}|dkrn||S||S|dkr(|jj rt |j j j dg}nt |j j j }d|_z|j |||j j jWStjjy&}z|j |S|dkr|D]2}z|j |gWntjjyzYn0qLdS) Nrr r rr r r`TzNo package %s available.z)Unable to find a mandatory group package.r)rrrrsr_rFrrrornrerfr'r\rgr"Zenv_group_installstrictrr)Z MarkingErrorrrCr rBZtermZboldZPackagesNotAvailableErrorZenv_group_upgradeZenv_group_removeError)rrrqrrlrVr*argrrrrunosH          zGroupCommand.runcCsb|js dS|jj}|jj}|j}|jjj|dD]$}|j |}| || ||q8dS)N)name) r"r'Z_goalr-Z group_membersZsackqueryr?ZfiltermZrpmZ get_reasonZ set_reasonZ group_reason)rZgoalr-namespkgreasonrrrrun_transactions zGroupCommand.run_transaction)__name__ __module__ __qualname____doc__rrfkeysaliasesrrrrpr~rr!r+r:rArFr_rnrorrrs staticmethodrrrr __classcell__rrr$rr $s>  h / *r )Z __future__rrZ dnf.compsrZdnf.clirZdnf.i18nrrZlibdnf.transactionrhrZdnf.exceptionsZdnf.utilZloggingZ getLoggerrCZCommandr rrrrs