§
    é ph�J  ã                  ó   — d 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m	Z	 ddl
mZmZmZ ddlmZ ddlmZmZ ddlmZ erdd	l
mZ dd
lmZ ddlmZ ddlmZ  ej        e¦  «        Z ej        d¦  «        ZdZ dd„Z! G d„ d¦  «        Z"dS )z7
The httplib2 algorithms ported for use with requests.
é    )ÚannotationsN)Úparsedate_tz)ÚTYPE_CHECKINGÚ
CollectionÚMapping)ÚCaseInsensitiveDict)Ú	DictCacheÚSeparateBodyBaseCache)Ú
Serializer)ÚLiteral)ÚPreparedRequest)ÚHTTPResponse)Ú	BaseCachez9^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?)é-  é4  ÚuriÚstrÚreturnútuple[str, str, str, str, str]c                ó°   — t                                | ¦  «        }|€J ‚|                     ¦   «         }|d         |d         |d         |d         |d         fS )zƒParses a URI using the regex given in Appendix B of RFC 3986.

    (scheme, authority, path, query, fragment) = parse_uri(uri)
    Né   é   é   é   é   )ÚURIÚmatchÚgroups)r   r   r   s      úpC:\Users\Daniel\PycharmProjects\Portfolio_Website\.venv\Lib\site-packages\pip\_vendor\cachecontrol\controller.pyÚ	parse_urir    '   sQ   € õ
 �IŠI�c‰NŒN€EØÐÐÐØ�\Š\‰^Œ^€FØ�1ŒI�v˜a”y &¨¤)¨V°A¬Y¸¸q¼	ÐBÐBó    c                  ó˜   — e Zd ZdZ	 	 	 	 d+d,d„Zed-d„¦   «         Zed-d„¦   «         Zd.d„Zd/d„Z	d0d„Z
d1d„Z	 	 d2d3d&„Z	 	 d2d4d)„Zd5d*„ZdS )6ÚCacheControllerz4An interface to see if request should cached or not.NTÚcacheúBaseCache | NoneÚcache_etagsÚboolÚ
serializerúSerializer | NoneÚstatus_codesúCollection[int] | Nonec                ó~   — |€t          ¦   «         n|| _        || _        |pt          ¦   «         | _        |pd| _        d S )N)éÈ   éË   i,  r   r   )r	   r$   r&   r   r(   Úcacheable_status_codes)Úselfr$   r&   r(   r*   s        r   Ú__init__zCacheController.__init__5   sD   € ð %*Ð<•Y‘[”[�[°uˆŒ
Ø&ˆÔØ$Ð4­
©¬ˆŒØ&2Ð&OÐ6OˆÔ#Ð#Ð#r!   r   r   r   c                ó   — t          |¦  «        \  }}}}}|r|st          d|z  ¦  «        ‚|                     ¦   «         }|                     ¦   «         }|sd}|rd                     ||g¦  «        p|}|dz   |z   |z   }|S )z4Normalize the URL to create a safe key for the cachez(Only absolute URIs are allowed. uri = %sú/ú?z://)r    Ú	ExceptionÚlowerÚjoin)	Úclsr   ÚschemeÚ	authorityÚpathÚqueryÚfragmentÚrequest_uriÚ
defrag_uris	            r   Ú_urlnormzCacheController._urlnormA   s¢   € õ 6?¸s±^´^Ñ2ˆ�˜D %¨Øð 	N˜Yð 	NÝÐFÈÑLÑMÔMÐMà—’‘”ˆØ—O’OÑ%Ô%ˆ	àð 	ØˆDð Ð7 §¢¨$°¨Ñ 7Ô 7Ð?¸4ˆØ˜e‘^ iÑ/°+Ñ=ˆ
àÐr!   c                ó,   — |                       |¦  «        S )N)r@   )r8   r   s     r   Ú	cache_urlzCacheController.cache_urlU   s   € à�|Š|˜CÑ Ô Ð r!   ÚheadersúMapping[str, str]údict[str, int | None]c                óü  — t           dft           dft           dfddddddddt           dfdœ}|                     d|                     dd¦  «        ¦  «        }i }|                     d¦  «        D �]}|                     ¦   «         sŒ|                     d	d
¦  «        }|d                              ¦   «         }	 ||         \  }}	n+# t          $ r t
                               d|¦  «         Y Œ|w xY w|r|	sd ||<   |r‚	  ||d
                              ¦   «         ¦  «        ||<   Œ³# t          $ r  |	rt
                               d|¦  «         Y ŒÜt          $ r% t
                               d||j	        ¦  «         Y �Œ	w xY w�Œ|S )NTF)NF)úmax-agez	max-staleú	min-freshúno-cacheúno-storezno-transformzonly-if-cachedzmust-revalidateÚpublicÚprivatezproxy-revalidatezs-maxagezcache-controlzCache-ControlÚ ú,ú=r   r   z,Ignoring unknown cache-control directive: %sz-Missing value for cache-control directive: %sz8Invalid value for cache-control directive %s, must be %s)
