a
    ©!c†<  ã                   @   s„   d dl Zd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
Z
G dd„ deƒZG dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZdS )é    N)Ú_)Úloggerc                   @   sl   e Z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S )ÚPersistorBasec                 C   s"   || _ i | _i | _i | _i | _d S ©N)ÚhistoryÚ
_installedÚ_removedÚ	_upgradedÚ_downgraded)Úselfr   © r   ú0/usr/lib/python3.9/site-packages/dnf/db/group.pyÚ__init__    s
    zPersistorBase.__init__c                 C   s(   t | jƒt | jƒ t | jƒ t | jƒ S r   )Úlenr   r   r	   r
   ©r   r   r   r   Ú__len__(   s    zPersistorBase.__len__c                 C   s   i | _ i | _i | _i | _d S r   )r   r   r	   r
   r   r   r   r   Úclean+   s    zPersistorBase.cleanc                 C   s   t ‚d S r   ©ÚNotImplementedError©r   Úobjr   r   r   Ú_get_obj_id1   s    zPersistorBase._get_obj_idc                 C   s*   | j j |d|tjj¡}| tjj¡ d S )NÚ )r   ÚswdbÚaddItemÚlibdnfÚtransactionÚTransactionItemReason_USERZsetStateZTransactionItemState_DONE)r   ÚitemÚactionÚtir   r   r   Ú_add_to_history4   s    zPersistorBase._add_to_historyc                 C   s$   || j |  |¡< |  |tjj¡ d S r   )r   r   r!   r   r   ÚTransactionItemAction_INSTALLr   r   r   r   Úinstall8   s    zPersistorBase.installc                 C   s$   || j |  |¡< |  |tjj¡ d S r   )r   r   r!   r   r   ÚTransactionItemAction_REMOVEr   r   r   r   Úremove<   s    zPersistorBase.removec                 C   s$   || j |  |¡< |  |tjj¡ d S r   )r	   r   r!   r   r   ÚTransactionItemAction_UPGRADEr   r   r   r   Úupgrade@   s    zPersistorBase.upgradec                 C   s$   || j |  |¡< |  |tjj¡ d S r   )r
   r   r!   r   r   ÚTransactionItemAction_DOWNGRADEr   r   r   r   Ú	downgradeD   s    zPersistorBase.downgradec                 C   s   t ‚d S r   r   )r   Úobj_idÚnameÚtranslated_nameÚ	pkg_typesr   r   r   ÚnewH   s    zPersistorBase.newc                 C   s   t ‚d S r   r   )r   r*   r   r   r   ÚgetK   s    zPersistorBase.getc                 C   s   t ‚d S r   r   ©r   Úpatternr   r   r   Úsearch_by_patternN   s    zPersistorBase.search_by_patternN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r!   r#   r%   r'   r)   r.   r/   r2   r   r   r   r   r      s   r   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚGroupPersistorc                 C   s"   | j j ¡ }dd„ |D ƒ}t|ƒS )Nc                 S   s   g | ]}|  ¡ r|‘qS r   )ÚgetCompsGroupItem©Ú.0Úir   r   r   Ú
<listcomp>V   ó    z+GroupPersistor.__iter__.<locals>.<listcomp>©r   r   ÚgetItemsÚiter©r   Úitemsr   r   r   Ú__iter__T   s    zGroupPersistor.__iter__c                 C   s   |  ¡ S r   )Ú
getGroupIdr   r   r   r   r   Y   s    zGroupPersistor._get_obj_idc                 C   sH   | j j ¡ }| |¡ |d ur(| |¡ |d ur:| |¡ | |¡ |S r   )r   r   ZcreateCompsGroupItemZ
setGroupIdÚsetNameÚsetTranslatedNameÚsetPackageTypes)r   r*   r+   r,   r-   Ú
swdb_groupr   r   r   r.   \   s    



zGroupPersistor.newc                 C   s"   | j j |¡}|sd S | ¡ }|S r   )r   r   r7   )r   r*   rG   r   r   r   r/   f   s
    zGroupPersistor.getc                 C   s   | j j |¡S r   )r   r   ZgetCompsGroupItemsByPatternr0   r   r   r   r2   m   s    z GroupPersistor.search_by_patternc                 C   s   | j j |¡S r   )r   r   ZgetPackageCompsGroups)r   Úpkg_namer   r   r   Úget_package_groupsp   s    z!GroupPersistor.get_package_groupsc                 C   sÄ   | j j |dd¡}|tjjkr"dS t|  |¡ƒ}| j 	¡ D ]8\}}| 
