
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
©ft`Š>  ã            	   @   sH  d dl mZmZ d dl mZ d dlZd dlmZ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Zd dlZd dlZdZdZdZdZd	Zd
ZdZdZeeegZeeegZejjejj ejj!ejj"ejj#ejj$ejj%ejj&ejj'h	Z(ej)dƒZ*dd„ Z+G dd„ de,ƒZ-G dd„ de-ƒZ.G dd„ de-ƒZ/G dd„ de,ƒZ0dS )é    )Úprint_functionÚabsolute_import)Úunicode_literalsN)Ú_Úucdé
   é   é(   é2   é<   éF   éZ   éd   Údnfc                s   t ‡ fdd„ƒ}|S )zb
    Wrapper to return a deprecated action constant
    while printing a deprecation warning.
    c                s2   d| j jˆ ˆ f }tj|tdd� ttjˆ ƒ}|S )Nz1%s.%s is deprecated. Use dnf.callback.%s instead.é   )Ú
stacklevel)Ú	__class__Ú__name__ÚwarningsÚwarnÚDeprecationWarningÚgetattrr   Úcallback)ÚselfÚmsgÚvalue)Úname© ú/usr/lib/python3.6/rpmtrans.pyÚ_funcC   s
    z%_add_deprecated_action.<locals>._func)Úproperty)r   r   r   )r   r   Ú_add_deprecated_action>   s    r!   c               @   s˜   e Zd Zdd„ ZedƒZedƒZedƒZeZedƒZ	edƒZ
edƒZed	ƒZed
ƒZedƒZedƒZedƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTransactionDisplayc             C   s   d S )Nr   )r   r   r   r   Ú__init__P   s    zTransactionDisplay.__init__ÚPKG_CLEANUPÚPKG_DOWNGRADEÚ
PKG_REMOVEÚPKG_INSTALLÚPKG_OBSOLETEÚPKG_REINSTALLÚPKG_UPGRADEÚ
PKG_VERIFYÚTRANS_PREPARATIONÚPKG_SCRIPTLETÚ
TRANS_POSTc             C   s   dS )a  Report ongoing progress on a transaction item. :api

        :param package: a package being processed
        :param action: the action being performed
        :param ti_done: number of processed bytes of the transaction
           item being processed
        :param ti_total: total number of bytes of the transaction item
           being processed
        :param ts_done: number of actions processed in the whole
           transaction
        :param ts_total: total number of actions in the whole
           transaction

        Nr   )r   ÚpackageÚactionZti_doneZti_totalZts_doneZts_totalr   r   r   Úprogressb   s    zTransactionDisplay.progressc             C   s   dS )z_Hook for reporting an rpm scriptlet output.

        :param msgs: the scriptlet output
        Nr   )r   Úmsgsr   r   r   Ú	scriptouts   s    zTransactionDisplay.scriptoutc             C   s   dS )z:Report an error that occurred during the transaction. :apiNr   )r   Úmessager   r   r   Úerrorz   s    zTransactionDisplay.errorc             C   s   dS )z|package is the same as in progress() - a package object or simple
           string action is also the same as in progress()Nr   )r   r/   r0   r   r   r   Úfilelog~   s    zTransactionDisplay.filelogc             C   s   | j |tjjdd||ƒ d S )Nr   )r1   r   Útransactionr+   )r   ÚpkgÚcountÚtotalr   r   r   Úverify_tsi_package„   s    z%TransactionDisplay.verify_tsi_packageN)r   Ú
__module__Ú__qualname__r#   r!   r$   r%   r&   Z	PKG_ERASEr'   r(   r)   r*   r+   r,   r-   r.   r1   r3   r5   r6   r;   r   r   r   r   r"   M   s$   r"   c                   s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚErrorTransactionDisplayz@An RPMTransaction display that prints errors to standard output.c                s&   t t| ƒj|ƒ tjjd|tjƒ d S )NÚprint)Úsuperr>   r5   r   ÚutilZ_terminal_messengerÚsysÚstderr)r   r4   )r   r   r   r5   �   s    zErrorTransactionDisplay.error)r   r<   r=   Ú__doc__r5   Ú__classcell__r   r   )r   r   r>   ‰   s   r>   c                   s8   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Z‡  ZS )
ÚLoggingTransactionDisplayz@
    Base class for a RPMTransaction display callback class
    c                s   t t| ƒjƒ  tjdƒ| _d S )Nzdnf.rpm)r@   rF   r#   ÚloggingÚ	getLoggerÚ
rpm_logger)r   )r   r   r   r#   –   s    z"LoggingTransactionDisplay.__init__c             C   s   | j j|ƒ d S )N)rI   r5   )r   r4   r   r   r   r5   š   s    zLoggingTransactionDisplay.errorc             C   s.   t jj| }d||f }| jjt jj|ƒ d S )Nz%s: %s)r   r7   ZFILE_ACTIONSrI   ÚlogrG   ZSUBDEBUG)r   r/   r0   Z
action_strr   r   r   r   r6   �   s    z!LoggingTransactionDisplay.filelogc             C   s   |r| j jt|ƒƒ d S )N)rI   Úinfor   )r   r2   r   r   r   r3   ¢   s    z#LoggingTransactionDisplay.scriptout)	r   r<   r=   rD   r#   r5   r6   r3   rE   r   r   )r   r   rF   ’   s
   rF   c               @   sä   e Zd Zdf fdd„Zd8dd„Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7S )9ÚRPMTransactionFc             C   sn   |st ƒ g}|| _|| _|| _d| _d | _d| _d| _d| _t	ƒ | _
d| _| j|jjƒ g | _d| _d | _d S )NFr   )r>   ÚdisplaysÚbaseÚtestÚtrans_runningÚfdÚtotal_actionsÚtotal_installedÚcomplete_actionsÚsetÚinstalled_pkg_namesÚtotal_removedÚ_setupOutputLoggingZconfÚrpmverbosityÚ_te_listÚ	_te_indexÚ
_tsi_cache)r   rN   rO   rM   r   r   r   r#   ¨   s     zRPMTransaction.__init__rK   c             C   s~   t jƒ }|| _t|jdƒ| _| jjj| jƒ ddddddœj	||ƒ}d|j
ƒ  }tt|ƒs^d	}tjtt|ƒƒ tj| jƒ d S )
Nzw+bZcritZemergÚerrrK   Zwarning)ÚcriticalZ	emergencyr5   Zinformationr   ZRPMLOG_ZRPMLOG_INFO)ÚtempfileZNamedTemporaryFileÚ	_readpipeÚopenr   Ú
_writepiperN   Ú_tsZsetScriptFdÚgetÚupperÚhasattrÚrpmÚsetVerbosityr   Ú
setLogFile)r   rY   Zio_rr   r   r   rX   ½   s    
z"RPMTransaction._setupOutputLoggingc          	   C   s8   t jt jƒ t jtjƒ y| jjƒ  W n   Y nX d S )N)rg   rh   ZRPMLOG_NOTICEri   rB   rC   rb   Úclose)r   r   r   r   Ú_shutdownOutputLoggingÎ   s    z%RPMTransaction._shutdownOutputLoggingc             C   sB   y(| j j| j jƒ ƒ | j jƒ }|s&d S |S  tk
r<   Y nX d S )N)r`   ÚseekÚtellÚreadÚIOError)r   Úoutr   r   r   Ú_scriptOutput×   s    
zRPMTransaction._scriptOutputc             c   s,   | j ƒ }|r(x|jƒ D ]}t|ƒV  qW d S )N)rq   Ú
splitlinesr   )r   ÚmessagesÚliner   r   r   rs   ç   s    zRPMTransaction.messagesc             C   s4   | j ƒ }x| jD ]}|j|ƒ qW | jjj|ƒ d S )N)rq   rM   r3   rN   ÚhistoryZlog_scriptlet_output)r   r2   Údisplayr   r   r   Ú
_scriptoutí   s    zRPMTransaction._scriptoutc             C   s   | j ƒ  d S )N)rk   )r   r   r   r   Ú__del__ó   s    zRPMTransaction.__del__c             C   s    t |dƒr|}|gS | j| j }tjj|ƒ}| jrJt| jd ƒ|krJ| jS g }x2| jj	D ]&}|j
tkrhqXt|ƒ|krX|j|ƒ qXW |r�|| _|S td| ƒ‚dS )z3Obtain the package related to the calling callback.r8   r   z%TransactionItem not found for key: %sN)rf   rZ   r[   r   rA   Z	_te_nevrar\   ÚstrrN   r7   r0   ÚRPM_ACTIONS_SETÚappendÚRuntimeError)r   ZcbkeyZtsiZteZte_nevraÚitemsr   r   r   Ú_extract_cbkeyö   s$    

