
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÌÐg†<  ã               @   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   sB   t |tjjjƒs ttt|ƒƒƒ‚|| _i | _i | _	i | _
i | _d S )N)Ú
isinstanceÚdnfÚdbÚhistoryZSwdbInterfaceÚAssertionErrorÚstrÚtypeÚ
_installedÚ_removedÚ	_upgradedÚ_downgraded)Úselfr   © r   ú/usr/lib/python3.6/group.pyÚ__init__    s     zPersistorBase.__init__c             C   s(   t | jƒt | jƒ t | jƒ t | jƒ S )N)Úlenr   r   r   r   )r   r   r   r   Ú__len__(   s    zPersistorBase.__len__c             C   s   i | _ i | _i | _i | _d S )N)r   r   r   r   )r   r   r   r   Úclean+   s    zPersistorBase.cleanc             C   s   t ‚d S )N)ÚNotImplementedError)r   Úobjr   r   r   Ú_get_obj_id1   s    zPersistorBase._get_obj_idc             C   s*   | j jj|d|tj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 | j|ƒ< | j|tjjƒ d S )N)r   r   r#   r   r   ÚTransactionItemAction_INSTALL)r   r   r   r   r   Úinstall8   s    zPersistorBase.installc             C   s$   || j | j|ƒ< | j|tjjƒ d S )N)r   r   r#   r   r   ÚTransactionItemAction_REMOVE)r   r   r   r   r   Úremove<   s    zPersistorBase.removec             C   s$   || j | j|ƒ< | j|tjjƒ d S )N)r   r   r#   r   r   ÚTransactionItemAction_UPGRADE)r   r   r   r   r   Úupgrade@   s    zPersistorBase.upgradec             C   s$   || j | j|ƒ< | j|tjjƒ d S )N)r   r   r#   r   r   ÚTransactionItemAction_DOWNGRADE)r   r   r   r   r   Ú	downgradeD   s    zPersistorBase.downgradec             C   s   t ‚d S )N)r   )r   Úobj_idÚnameÚtranslated_nameÚ	pkg_typesr   r   r   ÚnewH   s    zPersistorBase.newc             C   s   t ‚d S )N)r   )r   r,   r   r   r   ÚgetK   s    zPersistorBase.getc             C   s   t ‚d S )N)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+   r0   r1   r3   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jƒ }dd„ |D ƒ}t|ƒS )Nc             S   s   g | ]}|j ƒ r|‘qS r   )ÚgetCompsGroupItem)Ú.0Úir   r   r   ú
<listcomp>V   s    z+GroupPersistor.__iter__.<locals>.<listcomp>)r   r   ÚgetItemsÚiter)r   Úitemsr   r   r   Ú__iter__T   s    zGroupPersistor.__iter__c             C   s   |j ƒ S )N)Ú
getGroupId)r   r   r   r   r   r   Y   s    zGroupPersistor._get_obj_idc             C   sH   | j jjƒ }|j|ƒ |d k	r(|j|ƒ |d k	r:|j|ƒ |j|ƒ |S )N)r   r   ZcreateCompsGroupItemZ
setGroupIdÚsetNameÚsetTranslatedNameÚsetPackageTypes)r   r,   r-   r.   r/   Ú
swdb_groupr   r   r   r0   \   s    



zGroupPersistor.newc             C   s"   | j jj|ƒ}|sd S |jƒ }|S )N)r   r   r8   )r   r,   rD   r   r   r   r1   f   s
    zGroupPersistor.getc             C   s   | j jj|ƒS )N)r   r   ZgetCompsGroupItemsByPattern)r   r2   r   r   r   r3   m   s    z GroupPersistor.search_by_patternc             C   s   | j jj|ƒS )N)r   r   ZgetPackageCompsGroups)r   Úpkg_namer   r   r   Úget_package_groupsp   s    z!GroupPersistor.get_package_groupsc             C   sÔ   | j jj|ddƒ}|tjjkr"dS t| j|ƒƒ}xJ| jj	ƒ D ]<\}}x2|j
