a
    ©!cÝ  ã                   @   s¶   d dl mZ d dl mZ d dlmZ d dlZd dl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e d¡ZdZej ed¡Zej ed	¡ZG d
d„ deƒZG dd„ deƒZdS )é    )Úabsolute_import)Úunicode_literals)Ú_N)ÚPRIO_DEFAULTÚdnfz/etc/dnf/aliases.d/zALIASES.confz	USER.confc                   @   s,   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdS )ÚAliasesConfigc                 C   s$   || _ tj ¡ | _| j | j ¡ d S )N)Ú_pathÚlibdnfÚconfZConfigParserÚ_parserÚread)ÚselfÚpath© r   ú3/usr/lib/python3.9/site-packages/dnf/cli/aliases.pyÚ__init__*   s    zAliasesConfig.__init__c                 C   sF   t j d¡}z| t| j ¡ d d ¡ W n ty<   Y n0 | ¡ S )NTÚmainÚenabled)	r	   r
   Ú
OptionBoolÚsetr   r   ZgetDataÚ
IndexErrorÚgetValue©r   Zoptionr   r   r   r   /   s    zAliasesConfig.enabledc                 C   sR   t  ¡ }d}| j |¡s|S | j |¡D ]$}| j ||¡}|s@q(| ¡ ||< q(|S )NÚaliases)ÚcollectionsÚOrderedDictr   Z
hasSectionÚoptionsr   Úsplit)r   ÚresultZsectionÚkeyÚvaluer   r   r   r   8   s    zAliasesConfig.aliasesN)Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   r   r   r   r   r   r   )   s
   
r   c                   @   sN   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zdd„ Zdd„ Z	dd„ Z
d	S )ÚAliasesc                 C   sF   t  ¡ | _d | _d| _|  ¡ r(d| _d S |  ¡  | js:d S |  ¡  d S )NTF)r   r   r   r
   r   Ú_disabled_by_environÚ
_load_mainÚ_load_aliases©r   r   r   r   r   G   s    
zAliases.__init__c                 C   sj   t j d¡}z| ttjd ¡ | ¡ W S  ty<   Y dS  t	yd   t
 tdƒtjd ¡ Y dS 0 d S )NTZDNF_DISABLE_ALIASESFz@Unexpected value of environment variable: DNF_DISABLE_ALIASES=%s)r	   r
   r   r   r   ÚosÚenvironr   ÚKeyErrorÚRuntimeErrorÚloggerÚwarningr   r   r   r   r   r&   W   s    
þzAliases._disabled_by_environc              
   C   s†   z
t |ƒW S  tyF } z$tj tdƒ||f ¡‚W Y d }~nDd }~0  ty€ } z$tj tdƒ||f ¡‚W Y d }~n
d }~0 0 d S )NzParsing file "%s" failed: %szCannot read file "%s": %s)r   r-   r   Ú
exceptionsÚConfigErrorr   ÚIOError)r   r   Úer   r   r   Ú
_load_confd   s    
ÿÿzAliases._load_confc              
   C   sX   z|   t¡| _| jj| _W n8 tjjyR } zt t	dƒ|¡ W Y d }~n
d }~0 0 d S ©NzConfig error: %s)
r4   ÚALIASES_CONF_PATHr
   r   r   r0   r1   r.   Údebugr   )r   r3   r   r   r   r'   n   s
    zAliases._load_mainNc                 C   s˜   |d u r.z|   ¡ }W n tjjy,   Y d S 0 |D ]`}z"|  |¡}|jrV| j |j¡ W q2 tjjy } zt 	t
dƒ|¡ W Y d }~q2d }~0 0 q2d S r5   )Ú_dropin_dir_filenamesr   r0   r1   r4   r   r   Úupdater.   r/   r   )r   Ú	filenamesÚfilenamer
   r3   r   r   r   r(   u   s    
zAliases._load_aliasesc              
      sÄ   t j t¡t j t¡g‰ ‡ fdd„}g }zLt j t¡s@t  t¡ tt  	t¡ƒD ]"}||ƒr\qN| 
t j t|¡¡ qNW n4 ttfy¨ } ztj |¡‚W Y d }~n
d }~0 0 t j t¡rÀ| 
t¡ |S )Nc                    s   | ˆ v p|   d¡p|  d¡ S )NÚ.)z.confz.CONF)Ú
startswithÚendswith)r;   ©Zignored_filenamesr   r   Ú_ignore_filenameŠ   s
    ÿ
þz7Aliases._dropin_dir_filenames.<locals>._ignore_filename)r*   r   Úbasenamer6   ÚALIASES_USER_PATHÚexistsÚALIASES_DROPIN_DIRÚmkdirÚsortedÚlistdirÚappendÚjoinr2   ÚOSErrorr   r0   r1   )r   r@   r:   Úfnr3   r   r?   r   r8   ƒ   s"    

ÿ
"
zAliases._dropin_dir_filenamesc                    s:   g ‰g ˆ _ ‡ fdd„‰‡ ‡‡‡fdd„‰ˆ|ƒ}ˆ j | S )Nc                    sL   d}| D ] }|r |d dkr  q*|d7 }qˆ  j | d |… 7  _ | |d … S )Nr   ú-é   ©Zprefix_options)ÚargsZnumÚargr)   r   r   Ústore_prefix¡   s    
z&Aliases._resolve.<locals>.store_prefixc                    sÒ   ˆ| ƒ}|r(|d ˆ j vs(|d  d¡rnz.ˆ ¡  |d  d¡rT|d dd … |d< W n tyh   Y n0 |S |d ˆv rŠtj tdƒ¡‚ˆ |d ¡ ˆˆ j |d  ƒ}|r¾||dd …  S ˆ|dd … ƒS d S )Nr   ú\rM   z"Aliases contain infinite recursion)	r   r=   Úpopr   r   r0   ÚErrorr   rH   )rO   ÚsuffixZcurrent_alias_result©r   ÚstackrQ   Ú
subresolver   r   rX   ¬   s,    ÿþÿz$Aliases._resolve.<locals>.subresolverN   )r   rO   rU   r   rV   r   Ú_resolve   s    zAliases._resolvec              
   C   sR   | j rNz|  |¡}W n8 tjjyL } zt tdƒ|¡ W Y d }~n
d }~0 0 |S )Nz%s, using original arguments.)r   rY   r   r0   rT   r.   Úerrorr   )r   rO   r3   r   r   r   ÚresolveÌ   s    &zAliases.resolve)N)r!   r"   r#   r   r&   r4   r'   r(   r8   rY   r[   r   r   r   r   r%   F   s   

/r%   )Z
__future__r   r   Zdnf.i18nr   r   Zdnf.clir   Zdnf.conf.configr   Zdnf.exceptionsZlibdnf.confr	   Zloggingr*   Zos.pathZ	getLoggerr.   rD   r   rI   r6   rB   Úobjectr   r%   r   r   r   r   Ú<module>   s    
