<!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
f4                 @   s   d dl mZ 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Zd dl	Z	d dl
mZmZ d dlZd dlZdZejdjeZejdZdddd	Zd
d Zdd Zdd ZejjG dd dejjZdS )    )absolute_import)unicode_literalsN)_loggerz
-a-z0-9_.:z^[{}]+$z^[-a-zA-Z0-9_.@]+$T)Zdefault_explicitZuservisible_explicitZempty_groupsc             C   s   t j| stjtd| S )zgroup id validatorzInvalid group id)RE_GROUP_IDmatchargparseArgumentTypeErrorr   )value r   $/usr/lib/python3.6/groups_manager.pygroup_id_type.   s    
r   c             C   sN   | j dd}t|dkr&tjtd|\}}tj|sFtjtd||fS )ztranslated texts validator:   z6Invalid translated data, should be in form 'lang:text'z*Invalid/empty language for translated data)splitlenr   r	   r   RE_LANGr   )r
   datalangtextr   r   r   translation_type5   s    

r   c             C   s:   | j  }tjdjtd|}|s6tjjtdj| |S )z#generate group id based on its namez[^{}] zFCan't generate group id from '{}'. Please specify group id using --id.)	lowerresubformatRE_GROUP_ID_VALIDdnfcliCliErrorr   )r   group_idr   r   r   
text_to_idA   s    r!   c                   sd   e Zd ZdZedZ fddZedd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Z  ZS )GroupsManagerCommandgroups-managerz$create and edit groups metadata filec                s   t t| j| tj | _d S )N)superr"   __init__libcompsCompscomps)selfr   )	__class__r   r   r%   Q   s    zGroupsManagerCommand.__init__c             C   s  | j ddg dtdd | j ddg dtdd | j ddtd	d
 | j dddtdd | j dttdd | j ddtdd | j dtdd | j dttdd | j ddg dttdd | j ddg dttd d | j }|j d!d"dd td#d$ |j d%d"d&d td'd$ | j }|j d(dtd)d* |j d+dtd,d* |j d-ddtd.d | j d/dtd0d* | j d1d2d3td4d5 d S )6Nz--loadappendz	COMPS.XMLzload groups metadata from file)actiondefaultmetavarhelpz--savezsave groups metadata to filez--mergez%load and save groups metadata to file)r.   r/   z--print
store_trueFz#print the result metadata to stdout)r,   r-   r/   z--idzgroup id)typer/   z-nz--namez
group name)r/   z--descriptionzgroup descriptionz--display-orderzgroup display orderz--translated-namez	LANG:TEXTztranslated name for the group)r,   r-   r.   r1   r/   z--translated-descriptionz$translated description for the groupz--user-visibleuser_visiblez%make the group user visible (default))destr,   r-   r/   z--not-user-visibleZstore_falsezmake the group user invisiblez--mandatoryz%add packages to the mandatory section)r,   r/   z
--optionalz$add packages to the optional sectionz--removez5remove packages from the group instead of adding themz--dependenciesz-include also direct dependencies for packagespackages*ZPACKAGEzpackage specification)nargsr.   r/   )add_argumentr   r   intr   Zadd_mutually_exclusive_group)parserZvisibleZsectionr   r   r   set_argparserU   sR    








z"GroupsManagerCommand.set_argparserc             C   s   | j j}| jjr"d|_d|_d|_| jjrP| jjj	d| jj | jj
j| jj | jjs| jjs| jjs| jjs| jjd k	s| jjr| jj r| jj rtj jtdd S )NTFr   z;Can't edit group without specifying it (use --id or --name))r   demandsoptsr4   Zsack_activationZavailable_reposZload_system_repomergeloadinsertsaver+   descriptiondisplay_ordertranslated_nametranslated_descriptionr2   idnamer   r   r   )r)   r;   r   r   r   	configure   s"    zGroupsManagerCommand.configurec             C   s   x| j jD ]
}tj }yp|jdr~tj|F}tjdd}z$t	j
|| |j  |j|j W dtj|j X W dQ R X n
|j| W n~ tttjfk
r } zXt }x2|j D ]&}||krqtj|j  |j| qW tjjtdj||W Y dd}~X qX |  j|7  _qW dS )zm
        Loads all input xml files.
        Returns True if at least one file was successfuly loaded
        z.gzF)deleteNzCan't load file "{}": {})r<   r>   r&   r'   endswithgzipopentempfileZNamedTemporaryFileshutilZcopyfileobjcloseZ	fromxml_frF   osunlinkIOErrorOSErrorZParserErrorsetZget_last_errorsr   errorstripaddr   