ƒ D ]&}|jƒ |kr`qN|jƒ sjqN|j|ƒ qNW q<W xJ| jj	ƒ D ]<\}}x2|j
ƒ D ]&}|jƒ |kr¬qš|jƒ s¶qš|j|ƒ qšW qˆW |rÐdS dS )Nr   é   FTéþÿÿÿ)r   r   ÚresolveRPMTransactionItemReasonr   r   ZTransactionItemReason_GROUPÚsetrF   r   r>   ZgetPackagesZgetNameÚgetInstalledr'   r   Úadd)r   rE   ÚreasonZpackage_groupsÚgroup_idÚgroupÚpkgr   r   r   Úis_removable_pkgs   s*    zGroupPersistor.is_removable_pkgN)
r4   r5   r6   r?   r   r0   r1   r3   rF   rQ   r   r   r   r   r7   R   s   
r7   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jƒ }dd„ |D ƒ}t|ƒS )Nc             S   s   g | ]}|j ƒ r|‘qS r   )ÚgetCompsEnvironmentItem)r9   r:   r   r   r   r;   ’   s    z1EnvironmentPersistor.__iter__.<locals>.<listcomp>)r   r   r<   r=   )r   r>   r   r   r   r?   �   s    zEnvironmentPersistor.__iter__c             C   s   |j ƒ S )N)ZgetEnvironmentId)r   r   r   r   r   r   •   s    z EnvironmentPersistor._get_obj_idc             C   sH   | j jjƒ }|j|ƒ |d k	r(|j|ƒ |d k	r:|j|ƒ |j|ƒ |S )N)r   r   ZcreateCompsEnvironmentItemZsetEnvironmentIdrA   rB   rC   )r   r,   r-   r.   r/   Úswdb_envr   r   r   r0   ˜   s    



zEnvironmentPersistor.newc             C   s"   | j jj|ƒ}|sd S |jƒ }|S )N)r   r   rS   )r   r,   rT   r   r   r   r1   ¢   s
    zEnvironmentPersistor.getc             C   s   | j jj|ƒS )N)r   r   Z!getCompsEnvironmentItemsByPattern)r   r2   r   r   r   r3   ©   s    z&EnvironmentPersistor.search_by_patternc             C   s   | j jj|ƒS )N)r   r   ZgetCompsGroupEnvironments)r   rN   r   r   r   Úget_group_environments¬   s    z+EnvironmentPersistor.get_group_environmentsc             C   sÈ   | j jj|ƒ}|sdS t| j|ƒƒ}xJ| jjƒ D ]<\}}x2|jƒ D ]&}|jƒ |krTqB|j	ƒ s^qB|j
|ƒ qBW q0W xJ| jjƒ D ]<\}}x2|jƒ D ]&}|jƒ |kr qŽ|j	ƒ sªqŽ|j|ƒ qŽW q|W |rÄdS dS )NFT)r   rO   r1   rJ   rU   r   r>   Z	getGroupsr@   rK   r'   r   rL   )r   rN   rD   Zgroup_environmentsZenv_idÚenvrO   r   r   r   Úis_removable_group¯   s*    z'EnvironmentPersistor.is_removable_groupN)
r4   r5   r6   r?   r   r0   r1   r3   rU   rW   r   r   r   r   rR   Ž   s   
rR   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s0y| j jjƒ  W n   Y nX i | _d S )N)r   r   r   ZinitTransactionÚ_swdb_ti_pkg)r   r   r   r   r   r   r   Ë   s    zRPMTransaction.__init__c                s8   ˆ j rˆ j jƒ }nˆ jjjƒ }‡ fdd„|D ƒ}t|ƒS )Nc                s&   g | ]}|j ƒ rtjjjˆ j|ƒ‘qS r   )Ú
getRPMItemr   r   r   ÚRPMTransactionItemWrapper)r9   r:   )r   r   r   r;   Ý   s    z+RPMTransaction.__iter__.<locals>.<listcomp>)r   r<   r   r   r=   )r   r>   r   )r   r   r?   ×   s
    zRPMTransaction.__iter__c                s8   ˆ j rˆ j jƒ }nˆ jjjƒ }‡ fdd„|D ƒ}t|ƒS )Nc                s&   g | ]}|j ƒ rtjjjˆ j|ƒ‘qS r   )rZ   r   r   r   r[   )r9   r:   )r   r   r   r;   å   s    z*RPMTransaction.__len__.<locals>.<listcomp>)r   r<   r   r   r   )r   r>   r   )r   r   r   à   s
    zRPMTransaction.__len__c             C   sP   | j jjƒ }|j|jƒ |j|jp$dƒ |j|jƒ |j	|j
ƒ |j|jƒ |S )Nr   )r   r   ZcreateRPMItemrA   r-   ZsetEpochZepochZ
setVersionÚversionZ
setReleaseÚreleaseZsetArchÚarch)r   rP   Úrpm_itemr   r   r   Ú_pkg_to_swdb_rpm_itemè   s    z$RPMTransaction._pkg_to_swdb_rpm_itemc             C   sV   | j |ƒ}| j|ƒ}|d kr&| j|ƒ}| jjj||||ƒ}|rH|j|ƒ || j|< |S )N)r`   Ú
get_repoidÚ
get_reasonr   r   r   ÚaddReplacedByrY   )r   rP   r!   rM   Úreplaced_byr_   ZrepoidÚresultr   r   r   r0   ñ   s    




zRPMTransaction.newc             C   s   t |dd ƒ}|r|S |jS )NZ_force_swdb_repoid)ÚgetattrZreponame)r   rP   re   r   r   r   ra   ü   s    zRPMTransaction.get_repoidc             C   s   | j jj|j|jdƒS )zGet reason for packageé   éÿÿÿÿ)r   r   rI   r-   r^   )r   rP   r   r   r   rb     s    zRPMTransaction.get_reasonc             C   s   t jj| j|ƒƒS )zGet reason for package)r   r   ZTransactionItemReasonToStringrb   )r   rP   r   r   r   Úget_reason_name  s    zRPMTransaction.get_reason_namec             C   s8   |pg }x*|D ]"}| j |tjjƒ}|r|j|ƒ qW d S )N)r0   r   r   ÚTransactionItemAction_OBSOLETEDrc   )r   Ú	obsoletedrd   Zobsr"   r   r   r   Ú_add_obsoleted
  s
    
