o
    Ëý°j:  ã                   @   sŽ   d dl Z d dlZd dlmZmZmZ d dlmZmZ dZddd„Z	dd„ Z
G d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    N)Ú
formatdateÚ	parsedateÚparsedate_tz)ÚdatetimeÚ	timedeltaz%a, %d %b %Y %H:%M:%S GMTc                 C   s   |pt  ¡ }||  S ©N)r   Úutcnow)ÚdeltaÚdate© r   ú–/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_vendor/cachecontrol/heuristics.pyÚexpire_after   s   r   c                 C   s   t t |  ¡ ¡ƒS r   )r   ÚcalendarÚtimegmÚ	timetuple)Údtr   r   r   Údatetime_to_header   s   r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBaseHeuristicc                 C   s   dS )a!  
        Return a valid 1xx warning header value describing the cache
        adjustments.

        The response is provided too allow warnings like 113
        http://tools.ietf.org/html/rfc7234#section-5.5.4 where we need
        to explicitly say response is over 24 hours old.
        z110 - "Response is Stale"r   ©ÚselfÚresponser   r   r   Úwarning   s   	zBaseHeuristic.warningc                 C   s   i S )zïUpdate the response headers with any new headers.

        NOTE: This SHOULD always include some Warning header to
              signify that the response was cached by the client, not
              by way of the provided headers.
        r   r   r   r   r   Úupdate_headers%   s   zBaseHeuristic.update_headersc                 C   s@   |   |¡}|r|j |¡ |  |¡}|d ur|j d|i¡ |S )NÚWarning)r   ÚheadersÚupdater   )r   r   Úupdated_headersÚwarning_header_valuer   r   r   Úapply.   s   

zBaseHeuristic.applyN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s    	r   c                   @   s   e Zd ZdZdd„ ZdS )ÚOneDayCachezM
    Cache the response by providing an expires 1 day in the
    future.
    c                 C   sR   i }d|j vr't|j d ƒ}ttdd�t|d d… Ž d�}t|ƒ|d< d|d< |S )	NÚexpiresr
   é   )Údaysé   )r
   Úpublicúcache-control)r   r   r   r   r   r   )r   r   r   r
   r#   r   r   r   r   @   s   
zOneDayCache.update_headersN)r   r    r!   Ú__doc__r   r   r   r   r   r"   :   s    r"   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚExpiresAfterz;
    Cache **all** requests for a defined time period.
    c                 K   s   t di |¤Ž| _d S )Nr   )r   r	   )r   Úkwr   r   r   Ú__init__P   s   zExpiresAfter.__init__c                 C   s   t | jƒ}t|ƒddœS )Nr'   )r#   r(   )r   r	   r   )r   r   r#   r   r   r   r   S   s   
zExpiresAfter.update_headersc                 C   s   d}|| j  S )Nz:110 - Automatically cached for %s. Response might be stale)r	   )r   r   Útmplr   r   r   r   W   s   
zExpiresAfter.warningN)r   r    r!   r)   r,   r   r   r   r   r   r   r*   K   s
    r*   c                   @   s(   e Zd ZdZh d£Zdd„ Zdd„ ZdS )ÚLastModifiedaÁ  
    If there is no Expires header already, fall back on Last-Modified
    using the heuristic from
    http://tools.ietf.org/html/rfc7234#section-4.2.2
    to calculate a reasonable value.

    Firefox also does something like this per
    https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ
    http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397
    Unlike mozilla we limit this to 24-hr.
    >   é,  é-  é”  é•  éš  éž  éõ  éÈ   éË   éÌ   éÎ   c           
      C   sâ   |j }d|v r	i S d|v r|d dkri S |j| jvri S d|vs%d|vr'i S t t|d ƒ¡}t|d ƒ}|d u s>|d u r@i S t ¡ }td|| ƒ}|t |¡ }tdt	|d dƒƒ}||krbi S || }	dt 
tt |	¡¡iS )	Nr#   r(   r'   r
   zlast-modifiedr   é
   i€Q )r   ÚstatusÚcacheable_by_default_statusesr   r   r   r   ÚtimeÚmaxÚminÚstrftimeÚTIME_FMTÚgmtime)
r   Úrespr   r
   Úlast_modifiedÚnowÚcurrent_ager	   Úfreshness_lifetimer#   r   r   r   r   l   s*   zLastModified.update_headersc                 C   s   d S r   r   )r   rC   r   r   r   r   Š   s   zLastModified.warningN)r   r    r!   r)   r<   r   r   r   r   r   r   r.   \   s
    r.   r   )r   r=   Úemail.utilsr   r   r   r   r   rA   r   r   Úobjectr   r"   r*   r.   r   r   r   r   Ú<module>   s   
"