Ë
    Ö—ÄjÖ5  ã                  óö   — U d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZ dZ de!d<    G d„ de«      Z"y)é    )ÚannotationsN)ÚdatetimeÚtimezone)ÚLogger)ÚTracebackType)ÚAny)ÚResponse)ÚCaseInsensitiveDict)Úget_encoding_from_headers)ÚSelf)ÚRetry)ÚConnectionPool)ÚMaxRetryError)ÚHTTPResponse)ÚGithubExceptionÚRateLimitExceededExceedsMaxWait)Ú	Requesteré<   ÚintÚDEFAULT_SECONDARY_RATE_WAITc                  ó¦   ‡ — e Zd ZU dZdZded<   eZedf	 	 	 	 	 	 	 d
ˆ fd„Z	dˆ fd„Z
	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zedd„«       Zdd	„Zˆ xZS )ÚGithubRetrya&  
    A Github-specific implementation of `urllib3.Retry`

    This retries 403 responses if they are retry-able. Github requests are retry-able when
    the response provides a `"Retry-After"` header, or the content indicates a rate limit error.

    By default, response codes 403, and 500 up to 599 are retried. This can be configured
    via the `status_forcelist` argument.

    By default, all methods defined in `Retry.DEFAULT_ALLOWED_METHODS` are retried, plus GET and POST.
    This can be configured via the `allowed_methods` argument.

    NzLogger | NoneÚ_GithubRetry__loggerc           	     ó   •— || _         || _        |j                  dt        t	        dd«      «      «      dgz   |d<   |j                  dt
        j                  j                  ddh«      «      |d<   t        ‰| �$  d	i |¤Ž y)
ay  
        :param secondary_rate_wait: seconds to wait before retrying secondary rate limit errors
        :param max_rate_limit_wait: maximum seconds to wait for a primary or secondary rate limit reset;
            if the required backoff would exceed this, raises
            :class:`~github.GithubException.RateLimitExceededExceedsMaxWait` instead of waiting.
            Note that ``max_rate_limit_wait < secondary_rate_wait`` causes any secondary rate limit error to raise an exception and never wait.
            ``None`` (the default) means no cap is applied.
        :param kwargs: see urllib3.Retry for more arguments
        Ústatus_forcelistiô  iX  é“  Úallowed_methodsÚGETÚPOSTN© )
Úsecondary_rate_waitÚmax_rate_limit_waitÚgetÚlistÚranger   ÚDEFAULT_ALLOWED_METHODSÚunionÚsuperÚ__init__)Úselfr!   r"   ÚkwargsÚ	__class__s       €úWC:\Users\pivot\Documents\cueki\casual-preloader\Lib\site-packages\github/GithubRetry.pyr)   zGithubRetry.__init__M   s‚   ø€ ð $7ˆÔ Ø#6ˆÔ ð &,§Z¡ZÐ0BÄDÌÈsÐTWËÓDYÓ%ZÐ^aÐ]bÑ%bˆÐ!Ñ"Ø$*§J¡JÐ/@Ä%×B_ÑB_×BeÑBeÐglÐntÐfuÓBvÓ$wˆÐ Ñ!Ü‰ÑÑ"˜6Ó"ó    c                ó‚   •— |j                  t        | j                  | j                  ¬«      «       t	        ‰| �  di |¤ŽS )N)r!   r"   r    )ÚupdateÚdictr!   r"   r(   Únew)r*   Úkwr,   s     €r-   r2   zGithubRetry.newe   s5   ø€ Ø
�	‰	”$¨4×+CÑ+CÐY]×YqÑYqÔrÔsÜ‰w‰{Ñ ˜RÑ Ð r.   c                ó	  •‡— |�r·|j                   dk(  �r§| j                  t        j                  d|› d|› d|j                   › d|j                  › �«       d|j
                  v r?| j                  t        j                  d|j
                  j                  d«      › d�«       �n|j                  }	 | j                  ||«      }t        j                  |«      }|j                  d	«      }	 t        j                  |«      �rst        j                  |«      rdnd}
