zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
U
H=®dE7ã@s„dZddlZddlZddlZddlZddlmZddlmZddl    m
Z
ddl m Z e  e¡Ze d¡Zd    d
„ZGd d „d eƒZdS) z7
The httplib2 algorithms ported for use with requests.
éN)Ú parsedate_tz)ÚCaseInsensitiveDicté)Ú    DictCache)Ú
Serializerz9^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?cCs0t |¡ ¡}|d|d|d|d|dfS)z‡Parses a URI using the regex given in Appendix B of RFC 3986.
 
        (scheme, authority, path, query, fragment) = parse_uri(uri)
    réééé)ÚURIÚmatchÚgroups)Úurir ©rúZD:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\pip/_vendor/cachecontrol/controller.pyÚ    parse_urisrc@s\eZdZdZddd„Zedd„ƒZedd    „ƒZd
d „Zd d „Z    dd„Z
ddd„Z dd„Z dS)ÚCacheControllerz9An interface to see if request should cached or not.
    NTcCs4|dkrtƒn||_||_|p"tƒ|_|p,d|_dS)N)éÈéËi,é-)rÚcacheÚ cache_etagsrÚ
serializerÚcacheable_status_codes)ÚselfrrrÚ status_codesrrrÚ__init__"s zCacheController.__init__c    Csht|ƒ\}}}}}|r|s&td|ƒ‚| ¡}| ¡}|s>d}|rPd ||g¡pR|}|d||}|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_urirrrÚ_urlnorm*s zCacheController._urlnormcCs
| |¡S©N)r*)r"rrrrÚ    cache_url>szCacheController.cache_urlc
Cs(tdftdftdfddddddddtdfdœ }| d| dd¡¡}i}| d¡D]Ò}| ¡s^qP| d    d
¡}|d  ¡}z||\}}    Wn$tk
rªt d |¡YqPYnX|r´|    s¼d||<|rPz||d
 ¡ƒ||<WqPtk
rü|    røt d |¡YqPtk
r t d||j    ¡YqPXqP|S)NTF)NF) úmax-agez    max-staleú    min-freshúno-cacheúno-storez no-transformzonly-if-cachedzmust-revalidateÚpublicÚprivatezproxy-revalidatezs-maxagez cache-controlz Cache-ControlÚú,ú=rrz,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__)
rÚheadersÚknown_directivesÚ
cc_headersÚretvalÚ cc_directiveÚpartsÚ    directiveÚtypÚrequiredrrrÚparse_cache_controlBsVó   
þý z#CacheController.parse_cache_controlcCs0| |j¡}t d|¡| |j¡}d|kr:t d¡dSd|kr\|ddkr\t d¡dS|j |¡}|dkr~t d    ¡dS|j     ||¡}|sžt 
d
¡dS|j d krºd }t |¡|St |jƒ}|rÐd |krüd|krît d¡|j  |¡t d¡dSt ¡}t t|d ƒ¡}    td||    ƒ}
t d|
¡| |¡} d} d| kr^| d} t d| ¡nDd|kr¢t|dƒ} | dk    r¢t | ¡|    }td|ƒ} t d| ¡d|krÀ|d} t d| ¡d|kræ|d}|
|7}
t d|
¡| |
kr t d¡t d| |
¡|Sd|kr,t d¡|j  |¡dS)ze
        Return a cached response if it exists in the cache, otherwise
        return False.
        zLooking up "%s" in the cacher/z-Request header has "no-cache", cache bypassedFr-rz1Request header has "max_age" as 0, cache bypassedNzNo cache entry availablez1Cache entry deserialization failed, entry ignoredrzVReturning cached "301 Moved Permanently" response (ignoring date and etag information)ÚdateÚetagz(Purging cached response: no date or etagz!Ignoring cached response: no datezCurrent age based on date: %iz#Freshness lifetime from max-age: %iÚexpiresz#Freshness lifetime from expires: %iz+Freshness lifetime from request max-age: %ir.z'Adjusted current age from min-fresh: %iz2The response is "fresh", returning cached responsez%i > %iz4The cached response is "stale" with no etag, purging)r,Úurlr;r<rIr@rr7rÚloadsÚwarningÚstatusrÚdeleteÚtimeÚcalendarÚtimegmrÚmax)rÚrequestr,ÚccÚ
cache_dataÚrespÚmsgr@ÚnowrJÚ current_ageÚresp_ccÚfreshness_lifetimerLÚ expire_timeÚ    min_freshrrrÚcached_requestxs|   
 
 
 
 
 
ÿ
 
 
 
 
 
 
 
 
 
ÿ
 
 
 
 
 zCacheController.cached_requestcCs`| |j¡}|j ||j |¡¡}i}|r\t|jƒ}d|krH|d|d<d|kr\|d|d<|S)NrKÚETagz If-None-Matchz last-modifiedz Last-ModifiedzIf-Modified-Since)r,rMrrNrr7rr@)rrVr,rYÚ new_headersr@rrrÚconditional_headersçs 
  z#CacheController.conditional_headersc Cs|p|j}|j|kr(t d|j|¡dSt|jƒ}|dk    rfd|krf|d ¡rft|dƒt|ƒkrfdS|     |j¡}|     |¡}| 
|j ¡}    t d|    ¡d}
d|kr®d}
t d¡d|krÄd}
t d    ¡|
rê|j   |    ¡rêt d
¡|j  |    ¡|
ròdSd |  d d ¡krt d¡dS|jrLd|krLt d¡|j  |    |jj|||d¡n´|jdkr|t d¡|j  |    |j ||¡¡n„d|krd|krÆ|ddkrÆt d¡|j  |    |jj|||d¡n:d|kr|drt d¡|j  |    |jj|||d¡dS)zc
        Algorithm for caching requests.
 
        This assumes a requests Response object.
        zStatus code %s not in %sNúcontent-lengthz&Updating cache with response from "%s"Fr0TzResponse header has "no-store"zRequest header has "no-store"z0Purging existing cache entry to honor "no-store"Ú*Úvaryr3zResponse header has "Vary: *"rKzCaching due to etag)ÚbodyrzCaching permanant redirectrJr-rz'Caching b/c date exists and max-age > 0rLzCaching b/c of expires header)rrPr;r<rr@Úisdigitr6ÚlenrIr,rMrr7rQrÚsetrÚdumps) rrVÚresponserhrrÚresponse_headersÚcc_reqrWr,Úno_storerrrÚcache_response÷sx
 
ÿ
ÿþ
ýü 
 
 
 
 
 
ÿ 
 
 
ÿ
 
 
ÿzCacheController.cache_responsecsv| |j¡}|j ||j |¡¡}|s*|Sdg‰|j t‡fdd„|j     ¡Dƒƒ¡d|_
|j  ||j  ||¡¡|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.
        rec3s&|]\}}| ¡ˆkr||fVqdSr+)r )Ú.0ÚkÚv©Úexcluded_headersrrÚ    <genexpr>ks þz9CacheController.update_cached_response.<locals>.<genexpr>r) r,rMrrNrr7r@ÚupdateÚdictÚitemsrPrkrl)rrVrmr,Úcached_responserrurÚupdate_cached_responseRs      þÿ    z&CacheController.update_cached_response)NTNN)NN) r?Ú
__module__Ú __qualname__Ú__doc__rÚ classmethodr*r,rIrardrqr|rrrrrsÿ
 
 
6o
[r)rÚloggingÚrerSrRÚ email.utilsrZpip._vendor.requests.structuresrrrÚ    serializerÚ    getLoggerr?r;Úcompiler rÚobjectrrrrrÚ<module>s