3 ��g�<�@s�ddlZddlZddlZddlZddlmZddlm Z ddl Z Gdd�de �Z Gdd�de �Z Gdd �d e �ZGd d �d e �ZdS) �N)�_)�loggerc@sleZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�ZdS)� PersistorBasecCs"||_i|_i|_i|_i|_dS)N)�history� _installed�_removed� _upgraded� _downgraded)�selfr�r �/usr/lib/python3.6/group.py�__init__ s zPersistorBase.__init__cCs(t|j�t|j�t|j�t|j�S)N)�lenrrrr )r r r r �__len__(szPersistorBase.__len__cCsi|_i|_i|_i|_dS)N)rrrr )r r r r �clean+szPersistorBase.cleancCst�dS)N)�NotImplementedError)r �objr r r � _get_obj_id1szPersistorBase._get_obj_idcCs*|jjj|d|tjj�}|jtjj�dS)N�)r�swdb�addItem�libdnf� transaction�TransactionItemReason_USERZsetStateZTransactionItemState_DONE)r �item�action�tir r r �_add_to_history4szPersistorBase._add_to_historycCs$||j|j|�<|j|tjj�dS)N)rrrrr�TransactionItemAction_INSTALL)r rr r r �install8szPersistorBase.installcCs$||j|j|�<|j|tjj�dS)N)rrrrr�TransactionItemAction_REMOVE)r rr r r �remove<szPersistorBase.removecCs$||j|j|�<|j|tjj�dS)N)rrrrr�TransactionItemAction_UPGRADE)r rr r r �upgrade@szPersistorBase.upgradecCs$||j|j|�<|j|tjj�dS)N)r rrrr�TransactionItemAction_DOWNGRADE)r rr r r � downgradeDszPersistorBase.downgradecCst�dS)N)r)r �obj_id�name�translated_name� pkg_typesr r r �newHszPersistorBase.newcCst�dS)N)r)r r&r r r �getKszPersistorBase.getcCst�dS)N)r)r �patternr r r �search_by_patternNszPersistorBase.search_by_patternN)�__name__� __module__� __qualname__r rrrrrr!r#r%r*r+r-r r r r rsrc@sDeZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dS)�GroupPersistorcCs"|jjj�}dd�|D�}t|�S)NcSsg|]}|j�r|�qSr )�getCompsGroupItem)�.0�ir r r � Vsz+GroupPersistor.__iter__..)rr�getItems�iter)r �itemsr r r �__iter__Ts zGroupPersistor.__iter__cCs|j�S)N)� getGroupId)r rr r r rYszGroupPersistor._get_obj_idcCsH|jjj�}|j|�|dk r(|j|�|dk r:|j|�|j|�|S)N)rrZcreateCompsGroupItemZ setGroupId�setName�setTranslatedName�setPackageTypes)r r&r'r(r)� swdb_groupr r r r*\s     zGroupPersistor.newcCs"|jjj|�}|sdS|j�}|S)N)rrr2)r r&r>r r r r+fs zGroupPersistor.getcCs|jjj|�S)N)rrZgetCompsGroupItemsByPattern)r r,r r r r-msz GroupPersistor.search_by_patterncCs|jjj|�S)N)rrZgetPackageCompsGroups)r �pkg_namer r r �get_package_groupspsz!GroupPersistor.get_package_groupscCs�|jjj|dd�}|tjjkr"dSt|j|��}xJ|jj �D]<\}}x2|j �D]&}|j �|kr`qN|j �sjqN|j |�qNWq.)rrr6r7)r r8r r r r9�s zEnvironmentPersistor.__iter__cCs|j�S)N)ZgetEnvironmentId)r rr r r r�sz EnvironmentPersistor._get_obj_idcCsH|jjj�}|j|�|dk r(|j|�|dk r:|j|�|j|�|S)N)rrZcreateCompsEnvironmentItemZsetEnvironmentIdr;r<r=)r r&r'r(r)�swdb_envr r r r*�s     zEnvironmentPersistor.newcCs"|jjj|�}|sdS|j�}|S)N)rrrM)r r&rNr r r r+�s zEnvironmentPersistor.getcCs|jjj|�S)N)rrZ!getCompsEnvironmentItemsByPattern)r r,r r r r-�sz&EnvironmentPersistor.search_by_patterncCs|jjj|�S)N)rrZgetCompsGroupEnvironments)r rHr r r �get_group_environments�sz+EnvironmentPersistor.get_group_environmentscCs�|jjj|�}|sdSt|j|��}xJ|jj�D]<\}}x2|j�D]&}|j�|krTqB|j �s^qB|j |�qBWq0WxJ|j j�D]<\}}x2|j�D]&}|j�|kr�q�|j �s�q�|j |�q�Wq|W|r�dSdS)NFT) rrIr+rDrOrr8Z getGroupsr:rEr!rrF)r rHr>Zgroup_environmentsZenv_id�envrIr r r �is_removable_group�s*  z'EnvironmentPersistor.is_removable_groupN) r.r/r0r9rr*r+r-rOrQr r r r rL�s rLc@s�eZdZd,dd�Zdd�Zdd�Zdd �Zd-d d �Zd d �Zdd�Z dd�Z d.dd�Z d/dd�Z d0dd�Z d1dd�Zd2dd�Zd3dd�Zd4dd�Zd d!�Zd"d#�Zed$d%��Zed&d'��Zd(d)�Zd*d+�ZdS)5�RPMTransactionNc Cs:||_||_|js0y|jjj�Wn YnXi|_dS)N)rrrZinitTransaction� _swdb_ti_pkg)r rrr r r r �szRPMTransaction.__init__cs8�jr�jj�}n �jjj�}�fdd�|D�}t|�S)Ncs&g|]}|j�rtjjj�j|��qSr )� getRPMItem�dnf�dbr�RPMTransactionItemWrapper)r3r4)r r r r5�sz+RPMTransaction.__iter__..)rr6rrr7)r r8r )r r r9�s   zRPMTransaction.__iter__cs8�jr�jj�}n �jjj�}�fdd�|D�}t|�S)Ncs&g|]}|j�rtjjj�j|��qSr )rTrUrVrrW)r3r4)r r r r5�sz*RPMTransaction.__len__..)rr6rrr)r r8r )r r r�s   zRPMTransaction.__len__cCsP|jjj�}|j|j�|j|jp$d�|j|j�|j |j �|j |j �|S)Nr) rrZ createRPMItemr;r'ZsetEpochZepochZ setVersion�versionZ setRelease�releaseZsetArch�arch)r rJ�rpm_itemr r r �_pkg_to_swdb_rpm_item�s     z$RPMTransaction._pkg_to_swdb_rpm_itemcCsV|j|�}|j|�}|dkr&|j|�}|jjj||||�}|rH|j|�||j|<|S)N)r\� get_repoid� get_reasonrrr� addReplacedByrS)r rJrrG� replaced_byr[Zrepoid�resultr r r r*�s     zRPMTransaction.newcCst|dd�}|r|S|jS)NZ_force_swdb_repoid)�getattrZreponame)r rJrar r r r]�s zRPMTransaction.get_repoidcCs|jjj|j|jd�S)zGet reason for package������)rrrCr'rZ)r rJr r r r^szRPMTransaction.get_reasoncCstjj|j|��S)zGet reason for package)rrZTransactionItemReasonToStringr^)r rJr r r �get_reason_nameszRPMTransaction.get_reason_namecCs8|pg}x*|D]"}|j|tjj�}|r|j|�qWdS)N)r*rr�TransactionItemAction_OBSOLETEDr_)r � obsoletedr`Zobsrr r r �_add_obsoleted s  zRPMTransaction._add_obsoletedcCs6|j|tjj�}|j|tjj|d�}|j||d�dS)N)r`)r*rrr$� TransactionItemAction_DOWNGRADEDrh)r r*�oldrg�ti_new�ti_oldr r r � add_downgradeszRPMTransaction.add_downgradecCs|j||�dS)N)� add_remove)r rjrGr r r � add_eraseszRPMTransaction.add_erasecCs4|dkrtjj}|j|tjj|�}|j||d�dS)N)r`)rrrr*rrh)r r*rgrGrkr r r � add_installszRPMTransaction.add_installcCs6|j|tjj�}|j|tjj|d�}|j||d�dS)N)r`)r*rr�TransactionItemAction_REINSTALL�!TransactionItemAction_REINSTALLEDrh)r r*rjrgrkrlr r r � add_reinstallszRPMTransaction.add_reinstallcCs"|p tjj}|j|tjj|�}dS)N)rrrr*r )r rjrGrlr r r rn$s zRPMTransaction.add_removecCs6|j|tjj�}|j|tjj|d�}|j||d�dS)N)r`)r*rrr"�TransactionItemAction_UPGRADEDrh)r r*rjrgrkrlr r r � add_upgrade(szRPMTransaction.add_upgradec Cs^|jr dS|jjrdSy.|drB|j� rBtjtd�j|��dSWntk rXdSXdS)NrZmodularitylabelz\No available modular metadata for modular package '{}', it cannot be installed on the systemrc) Z _from_cmdlineZrepoZmodule_hotfixesZ_is_in_active_modulerZcriticalr�format� ValueError)r �hdrrJr r r �_test_fail_safe-s zRPMTransaction._test_fail_safecCsRd}�x0|D�]&}�y�|jtjjkrP|jj}||j||j�7}|j||d��n�|jtjjkrp|j |jj ��n�|jtjj kr�|jj}||j||j�7}|j||d��nL|jtjj kr�|jj}||j||j�7}|j||d��n|jtjj k�r|j |jj �n�|jtjjk�r<|jj}||j||j�7}|j||�n�|jtjjk�r\|j |jj �n�|jtjjk�r||j |jj �nz|jtjjk�r�|jj}||j||j�7}|j||d�n@|jtjjk�r�|j |jj �n |jtjjk�r�ntd|j��Wq tjk �r2}ztjjtd|���WYdd}~Xq Xq W|�rNtjjtd���|S)z!Populate the RPM transaction set.r�ur4z%TransactionItemAction not handled: %szAn rpm exception occurred: %sNz1No available modular metadata for modular package)rrrr$rJZ_headerryZ addInstallriZaddErase�idxrZTransactionItemAction_OBSOLETErfrqZ addReinstallrrr r"rtZ#TransactionItemAction_REASON_CHANGE� RuntimeError�rpm�errorrU� exceptions�Errorr)r ZtsZmodular_problems�tsirx�er r r �_populate_rpm_ts;sR*zRPMTransaction._populate_rpm_tsc CsXt�}xL|D]D}|jtjjkr y|j|j�Wq tk rNtd|��Yq Xq W|S)Nz*TransactionItem is has no RPM attached: %s) rDrrUrZFORWARD_ACTIONSrFrJ�KeyErrorr|)r rar�r r r � install_setms zRPMTransaction.install_setc Csbt�}xV|D]N}|jtjjtjjgkr y|j|j�Wq t k rXt d|��Yq Xq W|S)Nz*TransactionItem is has no RPM attached: %s) rDrrUrZBACKWARD_ACTIONSrrrrFrJr�r|)r rar�r r r � remove_setys zRPMTransaction.remove_setcCs,dd�|jD�}t|�r(td�|dSdS)zj Ensures all the members can be passed to rpm as they are to perform the transaction. cSsg|]}|jdkr|�qS)�src)rZ)r3rJr r r r5�sz3RPMTransaction._rpm_limitations..z+Will not install a source rpm package (%s).rN)r�rr)r Z src_installsr r r �_rpm_limitations�s  zRPMTransaction._rpm_limitationscs�fdd�|D�S)Ncsg|]}|j�kr|�qSr )r)r3r�)rr r r5�sz-RPMTransaction._get_items..r )r rr )rr � _get_items�szRPMTransaction._get_items)N)NN)N)N)N)NN)N)N)N)r.r/r0r r9rr\r*r]r^rerhrmrorprsrnruryr��propertyr�r�r�r�r r r r rR�s*          2  rR)Zlibdnf.transactionrZdnf.db.historyrUZdnf.transactionZdnf.exceptionsZdnf.i18nrZdnf.utilrr}�objectrr1rLrRr r r r �s  3<<