509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÌÐgLQ  ã               @   sF  d dl mZ d dl mZ d dlmZ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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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ZdZ dZ!ej"ej# d Z$dej%e$ƒej&f Z'd	e'e!f d
e'e f ddœZ(ej)dƒZ*dd„ Z+dd„ Z,d-dd„Z-dd„ Z.G dd„ de/ƒZ0G dd„ de1ƒZ2G dd„ dej3j4ƒZ5G dd„ de/ƒZ6G dd „ d ej7j8ƒZ9G d!d"„ d"ej3j:ƒZ;G d#d$„ d$e;ƒZ<G d%d&„ d&e;ƒZ=G d'd(„ d(ej3j:ƒZ>ej7j?j@ZAej7j?jBZCej7j?jDZEG d)d*„ d*ej7jFƒZGG d+d,„ d,ejHjIƒZ?dS ).é    )Úabsolute_import)Úunicode_literals)ÚucdÚ_NÚpackagesZ
mirrorlistz-_.:z(?P<repoid>[%s]+)\-[%s]{16}z>^%s\/.*((xml|yaml)(\.gz|\.xz|\.bz2|.zck)?|asc|cachecookie|%s)$z^%s\/%s\/.+rpm$z^.+(solv|solvx)$)Úmetadatar   ZdbcacheÚdnfc             C   s   t jjj| ƒ}|dk rdS |S )zAReturn index of an invalid character in the repo ID (if present).r   N)ÚlibdnfÚrepoÚRepoZverifyId)Zrepo_idZfirst_invalid© r   ú/usr/lib/python3.6/repo.pyÚrepo_id_invalidH   s    r   c             G   s8   x"|D ]}|| |ƒ}|d k	r|S qW t tdƒ|  ƒ‚d S )Nz"no matching payload factory for %s)Ú
ValueErrorr   )ÚpkgÚprogressZ	factoriesÚfnÚploadr   r   r   Ú_pkg2payloadO   s
    

r   Tc             C   sü   dd„ }|j jƒ  dd„ t| |d�D ƒ}tƒ }ytjjjtjj|ƒ|ƒ W n, t	k
rv } zt
|ƒ|_W Y d d }~X nX |jƒ  |j jƒ |_xj|D ]b}|jƒ }|d ks’|jdƒr²q’|jƒ }	|	j}
|
j}|dkrÜ|jj|ƒ q’|jjjƒ  |g|j|< q’W |S )Nc             S   s   t | dƒ S )NZdelta)Úhasattr)Úpayloadr   r   r   Ú_download_sort_keyY   s    z._download_payloads.<locals>._download_sort_keyc             S   s   g | ]}|j ƒ ‘qS r   )Ú_librepo_target)Ú.0r   r   r   r   ú
<listcomp>]   s   z&_download_payloads.<locals>.<listcomp>)ÚkeyzNot finishedzAlready downloaded)ÚerrÚclearÚsortedÚ_DownloadErrorsr	   r
   ÚPackageTargetZdownloadPackagesZVectorPPackageTargetÚRuntimeErrorÚstrÚ_fatalÚwaitÚcopyÚ_recoverableZgetErrÚ
startswithZgetCallbacksÚpackage_ploadr   Ú_skippedÚaddÚ_repoZexpireÚ_pkg_irrecoverable)ÚpayloadsZdrpmZ	fail_fastr   ZtargetsÚerrsÚeZtgtr   Ú	callbacksr   r   r   r   r   Ú_download_payloadsW   s0    

r1   c             C   sL   | \}}x:|D ]2}|j }||kr,||j7 }q||j7 }||j7 }qW ||fS )N)r   Údownload_sizeÚ
_full_size)Zsavingr-   r.   ÚrealZfullr   r   r   r   r   Ú_update_savingx   s    


