3 �ft`�>� @sHddlmZmZddlmZddlZddlmZmZddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZdZdZdZdZd Zd Zd Zd ZeeegZeeegZejjejj ejj!ejj"ejj#ejj$ejj%ejj&ejj'h Z(ej)d �Z*dd�Z+Gdd�de,�Z-Gdd�de-�Z.Gdd�de-�Z/Gdd�de,�Z0dS)�)�print_function�absolute_import)�unicode_literalsN)�_�ucd� ��(�2�<�F�Z�d�dnfcst�fdd��}|S)zb Wrapper to return a deprecated action constant while printing a deprecation warning. cs2d|jj��f}tj|tdd�ttj��}|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�_funcCs  z%_add_deprecated_action.._func)�property)rrr)rr�_add_deprecated_action>sr!c@s�eZdZdd�Zed�Zed�Zed�ZeZed�Z ed�Z ed�Z ed �Z ed �Z ed �Zed �Zed �Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)�TransactionDisplaycCsdS)Nr)rrrr�__init__PszTransactionDisplay.__init__� PKG_CLEANUP� PKG_DOWNGRADE� PKG_REMOVE� PKG_INSTALL� PKG_OBSOLETE� PKG_REINSTALL� PKG_UPGRADE� PKG_VERIFY�TRANS_PREPARATION� PKG_SCRIPTLET� TRANS_POSTcCsdS)aReport 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�actionZti_doneZti_totalZts_doneZts_totalrrr�progressbszTransactionDisplay.progresscCsdS)z_Hook for reporting an rpm scriptlet output. :param msgs: the scriptlet output Nr)r�msgsrrr� scriptoutsszTransactionDisplay.scriptoutcCsdS)z:Report an error that occurred during the transaction. :apiNr)r�messagerrr�errorzszTransactionDisplay.errorcCsdS)z|package is the same as in progress() - a package object or simple string action is also the same as in progress()Nr)rr/r0rrr�filelog~szTransactionDisplay.filelogcCs|j|tjjdd||�dS)Nr)r1r� transactionr+)r�pkg�count�totalrrr�verify_tsi_package�sz%TransactionDisplay.verify_tsi_packageN)r� __module__� __qualname__r#r!r$r%r&Z PKG_ERASEr'r(r)r*r+r,r-r.r1r3r5r6r;rrrrr"Ms$r"cs eZdZdZ�fdd�Z�ZS)�ErrorTransactionDisplayz@An RPMTransaction display that prints errors to standard output.cs&tt|�j|�tjjd|tj�dS)N�print)�superr>r5r�utilZ_terminal_messenger�sys�stderr)rr4)rrrr5�szErrorTransactionDisplay.error)rr<r=�__doc__r5� __classcell__rr)rrr>�sr>cs8eZdZdZ�fdd�Zdd�Zdd�Zdd �Z�ZS) �LoggingTransactionDisplayz@ Base class for a RPMTransaction display callback class cstt|�j�tjd�|_dS)Nzdnf.rpm)r@rFr#�logging� getLogger� rpm_logger)r)rrrr#�sz"LoggingTransactionDisplay.__init__cCs|jj|�dS)N)rIr5)rr4rrrr5�szLoggingTransactionDisplay.errorcCs.tjj|}d||f}|jjtjj|�dS)Nz%s: %s)rr7Z FILE_ACTIONSrI�logrGZSUBDEBUG)rr/r0Z action_strrrrrr6�s  z!LoggingTransactionDisplay.filelogcCs|r|jjt|��dS)N)rI�infor)rr2rrrr3�sz#LoggingTransactionDisplay.scriptout) rr<r=rDr#r5r6r3rErr)rrrF�s  rFc@s�eZdZdffdd�Zd8dd�Zdd�Zd d �Zd d �Zd d�Zdd�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7S)9�RPMTransactionFcCsn|s t�g}||_||_||_d|_d|_d|_d|_d|_t �|_ d|_ |j |j j�g|_d|_d|_dS)NFr)r>�displays�base�test� trans_running�fd� total_actions�total_installed�complete_actions�set�installed_pkg_names� total_removed�_setupOutputLoggingZconf� rpmverbosity�_te_list� _te_index� _tsi_cache)rrNrOrMrrrr#�s zRPMTransaction.__init__rKcCs~tj�}||_t|jd�|_|jjj|j�dddddd�j ||�}d|j �}t t |�s^d }t j tt |��t j|j�dS) Nzw+bZcritZemerg�errrKZwarning)�criticalZ emergencyr5Z informationrZRPMLOG_Z RPMLOG_INFO)�tempfileZNamedTemporaryFile� _readpipe�openr� _writepiperN�_tsZ setScriptFd�get�upper�hasattr�rpm� setVerbosityr� setLogFile)rrYZio_rrrrrX�s  z"RPMTransaction._setupOutputLoggingc Cs8tjtj�tjtj�y|jj�Wn YnXdS)N)rgrhZ RPMLOG_NOTICErirBrCrb�close)rrrr�_shutdownOutputLogging�s   z%RPMTransaction._shutdownOutputLoggingc CsBy(|jj|jj��|jj�}|s&dS|Stk r<YnXdS)N)r`�seek�tell�read�IOError)r�outrrr� _scriptOutput�s zRPMTransaction._scriptOutputccs,|j�}|r(x|j�D]}t|�VqWdS)N)rq� splitlinesr)r�messages�linerrrrs�szRPMTransaction.messagescCs4|j�}x|jD]}|j|�qW|jjj|�dS)N)rqrMr3rN�historyZlog_scriptlet_output)rr2�displayrrr� _scriptout�s zRPMTransaction._scriptoutcCs |j�dS)N)rk)rrrr�__del__�szRPMTransaction.__del__cCs�t|d�r|}|gS|j|j}tjj|�}|jrJt|jd�|krJ|jSg}x2|jj D]&}|j t krhqXt|�|krX|j |�qXW|r�||_|St d|��dS)z3Obtain the package related to the calling callback.r8rz%TransactionItem not found for key: %sN)rfrZr[rrAZ _te_nevrar\�strrNr7r0�RPM_ACTIONS_SET�append� RuntimeError)rZcbkeyZtsiZteZte_nevra�itemsrrr�_extract_cbkey�s$     zRPMTransaction._extract_cbkeyc Cs��y�t|t�rt|�}|tjkr.|j|��nv|tjkr<�nh|tjkrV|j||��nN|tj krp|j ||��n4|tj kr�|j |�S|tj kr�|j|��n|tjkr�|j|�n�|tjkr�|j|�n�|tjkr�|j|||�n�|tjkr�|j|�n�|tjk�r|j|�n�|tjk�r,|j|||�nx|tjk�rD|j|�n`|tjk�r\|j|�nH|tjk�rx|j |||�n,|tj!k�r�|j"|�n|tj#k�r�|j$�WnBt%k �r�t&j'�\}}}t(j)|||�} t*j+dj,| ��YnXdS)N�)-� isinstanceryrrgZRPMCALLBACK_TRANS_START� _transStartZRPMCALLBACK_TRANS_STOPZRPMCALLBACK_TRANS_PROGRESS�_trans_progressZRPMCALLBACK_ELEM_PROGRESS� _elemProgressZRPMCALLBACK_INST_OPEN_FILE� _instOpenFileZRPMCALLBACK_INST_CLOSE_FILE�_instCloseFileZRPMCALLBACK_INST_START� _inst_startZRPMCALLBACK_INST_STOP� _inst_stopZRPMCALLBACK_INST_PROGRESS� _instProgressZRPMCALLBACK_UNINST_START� _uninst_startZRPMCALLBACK_UNINST_STOP� _unInstStopZRPMCALLBACK_UNINST_PROGRESS�_uninst_progressZRPMCALLBACK_CPIO_ERROR� _cpioErrorZRPMCALLBACK_UNPACK_ERROR� _unpackErrorZRPMCALLBACK_SCRIPT_ERROR� _scriptErrorZRPMCALLBACK_SCRIPT_START� _script_startZRPMCALLBACK_SCRIPT_STOP� _scriptStop� ExceptionrB�exc_info� traceback�format_exception�loggerr^�join) rZwhat�amountr:�keyZ client_data�exc_type� exc_value� exc_tracebackZ except_listrrrrsR                           zRPMTransaction.callbackcCs(||_|jrdSd|_t|jj�|_dS)NT)rRrOrP�listrNrcrZ)rr:rrrr�<s zRPMTransaction._transStartcCs4tjj}x&|jD]}|jd||d|dd�qWdS)Nr�)rr7r,rMr1)rr�r:r0rvrrrr�Bs zRPMTransaction._trans_progresscCsP||_|jd7_|jsL|j|�}x&|jD]}|j|dj|dj�q,WdS)Nr�r)r[rTrOr~rMr6r8r0)rr��index�transaction_listrvrrrr�Gs   zRPMTransaction._elemProgresscCs�d|_|j|�}|dj}|j�}yt|�|_WnDtk rt}z(x |jD]}|jd||f�qJWWYdd}~Xn.X|j r�|j d7_ |j j |j �|jj�SdS)NrzError: Cannot open file %s: %sr�)Zlastmsgr~r8ZlocalPkgrarQrorMr5rPrSrV�addr�fileno)rr�r�r8Zrpmloc�ervrrrr�Os   (zRPMTransaction._instOpenFilecCs|jj�d|_dS)N)rQrj)rr�rrrr�_s zRPMTransaction._instCloseFilecCsdS)Nr)rr�rrrr�cszRPMTransaction._inst_startcCsV|js|j rdS|j�|j|jkrRtjj}x"|jD]}|j d|dddd�q6WdS)N) rOrPrwrTrRrr7r.rMr1)rr�r0rvrrrr�fs  zRPMTransaction._inst_stopcCsJ|j|�}|dj}|dj}x&|jD]}|j|||||j|j�q&WdS)Nr)r~r8r0rMr1rTrR)rr�r:r�r�r8r0rvrrrr�rs     zRPMTransaction._instProgresscCs|jd7_dS)Nr�)rW)rr�rrrr�yszRPMTransaction._uninst_startcCsJ|j|�}|dj}|dj}x&|jD]}|j|||||j|j�q&WdS)Nr)r~r8r0rMr1rTrR)rr�r:r�r�r8r0rvrrrr�|s     zRPMTransaction._uninst_progresscCs|jr dS|j�dS)N)rOrw)rr�rrrr��szRPMTransaction._unInstStopcCs6|j|�}d|dj}x|jD]}|j|�q WdS)Nz'Error in cpio payload of rpm package %sr)r~r8rMr5)rr�r�rrvrrrr��s  zRPMTransaction._cpioErrorcCs6|j|�}d|dj}x|jD]}|j|�q WdS)NzError unpacking rpm package %sr)r~r8rMr5)rr�r�rrvrrrr��s  zRPMTransaction._unpackErrorc CsNtjj|d�}|j|�}|djj}d||f}x|jD]}|j|�q8WdS)Nz rz'Error in %s scriptlet in rpm package %s)rgZtagnamesrdr~r8rrMr5) rr�r:r�Zscriptlet_namer�rrrvrrrr��s     zRPMTransaction._scriptErrorcCs�tjj}|dkr |jgkr d}n|j|�}|dj}|jdkrN|jdkrN|jnd}|jdkrl|jdkrl|jnd}x"|jD]}|j ||dd||�qxWdS)N�Nonerr�r) rr7r-rZr~r8rRrTrMr1)rr�r0r8r�Zcompleter:rvrrrr��s   zRPMTransaction._script_startcCs |j�dS)N)rw)rrrrr��szRPMTransaction._scriptStopcCs"x|jD]}|j|||�qWdS)N)rMr;)rr8r9r:rvrrrr;�s z!RPMTransaction.verify_tsi_packageN)rK)rr<r=r#rXrkrqrsrwrxr~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r;rrrrrL�s4  .  rL)1Z __future__rrrZlibdnf.transactionZlibdnfZdnf.i18nrrZ dnf.callbackrZdnf.transactionZdnf.utilrg�osrGrBr_r�rZ TS_UPDATEZ TS_INSTALLZTS_ERASEZ TS_OBSOLETEDZ TS_OBSOLETINGZ TS_AVAILABLEZ TS_UPDATEDZ TS_FAILEDZTS_INSTALL_STATESZTS_REMOVE_STATESr7ZTransactionItemAction_INSTALLZTransactionItemAction_DOWNGRADEZ TransactionItemAction_DOWNGRADEDZTransactionItemAction_OBSOLETEZTransactionItemAction_OBSOLETEDZTransactionItemAction_UPGRADEZTransactionItemAction_UPGRADEDZTransactionItemAction_REMOVEZ!TransactionItemAction_REINSTALLEDrzrHr�r!�objectr"r>rFrLrrrr�sL     <