a
    hbòf:  ã                   @   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   ú`/home/httpd/docs/test/DocsMgr/lib/python3.9/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   Zupdated_headersZ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rNt|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 f i |¤Ž| _d S r   )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.
    >   éÈ   éË   éÌ   i,  éÎ   i-  i”  i•  iõ  iš  iž  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sJd|vrNi S t t|d ƒ¡}t|d ƒ}|d u s||d u r€i S t ¡ }td|| ƒ}|t |¡ }tdt	|d dƒƒ}||krÄi 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
   Zlast_modifiedÚnowÚcurrent_ager	   Úfreshness_lifetimer!   r   r   r   r   l   s*    zLastModified.update_headersc                 C   s   d S r   r   )r   r:   r   r   r   r   Š   s    zLastModified.warningN)r   r   r   r'   r3   r   r   r   r   r   r   r,   \   s   r,   )N)r   r4   Úemail.utilsr   r   r   r   r   r8   r   r   Úobjectr   r    r(   r,   r   r   r   r   Ú<module>   s   
"