r5   c               @   s>   e Zd Zdd„ Zdd„ Zedd„ ƒZejdd„ ƒZdd	„ Zd
S )r   c             C   s   i | _ i | _d | _tƒ | _d S )N)r,   Ú_val_recoverabler#   Úsetr)   )Úselfr   r   r   Ú__init__…   s    z_DownloadErrors.__init__c             C   s"   | j r| j S | jrd| jgiS i S )NÚ )r,   r#   )r8   r   r   r   Ú_irrecoverable‹   s
    z_DownloadErrors._irrecoverablec             C   s   | j S )N)r6   )r8   r   r   r   r&   ’   s    z_DownloadErrors._recoverablec             C   s
   || _ d S )N)r6   )r8   Znew_dctr   r   r   r&   –   s    c             C   s   |j | jkrdS |jS )Nr   )r   r)   r2   )r8   r   r   r   r   Ú_bandwidth_usedš   s    z_DownloadErrors._bandwidth_usedN)	Ú__name__Ú
__module__Ú__qualname__r9   r;   Úpropertyr&   Úsetterr<   r   r   r   r   r   „   s
   r   c               @   s   e Zd Zdd„ ZdS )Ú_DetailedLibrepoErrorc             C   s,   t j| ƒ |jd | _|jd | _|| _d S )Nr   é   )Ú	Exceptionr9   ÚargsZlibrepo_codeZlibrepo_msgÚ
source_url)r8   Zlibrepo_errrF   r   r   r   r9   ¡   s    
z_DetailedLibrepoError.__init__N)r=   r>   r?   r9   r   r   r   r   rB       s   rB   c               @   s   e Zd Zdd„ ZdS )Ú_NullKeyImportc             C   s   dS )NTr   )r8   ÚidÚuseridÚfingerprintÚurlÚ	timestampr   r   r   Ú_confirm©   s    z_NullKeyImport._confirmN)r=   r>   r?   rM   r   r   r   r   rG   ¨   s   rG   c               @   s    e Zd Zdd„ Zedd„ ƒZdS )ÚMetadatac             C   s
   || _ d S )N)r+   )r8   r
   r   r   r   r9   ®   s    zMetadata.__init__c             C   s
   | j jƒ S )N)r+   Úfresh)r8   r   r   r   rO   ±   s    zMetadata.freshN)r=   r>   r?   r9   r@   rO   r   r   r   r   rN   ­   s   rN   c                   s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚPackageTargetCallbacksc                s   t t| ƒjƒ  || _d S )N)ÚsuperrP   r9   r(   )r8   r(   )Ú	__class__r   r   r9   ¸   s    zPackageTargetCallbacks.__init__c             C   s   | j jd ||ƒ dS )Nr   )r(   Ú_end_cb)r8   ÚstatusÚmsgr   r   r   Úend¼   s    zPackageTargetCallbacks.endc             C   s   | j jd ||ƒ dS )Nr   )r(   Ú_progress_cb)r8   ÚtotalToDownloadÚ
downloadedr   r   r   r   À   s    zPackageTargetCallbacks.progressc             C   s   | j jd ||ƒ dS )Nr   )r(   Ú_mirrorfail_cb)r8   rU   rK   r   r   r   ÚmirrorFailureÄ   s    z$PackageTargetCallbacks.mirrorFailure)r=   r>   r?   r9   rV   r   r[   Ú__classcell__r   r   )rR   r   rP   ·   s   rP   c                   sH   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZdd„ Z	‡  Z
S )ÚPackagePayloadc                s$   t t| ƒj|ƒ t| ƒ| _|| _d S )N)rQ   r]   r9   rP   r0   r   )r8   r   r   )rR   r   r   r9   Ê   s    
zPackagePayload.__init__c             C   sR   t jj}|dkrt jj}n$|jdƒr(dS |tjjjkr>t jj	}| j
j| ||ƒ dS )z"End callback to librepo operation.NzNot finished)r   ÚcallbackZSTATUS_FAILEDZ	STATUS_OKr'   r	   r
   ÚPackageTargetCBZTransferStatus_ALREADYEXISTSZSTATUS_ALREADY_EXISTSr   rV   )r8   ÚcbdataZ	lr_statusrU   rT   r   r   r   rS   Ï   s    