| j                  t        j                   d|
› d|› �«       t"        ‰| �I  ||||||«      }dŠt        j                  |«      rèd|j
                  v ræ|j
                  j                  d«      }|rÉ|j'                  «       r¹| j(                  j+                  t-        |«      t.        j0                  «      }|| j(                  j3                  t.        j0                  «      z
  }|j5                  «       }|dkD  r3| j                  t        j                   dt7        |«      › d|› d|› d�«       |dz   Šn| j8                  Š| j:                  �s‰| j:                  kD  rd| j                  t        j                  d‰› d| j:                  › d�j=                  dd«      «       t?        |j                   ||j
                  ‰¬«      ‚|jA                  «       }|‰kD  r>‰dkD  r7| j                  t        j                   d|› d‰› d�j=                  dd«      «       |Šd"ˆfd„}| j                  t        j                  d‰› d�j=                  dd«      «       ||_         |S | j                  t        j                   d «       t        jB                  |j                   |j
                  |«      ‚t"        ‰| �I  ||||||«      S # t        $ rE}		 t        d
«      |	‚# t        $ r'}	t        |j                   ||j
                  «      |	‚d }	~	ww xY wd }	~	ww xY w# tD        t        f$ r ‚ t        $ rE}		 t        d!«      |	‚# t        $ r'}	t        |j                   ||j
                  «      |	‚d }	~	ww xY wd }	~	ww xY w)#Nr   zRequest Ú z failed with z: zRetry-AfterzRetrying after z secondsÚmessagez"Failed to inspect response messageÚprimaryÚ	secondaryz#Response body indicates retry-able z rate limit error: g        zX-RateLimit-Resetr   zReset occurs in z (z / Ú)é   zRequired backoff of z!s exceeds max_rate_limit_wait of Úsz.0s)ÚwaitzRetry backoff of z)s exceeds required rate limit backoff of c                 ó   •— ‰ S ©Nr    )Úbackoffs   €r-   Úget_backoff_timez/GithubRetry.increment.<locals>.get_backoff_timeÉ   s   ø€ Ø'. r.   zSetting next backoff to z3Response message does not indicate retry-able errorz!Failed to determine retry backoff)ÚreturnÚfloat)#ÚstatusÚ_GithubRetry__logÚloggingÚINFOÚreasonÚheadersr#   Úget_contentÚjsonÚloadsÚ	ExceptionÚRuntimeErrorr   r   ÚisRateLimitErrorÚisPrimaryRateLimitErrorÚDEBUGr(   Ú	incrementÚisdigitÚ_GithubRetry__datetimeÚfromtimestampr   r   ÚutcÚnowÚtotal_secondsÚstrr!   r"   Úreplacer   r@   ÚcreateExceptionr   )r*   ÚmethodÚurlÚresponseÚerrorÚ_poolÚ_stacktraceÚcontentr6   ÚeÚ	rate_typeÚretryÚvalueÚresetÚdeltaÚresetBackoffÚretry_backoffr@   r?   r,   s                     @€r-   rQ   zGithubRetry.incrementi   s`  ù€ ò ð �‰ #Ó%Ø—