ÚintÚgetÚsplitÚstripÚKeyErrorÚloggerÚdebugÚ
IndexErrorÚ
ValueErrorÚ__name__)
r0   rC   Úknown_directivesÚ
cc_headersÚretvalÚcc_directiveÚpartsÚ	directiveÚtypÚrequireds
             r   Úparse_cache_controlz#CacheController.parse_cache_controlY   sì  € õ ˜T�{Ý˜u˜Ý˜t˜Ø%Ø%Ø)Ø+Ø,Ø#Ø$Ø -Ý˜d˜ð
ð 
Ðð  —[’[ °'·+²+¸oÈrÑ2RÔ2RÑSÔSˆ
à(*ˆà&×,Ò,¨SÑ1Ô1ð 	ñ 	ˆLØ×%Ò%Ñ'Ô'ð Øà ×&Ò& s¨AÑ.Ô.ˆEØ˜aœŸšÑ(Ô(ˆIðØ 0°Ô ;‘��X�XøÝð ð ð Ý—’ÐKÈYÑWÔWÐWØ�ðøøøð ð )˜hð )Ø$(��yÑ!Øð ðØ(+¨¨E°!¬H¯NªNÑ,<Ô,<Ñ(=Ô(=�F˜9Ñ%Ð%øÝ!ð ð ð Øð ÝŸšØNØ%ñô ð øøõ "ð ð ð Ý—L’LØUØ!Øœñô ð ð ñ ðøøøñð  ˆs*   Â6CÃ%C*Ã)C*Ã9&D Ä 'E7Å	*E7Å6E7Úrequestr   úHTTPResponse | Nonec                ó€  — d|j         v rdS |j        }|€J ‚| j                             |¦  «        }|€t                               d¦  «         dS t          | j        t          ¦  «        r| j                             |¦  «        }nd}| j	         
                    |||¦  «        }|€t                               d¦  «         |S )zO
        Load a cached response, or return None if it's not available.
        ÚRangeNzNo cache entry availablez1Cache entry deserialization failed, entry ignored)rC   Úurlr$   rQ   rU   rV   Ú
isinstancer
   Úget_bodyr(   ÚloadsÚwarning)r0   rc   rB   Ú
cache_dataÚ	body_fileÚresults         r   Ú_load_from_cachez CacheController._load_from_cache�   sÉ   € ð �g”oÐ%ð 	Ø�4à”Kˆ	ØÐ$Ð$Ð$Ø”Z—^’^ IÑ.Ô.ˆ
Øð 	Ý�LŠLÐ3Ñ4Ô4Ð4Ø�4å�d”jÕ"7Ñ8Ô8ð 	Øœ
×+Ò+¨IÑ6Ô6ˆIˆIàˆIà”×&Ò& w°
¸IÑFÔFˆØð 	PÝ�NŠNÐNÑOÔOÐOØˆr!   úHTTPResponse | Literal[False]c                óÞ  — |j         €J ‚|                      |j         ¦  «        }t                               d|¦  «         |                      |j        ¦  «        }d|v rt                               d¦  «         dS d|v r(|d         dk    rt                               d¦  «         dS |                      |¦  «        }|sdS t          |j        ¦  «        t          v rd	}t                               |¦  «         |S t          |j        ¦  «        }|rd
|vrTd|vr4t                               d¦  «         | j                             |¦  «         t                               d¦  «         dS t          j        ¦   «         }t          |d
         ¦  «        }|€J ‚t          j        |dd…         ¦  «        }	t#          d||	z
  ¦  «        }