exceptionsErrorr   r   r(   )r)   	file_nameZ
file_compsZgz_fileZ	temp_fileerrseenrT   r   r   r   load_input_files   s,    
$z%GroupsManagerCommand.load_input_filesc             C   s   x| j jD ]}y| jj|td}W n* tjk
rL } z|g}W Y d d }~X nX |r
x"|d d D ]}tj|j	  q`W t
jjtdj||d j	 q
W d S )N)xml_options   zCan't save file "{}": {}r_   )r<   r@   r(   Zxml_fCOMPS_XML_OPTIONSr&   ZXMLGenErrorr   rT   rU   r   rW   rX   r   r   )r)   rY   errorsrZ   r   r   r   save_output_files   s    z&GroupsManagerCommand.save_output_filesc             C   s\   d}|r*x | j jD ]}|j|kr|}P qW |dkrX|rXx | j jD ]}|j|kr@|}P q@W |S )zl
        Try to find group according to command line parameters - first by id
        then by name.
        N)r(   groupsrE   rF   )r)   r    rF   groupZgrpr   r   r   
find_group   s    

zGroupsManagerCommand.find_groupc             C   s  dd }| j jr| j j|_| j jr,| j j|_| j jr>| j j|_| j jdk	rT| j j|_| j jrj|| j j|_| j j	r|| j j	|_
| j jrt }xZ| j jD ]N}tjj|}|j| jjddddj }|stjtdj| q|j| qW | j jr2t }x|D ]}|j|j qW |j| jjj j|d d	d
 |D }	| j jrx|	D ].}
x&|j|
tj dD ]}|jj| qfW qPW nd| j j!rtj"}n| j j#rtj$}ntj%}x8t&|	D ],}
|j|
|ds|jj'tj(|
|d qW dS )zE
        Set attributes and package lists for selected group
        c             S   s&   t j }x| D ]\}}|||< qW |S )N)r&   ZStrDict)ZlstZstr_dictr   r   r   r   r   langlist_to_strdict   s    z<GroupsManagerCommand.edit_group.<locals>.langlist_to_strdictNTF)Z
with_nevraZwith_providesZwith_filenameszNo match for argument: {})Zprovidesc             S   s   h | ]
}|j qS r   )rF   ).0pkgr   r   r   	<setcomp>  s    z2GroupsManagerCommand.edit_group.<locals>.<setcomp>)rF   r1   ))r<   rF   rA   ZdescrB   r2   ZuservisiblerC   Zname_by_langrD   Zdesc_by_langr4   rS   r   ZsubjectZSubjectZget_best_querybaseZsackZlatestr   Zwarningr   r   updateZdependenciesZrequiresZqueryZfiltermremoveZpackages_matchr&   ZPACKAGE_TYPE_UNKNOWNZ	mandatoryZPACKAGE_TYPE_MANDATORYZoptionalZPACKAGE_TYPE_OPTIONALZPACKAGE_TYPE_DEFAULTsortedr+   ZPackage)r)   rd   rf   r4   Zpkg_specZsubjqZrequirementsrh   Z	pkg_namesZpkg_nameZpkg_typer   r   r   
edit_group   sT    










zGroupsManagerCommand.edit_groupc             C   s   | j   | jjs| jjr| j| jj| jjd}|d kr| jjrNtjjt	dt
j }| jjrt| jj|_| jj|_nD| jjrt| jj}| j|d drtjjt	dj|| jj||_| jjj| | j| | j  | jjs| jj rt| jjtd d S )N)r    rF   z-Can't remove packages from non-existent groupzRGroup id '{}' generated from '{}' is duplicit. Please specify group id using --id.)r]   )r\   r<   rE   rF   re   rl   r   rW   rX   r   r&   ZGroupr!   r   r   r   r(   rc   r+   ro   rb   printr@   Zxml_strr`   )r)   rd   r    r   r   r   run!  s,    

zGroupsManagerCommand.run)r#   )__name__
__module____qualname__aliasesr   Zsummaryr%   staticmethodr:   rG   r\   rb   re   ro   rq   __classcell__r   r   )r*   r   r"   L   s   1$=r"   )Z
__future__r   r   r   rJ   r&   rO   r   rM   rL   Zdnfpluginscorer   r   r   Zdnf.clir   compiler   r   r   r`   r   r   r!   ZpluginZregister_commandr   ZCommandr"   r   r   r   r   <module>   s,   