¡ D ]&}| ¡ |kr\qJ| ¡ sfqJ| |¡ qJq:| j 	¡ D ]8\}}| 
¡ D ]&}| ¡ |kr qŽ| ¡ sªqŽ| |¡ qŽq~|rÀdS dS )Nr   éþÿÿÿFT)r   r   ÚresolveRPMTransactionItemReasonr   r   ZTransactionItemReason_GROUPÚsetrI   r   rA   ZgetPackagesZgetNameÚgetInstalledr%   r   Úadd)r   rH   ÚreasonZpackage_groupsÚgroup_idÚgroupÚpkgr   r   r   Úis_removable_pkgs   s*    zGroupPersistor.is_removable_pkgN)
r3   r4   r5   rB   r   r.   r/   r2   rI   rS   r   r   r   r   r6   R   s   
r6   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚEnvironmentPersistorc                 C   s"   | j j ¡ }dd„ |D ƒ}t|ƒS )Nc                 S   s   g | ]}|  ¡ r|‘qS r   )ÚgetCompsEnvironmentItemr8   r   r   r   r;   ’   r<   z1EnvironmentPersistor.__iter__.<locals>.<listcomp>r=   r@   r   r   r   rB      s    zEnvironmentPersistor.__iter__c                 C   s   |  ¡ S r   )ZgetEnvironmentIdr   r   r   r   r   •   s    z EnvironmentPersistor._get_obj_idc                 C   sH   | j j ¡ }| |¡ |d ur(| |¡ |d ur:| |¡ | |¡ |S r   )r   r   ZcreateCompsEnvironmentItemZsetEnvironmentIdrD   rE   rF   )r   r*   r+   r,   r-   Úswdb_envr   r   r   r.   ˜   s    



zEnvironmentPersistor.newc                 C   s"   | j j |¡}|sd S | ¡ }|S r   )r   r   rU   )r   r*   rV   r   r   r   r/   ¢   s
    zEnvironmentPersistor.getc                 C   s   | j j |¡S r   )r   r   Z!getCompsEnvironmentItemsByPatternr0   r   r   r   r2   ©   s    z&EnvironmentPersistor.search_by_patternc                 C   s   | j j |¡S r   )r   r   ZgetCompsGroupEnvironments)r   rP   r   r   r   Úget_group_environments¬   s    z+EnvironmentPersistor.get_group_environmentsc                 C   s¸   | j j |¡}|sdS t|  |¡ƒ}| j ¡ D ]8\}}| ¡ D ]&}| ¡ |krPq>| 	¡ sZq>| 
|¡ q>q.| j ¡ D ]8\}}| ¡ D ]&}| ¡ |kr”q‚| 	¡ sžq‚| |¡ q‚qr|r´dS dS )NFT)r   rQ   r/   rL   rW   r   rA   Z	getGroupsrC   rM   r%   r   rN   )r   rP   rG   Zgroup_environmentsZenv_idÚenvrQ   r   r   r   Úis_removable_group¯   s*    z'EnvironmentPersistor.is_removable_groupN)
r3   r4   r5   rB   r   r.   r/   r2   rW   rY   r   r   r   r   rT   Ž   s   
rT   c                   @   sÎ   e Zd Zd,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.dd„Zd/dd„Zd0dd„Zd1dd„Zd2dd„Zd3dd„Zd4dd„Zd d!„ Zd"d#„ Zed$d%„ ƒZed&d'„ ƒZd(d)„ Zd*d+„ ZdS )5ÚRPMTransactionNc                 C   s:   || _ || _| js0z| j j ¡  W n   Y n0 i | _d S r   )r   r   r   ZinitTransactionÚ_swdb_ti_pkg)r   r   r   r   r   r   r   Ë   s    zRPMTransaction.__init__c                    s8   ˆ j rˆ j  ¡ }nˆ jj ¡ }‡ fdd„|D ƒ}t|ƒS )Nc                    s&   g | ]}|  ¡ rtjj ˆ j|¡‘qS r   ©Z
getRPMItemÚdnfZdbr   ZRPMTransactionItemWrapperr8   r   r   r   r;   Ý   r<   z+RPMTransaction.__iter__.<locals>.<listcomp>)r   r>   r   r   r?   r@   r   r   r   rB   ×   s
    zRPMTransaction.__iter__c                    s8   ˆ j rˆ j  ¡ }nˆ jj ¡ }‡ fdd„|D ƒ}t|ƒS )Nc                    s&   g | ]}|  ¡ rtjj ˆ j|¡‘qS r   r\   r8   r   r   r   r;   å   r<   z*RPMTransaction.__len__.<locals>.<listcomp>)r   r>   r   r   r   r@   r   r   r   r   à   s
    zRPMTransaction.__len__c                 C   sP   | j j ¡ }| |j¡ | |jp$d¡ | |j¡ | 	|j
