a
    h4                     @   s  d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZddlmZ g dZejZejZejZejZejZejZdeeef ZejZejZejZejZejZejZejZejZejZej Z ej!Z!ej"Z"ej#Z#ej$Z$ej%Z%ej&Z&ej'Z'ej(Z(ej)Z)ej*Z*ej+Z+ej,Z,ej-Z-ej.Z.ej/Z/ej0Z0ej1Z1ej2Z2ej3Z3ej4Z4ej5Z5ej6Z6ej7Z7ej8Z8ej9Z9ej:Z:ej;Z;ej<Z<ej=Z=ej>Z>ej?Z?dd	 Z@ejAZAejBZBejCZCejDZDejEZEejFZFejGZGejHZHejIZIejJZJejKZKejLZLejMZMejNZNejOZOejPZPejQZQejRZRejSZSejTZTejUZUejVZVejWZWejXZXejYZYejZZZej[Z[ej\Z\ej]Z]ej^Z^ej_Z_ej`d
kZaebdZcdd ZdG dd dejeZeG dd dejfZfdd Zgdd ZhG dd dejiZiG dd dejjZjdS )    )absolute_import)version_infoN   )_hawkey)9VERSIONVERSION_MAJORVERSION_MINORVERSION_PATCHtest
CHKSUM_MD5CHKSUM_SHA1CHKSUM_SHA256CHKSUM_SHA384CHKSUM_SHA512ICASECMDLINE_REPO_NAMEMODULE_FAIL_SAFE_REPO_NAMESYSTEM_REPO_NAME
REASON_DEPREASON_USERREASON_CLEANREASON_WEAKDEP
FORM_NEVRA	FORM_NEVRFORM_NEVFORM_NA	FORM_NAMEZFORM_ALLMODULE_FORM_NSVCAPMODULE_FORM_NSVCAMODULE_FORM_NSVAPMODULE_FORM_NSVAMODULE_FORM_NSAPMODULE_FORM_NSAMODULE_FORM_NSVCPMODULE_FORM_NSVPMODULE_FORM_NSVCMODULE_FORM_NSVMODULE_FORM_NSPMODULE_FORM_NSMODULE_FORM_NAPMODULE_FORM_NAMODULE_FORM_NPZMODULE_FORM_NArchException	ExceptionQueryExceptionRuntimeExceptionValueExceptionchksum_namechksum_typesplit_nevraconvert_hawkey_reasonGoalNEVRANSVCAPPackageQueryRepoSackSelectorSubjectz%d.%d.%dc                 C   sH   | t krtjjS | tkr tjjS | tkr0tjjS | tkr@tjj	S tjj
S N)r   libdnftransactionZTransactionItemReason_USERr   Z TransactionItemReason_DEPENDENCYr   ZTransactionItemReason_CLEANr   Z%TransactionItemReason_WEAK_DEPENDENCYTransactionItemReason_UNKNOWN)Zhawkey_reason rA   5/usr/lib64/python3.9/site-packages/hawkey/__init__.pyr3   r   s    r3      Zdnfc                 C   s   t | }t| S r=   )r   r2   r5   )strA   rA   rB   r2      s    
r2   c                   @   s,   e Zd Zg dZdd Zdd Zdd ZdS )	r6   )namestreamversioncontextarchprofilec                 C   s&   | j o$| j o$| j o$| j o$| j S r=   )rF   rG   rH   rJ   rK   selfrA   rA   rB   _has_just_name   s
    zNSVCAP._has_just_namec                    sH    fdd j D }dd t j |D }ddd |D }d|S )Nc                    s   g | ]}t  |qS rA   )getattr).0irL   rA   rB   
