
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÅÀfÜ4  ã               @   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 r¨t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rÄq¶tj|jƒ ƒ |j|ƒ q¶W 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�rètƒ }xZ| j jD ]N}tjj|ƒ}|j| jjdddd�jƒ }|sÞtjtdƒj|ƒƒ qš|j|ƒ qšW | j j�r2tƒ }x|D ]}|j|jƒ �qW |j| jjjƒ j|d�ƒ d	d
„ |D ƒ}	| j j�r„xœ|	D ].}
x&|j|
tj d�D ]}|jj|ƒ �qfW �qPW nd| j j!�r–tj"}n| j j#�r¨tj$}ntj%}x8t&|	ƒD ],}
|j|
|d��s¸|jj'tj(|
|d�ƒ �q¸W 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r¸t| jjƒ}| j|d d�r²tjjt	dƒj|| jjƒƒ‚||_| jjj|ƒ | j|ƒ | jƒ  | jjsê| jj rüt| 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,   