t                               d|
¦  «         |                      |¦  «        }d}|                     d¦  «        }|�|}t                               d|¦  «         ned|v rat          |d         ¦  «        }|�Jt          j        |dd…         ¦  «        |	z
  }t#          d|¦  «        }t                               d|¦  «         |                     d¦  «        }|�|}t                               d|¦  «         |                     d¦  «        }|� |
|z  }
t                               d|
¦  «         ||
k    r8t                               d¦  «         t                               d||
¦  «         |S d|vr4t                               d¦  «         | j                             |¦  «         dS )ze
        Return a cached response if it exists in the cache, otherwise
        return False.
        NzLooking up "%s" in the cacherI   z-Request header has "no-cache", cache bypassedFrG   r   z1Request header has "max_age" as 0, cache bypassedzQReturning cached permanent redirect response (ignoring date and etag information)ÚdateÚetagz(Purging cached response: no date or etagz!Ignoring cached response: no dater   zCurrent age based on date: %iz#Freshness lifetime from max-age: %iÚexpiresz#Freshness lifetime from expires: %iz+Freshness lifetime from request max-age: %irH   z'Adjusted current age from min-fresh: %iz2The response is "fresh", returning cached responsez%i > %iz4The cached response is "stale" with no etag, purging)rg   rB   rU   rV   rb   rC   ro   rP   ÚstatusÚPERMANENT_REDIRECT_STATUSESr   r$   ÚdeleteÚtimer   ÚcalendarÚtimegmÚmaxrQ   )r0   rc   rB   ÚccÚrespÚmsgrC   ÚnowÚ
time_tuplerr   Úcurrent_ageÚresp_ccÚfreshness_lifetimeÚmax_agert   Úexpire_timeÚ	min_freshs                    r   Úcached_requestzCacheController.cached_request©   s�  € ð
 Œ{Ð&Ð&Ð&Ø—N’N 7¤;Ñ/Ô/ˆ	Ý�ŠÐ3°YÑ?Ô?Ð?Ø×%Ò% g¤oÑ6Ô6ˆð ˜Ðð 	Ý�LŠLÐHÑIÔIÐIØ�5à˜ˆ?ð 	˜r )œ}°Ò1ð 	Ý�LŠLÐLÑMÔMÐMØ�5ð ×$Ò$ WÑ-Ô-ˆØð 	Ø�5õ ˆtŒ{ÑÔÕ:Ð:ð 	ð7ð õ �LŠL˜ÑÔÐØˆKå,?ÀÄÑ,MÔ,MˆØð 	˜&¨Ð/ð 	Ø˜WÐ$ð -õ —’ÐGÑHÔHÐHØ”
×!Ò! )Ñ,Ô,Ð,Ý�LŠLÐ<Ñ=Ô=Ð=Ø�5åŒi‰kŒkˆÝ! '¨&¤/Ñ2Ô2ˆ
ØÐ%Ð%Ð%ÝŒ˜z¨"¨1¨"œ~Ñ.Ô.ˆÝ˜!˜S 4™ZÑ(Ô(ˆÝ�ŠÐ4°kÑBÔBÐBð ×*Ò*¨7Ñ3Ô3ˆð Ðð —+’+˜iÑ(Ô(ˆØð 
	XØ!(ÐÝ�LŠLÐ>Ð@RÑSÔSÐSÐSð ˜'Ð!ð 	XÝ" 7¨9Ô#5Ñ6Ô6ˆGØð XÝ&œo¨g°b°q°b¬kÑ:Ô:¸TÑA�Ý%(¨¨KÑ%8Ô%8Ð"Ý—’ÐBÐDVÑWÔWÐWð —&’&˜Ñ#Ô#ˆØð 	Ø!(ÐÝ�LŠLØ=Ð?Qñô ð ð —F’F˜;Ñ'Ô'ˆ	Øð 	Qà˜9Ñ$ˆKÝ�LŠLÐBÀKÑPÔPÐPð  Ò+ð 	Ý�LŠLÐMÑNÔNÐNÝ�LŠL˜Ð$6¸ÑDÔDÐDØˆKð ˜Ð ð 	)Ý�LŠLÐOÑPÔPÐPØŒJ×Ò˜iÑ(Ô(Ð(ð ˆur!   údict[str, str]c                óœ   — |                       |¦  «        }i }|r2t          |j        ¦  «        }d|v r|d         |d<   d|v r|d         |d<   |S )Nrs   ÚETagzIf-None-Matchzlast-modifiedzLast-ModifiedzIf-Modified-Since)ro   r   rC   )r0   rc   r}   Únew_headersrC   s        r   Úconditional_headersz#CacheController.conditional_headers  sq   € Ø×$Ò$ WÑ-Ô-ˆØˆàð 	LÝ0CÀDÄLÑ0QÔ0QˆGà˜Ð ð ?Ø/6°v¬�˜OÑ,à 'Ð)ð LØ3:¸?Ô3K�Ð/Ñ0àÐr!   rB   Úresponser   Úbodyúbytes | NoneÚexpires_timeú
int | NoneÚNonec                óX  — t          | j        t          ¦  «        rX| j                             || j                             ||d¦  «        |¬¦  «         |�| j                             ||¦  «         dS dS | j                             || j                             |||¦  «        |¬¦  «         dS )z.
        Store the data in the cache.
        r!   )rt   N)rh   r$   r
   Úsetr(   ÚdumpsÚset_body)r0   rB   rc   r�   rŽ   r�   s         r   Ú
_cache_setzCacheController._cache_set&  sÍ   € õ �d”jÕ"7Ñ8Ô8ð 	ð ŒJ�NŠNØØ”×%Ò% g¨x¸Ñ=Ô=Ø$ð ñ ô ð ð ð 5Ø”
×#Ò# I¨tÑ4Ô4Ð4Ð4Ð4ð5ð 5ð ŒJ�NŠNØØ”×%Ò% g¨x¸Ñ>Ô>Ø$ð ñ ô ð ð ð r!   Úresponse_or_refú2HTTPResponse | weakref.ReferenceType[HTTPResponse]c                ó¶  — t          |t          j        ¦  «        r |¦   «         }|€dS n|}|p| j        }|j        |vr#t
                               d|j        |¦  «         dS t          |j        ¦  «        }d|v r6t          |d         ¦  «        }|€J ‚t          j        |dd…         ¦  «        }	nd}	|�Fd|v rB|d                              ¦   «         r(t          |d         ¦  «        t          |¦  «        k    rdS |                      |j        ¦  «        }