zRPMTransaction._extract_cbkeyc       
      C   sî  �y¤t |tƒrt|ƒ}|tjkr.| j|ƒ �nv|tjkr<�nh|tjkrV| j||ƒ �nN|tj	krp| j
||ƒ �n4|tjkr„| j|ƒS |tjkrœ| j|ƒ �n|tjkr²| j|ƒ nò|tjkrÈ| j|ƒ nÜ|tjkrâ| j|||ƒ nÂ|tjkrø| j|ƒ n¬|tjk�r| j|ƒ n”|tjk�r,| j|||ƒ nx|tjk�rD| j|ƒ n`|tjk�r\| j|ƒ nH|tjk�rx| j |||ƒ n,|tj!k�r�| j"|ƒ n|tj#k�r¤| j$ƒ  W nB t%k
�rè   t&j'ƒ \}}}t(j)|||ƒ}	t*j+dj,|	ƒƒ Y nX d S )NÚ )-Ú
isinstancery   r   rg   ZRPMCALLBACK_TRANS_STARTÚ_transStartZRPMCALLBACK_TRANS_STOPZRPMCALLBACK_TRANS_PROGRESSÚ_trans_progressZRPMCALLBACK_ELEM_PROGRESSÚ_elemProgressZRPMCALLBACK_INST_OPEN_FILEÚ_instOpenFileZRPMCALLBACK_INST_CLOSE_FILEÚ_instCloseFileZRPMCALLBACK_INST_STARTÚ_inst_startZRPMCALLBACK_INST_STOPÚ
_inst_stopZRPMCALLBACK_INST_PROGRESSÚ_instProgressZRPMCALLBACK_UNINST_STARTÚ_uninst_startZRPMCALLBACK_UNINST_STOPÚ_unInstStopZRPMCALLBACK_UNINST_PROGRESSÚ_uninst_progressZRPMCALLBACK_CPIO_ERRORÚ
_cpioErrorZRPMCALLBACK_UNPACK_ERRORÚ_unpackErrorZRPMCALLBACK_SCRIPT_ERRORÚ_scriptErrorZRPMCALLBACK_SCRIPT_STARTÚ_script_startZRPMCALLBACK_SCRIPT_STOPÚ_scriptStopÚ	ExceptionrB   Úexc_infoÚ	tracebackÚformat_exceptionÚloggerr^   Újoin)
r   ZwhatÚamountr:   ÚkeyZclient_dataÚexc_typeÚ	exc_valueÚexc_tracebackZexcept_listr   r   r   r     sR    











zRPMTransaction.callbackc             C   s(   || _ | jrd S d| _t| jjƒ| _d S )NT)rR   rO   rP   ÚlistrN   rc   rZ   )r   r:   r   r   r   r�   <  s
     zRPMTransaction._transStartc             C   s4   t jj}x&| jD ]}|jd||d |ddƒ qW d S )Nr   é   )r   r7   r,   rM   r1   )r   r—   r:   r0   rv   r   r   r   r‚   B  s    zRPMTransaction._trans_progressc             C   sP   || _ |  jd7  _| jsL| j|ƒ}x&| jD ]}|j|d j|d jƒ q,W d S )Nr�   r   )r[   rT   rO   r~   rM   r6   r8   r0   )r   r˜   ÚindexÚtransaction_listrv   r   r   r   rƒ   G  s    
zRPMTransaction._elemProgressc             C   s¦   d | _ | j|ƒ}|d j}|jƒ }yt|ƒ| _W nD tk
rt } z(x | jD ]}|jd||f ƒ qJW W Y d d }~X n.X | j	r˜|  j
d7  _
| jj|jƒ | jjƒ S d S )Nr   zError: Cannot open file %s: %sr�   )Zlastmsgr~   r8   ZlocalPkgra   rQ   ro   rM   r5   rP   rS   rV   Úaddr   Úfileno)r   r˜   rŸ   r8   ZrpmlocÚerv   r   r   r   r„   O  s    

(zRPMTransaction._instOpenFilec             C   s   | j jƒ  d | _ d S )N)rQ   rj   )r   r˜   r   r   r   r…   _  s    
zRPMTransaction._instCloseFilec             C   s   d S )Nr   )r   r˜   r   r   r   r†   c  s    zRPMTransaction._inst_startc             C   sV   | j s| j rd S | jƒ  | j| jkrRtjj}x"| jD ]}|j	d |d d d d ƒ q6W d S )N)
rO   rP   rw   rT   rR   r   r7   r.   rM   r1   )r   r˜   r0   rv   r   r   r   r‡   f  s    zRPMTransaction._inst_stopc             C   sJ   | j |ƒ}|d j}|d j}x&| jD ]}|j||||| j| jƒ q&W d S )Nr   )r~   r8   r0   rM   r1   rT   rR   )r   r—   r:   r˜   rŸ   r8   r0   rv   r   r   r   rˆ   r  s
    


zRPMTransaction._instProgressc             C   s   |  j d7  _ d S )Nr�   )rW   )r   r˜   r   r   r   r‰   y  s    zRPMTransaction._uninst_startc             C   sJ   | j |ƒ}|d j}|d j}x&| jD ]}|j||||| j| jƒ q&W d S )Nr   )r~   r8   r0   rM   r1   rT   rR   )r   r—   r:   r˜   rŸ   r8   r0   rv   r   r   r   r‹   |  s
    


zRPMTransaction._uninst_progressc             C   s   | j r
d S | jƒ  d S )N)rO   rw   )r   r˜   r   r   r   rŠ   ƒ  s    zRPMTransaction._unInstStopc             C   s6   | j |ƒ}d|d j }x| jD ]}|j|ƒ q W d S )Nz'Error in cpio payload of rpm package %sr   )r~   r8   rM   r5   )r   r˜   rŸ   r   rv   r   r   r   rŒ   ‰  s    
zRPMTransaction._cpioErrorc             C   s6   | j |ƒ}d|d j }x| jD ]}|j|ƒ q W d S )NzError unpacking rpm package %sr   )r~   r8   rM   r5   )r   r˜   rŸ   r   rv   r   r   r   r�   �  s    
zRPMTransaction._unpackErrorc       	      C   sN   t jj|dƒ}| j|ƒ}|d jj}d||f }x| jD ]}|j|ƒ q8W d S )Nz	<unknown>r   z'Error in %s scriptlet in rpm package %s)rg   Ztagnamesrd   r~   r8   r   rM   r5   )	r   r—   r:   r˜   Zscriptlet_namerŸ   r   r   rv   r   r   r   rŽ   •  s    
zRPMTransaction._scriptErrorc             C   s˜   t jj}|d kr | jg kr d}n| j|ƒ}|d j}| jdkrN| jdkrN| jnd}| jdkrl| jdkrl| jnd}x"| jD ]}|j	||dd||ƒ qxW d S )NÚNoner   r�   r   )
r   r7   r-   rZ   r~   r8   rR   rT   rM   r1   )r   r˜   r0   r8   rŸ   Zcompleter:   rv   r   r   r   r�   ¢  s    

zRPMTransaction._script_startc             C   s   | j ƒ  d S )N)rw   )r   r   r   r   r�   °  s    zRPMTransaction._scriptStopc             C   s"   x| j D ]}|j|||ƒ qW d S )N)rM   r;   )r   r8   r9   r:   rv   r   r   r   r;   ³  s    z!RPMTransaction.verify_tsi_packageN)rK   )r   r<   r=   r#   rX   rk   rq   rs   rw   rx   r~   r   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   r‹   rŠ   rŒ   r�   rŽ   r�   r�   r;   r   r   r   r   rL   §   s4   
	.rL   )1Z
__future__r   r   r   Zlibdnf.transactionZlibdnfZdnf.i18nr   r   Zdnf.callbackr   Zdnf.transactionZdnf.utilrg   ÚosrG   rB   r_   r“   r   Z	TS_UPDATEZ
TS_INSTALLZTS_ERASEZTS_OBSOLETEDZTS_OBSOLETINGZTS_AVAILABLEZ
TS_UPDATEDZ	TS_FAILEDZTS_INSTALL_STATESZTS_REMOVE_STATESr7   ZTransactionItemAction_INSTALLZTransactionItemAction_DOWNGRADEZ TransactionItemAction_DOWNGRADEDZTransactionItemAction_OBSOLETEZTransactionItemAction_OBSOLETEDZTransactionItemAction_UPGRADEZTransactionItemAction_UPGRADEDZTransactionItemAction_REMOVEZ!TransactionItemAction_REINSTALLEDrz   rH   r•   r!   Úobjectr"   r>   rF   rL   r   r   r   r   Ú<module>   sL   



<	