o
    /=j  ã                   @  sÄ   d dl mZ d dlZd dlZd dlmZmZmZ d dlmZm	Z	m
Z
 d dlmZmZmZ er4d dlmZ dZdddd„Zddd„ZG dd„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    )ÚannotationsN)ÚdatetimeÚ	timedeltaÚtimezone)Ú
formatdateÚ	parsedateÚparsedate_tz)ÚTYPE_CHECKINGÚAnyÚMapping)ÚHTTPResponsez%a, %d %b %Y %H:%M:%S GMTÚdeltar   Údateúdatetime | NoneÚreturnr   c                 C  s   |pt  tj¡}||  S ©N)r   Únowr   Úutc)r   r   © r   úaC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\cachecontrol/heuristics.pyÚexpire_after   s   r   ÚdtÚstrc                 C  s   t t |  ¡ ¡ƒS r   )r   ÚcalendarÚtimegmÚ	timetuple)r   r   r   r   Údatetime_to_header   s   r   c                   @  s*   e Zd Zddd„Zddd	„Zdd
d„ZdS )ÚBaseHeuristicÚresponser   r   ú
str | Nonec                 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"Nr   ©Úselfr   r   r   r   Úwarning   s   	zBaseHeuristic.warningúdict[str, str]c                 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.
        Nr   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   Úapply0   s   

zBaseHeuristic.applyN©r   r   r   r   ©r   r   r   r#   )r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r"   r$   r(   r   r   r   r   r      s    

	r   c                   @  s   e Zd ZdZd	dd„ZdS )
ÚOneDayCachezM
    Cache the response by providing an expires 1 day in the
    future.
    r   r   r   r#   c                 C  sZ   i }d|j vr+t|j d ƒ}ttdd�t|d d… dtjiŽd�}t|ƒ|d< d|d	< |S )
NÚexpiresr   é   )Údaysé   Útzinfo)r   Úpublicúcache-control)r&   r   r   r   r   r   r   r   )r!   r   r&   r   r/   r   r   r   r$   B   s   
þzOneDayCache.update_headersNr*   )r+   r,   r-   Ú__doc__r$   r   r   r   r   r.   <   s    r.   c                   @  s.   e Zd ZdZddd„Zddd„Zddd„ZdS )ÚExpiresAfterz;
    Cache **all** requests for a defined time period.
    Úkwr
   r   ÚNonec                 K  s   t di |¤Ž| _d S )Nr   )r   r   )r!   r8   r   r   r   Ú__init__U   s   zExpiresAfter.__init__r   r   r#   c                 C  s   t | jƒ}t|ƒddœS )Nr4   )r/   r5   )r   r   r   )r!   r   r/   r   r   r   r$   X   s   
zExpiresAfter.update_headersr   c                 C  s   d}|| j  S )Nz:110 - Automatically cached for %s. Response might be stale)r   )r!   r   Útmplr   r   r   r"   \   s   
zExpiresAfter.warningN)r8   r
   r   r9   r*   r)   )r+   r,   r-   r6   r:   r$   r"   r   r   r   r   r7   P   s
    

r7   c                   @  s,   e Zd ZdZh d£Zddd„Zd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ž  Úrespr   r   r#   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|d ƒ}|d us3J ‚t |d d… ¡}t|d ƒ}|d u rHi S t ¡ }td|| ƒ}|t |¡ }tdt	|d d	ƒƒ}	|	|krji S ||	 }
dt 
tt |
¡¡iS )
Nr/   r5   r4   r   zlast-modifiedr2   r   é
   i€Q )r&   ÚstatusÚcacheable_by_default_statusesr   r   r   r   ÚtimeÚmaxÚminÚstrftimeÚTIME_FMTÚgmtime)r!   rA   r&   Z
time_tupler   Zlast_modifiedr   Úcurrent_ager   Úfreshness_lifetimer/   r   r   r   r$   |   s.   zLastModified.update_headersr   c                 C  s   d S r   r   )r!   rA   r   r   r   r"   œ   s   zLastModified.warningN)rA   r   r   r#   )rA   r   r   r   )r+   r,   r-   r6   rD   r$   r"   r   r   r   r   r<   a   s
    
 r<   r   )r   r   r   r   r   r   )r   r   r   r   )Ú
__future__r   r   rE   r   r   r   Úemail.utilsr   r   r   Útypingr	   r
   r   Úurllib3r   rI   r   r   r   r.   r7   r<   r   r   r   r   Ú<module>   s   
!