zRPMTransaction._add_obsoletedc             C   s6   | j |tjjƒ}| j |tjj|d�}| j||d� d S )N)rd   )r0   r   r   r*   Ú TransactionItemAction_DOWNGRADEDrl   )r   r0   Úoldrk   Úti_newÚti_oldr   r   r   Úadd_downgrade  s    zRPMTransaction.add_downgradec             C   s   | j ||ƒ d S )N)Ú
add_remove)r   rn   rM   r   r   r   Ú	add_erase  s    zRPMTransaction.add_erasec             C   s4   |d krt jj}| j|t jj|ƒ}| j||d� d S )N)rd   )r   r   r   r0   r$   rl   )r   r0   rk   rM   ro   r   r   r   Úadd_install  s    zRPMTransaction.add_installc             C   s6   | j |tjjƒ}| j |tjj|d�}| j||d� d S )N)rd   )r0   r   r   ÚTransactionItemAction_REINSTALLÚ!TransactionItemAction_REINSTALLEDrl   )r   r0   rn   rk   ro   rp   r   r   r   Úadd_reinstall  s    zRPMTransaction.add_reinstallc             C   s"   |p
t jj}| j|t jj|ƒ}d S )N)r   r   r   r0   r&   )r   rn   rM   rp   r   r   r   rr   $  s    zRPMTransaction.add_removec             C   s6   | j |tjjƒ}| j |tjj|d�}| j||d� d S )N)rd   )r0   r   r   r(   ÚTransactionItemAction_UPGRADEDrl   )r   r0   rn   rk   ro   rp   r   r   r   Úadd_upgrade(  s    zRPMTransaction.add_upgradec             C   s^   |j r
dS |jjrdS y.|d rB|jƒ  rBtjtdƒj|ƒƒ dS W n tk
rX   dS X dS )Nr   Zmodularitylabelz\No available modular metadata for modular package '{}', it cannot be installed on the systemrg   )	Z_from_cmdlineZrepoZmodule_hotfixesZ_is_in_active_moduler   Zcriticalr   ÚformatÚ
ValueError)r   ÚhdrrP   r   r   r   Ú_test_fail_safe-  s    zRPMTransaction._test_fail_safec             C   sR  d}�x0| D �]&}�yä|j tjjkrP|jj}|| j||jƒ7 }|j||dƒ �n¦|j tjjkrp|j	|jj
ƒ �n†|j tjjkrª|jj}|| j||jƒ7 }|j||dƒ �nL|j tjjkrä|jj}|| j||jƒ7 }|j||dƒ �n|j tjjk�r|j	|jj
ƒ nò|j tjjk�r<|jj}|| j||jƒ7 }|j||ƒ nº|j tjjk�r\|j	|jj
ƒ nš|j tjjk�r||j	|jj
ƒ nz|j tjjk�r¶|jj}|| j||jƒ7 }|j||dƒ n@|j tjjk�rÖ|j	|jj
ƒ n |j tjjk�rèntd|j  ƒ‚W q tjk
�r2 } ztjjtd| ƒƒ‚W Y dd}~X qX qW |�rNtj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*   rP   Z_headerr}   Z
addInstallrm   ZaddEraseÚidxr$   ZTransactionItemAction_OBSOLETErj   ru   ZaddReinstallrv   r&   r(   rx   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   sX   t ƒ }xL| D ]D}|jtjjkry|j|jƒ W q tk
rN   td| ƒ‚Y qX qW |S )Nz*TransactionItem is has no RPM attached: %s)	rJ   r!   r   r   ZFORWARD_ACTIONSrL   rP   ÚKeyErrorr€   )r   re   r…   r   r   r   Úinstall_setm  s    
zRPMTransaction.install_setc             C   sb   t ƒ }xV| D ]N}|jtjjtjjg kry|j|jƒ W q t	k
rX   t
d| ƒ‚Y qX qW |S )Nz*TransactionItem is has no RPM attached: %s)rJ   r!   r   r   ZBACKWARD_ACTIONSr   rv   rL   rP   rˆ   r€   )r   re   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   rP   r   r   r   r;   ‰  s    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;   �  s    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)r4   r5   r6   r   r?   r   r`   r0   ra   rb   ri   rl   rq   rs   rt   rw   rr   ry   r}   r‡   Úpropertyr‰   rŠ   rŒ   r�   r   r   r   r   rX   Ê   s*   
		







2
rX   )Zlibdnf.transactionr   Zdnf.db.historyr   Zdnf.transactionZdnf.exceptionsZdnf.i18nr   Zdnf.utilr   r�   Úobjectr   r7   rR   rX   r   r   r   r   Ú<module>   s   3<<