‘
Ü—L‘LØ˜v˜h a¨ u¨M¸(¿/¹/Ð9JÈ"ÈXÏ_É_ÐL]Ð^ôð ! H×$4Ñ$4Ñ4à—J‘JÜŸ™Ø)¨(×*:Ñ*:×*>Ñ*>¸}Ó*MÐ)NÈhÐWöð
 'Ÿo™o�Gð
eØ"&×"2Ñ"2°8¸SÓ"A˜Ü"&§*¡*¨WÓ"5˜Ø")§+¡+¨iÓ"8˜ðPeÜ$×5Ñ5°gÕ>Ü5>×5VÑ5VÐW^Ô5_©	Ðep˜IØ ŸJ™JÜ '§¡Ø"EÀiÀ[ÐPcÐdkÐclÐ môô %*¡GÑ$5°f¸cÀ8ÈUÐTYÐ[fÓ$g˜Eð '*˜Gä(×@Ñ@ÀÔIØ#6¸(×:JÑ:JÑ#JØ,4×,<Ñ,<×,@Ñ,@ÐATÓ,U EÙ',°·±´Ø04·±×0MÑ0MÌcÐRWËjÔZb×ZfÑZfÓ0g¨Ø05¸¿¹×8KÑ8KÌHÏLÉLÓ8YÑ0Y¨Ø7<×7JÑ7JÓ7L¨à+7¸!Ò+;Ø,0¯J©JÜ07·±Ø2BÄ3ÀuÃ:À,ÈbÐQVÐPWÐWZÐ[`ÐZaÐabÐ0cô-.ð 3?ÀÑ2B©à*.×*BÑ*B Ø#×7Ñ7ÐCÈÐRV×RjÑRjÒHjØ $§
¡
Ü$+§L¡LØ&:¸7¸)ð D>Ø>B×>VÑ>VÐ=WÐWXð%ZßZaÑZaÐbgÐilÓZmô!"ô
 'FØ$,§O¡OØ$+Ø$,×$4Ñ$4Ø)0ô	'"ð !"ð -2×,BÑ,BÓ,D˜MØ,¨wÒ6Ø#*¨Q¢;Ø$(§J¡JÜ(/¯©Ø*;¸M¸?ð KJØJQÈÐRSð)UßU\ÑU\Ð]bÐdgÓUhô%&ð
 +8 õ/ð !ŸJ™JÜ '§¡Ø":¸7¸)À1Ð E× MÑ MÈeÐUXÓ Yôð 6F˜EÔ2Ø#(˜LàŸ
™
Ü#ŸM™MØQôô (×7Ñ7¸¿¹È×IYÑIYÐ[bÓcÐcô$ ‰wÑ  ¨¨h¸¸uÀkÓRÐRøôC %ò eðeÜ".Ð/SÓ"TÐZ[Ð[øÜ+ò eÜ"1°(·/±/À7ÈH×L\ÑL\Ó"]ÐcdÐdûðeþðeûô` *¬?Ð;ò ØÜ$ò eðeÜ".Ð/RÓ"SÐYZÐZøÜ+ò eÜ"1°(·/±/À7ÈH×L\ÑL\Ó"]ÐcdÐdûðeþðeúsh   Â08O Ã)JP" Í2AP" Ï	PÏO'Ï'	PÏ0"PÐPÐPÐPÐ"Q?Ð;QÑ	Q7Ñ"Q2Ñ2Q7Ñ7Q:Ñ:Q?c                ó  — t        «       }t        | dd «      |_        t        t        | di «      «      |_        t        |j                  «      |_        | |_        |j                  j                  |_        ||_	        |j                  xs dS )NrC   rH   r.   )r	   ÚgetattrÚstatus_coder
   rH   r   ÚencodingÚrawrG   r\   ra   )Úrespr\   r]   s      r-   rI   zGithubRetry.get_contentë   s{   € ô “:ˆô  ' t¨X°tÓ<ˆÔô /¬w°t¸YÈÓ/KÓLˆÔô 6°h×6FÑ6FÓGˆÔØˆŒØ"Ÿ,™,×-Ñ-ˆŒàˆŒà×ÑÒ& 3Ð&r.   c                óÌ   — | j                   €t        j                  t        «      | _         | j                   j	                  |«      r | j                   j
                  ||fi |¤Ž y y r>   )r   rE   Ú	getLoggerÚ__name__ÚisEnabledForÚlog)r*   Úlevelr6   r+   s       r-   Ú__logzGithubRetry.__logÿ   sP   € Ø�=‰=Ð Ü#×-Ñ-¬hÓ7ˆDŒMØ�=‰=×%Ñ% eÔ,ØˆD�M‰M×Ñ˜e WÑ7°Ó7ð -r.   )r!   rB   r"   zfloat | Noner+   r   rA   ÚNone)r3   r   rA   r   )NNNNNN)r[   ú
str | Noner\   rx   r]   zHTTPResponse | Noner^   zException | Noner_   zConnectionPool | Noner`   zTracebackType | NonerA   r   )ro   r   r\   rX   rA   Úbytes)ru   r   r6   rX   r+   r   rA   rw   )rr   Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   rS   r   r)   r2   rQ   ÚstaticmethodrI   rD   Ú__classcell__)r,   s   @r-   r   r   8   sÛ   ø… ñð #€HˆmÓ"ð €Jð &AØ,0ð#à"ð#ð *ð#ð ð	#ð
 
õ#õ0!ð "ØØ(,Ø"&Ø'+Ø,0ð@Sàð@Sð ð@Sð &ð	@Sð
  ð@Sð %ð@Sð *ð@Sð 
õ@SðD ò'ó ð'÷&8r.   r   )#Ú
__future__r   rJ   rE   r   r   r   Útypesr   Útypingr   Úrequestsr	   Úrequests.modelsr
   Úrequests.utilsr   Útyping_extensionsr   Úurllib3r   Úurllib3.connectionpoolr   Úurllib3.exceptionsr   Úurllib3.responser   Úgithub.GithubExceptionr   r   Úgithub.Requesterr   r   r}   r   r    r.   r-   Ú<module>r�      sT   ðö@ #ã Û ß 'Ý Ý Ý å Ý /Ý 4Ý "Ý Ý 1Ý ,Ý )ç SÝ &à#%Ð ˜SÓ %ôK8�%õ K8r.   