<listcomp>       z#NSVCAP.__repr__.<locals>.<listcomp>c                 S   s    g | ]\}}|d ur||fqS r=   rA   rP   fieldvaluerA   rA   rB   rR      rS   z, c                 S   s   g | ]\}}d  ||qS )z{}={})formatrT   rA   rA   rB   rR      rS   z<NSVCAP: {}>)NSVCAP_FIELDSzipjoinrW   )rM   valuesitemsZ	items_strrA   rL   rB   __repr__   s    zNSVCAP.__repr__c                 C   s4   d}| j D ]$}t| |}t||}|||kM }q
|S )NT)rX   rO   )rM   otherresultrU   Z
value_selfZvalue_otherrA   rA   rB   __eq__   s    


zNSVCAP.__eq__N)__name__
__module____qualname__rX   rN   r]   r`   rA   rA   rA   rB   r6      s   r6   c                       sJ   e Zd Zeeeeeee	hZ
 fddZ fddZdd Zdd Z  ZS )	r4   c                    s   t t| | t | _d S r=   )superr4   __init__setgroup_members)rM   sack	__class__rA   rB   re      s    zGoal.__init__c                    s4   t t| |}|tkr,|j| jv r,tjjS t	|S r=   )
rd   r4   
get_reasonr   rF   rg   r>   r?   TransactionItemReason_GROUPr3   )rM   pkgcoderi   rA   rB   rk      s    zGoal.get_reasonc                 C   s$   |t jjkr |j| jv r t jjS |S r=   )r>   r?   r@   rF   rg   rl   )rM   rm   Zcurrent_reasonrA   rA   rB   group_reason   s    zGoal.group_reasonc                 C   s(   d}t | ||j}| | d S )Nz*--> Finding unneeded leftover dependencies)loggerdebugZuserinstalledZswdb)rM   queryhistorymsgZuser_installedrA   rA   rB   push_userinstalled   s    
zGoal.push_userinstalled)ra   rb   rc   ERASEDISTUPGRADEDISTUPGRADE_ALL	DOWNGRADEINSTALLUPGRADEUPGRADE_ALLZ_goal_actionsre   rk   ro   ru   __classcell__rA   rA   ri   rB   r4      s   
r4   c                 C   s   t st| tr| ddS | S )a   Identity, except when obj is unicode then return a UTF-8 string.

        This assumes UTF-8 is good enough for libsolv and always will be. Else
        we'll have to deal with some encoding configuration.

        Since we use this to match string queries, we have to enforce 'strict'
        and potentially face exceptions rather than bizarre results. (Except
        that as long as we stick to UTF-8 it never fails.)
    utf8strict)PY3
isinstanceZunicodeencode)objrA   rA   rB   _encode   s    
r   c                 C   s>   t st| tst r"t| tr"| g} t| to<tdd | D S )Nc                 s   s   | ]}t |t d @ V  qdS )z*[?N)rf   )rP   prA   rA   rB   	<genexpr>   rS   z"is_glob_pattern.<locals>.<genexpr>)r   r   Z
basestringstrlistany)patternrA   rA   rB   is_glob_pattern   s    r   c                       sj   e Zd Zd fdd	Z fddZedd Zdd	 Zd fdd	ZdddZ	dd Z
edd Z  ZS )r<   Fc                    s   t t| j||d d S )N)ignore_case)rd   r<   re   )rM   Zpkg_specr   ri   rA   rB   re      s    zSubject.__init__c                 /   s0   t t| j|i |}|D ]}t|dV  qd S )N)nsvcap)rd   r<   nsvcap_possibilitiesr6   )rM   argskwargsZpossr   ri   rA   rB   r     s    zSubject.nsvcap_possibilitiesc                 C   s   | j dp| j dS )N/z*/)r   
startswithrL   rA   rA   rB   _filename_pattern  s    zSubject._filename_patternc                 C   s$   |d r |d j r t|d j S dS )NnevraF)rJ   r   )rM   solutionrA   rA   rB   _is_arch_specified
  s    zSubject._is_arch_specifiedNc                 #   sD   t dt d}t |t tt| j|dD ]}t|dV  q.d S )NalwayszThe function 'nevra_possibilities' is deprecated. Please use 'get_nevra_possibilities' instead. The function will be removed on 2018-01-01)forms)r   )warningssimplefilterDeprecationWarningwarnrd   r<   Zget_nevra_possibilitiesr5   )rM   Zformrt   r   ri   rA   rB   nevra_possibilities  s
    zSubject.nevra_possibilitiesTc                 C   s  |d u r| j |j|dd}|d }t|dkr2g S | ||}|sFg S | }| js^t| jsx|d rX|d jd u rXd}	|r|d r|d 	 rd}	|r|j
|d}| }
|j
dd	 |
D d
}|r|| |
|}g }|  D ]d\}}|	r>|j j|d}| s$|jdd ||j j
|d  }|| |j| q|S |r|d r|d 	 r|r||j j
|d}n ||j j
|j
ddd}| }|r|| |r|j
|d|}|sg S | |j|gS d S )NF)r   Zwith_srcrr   r   r   T)reponamec                 S   s   g | ]
}|j qS rA   rF   )rP   rm   rA   rA   rB   rR   1  rS   z/Subject._get_best_selectors.<locals>.<listcomp>r   rm   )Zlatest_per_arch_by_priority)	obsoletes)Zget_best_solutionrh   len_apply_security_filtersZ	installedr   r   r   rF   Zhas_just_namefilterZ	availableZ_report_already_installedunionZ
_name_dictr\   rr   Zfiltermrunappend_list_or_query_to_selector)rM   baser   r   r   Zreportsr   qZinstalled_queryZwith_obsoletesZavailable_queryZinstalled_relevant_queryZsltrsrF   Z	pkgs_listZobsoletes_queryrA   rA   rB   _get_best_selectors  sb    


 
zSubject._get_best_selectorsc                 C   s(   |j |dd}|s$td| j |S )NF)warningz%No security updates for argument "{}")Z_merge_update_filtersrp   r   rW   r   )rM   rr   r   rA   rA   rB   r   U  s    zSubject._apply_security_filtersc                 C   s   t | }|j|dS )Nr   )r;   rf   )rh   Zlist_or_queryZsltrrA   rA   rB   r   [  s    z"Subject._list_or_query_to_selector)F)N)NTNFN)ra   rb   rc   re   r   propertyr   r   r   r   r   staticmethodr   r}   rA   rA   ri   rB   r<      s   
	  
=r<   c                       s   e Zd Z fddZ  ZS )r9   c                    s0   t dt d}t |t tt| | d S )Nr   zoThe class hawkey.Repo is deprecated. Please use dnf.repo.Repo instead. The class will be removed on 2019-12-31.)r   r   r   r   rd   r9   re   )rM   rF   rt   ri   rA   rB   re   c  s    zRepo.__init__)ra   rb   rc   re   r}   rA   rA   ri   rB   r9   a  s   r9   )kZ
__future__r   sysr   Zpython_versioncollections	functoolsZloggingoperatortimer   Zlibdnf.transactionr>    r   __all__r5   r8   r;   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   ZMODULE_FORM_Nr   ZEQZLTZGTZAPPLY_EXCLUDESZIGNORE_MODULAR_EXCLUDESZIGNORE_REGULAR_EXCLUDESZIGNORE_EXCLUDESr   r   r   r   r   r   r   r   r   r3   ZADVISORY_UNKNOWNZADVISORY_SECURITYZADVISORY_BUGFIXZADVISORY_ENHANCEMENTZADVISORY_NEWPACKAGEZREFERENCE_UNKNOWNZREFERENCE_BUGZILLAZREFERENCE_CVEZREFERENCE_VENDORr7   ZReldepr:   r,   r-   r/   ZArchExceptionr.   r0   r1   Zdetect_archrv   rw   rx   ry   rz   r{   r|   ZALLOW_UNINSTALLZ
FORCE_BESTZVERIFYZIGNORE_WEAK_DEPSmajorr   Z	getLoggerrp   r2   r6   r4   r   r   r<   r9   rA   rA   rA   rB   <module>   s   

#e