|                      |¦  «        }|j        €J ‚|                      |j        ¦  «        }t
                               d|¦  «         d}d	|v rd
}t
                               d¦  «         d	|
v rd
}t
                               d¦  «         |rN| j                             |¦  «        r4t
                               d¦  «         | j                             |¦  «         |rdS d|                     dd¦  «        v rt
                               d¦  «         dS | j        r´d|v r°d}|                     d¦  «        r6t          |d         ¦  «        }|�t          j        |dd…         ¦  «        |	z
  }t-          |d¦  «        }t
                               d|› d�¦  «         t
                               d¦  «         |                      |||||¦  «         dS t          |j        ¦  «        t0          v r4t
                               d¦  «         |                      |||d¦  «         dS d|v �rt          |d         ¦  «        }|€J ‚t          j        |dd…         ¦  «        }	|                     d¦  «        }|�=|dk    r7t
                               d¦  «         |}|                      |||||¦  «         dS d|v r‹|d         r…t          |d         ¦  «        }|� t          j        |dd…         ¦  «        |	z
  }nd}t
                               d                     |¦  «        ¦  «         |                      |||||¦  «         dS dS dS dS )zc
        Algorithm for caching requests.

        This assumes a requests Response object.
        NzStatus code %s not in %srr   r   r   úcontent-lengthz&Updating cache with response from "%s"FrJ   TzResponse header has "no-store"zRequest header has "no-store"z0Purging existing cache entry to honor "no-store"Ú*ÚvaryrM   zResponse header has "Vary: *"rs   rt   i u zetag object cached for z secondszCaching due to etagzCaching permanent redirectr!   rG   z'Caching b/c date exists and max-age > 0z4Caching b/c of expires header. expires in {} seconds)rh   ÚweakrefÚReferenceTyper/   ru   rU   rV   r   rC   r   ry   rz   ÚisdigitrP   Úlenrb   rg   rB   r$   rQ   rw   r&   r{   r—   rv   Úformat)r0   rc   r˜   rŽ   r*   r�   r/   Úresponse_headersr€   rr   Úcc_reqr|   rB   Úno_storer�   rt   r„   s                    r   Úcache_responsezCacheController.cache_responseD  s&  € õ �o¥wÔ'<Ñ=Ô=ð 	'Ø&�Ñ(Ô(ˆHØð ð �ð	ð 'ˆHð ".Ð!L°Ô1LÐØŒ?Ð"8Ð8ð 	Ý�LŠLØ*¨H¬OÐ=Sñô ð ð ˆFå5HØÔñ6