¡ | |j¡ |S )Nr   )r   r   ZcreateRPMItemrD   r+   ZsetEpochZepochZ
setVersionÚversionZ
setReleaseÚreleaseZsetArchÚarch)r   rR   Úrpm_itemr   r   r   Ú_pkg_to_swdb_rpm_itemè   s    z$RPMTransaction._pkg_to_swdb_rpm_itemc                 C   sV   |   |¡}|  |¡}|d u r&|  |¡}| jj ||||¡}|rH| |¡ || j|< |S r   )rb   Ú
get_repoidÚ
get_reasonr   r   r   ÚaddReplacedByr[   )r   rR   r   rO   Úreplaced_byra   ZrepoidÚresultr   r   r   r.   ñ   s    




zRPMTransaction.newc                 C   s   t |dd ƒ}|r|S |jS )NZ_force_swdb_repoid)ÚgetattrZreponame)r   rR   rg   r   r   r   rc   ü   s    zRPMTransaction.get_repoidc                 C   s   | j j |j|jd¡S )úGet reason for packageéÿÿÿÿ)r   r   rK   r+   r`   ©r   rR   r   r   r   rd     s    zRPMTransaction.get_reasonc                 C   s   t j |  |¡¡S )ri   )r   r   ZTransactionItemReasonToStringrd   rk   r   r   r   Úget_reason_name  s    zRPMTransaction.get_reason_namec                 C   s4   |pg }|D ]"}|   |tjj¡}|r| |¡ qd S r   )r.   r   r   ÚTransactionItemAction_OBSOLETEDre   )r   Ú	obsoletedrf   Zobsr    r   r   r   Ú_add_obsoleted
  s
    zRPMTransaction._add_obsoletedc                 C   s6   |   |tjj¡}| j |tjj|d}| j||d d S ©N)rf   )r.   r   r   r(   Ú TransactionItemAction_DOWNGRADEDro   ©r   r.   Úoldrn   Úti_newÚti_oldr   r   r   Úadd_downgrade  s    zRPMTransaction.add_downgradec                 C   s   |   ||¡ d S r   )Ú
add_remove)r   rs   rO   r   r   r   Ú	add_erase  s    zRPMTransaction.add_erasec                 C   s4   |d u rt jj}|  |t jj|¡}| j||d d S rp   )r   r   r   r.   r"   ro   )r   r.   rn   rO   rt   r   r   r   Úadd_install  s    zRPMTransaction.add_installc                 C   s6   |   |tjj¡}| j |tjj|d}| j||d d S rp   )r.   r   r   ÚTransactionItemAction_REINSTALLÚ!TransactionItemAction_REINSTALLEDro   rr   r   r   r   Úadd_reinstall  s    zRPMTransaction.add_reinstallc                 C   s"   |p
t jj}|  |t jj|¡}d S r   )r   r   r   r.   r$   )r   rs   rO   ru   r   r   r   rw   $  s    zRPMTransaction.add_removec                 C   s6   |   |tjj¡}| j |tjj|d}| j||d d S rp   )r.   r   r   r&   ÚTransactionItemAction_UPGRADEDro   rr   r   r   r   Úadd_upgrade(  s    zRPMTransaction.add_upgradec                 C   s^   |j r
dS |jjrdS z.|d rB| ¡ sBt tdƒ |¡¡ W dS W n tyX   Y dS 0 dS )Nr   Zmodularitylabelz\No available modular metadata for modular package '{}', it cannot be installed on the systemé   )	Z_from_cmdlineZrepoZmodule_hotfixesZ_is_in_active_moduler   Zcriticalr   ÚformatÚ
ValueError)r   ÚhdrrR   r   r   r   Ú_test_fail_safe-  s    ÿ
zRPMTransaction._test_fail_safec                 C   sL  d}| D ]&}zâ|j tjjkrL|jj}||  ||j¡7 }| ||d¡ n¤|j tjjkrl| 	|jj
¡ n„|j tjjkr¦|jj}||  ||j¡7 }| ||d¡ nJ|j tjjkrà|jj}||  ||j¡7 }| ||d¡ n|j tjjkrþ| 	|jj
¡ nò|j tjjkr6|jj}||  ||j¡7 }| ||¡ nº|j tjjkrV| 	|jj
¡ nš|j tjjkrv| 	|jj
¡ nz|j tjjkr°|jj}||  ||j¡7 }| ||d¡ n@|j tjjkrÐ| 	|jj
¡ n |j tjjkrântd|j  ƒ‚W q tjy. } z tj td| ƒ¡‚W Y d}~qd}~0 0 q|rHtj tdƒ¡‚|S )z!Populate the RPM transaction set.r   Úur:   z%TransactionItemAction not handled: %szAn rpm exception occurred: %sNz1No available modular metadata for modular package)r   r   r   r(   rR   Z_headerrƒ   Z
addInstallrq   ZaddEraseÚidxr"   ZTransactionItemAction_OBSOLETErm   rz   ZaddReinstallr{   r$   r&   r}   Z#TransactionItemAction_REASON_CHANGEÚRuntimeErrorÚrpmÚerrorr]   Ú
exceptionsÚErrorr   )r   ZtsZmodular_problemsÚtsir‚   Úer   r   r   Ú_populate_rpm_ts;  sR    
,zRPMTransaction._populate_rpm_tsc              	   C   sR   t ƒ }| D ]B}|jtjjv r
z| |j¡ W q
 tyJ   td| ƒ‚Y q
0 q
|S ©Nz*TransactionItem is has no RPM attached: %s)	rL   r   r]   r   ZFORWARD_ACTIONSrN   rR   ÚKeyErrorr†   ©r   rg   r‹   r   r   r   Úinstall_setm  s    zRPMTransaction.install_setc              	   C   s\   t ƒ }| D ]L}|jtjjtjjg v r
z| |j¡ W q
 t	yT   t
d| ƒ‚Y q
0 q
|S rŽ   )rL   r   r]   r   ZBACKWARD_ACTIONSr   r{   rN   rR   r   r†   r   r   r   r   Ú
remove_sety  s    zRPMTransaction.remove_setc                 C   s,   dd„ | j D ƒ}t|ƒr(tdƒ|d  S dS )zj Ensures all the members can be passed to rpm as they are to perform
            the transaction.
        c                 S   s   g | ]}|j d kr|‘qS )Úsrc)r`   )r9   rR   r   r   r   r;   ‰  r<   z3RPMTransaction._rpm_limitations.<locals>.<listcomp>z+Will not install a source rpm package (%s).r   N)r‘   r   r   )r   Zsrc_installsr   r   r   Ú_rpm_limitations…  s    ÿzRPMTransaction._rpm_limitationsc                    s   ‡ fdd„| D ƒS )Nc                    s   g | ]}|j ˆ kr|‘qS r   ©r   )r9   r‹   r•   r   r   r;     r<   z-RPMTransaction._get_items.<locals>.<listcomp>r   )r   r   r   r•   r   Ú
_get_items  s    zRPMTransaction._get_items)N)NN)N)N)N)NN)N)N)N)r3   r4   r5   r   rB   r   rb   r.   rc   rd   rl   ro   rv   rx   ry   r|   rw   r~   rƒ   r   Úpropertyr‘   r’   r”   r–   r   r   r   r   rZ   Ê   s.   
		







2


rZ   )Zlibdnf.transactionr   Zdnf.db.historyr]   Zdnf.transactionZdnf.exceptionsZdnf.i18nr   Zdnf.utilr   r‡   Úobjectr   r6   rT   rZ   r   r   r   r   Ú<module>   s   3<<