zPackagePayload._end_cbc             C   s   | j j| tjj|ƒ d S )N)r   rV   r   r^   ZSTATUS_MIRROR)r8   r`   r   rK   r   r   r   rZ   Û   s    zPackagePayload._mirrorfail_cbc             C   sX   y| j j | |ƒ W n@ tk
rR   tjƒ \}}}tj|||ƒ}tjdj|ƒƒ Y nX d S )Nr:   )	r   rD   ÚsysÚexc_infoÚ	tracebackÚformat_exceptionÚloggerÚcriticalÚjoin)r8   r`   ÚtotalÚdoneÚexc_typeÚ	exc_valueÚexc_tracebackÚexcept_listr   r   r   rW   Þ   s    zPackagePayload._progress_cbc             C   s   | j S )N)r2   )r8   r   r   r   r3   æ   s    zPackagePayload._full_sizec             C   s€   | j }|j}tjj|ƒ |d| | j| j| jdœ}|j| j	ƒ ƒ t
jj|jj|d |d |d |d |d |d |d	 d
d
| jƒS )NT)ÚdestÚresumer`   Z
progresscbZendcbZmirrorfailurecbÚrelative_urlrn   Úchecksum_typeÚchecksumÚexpectedsizeÚbase_urlro   r   )r   Úpkgdirr   ÚutilÚ
ensure_dirrW   rS   rZ   ÚupdateÚ_target_paramsr	   r
   r    r+   r0   )r8   r   ru   Z
target_dctr   r   r   r   ê   s     
zPackagePayload._librepo_target)r=   r>   r?   r9   rS   rZ   rW   r@   r3   r   r\   r   r   )rR   r   r]   É   s   r]   c               @   s(   e Zd Zdd„ Zdd„ Zedd„ ƒZdS )Ú
RPMPayloadc             C   s   t jj| jjƒS )N)ÚosÚpathÚbasenamer   Úlocation)r8   r   r   r   Ú__str__  s    zRPMPayload.__str__c             C   sT   | j }|jƒ \}}tjjj|ƒ}|tjjjkr>tjt	dƒ|ƒ |j
|||j|jdœS )Nzunsupported checksum type: %s)rp   rq   rr   rs   rt   )r   ZreturnIdSumr	   r
   r    ZchecksumTypeZChecksumType_UNKNOWNre   Úwarningr   r~   ÚdownloadsizeÚbaseurl)r8   r   ZctypeZcsumZ
ctype_coder   r   r   ry     s    zRPMPayload._target_paramsc             C   s   | j jS )zTotal size of the download.)r   r�   )r8   r   r   r   r2     s    zRPMPayload.download_sizeN)r=   r>   r?   r   ry   r@   r2   r   r   r   r   rz     s   rz   c                   s@   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZ‡  Z	S )ÚRemoteRPMPayloadc                s¦   t t| ƒjd|ƒ || _d| _|| _| jjp.d| jjjdƒ }t	j
|jdƒƒjƒ d d… }d| }tjj| jj|dƒ| _tjj| jƒ tjj| j| jƒ jd	ƒƒ| _d S )
NZunused_objectr   r:   ZbasearchÚutf8é   zcommandline-r   ú/)rQ   rƒ   r9   Úremote_locationÚremote_sizeÚconfZ
releaseverÚsubstitutionsÚgetÚhashlibZsha256ÚencodeZ	hexdigestr{   r|   rg   Zcachedirru   r   rv   rw   r   ÚlstripZ
local_path)r8   r‡   r‰   r   ÚsZdigestZrepodir)rR   r   r   r9     s    zRemoteRPMPayload.__init__c             C   s   t jj| jƒS )N)r{   r|   r}   r‡   )r8   r   r   r   r   )  s    zRemoteRPMPayload.__str__c             C   s^   || _ y| jj| |ƒ W n@ tk
rX   tjƒ \}}}tj|||ƒ}tjdj	|ƒƒ Y nX d S )Nr:   )
rˆ   r   rD   ra   rb   rc   rd   re   rf   rg   )r8   r`   rh   ri   rj   rk   rl   rm   r   r   r   rW   ,  s    zRemoteRPMPayload._progress_cbc             C   s<   t jj| jjtjj| jƒ| j	dd dtjj
| jƒddd| jƒS )Nr   T)r	   r
   r    r‰   Ú_configr{   r|   r}   r‡   ru   Údirnamer0   )r8   r   r   r   r   5  s    z RemoteRPMPayload._librepo_targetc             C   s   | j S )zTotal size of the download.)rˆ   )r8   r   r   r   r2   ;  s    zRemoteRPMPayload.download_size)
