Your IP : 216.73.216.111
3
��gLQ�@sFddlmZddlmZddlmZmZddlZddlZddl Zddl
ZddlZddlZddl
ZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZdZ dZ!ej"ej#dZ$dej%e$�ej&fZ'd e'e!fd
e'e fdd�Z(ej)d
�Z*dd�Z+dd�Z,d-dd�Z-dd�Z.Gdd�de/�Z0Gdd�de1�Z2Gdd�dej3j4�Z5Gdd�de/�Z6Gdd �d ej7j8�Z9Gd!d"�d"ej3j:�Z;Gd#d$�d$e;�Z<Gd%d&�d&e;�Z=Gd'd(�d(ej3j:�Z>ej7j?j@ZAej7j?jBZCej7j?jDZEGd)d*�d*ej7jF�ZGGd+d,�d,ejHjI�Z?dS).�)�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)$)�metadatarZdbcache�dnfcCstjjj|�}|dkrdS|S)zAReturn index of an invalid character in the repo ID (if present).rN)�libdnf�repo�RepoZverifyId)Zrepo_idZ
first_invalid�r�/usr/lib/python3.6/repo.py�repo_id_invalidHsrcGs8x"|D]}|||�}|dk r|SqWttd�|��dS)Nz"no matching payload factory for %s)�
ValueErrorr)�pkg�progressZ factories�fn�ploadrrr
�_pkg2payloadOs
rTcCs�dd�}|jj�dd�t||d�D�}t�}ytjjjtjj|�|�Wn,t k
rv}zt
|�|_WYdd}~XnX|j�|jj
�|_xj|D]b}|j�}|dks�|jd�r�q�|j�} | j}
|
j}|dkr�|jj|�q�|jjj�|g|j|<q�W|S)NcSst|d�S)NZdelta)�hasattr)�payloadrrr
�_download_sort_keyYsz._download_payloads.<locals>._download_sort_keycSsg|]}|j��qSr)�_librepo_target)�.0rrrr
�
<listcomp>]sz&_download_payloads.<locals>.<listcomp>)�keyzNot finishedzAlready downloaded)�err�clear�sorted�_DownloadErrorsr r
�
PackageTargetZdownloadPackagesZVectorPPackageTarget�RuntimeError�str�_fatal�wait�copy�_recoverableZgetErr�
startswithZgetCallbacks�
package_ploadr�_skipped�add�_repoZexpire�_pkg_irrecoverable)�payloadsZdrpmZ fail_fastrZtargets�errs�eZtgtr� callbacksrrrrr
�_download_payloadsWs0
r1cCsL|\}}x:|D]2}|j}||kr,||j7}q||j7}||j7}qW||fS)N)r�
download_size�
_full_size)Zsavingr-r.�realZfullrrrrr
�_update_savingxs
r5c@s>eZdZdd�Zdd�Zedd��Zejdd��Zdd �Zd
S)rcCsi|_i|_d|_t�|_dS)N)r,�_val_recoverabler#�setr))�selfrrr
�__init__�sz_DownloadErrors.__init__cCs"|jr|jS|jrd|jgiSiS)N�)r,r#)r8rrr
�_irrecoverable�s
z_DownloadErrors._irrecoverablecCs|jS)N)r6)r8rrr
r&�sz_DownloadErrors._recoverablecCs
||_dS)N)r6)r8Znew_dctrrr
r&�scCs|j|jkrdS|jS)Nr)rr)r2)r8rrrr
�_bandwidth_used�sz_DownloadErrors._bandwidth_usedN) �__name__�
__module__�__qualname__r9r;�propertyr&�setterr<rrrr
r�s
rc@seZdZdd�ZdS)�_DetailedLibrepoErrorcCs,tj|�|jd|_|jd|_||_dS)Nr�)� Exceptionr9�argsZlibrepo_codeZlibrepo_msg�
source_url)r8Zlibrepo_errrFrrr
r9�s
z_DetailedLibrepoError.__init__N)r=r>r?r9rrrr
rB�srBc@seZdZdd�ZdS)�_NullKeyImportcCsdS)NTr)r8�id�userid�fingerprint�url� timestamprrr
�_confirm�sz_NullKeyImport._confirmN)r=r>r?rMrrrr
rG�srGc@s eZdZdd�Zedd��ZdS)�MetadatacCs
||_dS)N)r+)r8r
rrr
r9�szMetadata.__init__cCs
|jj�S)N)r+�fresh)r8rrr
rO�szMetadata.freshN)r=r>r?r9r@rOrrrr
rN�srNcs4eZdZ�fdd�Zdd�Zdd�Zdd�Z�ZS) �PackageTargetCallbackscstt|�j�||_dS)N)�superrPr9r()r8r()� __class__rr
r9�szPackageTargetCallbacks.__init__cCs|jjd||�dS)Nr)r(�_end_cb)r8�status�msgrrr
�end�szPackageTargetCallbacks.endcCs|jjd||�dS)Nr)r(�_progress_cb)r8�totalToDownload�
downloadedrrr
r�szPackageTargetCallbacks.progresscCs|jjd||�dS)Nr)r(�_mirrorfail_cb)r8rUrKrrr
�
mirrorFailure�sz$PackageTargetCallbacks.mirrorFailure)r=r>r?r9rVrr[�
__classcell__rr)rRr
rP�srPcsHeZdZ�fdd�Zdd�Zdd�Zdd�Zed d
��Zdd�Z �Z
S)
�PackagePayloadcs$tt|�j|�t|�|_||_dS)N)rQr]r9rPr0r)r8rr)rRrr
r9�s
zPackagePayload.__init__cCsRtjj}|dkrtjj}n$|jd�r(dS|tjjjkr>tjj }|j
j|||�dS)z"End callback to librepo operation.NzNot finished)r�callbackZ
STATUS_FAILEDZ STATUS_OKr'r r
�PackageTargetCBZTransferStatus_ALREADYEXISTSZSTATUS_ALREADY_EXISTSrrV)r8�cbdataZ lr_statusrUrTrrr
rS�s
zPackagePayload._end_cbcCs|jj|tjj|�dS)N)rrVrr^Z
STATUS_MIRROR)r8r`rrKrrr
rZ�szPackagePayload._mirrorfail_cbcCsXy|jj||�Wn@tk
rRtj�\}}}tj|||�}tjdj|��YnXdS)Nr:) rrD�sys�exc_info� traceback�format_exception�logger�critical�join)r8r`�total�done�exc_type� exc_value�
exc_traceback�except_listrrr
rW�szPackagePayload._progress_cbcCs|jS)N)r2)r8rrr
r3�szPackagePayload._full_sizecCs�|j}|j}tjj|�|d||j|j|jd�}|j|j ��t
jj|jj
|d|d|d|d|d|d|d d
d
|j�S)NT)�dest�resumer`Z
progresscbZendcbZmirrorfailurecb�relative_urlrn�
checksum_type�checksum�expectedsize�base_urlror)r�pkgdirr�util�
ensure_dirrWrSrZ�update�_target_paramsr r
r r+r0)r8rruZ
target_dctrrr
r�s
zPackagePayload._librepo_target)r=r>r?r9rSrZrWr@r3rr\rr)rRr
r]�sr]c@s(eZdZdd�Zdd�Zedd��ZdS)�
RPMPayloadcCstjj|jj�S)N)�os�path�basenamer�location)r8rrr
�__str__szRPMPayload.__str__cCsT|j}|j�\}}tjjj|�}|tjjjkr>tjt d�|�|j
|||j|jd�S)Nzunsupported checksum type: %s)rprqrrrsrt)
rZreturnIdSumr r
r ZchecksumTypeZChecksumType_UNKNOWNre�warningrr~�downloadsize�baseurl)r8rZctypeZcsumZ
ctype_coderrr
ryszRPMPayload._target_paramscCs|jjS)zTotal size of the download.)rr�)r8rrr
r2szRPMPayload.download_sizeN)r=r>r?rryr@r2rrrr
rzsrzcs@eZdZ�fdd�Zdd�Zdd�Zdd�Zed d
��Z�Z S)�RemoteRPMPayloadcs�tt|�jd|�||_d|_||_|jjp.d|jjjd�}t j
|jd��j�dd�}d|}t
jj|jj|d�|_tjj|j�t
jj|j|j�jd ��|_dS)
NZ
unused_objectrr:Zbasearch�utf8�zcommandline-r�/)rQr�r9�remote_location�remote_size�confZ
releasever�
substitutions�get�hashlibZsha256�encodeZ hexdigestr{r|rgZcachedirrurrvrwr�lstripZ
local_path)r8r�r�r�sZdigestZrepodir)rRrr
r9szRemoteRPMPayload.__init__cCstjj|j�S)N)r{r|r}r�)r8rrr
r)szRemoteRPMPayload.__str__cCs^||_y|jj||�Wn@tk
rXtj�\}}}tj|||�}tjdj |��YnXdS)Nr:)
r�rrDrarbrcrdrerfrg)r8r`rhrirjrkrlrmrrr
rW,szRemoteRPMPayload._progress_cbcCs<tjj|jjtjj|j�|j dddtjj
|j�ddd|j�S)NrT)r r
r r��_configr{r|r}r�ru�dirnamer0)r8rrr
r5sz RemoteRPMPayload._librepo_targetcCs|jS)zTotal size of the download.)r�)r8rrr
r2;szRemoteRPMPayload.download_size)
r=r>r?r9rrWrr@r2r\rr)rRr
r�s
r�cszeZdZ�fdd�Zdd�Zdd�Zdd�Zd d
�Zdd�Ze d
d��Z
e dd��Zejdd��Zdd�Z
dd�Z�ZS)� MDPayloadcs.tt|�j|�d|_d|_d|_t�|_dS)Nr:rF)rQr�r9�_text�_download_size�fastest_mirror_runningr7�mirror_failures)r8r)rRrr
r9Cs
zMDPayload.__init__cCstjjr|jS|jjd�SdS)Nzutf-8)r�pycompZPY3r�r�)r8rrr
rJszMDPayload.__str__cCs|jS)N)r�)r8rrr
�__unicode__PszMDPayload.__unicode__cCs||_|jj||�dS)N)r�r)r8r`rhrirrr
rWSszMDPayload._progress_cbcCs\|tjjjkr"td�|}d|_n*|tjjjkrH|jrH|rBd|nd}ndS|jj|�dS)Nz,determining the fastest mirror (%s hosts).. Tz
error: %s
zdone.
) r r
�RepoCBZFastestMirrorStage_DETECTIONrr�ZFastestMirrorStage_STATUSr�message)r8r`�stage�datarUrrr
�_fastestmirror_cbWszMDPayload._fastestmirror_cbcCs&|jj|�d||f}tj|�dS)Nzerror: %s (%s).)r�r*re�debug)r8r`rUrKrrrr
�_mirror_failure_cbcszMDPayload._mirror_failure_cbcCs|jS)N)r�)r8rrr
r2hszMDPayload.download_sizecCs|jS)N)� _progress)r8rrr
rlszMDPayload.progresscCs|dkrtjj�}||_dS)N)rr^�NullDownloadProgressr�)r8rrrr
rps
cCs||_|jjdd�dS)NrCr)r�r�start)r8�textrrr
r�vszMDPayload.startcCsd|_|jj|dd�dS)Nr)r�rrV)r8rrr
rVzsz
MDPayload.end)r=r>r?r9rr�rWr�r�r@r2rrAr�rVr\rr)rRr
r�Asr�csLeZdZ�fdd�Zdd�Zdd�Zdd�Zd d
�Zdd�Zd
d�Z �Z
S)�
RepoCallbackscs tt|�j�||_|j|_dS)N)rQr�r9r+� _md_pload)r8r
)rRrr
r9�szRepoCallbacks.__init__cCs|jj|�dS)N)r�r�)r8Zwhatrrr
r��szRepoCallbacks.startcCs|jj�dS)N)r�rV)r8rrr
rV�szRepoCallbacks.endcCs|jjd||�dS)Nr)r�rW)r8rXrYrrr
r�szRepoCallbacks.progresscCs|jjd||�dS)N)r�r�)r8r�Zptrrrr
�
fastestMirror�szRepoCallbacks.fastestMirrorcCs|jjd|||�dS)Nr)r�r�)r8rUrKrrrr
�handleMirrorFailure�sz!RepoCallbacks.handleMirrorFailurecCs|jjj|||||�S)N)r+�_key_importrM)r8rHrIrJrKrLrrr
�
repokeyImport�szRepoCallbacks.repokeyImport)r=r>r?r9r�rVrr�r�r�r\rr)rRr
r��sr�cseZdZeZd7�fdd� Zedd��Zedd��Zej dd��Zed d
��Z
dd�Ze
j d
d
��Z
edd��Zedd��Z
e
j dd��Z
dd�Zdd�Z�fdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd9d5d6�Z�ZS):rNcs�tt|�j||d�|jjj�tjj|r.|nd|j�|_t t
jj��|_
t|�|_|jjj�|jj|j�d|_t�|_d|_|jj|r�|jr�tn|j�|r�|jj|j�t
jjj�|_|dk r�|jnd|_dS)N)Zsection�parentr:T) rQrr9r��thisZdisownr r
r+r�rr^r�r�r�Z
_callbacksZsetCallbacks�_pkgdirrGr�rZsetSyncStrategyZ cacheonly�SYNC_ONLY_CACHE�DEFAULT_SYNCZsetSubstitutionsr�r�Z
SubstitutionsZ_substitutionsZcheck_config_file_ageZ_check_config_file_age)r8�nameZparent_conf)rRrr
r9�s
z
Repo.__init__cCs
|jj�S)N)r+ZgetId)r8rrr
rH�szRepo.idcCs
|jj�S)N)r+ZgetRepoFilePath)r8rrr
�repofile�sz
Repo.repofilecCs|jj|�dS)N)r+ZsetRepoFilePath)r8�valuerrr
r��scCs|jj�r|jj�S|j�S)N)r+ZisLocalZgetLocalBaseurl�cache_pkgdir)r8rrr
ru�s
zRepo.pkgdircCs$|jdk r|jStjj|jj�t�S)N)r�r{r|rgr+�getCachedir�_PACKAGES_RELATIVE_DIR)r8rrr
r��s
zRepo.cache_pkgdircCs
||_dS)N)r�)r8�valrrr
ru�scCstjj|jj�d�S)NZpubring)r{r|rgr+r�)r8rrr
�_pubring_dir�szRepo._pubring_dircCs
|jj�S)N)r+ZgetLoadMetadataOther)r8rrr
�load_metadata_other�szRepo.load_metadata_othercCs|jj|�dS)N)r+ZsetLoadMetadataOther)r8r�rrr
r��scCs|j|jkS)N)rH)r8�otherrrr
�__lt__�szRepo.__lt__cCsd|jj|jfS)Nz<%s %s>)rRr=rH)r8rrr
�__repr__�sz
Repo.__repr__cstt|�j||�dS)N)rQr�__setattr__)r8r�r�)rRrr
r��szRepo.__setattr__cCs|jj�dS)N)r+�disable)r8rrr
r��szRepo.disablecCs|jj�dS)N)r+�enable)r8rrr
r��szRepo.enablecCs|jj|�dS)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+ZaddMetadataTypeToDownload)r8�
metadata_typerrr
�add_metadata_type_to_download�s
z"Repo.add_metadata_type_to_downloadcCs|jj|�dS)aIStop 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+ZremoveMetadataTypeFromDownload)r8r�rrr
�"remove_metadata_type_from_downloadsz'Repo.remove_metadata_type_from_downloadcCs|jj|�S)z�Return path to the file with downloaded repository metadata of given type.
Parameters
----------
metadata_type: string
)r+ZgetMetadataPath)r8r�rrr
�get_metadata_pathszRepo.get_metadata_pathcCs|jj|�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+ZgetMetadataContent)r8r�rrr
�get_metadata_content!s
zRepo.get_metadata_contentcCs�d}z�y|jj�}Wnttjjtfk
r�}zP|jjrhd|j}x|jjD]}|d|7}qJWt j
|�tjj
t|���WYdd}~XnXWdt�|j_Xt|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�rHrer�r�
exceptionsZ RepoErrorr"r7rNr)r8�retr/rUZfailurerrr
r�-s
&z Repo.loadcCsP|js|jjd�|jrL|jdkr&dS|jj�}|jj�rDtd|�}d|fSdS) 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.
FrCTNr���)TN)Fr)rr+Z loadCacheZmetadata_expireZgetExpiresInZ isExpired�min)r8Z
expirationrrr
�_metadata_expire_inJs
zRepo._metadata_expire_incCs
||_dS)N)r�)r8Z
key_importrrr
�_set_key_import]szRepo._set_key_importcCs||j_dS)N)r�r)r8rrrr
�set_progress_bar`szRepo.set_progress_barcCs
|jj�S)zoReturns user defined http headers.
Returns
-------
headers : tuple of strings
)r+ZgetHttpHeaders)r8rrr
�get_http_headersdszRepo.get_http_headerscCs|jj|�dS)aSets 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+ZsetHttpHeaders)r8Zheadersrrr
�set_http_headersnszRepo.set_http_headers�http�ftp�file�httpscs@��fdd�}�sdS|jj�}|r,||�S|jr<||j�SdS)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
csZxT|D]L}�r>tjjj|�d}|�krRtjj|�jd��Sqtjj|�jd��SqWdS)Nrr�)rr�Zurlparser{r|rgr�)Zurl_listrKr�)r~�schemesrr
�schemes_filter�s
z,Repo.remote_location.<locals>.schemes_filterN)r+Z
getMirrorsr�)r8r~r�r�Zmirrorsr)r~r�r
r�{s
zRepo.remote_location)NN�r�r�r�r�)r�)r=r>r?�SYNC_TRY_CACHEr�r9r@rHr�rArur�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r\rr)rRr
r�s6
r)T)JZ
__future__rrZdnf.i18nrrZdnf.callbackrZdnf.confZdnf.conf.substitutionsZ dnf.constZ
dnf.cryptoZdnf.exceptionsZdnf.loggingZ
dnf.pycompZdnf.utilZdnf.yum.miscZlibdnf.errorr Zlibdnf.repo� functoolsr�ZhawkeyZlogging�operatorr{�reZshutil�stringraZtimercr�Z_MIRRORLIST_FILENAMEZ
ascii_lettersZdigitsZ
_REPOID_CHARS�escapeZ hexdigitsZ_CACHEDIR_REZCACHE_FILESZ getLoggerrerrr1r5�objectrrDrBr^Z KeyImportrGrNr
r_rPZPayloadr]rzr�r�rZSyncStrategy_LAZYZ SYNC_LAZYZSyncStrategy_ONLY_CACHEr�ZSyncStrategy_TRY_CACHEr�r�r�r�ZRepoConfrrrr
�<module>sl
!
8&?
?>