£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>

Rec           @   s   d  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 d d l	 m
 Z
 d d l m Z e j e  Z e j d  Z d	   Z d
 e f d     YZ d S(   s7   
The httplib2 algorithms ported for use with requests.
iN(   t   parsedate_tz(   t   CaseInsensitiveDicti   (   t	   DictCache(   t
   Serializers9   ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?c         C   s<   t  j |   j   } | d | d | d | d | d f S(   s   Parses a URI using the regex given in Appendix B of RFC 3986.

        (scheme, authority, path, query, fragment) = parse_uri(uri)
    i   i   i   i   i   (   t   URIt   matcht   groups(   t   uriR   (    (    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyt	   parse_uri   s    t   CacheControllerc           B   st   e  Z d  Z d	 e d	 d	 d  Z e d    Z e d    Z d   Z	 d   Z
 d   Z d	 d	 d  Z d   Z RS(
   s9   An interface to see if request should cached or not.
    c         C   sL   | d  k r t   n | |  _ | |  _ | p3 t   |  _ | pB d |  _ d  S(   Ni   i   i,  i-  (   i   i   i,  i-  (   t   NoneR   t   cachet   cache_etagsR   t
   serializert   cacheable_status_codes(   t   selfR   R   R   t   status_codes(    (    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyt   __init__"   s    	c   	      C   s   t  |  \ } } } } } | s) | r< t d |   n  | j   } | j   } | sc d } n  | r~ d j | | g  p | } | d | | } | S(   s4   Normalize the URL to create a safe key for the caches(   Only absolute URIs are allowed. uri = %st   /t   ?s   ://(   R   t	   Exceptiont   lowert   join(	   t   clsR   t   schemet	   authorityt   patht   queryt   fragmentt   request_urit
   defrag_uri(    (    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyt   _urlnorm*   s    	!c         C   s   |  j  |  S(   N(   R   (   R   R   (    (    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyt	   cache_url>   s    c   
      C   s  i t  t f d 6t  t f d 6t  t f d 6d  t f d 6d  t f d 6d  t f d 6d  t f d 6d  t f d 6d  t f d	 6d  t f d
 6d  t f d 6t  t f d 6} | j d | j d d   } i  } x| j d  D]
} | j   s q n  | j d d  } | d j   } y | | \ } }	 Wn$ t k
 rJt j	 d |  q n X| sY|	 rfd  | | <n  | r y | | d j    | | <Wqt
 k
 r|	 rt j	 d |  qqt k
 rt j	 d | | j  qXq q W| S(   Ns   max-ages	   max-stales	   min-freshs   no-caches   no-stores   no-transforms   only-if-cacheds   must-revalidatet   publict   privates   proxy-revalidates   s-maxages   cache-controls   Cache-Controlt    t   ,t   =i   i    s,   Ignoring unknown cache-control directive: %ss-   Missing value for cache-control directive: %ss8   Invalid value for cache-control directive %s, must be %s(   t   intt   Truet   FalseR
   t   gett   splitt   stript   KeyErrort   loggert   debugt
   IndexErrort
   ValueErrort   __name__(
   R   t   headerst   known_directivest
   cc_headerst   retvalt   cc_directivet   partst	   directivet   typt   required(    (    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyt   parse_cache_controlB   sR    c         C   s   |  j  | j  } t j d |  |  j | j  } d | k rQ t j d  t Sd | k r~ | d d k r~ t j d  t S|  j j |  } | d k r t j d  t S|  j
 j | |  } | s t j d  t S| j d	 k r d
 } t j |  | St | j  } | s!d | k r^d | k rMt j d  |  j j |  n  t j d  t St j   } t j t | d   }	 t d | |	  }
 t j d |
  |  j |  } d } d | k r| d } t j d |  n` d | k rDt | d  } | d k	 rDt j |  |	 } t d |  } t j d |  qDn  d | k rm| d } t j d |  n  d | k r| d } |
 | 7}
 t j d |
  n  | |
 k rt j d  t j d | |
  | Sd | k rt j d  |  j j |  n  t S(   se   
        Return a cached response if it exists in the cache, otherwise
        return False.
        s   Looking up "%s" in the caches   no-caches-   Request header has "no-cache", cache bypasseds   max-agei    s1   Request header has "max_age" as 0, cache bypasseds   No cache entry availables1   Cache entry deserialization failed, entry ignoredi-  sV   Returning cached "301 Moved Permanently" response (ignoring date and etag information)t   datet   etags(   Purging cached response: no date or etags!   Ignoring cached response: no dates   Current age based on date: %is#   Freshness lifetime from max-age: %it   expiress#   Freshness lifetime from expires: %is+   Freshness lifetime from request max-age: %is	   min-freshs'   Adjusted current age from min-fresh: %is2   The response is "fresh", returning cached responses   %i > %is4   The cached response is "stale" with no etag, purgingN(   R    t   urlR-   R.   R;   R2   R(   R   R)   R
   R   t   loadst   warningt   statusR   t   deletet   timet   calendart   timegmR    t   max(   R   t   requestR    t   cct
   cache_datat   respt   msgR2   t   nowR<   t   current_aget   resp_cct   freshness_lifetimeR>   t   expire_timet	   min_fresh(    (    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyt   cached_requestx   sv    




c         C   s   |  j  | j  } |  j j | |  j j |   } i  } | r t | j  } d | k rk | d | d <n  d | k r | d | d <q n  | S(   NR=   t   ETags   If-None-Matchs   last-modifieds   Last-Modifieds   If-Modified-Since(   R    R?   R   R@   R   R)   R   R2   (   R   RH   R    RK   t   new_headersR2   (    (    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyt   conditional_headers   s    !c         C   s  | p |  j  } | j | k r8 t j d | j |  d St | j  } | d k	 r d | k r | d j   r t | d  t	 |  k r d S|  j
 | j  } |  j
 |  } |  j | j  }	 t j d |	  t }
 d | k r t }
 t j d  n  d | k rt }
 t j d  n  |
 rT|  j j |	  rTt j d  |  j j |	  n  |
 r^d Sd	 | j d
 d  k rt j d  d S|  j rd | k rt j d  |  j j |	 |  j j | | d |  n | j d k rt j d  |  j j |	 |  j j | |   n d | k rd | k ru| d d k rut j d  |  j j |	 |  j j | | d |  qd | k r| d rt j d  |  j j |	 |  j j | | d |  qqn  d S(   sc   
        Algorithm for caching requests.

        This assumes a requests Response object.
        s   Status code %s not in %sNs   content-lengths&   Updating cache with response from "%s"s   no-stores   Response header has "no-store"s   Request header has "no-store"s0   Purging existing cache entry to honor "no-store"t   *t   varyR#   s   Response header has "Vary: *"R=   s   Caching due to etagt   bodyi-  s   Caching permanant redirectR<   s   max-agei    s'   Caching b/c date exists and max-age > 0R>   s   Caching b/c of expires header(   R   RB   R-   R.   R   R2   R
   t   isdigitR&   t   lenR;   R    R?   R(   R'   R   R)   RC   R   t   setR   t   dumps(   R   RH   t   responseRY   R   R   t   response_headerst   cc_reqRI   R    t   no_store(    (    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyt   cache_response   s^    	"%	"
	c            s   |  j  | j  } |  j j | |  j j |   } | s= | Sd g   | j j t   f d   | j j	   D   d | _
 |  j j | |  j j | |   | S(   s   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.
        s   content-lengthc         3   s3   |  ]) \ } } | j      k r | | f Vq d  S(   N(   R   (   t   .0t   kt   v(   t   excluded_headers(    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pys	   <genexpr>l  s   	i   (   R    R?   R   R@   R   R)   R2   t   updatet   dictt   itemsRB   R\   R]   (   R   RH   R^   R    t   cached_response(    (   Rf   s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyt   update_cached_responseR  s    !				"N(   R1   t
   __module__t   __doc__R
   R'   R   t   classmethodR   R    R;   RS   RV   Rb   Rk   (    (    (    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyR	      s   	6	o	[(   Rm   t   loggingt   reRE   RD   t   email.utilsR    t   pip._vendor.requests.structuresR   R   R   t	   serializeR   t	   getLoggerR1   R-   t   compileR   R   t   objectR	   (    (    (    s   /builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyt   <module>   s   		