r=   r>   r?   r9   r   rW   r   r@   r2   r\   r   r   )rR   r   rƒ     s
   	rƒ   c                   sz   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	dd„ ƒZ
e	dd„ ƒZejdd„ ƒZdd„ Zdd„ Z‡  ZS )Ú	MDPayloadc                s.   t t| ƒj|ƒ d| _d| _d| _tƒ | _d S )Nr:   r   F)rQ   r’   r9   Ú_textÚ_download_sizeÚfastest_mirror_runningr7   Úmirror_failures)r8   r   )rR   r   r   r9   C  s
    zMDPayload.__init__c             C   s   t jjr| jS | jjdƒS d S )Nzutf-8)r   ÚpycompZPY3r“   r�   )r8   r   r   r   r   J  s    zMDPayload.__str__c             C   s   | j S )N)r“   )r8   r   r   r   Ú__unicode__P  s    zMDPayload.__unicode__c             C   s   || _ | jj| |ƒ d S )N)r”   r   )r8   r`   rh   ri   r   r   r   rW   S  s    zMDPayload._progress_cbc             C   s\   |t jjjkr"tdƒ| }d| _n*|t jjjkrH| jrH|rBd| nd}nd S | jj|ƒ d S )Nz,determining the fastest mirror (%s hosts).. Tz
error: %s
zdone.
)	r	   r
   ÚRepoCBZFastestMirrorStage_DETECTIONr   r•   ZFastestMirrorStage_STATUSr   Úmessage)r8   r`   ÚstageÚdatarU   r   r   r   Ú_fastestmirror_cbW  s    zMDPayload._fastestmirror_cbc             C   s&   | j j|ƒ d||f }tj|ƒ d S )Nzerror: %s (%s).)r–   r*   re   Údebug)r8   r`   rU   rK   r   r   r   r   Ú_mirror_failure_cbc  s    zMDPayload._mirror_failure_cbc             C   s   | j S )N)r”   )r8   r   r   r   r2   h  s    zMDPayload.download_sizec             C   s   | j S )N)Ú	_progress)r8   r   r   r   r   l  s    zMDPayload.progressc             C   s   |d krt jjƒ }|| _d S )N)r   r^   ÚNullDownloadProgressr    )r8   r   r   r   r   r   p  s    
c             C   s   || _ | jjddƒ d S )NrC   r   )r“   r   Ústart)r8   Útextr   r   r   r¢   v  s    zMDPayload.startc             C   s   d| _ | jj| d d ƒ d S )Nr   )r”   r   rV   )r8   r   r   r   rV   z  s    zMDPayload.end)r=   r>   r?   r9   r   r˜   rW   r�   rŸ   r@   r2   r   rA   r¢   rV   r\   r   r   )rR   r   r’   A  s   r’   c                   sL   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )ÚRepoCallbacksc                s    t t| ƒjƒ  || _|j| _d S )N)rQ   r¤   r9   r+   Ú	_md_pload)r8   r
   )rR   r   r   r9   ˆ  s    zRepoCallbacks.__init__c             C   s   | j j|ƒ d S )N)r¥   r¢   )r8   Zwhatr   r   r   r¢   �  s    zRepoCallbacks.startc             C   s   | j jƒ  d S )N)r¥   rV   )r8   r   r   r   rV   �  s    zRepoCallbacks.endc             C   s   | j jd ||ƒ dS )Nr   )r¥   rW   )r8   rX   rY   r   r   r   r   “  s    zRepoCallbacks.progressc             C   s   | j jd ||ƒ d S )N)r¥   r�   )r8   r›   Zptrr   r   r   ÚfastestMirror—  s    zRepoCallbacks.fastestMirrorc             C   s   | j jd |||ƒ dS )Nr   )r¥   rŸ   )r8   rU   rK   r   r   r   r   ÚhandleMirrorFailureš  s    z!RepoCallbacks.handleMirrorFailurec             C   s   | j jj|||||ƒS )N)r+   Ú_key_importrM   )r8   rH   rI   rJ   rK   rL   r   r   r   ÚrepokeyImportž  s    zRepoCallbacks.repokeyImport)r=   r>   r?   r9   r¢   rV   r   r¦   r§   r©   r\   r   r   )rR   r   r¤   ‡  s   r¤   c                   s  e Zd ZeZd7‡ fdd„	Zedd„ ƒZedd„ ƒZej	dd„ ƒZed	d
„ ƒZ
dd„ Ze
j	dd
„ ƒZ
edd„ ƒZedd„ ƒZej	dd„ ƒZdd„ Zdd„ Z‡ f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/d0„ Zd9d5d6„Z‡  ZS ):r   Nc                sÖ   t t| ƒj||d� | jjjƒ  tjj|r.|nd| jƒ| _t	t
jjƒ ƒ| _t| ƒ| _| jjjƒ  | jj| jƒ d | _tƒ | _d | _| jj|r–|jr–tn| jƒ |r°| jj|jƒ t
jjjƒ | _|d k	rÌ|jnd| _d S )N)ZsectionÚparentr:   T) rQ   r   r9   r�   ÚthisZdisownr	   r
   r+   r’   r   r^   r¡   r¥   r¤   Z
_callbacksZsetCallbacksÚ_pkgdirrG   r¨   r   ZsetSyncStrategyZ	cacheonlyÚSYNC_ONLY_CACHEÚDEFAULT_SYNCZsetSubstitutionsrŠ   r‰   ZSubstitutionsZ_substitutionsZcheck_config_file_ageZ_check_config_file_age)r8   ÚnameZparent_conf)rR   r   r   r9   ¦  s    
zRepo.__init__c             C   s
   | j jƒ S )N)r+   ZgetId)r8   r   r   r   rH   ¼  s    zRepo.idc             C   s
   | j jƒ S )N)r+   ZgetRepoFilePath)r8   r   r   r   ÚrepofileÁ  s    zRepo.repofilec             C   s   | j j|ƒ d S )N)r+   ZsetRepoFilePath)r8   Úvaluer   r   r   r°   Æ  s    c             C   s   | j jƒ r| j jƒ S | jƒ S )N)r+   ZisLocalZgetLocalBaseurlÚcache_pkgdir)r8   r   r   r   ru   Ê  s    

zRepo.pkgdirc             C   s$   | j d k	r| j S tjj| jjƒ tƒS )N)r¬   r{   r|   rg   r+   ÚgetCachedirÚ_PACKAGES_RELATIVE_DIR)r8   r   r   r   r²   Ñ  s    
zRepo.cache_pkgdirc             C   s
   || _ d S )N)r¬   )r8   Úvalr   r   r   ru   Ö  s    c             C   s   t jj| jjƒ dƒS )NZpubring)r{   r|   rg   r+   r³   )r8   r   r   r   Ú_pubring_dirÛ  s    zRepo._pubring_dirc             C   s
   | j jƒ S )N)r+   ZgetLoadMetadataOther)r8   r   r   r   Úload_metadata_otherß  s    zRepo.load_metadata_otherc             C   s   | j j|ƒ d S )N)r+   ZsetLoadMetadataOther)r8   rµ   r   r   r   r·   ã  s    c             C   s   | j |j k S )N)rH   )r8   Úotherr   r   r   Ú__lt__ç  s    zRepo.__lt__c             C   s   d| j j| jf S )Nz<%s %s>)rR   r=   rH   )r8   r   r   r   Ú__repr__ê  s    zRepo.__repr__c                s   t t| ƒj||ƒ d S )N)rQ   r   Ú__setattr__)r8   r¯   r±   )rR   r   r   r»   í  s    zRepo.__setattr__c             C   s   | j jƒ  d S )N)r+   Údisable)r8   r   r   r   r¼   ð  s    zRepo.disablec             C   s   | j jƒ  d S )N)r+   Úenable)r8   r   r   r   r½   ô  s    zRepo.enablec             C   s   | j j|ƒ dS )a/  Ask for additional repository metadata type to download.

        Given metadata_type is appended to the default metadata set when
        repository is downloaded.

        Parameters
        ----------
        metadata_type: string

        Example: add_metadata_type_to_download("productid")
        N)r+   ZaddMetadataTypeToDownload)r8   Úmetadata_typer   r   r   Úadd_metadata_type_to_downloadø  s    z"Repo.add_metadata_type_to_downloadc             C   s   | j j|ƒ dS )aI  Stop asking for this additional repository metadata type
        in download.

        Given metadata_type is no longer downloaded by default
        when this repository is downloaded.

        Parameters
        ----------
        metadata_type: string

        Example: remove_metadata_type_from_download("productid")
        N)r+   ZremoveMetadataTypeFromDownload)r8   r¾   r   r   r   Ú"remove_metadata_type_from_download  s    z'Repo.remove_metadata_type_from_downloadc             C   s   | j j|ƒS )z˜Return path to the file with downloaded repository metadata of given type.

        Parameters
        ----------
        metadata_type: string
        )r+   ZgetMetadataPath)r8   r¾   r   r   r   Úget_metadata_path  s    zRepo.get_metadata_pathc             C   s   | j j|ƒS )zâReturn content of the file with downloaded repository metadata of given type.

        Content of compressed metadata file is returned uncompressed.

        Parameters
        ----------
        metadata_type: string
        )r+   ZgetMetadataContent)r8   r¾   r   r   r   Úget_metadata_content!  s    
zRepo.get_metadata_contentc             C   sª   d}zˆy| j jƒ }W nt tjjtfk
rˆ } zP| jjrhd| j }x| jjD ]}|d| 7 }qJW t	j
|ƒ tjjt|ƒƒ‚W Y dd}~X nX W dtƒ | j_X t| j ƒ| _|S )a½  Load the metadata for this repo.

        Depending on the configuration and the age and consistence of data
        available on the disk cache, either loads the metadata from the cache or
        downloads them from the mirror, baseurl or metalink.

        This method will by default not try to refresh already loaded data if
        called repeatedly.

        Returns True if this call to load() caused a fresh metadata download.

        Fz7Errors during downloading metadata for repository '%s':z
  - %sN)r+   Úloadr	   ÚerrorÚErrorr!   r¥   r–   rH   re   r€   r   Ú
exceptionsZ	RepoErrorr"   r7   rN   r   )r8   Úretr/   rU   Zfailurer   r   r   rÃ   -  s    

&z	Repo.loadc             C   sP   | j s| jjdƒ | j rL| jdkr&dS | jjƒ }| jjƒ rDtd|ƒ}d|fS dS )	a)  Get the number of seconds after which the cached metadata will expire.

        Returns a tuple, boolean whether there even is cached metadata and the
        number of seconds it will expire in. Negative number means the metadata
        has expired already, None that it never expires.

        FrC   TNr   éÿÿÿÿ)TN)Fr   )r   r+   Z	loadCacheZmetadata_expireZgetExpiresInZ	isExpiredÚmin)r8   Z
expirationr   r   r   Ú_metadata_expire_inJ  s    



zRepo._metadata_expire_inc             C   s
   || _ d S )N)r¨   )r8   Z
key_importr   r   r   Ú_set_key_import]  s    zRepo._set_key_importc             C   s   || j _d S )N)r¥   r   )r8   r   r   r   r   Úset_progress_bar`  s    zRepo.set_progress_barc             C   s
   | j jƒ S )zoReturns user defined http headers.

        Returns
        -------
        headers : tuple of strings
        )r+   ZgetHttpHeaders)r8   r   r   r   Úget_http_headersd  s    zRepo.get_http_headersc             C   s   | j j|ƒ dS )a  Sets http headers.

        Sets new http headers and rewrites existing ones.

        Parameters
        ----------
        headers : tuple or list of strings
            Example: set_http_headers(["User-Agent: Agent007", "MyFieldName: MyFieldValue"])
        N)r+   ZsetHttpHeaders)r8   Zheadersr   r   r   Úset_http_headersn  s    zRepo.set_http_headersÚhttpÚftpÚfileÚhttpsc                s@   ‡ ‡fdd„}ˆ sdS | j jƒ }|r,||ƒS | jr<|| jƒS dS )zÒ
        :param location: relative location inside the repo
        :param schemes: list of allowed protocols. Default is ('http', 'ftp', 'file', 'https')
        :return: absolute url (string) or None
        c                sZ   xT| D ]L}ˆr>t jjj|ƒd }|ˆkrRtjj|ˆ jdƒƒS qtjj|ˆ jdƒƒS qW d S )Nr   r†   )r   r—   Zurlparser{   r|   rg   rŽ   )Zurl_listrK   r�   )r~   Úschemesr   r   Úschemes_filter�  s    
