3 f:@sddlmZddlmZddlmZddlmZddlmZm Z ddl Z ddlZ ddl Z ddlZ ddlZejdZGdd d ejZdS) )absolute_import)unicode_literals) CompsQuery)commands)_ucdNdnfcseZdZdZdddddddZd-eejZed Z d dd Z d.Z d/Z ddZ fddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zed%d&Zd'd(Zd)d*Zd+d,ZZS)0 GroupCommandz; Single sub-command interface for most groups interaction. listinstallremoveinfo)Z grouplistZ groupinstallZ groupupdateZ groupremoveZ grouperaseZ groupinfogroupgroupsgrpz'display, or use, the groups informationupgrade)updateZerasesummarymarkcCsn|jj|jj}|r<|jjdk r4|jjjd|jj||j_|jjdkrPd|j_|jj|jj|jj|j_dS)Nrr)direct_commandsgetoptsZcommandsubcmdargsinsert _CMD_ALIASES)selfZdirectr/usr/lib/python3.6/group.py _canonical6s   zGroupCommand._canonicalcstt|j|d|_dS)NF)superr __init___remark)rcli) __class__rrr!CszGroupCommand.__init__cCs$td}t|jjs tjj|dS)Nz4No group data available for configured repositories.)rlenbasecompsr exceptionsZ CompsError)rmsgrrr _assert_compsGs zGroupCommand._assert_compscsTfdd}j|dkr(jjj}njjjdj|}tjjt tjj ||S)Ncsjjjj|j}| S)N)r&historyenvrid)r,Z env_found)rrravailable_predMsz7GroupCommand._environment_lists..available_pred,) r*r&r' environmentsenvironments_by_patternjoinrutilZmapallr partition)rpatternsr.envsr)rr_environment_listsLs   zGroupCommand._environment_listsc sfdd}g}g}j|dkr0jjj}njjjdj|}x2|D]*}|}||r^|}| sj|jrJ|j|qJW||fS)Ncsjjjj|j}|rdSdS)NTF)r&r+rrr-)rZ group_found)rrrinstalled_predZsz1GroupCommand._group_lists..installed_predr/)r*r&r'rgroups_by_patternr2 uservisibleappend) rr:r5r8 installed availableZgrpsrZtgt_listr)rr _group_listsYs    zGroupCommand._group_listscCs~xt|D]l}d}x&|jjj|D]}|jj|d}qWx&|jjj|D]}|jj|d}qFW|stjt d|qWdgfS)NFTz!Warning: Group %s does not exist.r) r&r'r1outputZdisplay_groups_in_environmentr9Zdisplay_pkgs_in_groupsloggererrorr)ruserlistZstrngZ group_matchedr,rrrr_infoqs   zGroupCommand._infocsd}d}d}|jjjp|jjxz|r|ddkr@d}|jdq |ddkr\d}|jdq |ddkrxd}|jdq |ddkrd|jdq Pq W|jjrd}|jjrd}|jjrd}|sd}d}|dk r@x\|D]T}|jj }t |j |dk}t |j |dk} | r| rt jtd d |d}qW|r@dgfS|j|\} } |j||\} } fd d }fd d}|s|td| |s|td| |s dx,| D]$}|jrq|td|dqWdx,| D]$}|jsq|td|dqW|rdgfSdx,| D]$}|jr2q"|td|dq"Wdx,| D]$}|jsdqT|td|dqTWdgfS)Nrhiddenr<r=idsTFzWarning: No groups match:z %scs`s t|d|jdk r|jntd}r:|d|j7}|jrN|d|j7}tdj|dS)Nz %sz z (%s)z [%s]z{})printui_namerr- lang_onlyformat)sectrr))done print_idsrr_out_grpsz$GroupCommand._list.._out_grpcsT|r t|xB|D]:}d|jdk r(|jntd}rD|d|j7}t|qWdS)Nz %sz z (%s))rGrHrr-)rKr6er))rMrr_out_envs z$GroupCommand._list.._out_envzAvailable Environment Groups:zInstalled Environment Groups:zInstalled Groups:zInstalled Language Groups:zAvailable Groups:zAvailable Language Groups:)r&confverboserrFpoprEr<r=r'r%r9r1r@rArr7r>rI)rrBr:Z showinstalledZ showavailableZerrsrr'Zin_groupZin_environmentZenv_instZ env_availr<r=rNrPr)rLrMr_lists                    zGroupCommand._listc Cst|jj|jjtjtjBtjtjB}|jj}|j |}|j j rXt |jj jdg}nt |jj j}tjj|}x|jD]}|j||qzWx|jD]}|j||qWdS)Noptional)rr&r'r+GROUPS ENVIRONMENTSZ AVAILABLE INSTALLED_build_comps_solverrr with_optionaltuplerQgroup_package_typeslibdnfZ transactionZlistToCompsPackageTyper0Z_environment_installrZ_group_install) rr5qsolverrestypesZ pkg_typesenv_idZgroup_idrrr _mark_installs      zGroupCommand._mark_installcCst|jj|jjtjtjBtj}|jj}|j|}x(|j D]}t j j |sPt |j|qd}|j||\}}dd}d}x|D]}|jrlq`|d7}q`W|td|d}x|D]}|jsq|d7}qW|td|d}x|D]}|jrq|d7}qW|td |d}x|D]}|jsq|d7}qW|td |dgfS) NrDrrEcSs|sdStjd||dS)Nz%s %u)r@r )rKZnumrrrrNsz'GroupCommand._summary.._out_grpzInstalled Groups:zInstalled Language Groups:FzAvailable Groups:zAvailable Language Groups:)r%rSrrEr>rIr)rrBr:r<r=rNrLrrrr_summary sH           zGroupCommand._summaryc Cs|jddtdd|j}|jddtdd|jddtdd|jd dtd d|jd dtd d|jd ddtdjtjddjtjddd|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), {}rz, rD)nargsmetavarrlr*Z COMMAND_ARGzargument for group subcommand) add_argumentrZadd_mutually_exclusive_grouprJr _GROUP_SUBCOMMANDSr2)parserZ grpparserrrr set_argparser<s"       zGroupCommand.set_argparsercCs|j|jj}|jj}||jkrBtjtddj|jt j j |d krf| rf|j j j |t j j |j j}d|_|d krd|_d|_|dkrd|_d |_nd|_|dkrtj|j|d krtj|j|j dS) Nz$Invalid groups sub-command, use: %s.z, r r rr TrF)r r rr )r rr r)r r)rrrrrrr@Zcriticalrr2rr#ZCliErrorZ optparserZ print_helpdemandsZsack_activationZ root_userZ resolvingZ allow_erasingZavailable_reposrZ_checkEnabledRepor&Z _checkGPGKey)rcmdrrurrr configurePs.   zGroupCommand.configurecCs|jj}|jj}|dkr"|j|S|dkr4|j|S|dkrF|j|S|dkr|j|\}}|dkrn|j|S|dkszt|j |S|dkr0|jj rt |j j jdg}nt |j j j}d|_y|j j|||j j jStjjk r.}z6td }tj||j jjj|tjjtd WYdd}~XnX|d krF|j j|S|dkrx<|D]4}y|j j|gWntjjk rYnXqVWdS) Nrr r rr r rUTzNo package %s available.z)Unable to find a mandatory group package.r)rrrrirTrCrhrerdrcrZr[r&rQr\r"Zenv_group_installstrictrr(Z MarkingErrorrr@r r?ZtermZboldZPackagesNotAvailableErrorZenv_group_upgradeZenv_group_removeError)rrvrgrrarOr)argrrrrunosF             zGroupCommand.runcCsf|js dS|jj}|jj}|j}x@|jjjjj|dD]$}|j j |}|j ||j ||q:WdS)N)name) r"r&Z_goalr+Z group_membersZsackZqueryr<ZfiltermZrpmZ get_reasonZ set_reasonZ group_reason)rZgoalr+namesZpkgreasonrrrrun_transactions zGroupCommand.run_transaction)rrr)r r )rr r r r rr)__name__ __module__ __qualname____doc__rr[keysaliasesrrrrfrrrr!r*r7r>rCrTrcrerhri staticmethodrtrwr{r __classcell__rr)r$rr $s8  h / *r )Z __future__rrZ dnf.compsrZdnf.clirZdnf.i18nrrZlibdnf.transactionr]rZdnf.exceptionsZdnf.utilZloggingZ getLoggerr@ZCommandr rrrrs