ô 6
Ðð Ð%Ð%ð 	Ý%Ð&6°vÔ&>Ñ?Ô?ˆJØÐ)Ð)Ð)Ý”? :¨b¨q¨b¤>Ñ2Ô2ˆDˆDàˆDð ð	à Ð$4Ð4ð	ð !Ð!1Ô2×:Ò:Ñ<Ô<ð	õ Ð$Ð%5Ô6Ñ7Ô7½3¸t¹9¼9ÒDð		ð ˆFà×)Ò)¨'¬/Ñ:Ô:ˆØ×%Ò%Ð&6Ñ7Ô7ˆàŒ{Ð&Ð&Ð&Ø—N’N 7¤;Ñ/Ô/ˆ	Ý�ŠÐ=¸yÑIÔIÐIð ˆØ˜Ðð 	;ØˆHÝ�LŠLÐ9Ñ:Ô:Ð:Ø˜Ðð 	:ØˆHÝ�LŠLÐ8Ñ9Ô9Ð9Øð 	)˜œ
Ÿš yÑ1Ô1ð 	)Ý�LŠLÐKÑLÔLÐLØŒJ×Ò˜iÑ(Ô(Ð(Øð 	ØˆFð Ð"×&Ò& v¨rÑ2Ô2Ð2ð 	Ý�LŠLÐ8Ñ9Ô9Ð9ØˆFð Ôð <	 Ð*:Ð :ð <	ØˆLØ×#Ò# IÑ.Ô.ð GÝ&Ð'7¸	Ô'BÑCÔC�Øð GÝ#+¤?°7¸2¸A¸2´;Ñ#?Ô#?À$Ñ#F�Lå˜|¨ZÑ8Ô8ˆLå�LŠLÐI°<ÐIÐIÐIÑJÔJÐJÝ�LŠLÐ.Ñ/Ô/Ð/Ø�OŠO˜I w°¸$ÀÑMÔMÐMÐMÐMõ �”Ñ!Ô!Õ%@Ð@ð -	Ý�LŠLÐ5Ñ6Ô6Ð6Ø�OŠO˜I w°¸#Ñ>Ô>Ð>Ð>Ð>ð
 Ð'Ð'ñ &	Ý%Ð&6°vÔ&>Ñ?Ô?ˆJØÐ)Ð)Ð)Ý”? :¨b¨q¨b¤>Ñ2Ô2ˆDà—f’f˜YÑ'Ô'ˆGØð   w°¢{ð  Ý—’ÐFÑGÔGÐGØ&�Ø—’ØØØØØ ñô ð ð ð ð Ð.Ð.ð Ø# IÔ.ð Ý*Ð+;¸IÔ+FÑGÔG�GØð ,Ý'/¤°w¸rÀ¸r´{Ñ'CÔ'CÀdÑ'J˜˜à'+˜å—L’LØN×UÒUØ(ñô ñô ð ð
 —O’OØ!ØØ ØØ$ñô ð ð ð ðA&	ð &	ð&ð ðð r!   c                ó<  ‡— |j         €J ‚|                      |j         ¦  «        }|                      |¦  «        }|s|S dgŠ|j                             ˆfd„|j                             ¦   «         D ¦   «         ¦  «         d|_        |                      |||¦  «         |S )zéOn a 304 we will get a new set of headers that we want to
        update our cached value with, assuming we have one.

        This should only ever be called when we've sent an ETag and
        gotten a 304 as the response.
        Nr›   c                óH   •— i | ]\  }}|                      ¦   «         ‰v¯||“ŒS © )r6   )Ú.0ÚkÚvÚexcluded_headerss      €r   ú