z,Repo.remote_location.<locals>.schemes_filterN)r+   Z
getMirrorsr‚   )r8   r~   rÓ   rÔ   Zmirrorsr   )r~   rÓ   r   r‡   {  s    

zRepo.remote_location)NN©rÏ   rÐ   rÑ   rÒ   )rÕ   )r=   r>   r?   ÚSYNC_TRY_CACHEr®   r9   r@   rH   r°   rA   ru   r²   r¶   r·   r¹   rº   r»   r¼   r½   r¿   rÀ   rÁ   rÂ   rÃ   rÊ   rË   rÌ   rÍ   rÎ   r‡   r\   r   r   )rR   r   r   ¢  s6   

r   )T)JZ
__future__r   r   Zdnf.i18nr   r   Zdnf.callbackr   Zdnf.confZdnf.conf.substitutionsZ	dnf.constZ
dnf.cryptoZdnf.exceptionsZdnf.loggingZ
dnf.pycompZdnf.utilZdnf.yum.miscZlibdnf.errorr	   Zlibdnf.repoÚ	functoolsrŒ   ZhawkeyZloggingÚoperatorr{   ÚreZshutilÚstringra   Ztimerc   r´   Z_MIRRORLIST_FILENAMEZascii_lettersZdigitsZ_REPOID_CHARSÚescapeZ	hexdigitsZ_CACHEDIR_REZCACHE_FILESZ	getLoggerre   r   r   r1   r5   Úobjectr   rD   rB   r^   Z	KeyImportrG   rN   r
   r_   rP   ZPayloadr]   rz   rƒ   r’   r   ZSyncStrategy_LAZYZ	SYNC_LAZYZSyncStrategy_ONLY_CACHEr­   ZSyncStrategy_TRY_CACHErÖ   r™   r¤   r‰   ZRepoConfr   r   r   r   Ú<module>   sl   




!
8&?


