???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................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rq|j sq|j| qW qW |rd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rq|j	 sq|j| qW q|W |rd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rn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<<