<dictcomp>z:CacheController.update_cached_response.<locals>.<dictcomp>ò  sC   ø€ ð ð ð á�A�qØ—7’7‘9”9Ð$4Ð4ðØ�1ðð ð r!   r-   )rg   rB   ro   rC   ÚupdateÚitemsru   r—   )r0   rc   r�   rB   Úcached_responser­   s        @r   Úupdate_cached_responsez&CacheController.update_cached_response×  sÉ   ø€ ð Œ{Ð&Ð&Ð&Ø—N’N 7¤;Ñ/Ô/ˆ	Ø×/Ò/°Ñ8Ô8ˆàð 	àˆOð -Ð-ÐàÔ×&Ò&ðð ð ð à$Ô,×2Ò2Ñ4Ô4ðñ ô ñ	
ô 	
ð 	
ð "%ˆÔð 	�Š˜	 7¨OÑ<Ô<Ð<àÐr!   )NTNN)r$   r%   r&   r'   r(   r)   r*   r+   )r   r   r   r   )rC   rD   r   rE   )rc   r   r   rd   )rc   r   r   rp   )rc   r   r   rˆ   )NN)rB   r   rc   r   r�   r   rŽ   r�   r�   r‘   r   r’   )
rc   r   r˜   r™   rŽ   r�   r*   r+   r   r’   )rc   r   r�   r   r   r   )rY   Ú
__module__Ú__qualname__Ú__doc__r1   Úclassmethodr@   rB   rb   ro   r‡   rŒ   r—   r¦   r²   r©   r!   r   r#   r#   2   s9  € € € € € Ø>Ð>ð #'Ø Ø(,Ø/3ð
Pð 
Pð 
Pð 
Pð 
Pð ðð ð ñ „[ðð& ð!ð !ð !ñ „[ð!ð4ð 4ð 4ð 4ðlð ð ð ð4lð lð lð lð\ð ð ð ð( "Ø#'ðð ð ð ð ðD "Ø/3ðQð Qð Qð Qð Qðf(ð (ð (ð (ð (ð (r!   r#   )r   r   r   r   )#rµ   Ú
__future__r   ry   ÚloggingÚrerx   rž   Úemail.utilsr   Útypingr   r   r   Úpip._vendor.requests.structuresr   Úpip._vendor.cachecontrol.cacher	   r
   Ú"pip._vendor.cachecontrol.serializer   r   Úpip._vendor.requestsr   Úpip._vendor.urllib3r   r   Ú	getLoggerrY   rU   Úcompiler   rv   r    r#   r©   r!   r   ú<module>rÃ      sŠ  ðð
ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à ?Ð ?Ð ?Ð ?Ð ?Ð ?à KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ 9Ð 9Ð 9Ð 9Ð 9Ð 9àð 9ØÐÐÐÐÐà4Ð4Ð4Ð4Ð4Ð4Ø0Ð0Ð0Ð0Ð0Ð0à8Ð8Ð8Ð8Ð8Ð8à	ˆÔ	˜8Ñ	$Ô	$€à€b„jÐMÑNÔN€à(Ð ðCð Cð Cð CðMð Mð Mð Mð Mñ Mô Mð Mð Mð Mr!   