
    &ge                        S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	J
r
Jr  SSKJr  \	(       a  SSKJrJr  SS	 jrSS
 jr " S S5      rg)z%Utilities for caching OCSP responses.    )annotations)
namedtuple)datetime)timezone)TYPE_CHECKINGAnyOptional)_create_lock)OCSPRequestOCSPResponsec                T    [        U S5      (       a  U R                  $ U R                  $ )z7Compat helper to return the response's next_update_utc.next_update_utc)hasattrr   next_updatevalues    WC:\Suresh\moveshuttle\MDcreated\moveengine\venv\Lib\site-packages\pymongo/ocsp_cache.py_next_updater      *     u'(($$$    c                T    [        U S5      (       a  U R                  $ U R                  $ )z7Compat helper to return the response's this_update_utc.this_update_utc)r   r   this_updater   s    r   _this_updater   &   r   r   c                  V    \ rS rSrSr\" S/ SQ5      rSS jrSS jrSS jr	SS jr
S	rg
)
_OCSPCache.   zA cache for OCSP responses.OcspResponseCacheKeyhash_algorithmissuer_name_hashissuer_key_hashserial_numberc                0    0 U l         [        5       U l        g )N)_datar
   _lock)selfs    r   __init___OCSPCache.__init__6   s    .0
!^
r   c                    U R                  UR                  R                  R                  5       UR                  UR
                  UR                  S9$ )Nr   )CACHE_KEY_TYPEr    namelowerr!   r"   r#   )r'   ocsp_requests     r   _get_cache_key_OCSPCache._get_cache_key;   sM    ""'66;;AAC)::(88&44	 # 
 	
r   c                f   U R                      U R                  U5      n[        U5      nUc&  U R                  R	                  US5         SSS5        g[        U5      nUc
   SSS5        g[        R                  " [        R                  S9nUR                  c  UR                  SS9nXVs=::  a  U:  d  O   SSS5        gU R                  R                  US5      nUc  X R                  U'    SSS5        g[        U5      nUb  X:  a  X R                  U'   SSS5        g! , (       d  f       g= f)zAdd/update a cache entry.

'key' is of type cryptography.x509.ocsp.OCSPRequest
'value' is of type cryptography.x509.ocsp.OCSPResponse

Validity of the OCSP response must be checked by caller.
Ntztzinfo)r&   r/   r   r%   popr   	_datetimenowr   utcr5   replaceget)	r'   keyr   	cache_keyr   r   r8   cached_valuecached_next_updates	            r   __setitem___OCSPCache.__setitem__C   s    ZZ++C0I
 'u-K"

y$/ Z 'u-K" Z --8<<0C!!)kkk.44) Z0  ::>>)T:L#(-

9%7 Z8 ".l!;!-2D2R(-

9%= ZZs$   =D"D"+AD".D"8!D""
D0c                   U R                      U R                  U5      nU R                  U   n[        U5      n[	        U5      nUc   eUc   e[
        R                  " [        R                  S9nUR                  c  UR                  SS9nXFs=::  a  U:  a  O  OUsSSS5        $ U R                  R                  US5        [        U5      e! , (       d  f       g= f)zGet a cache entry if it exists.

'item' is of type cryptography.x509.ocsp.OCSPRequest

Raises KeyError if the item is not in the cache.
Nr2   r4   )r&   r/   r%   r   r   r7   r8   r   r9   r5   r:   r6   KeyError)r'   itemr=   r   r   r   r8   s          r   __getitem___OCSPCache.__getitem__k   s     ZZ++D1IJJy)E 'u-K&u-K******--8<<0C!!)kkk./K/ Z  JJNN9d+9%%# Zs   BC&'C
C)r%   r&   N)returnNone)r.   r   rG   r+   )r<   r   r   r   rG   rH   )rD   r   rG   r   )__name__
__module____qualname____firstlineno____doc__r   r+   r(   r/   r@   rE   __static_attributes__ r   r   r   r   .   s*    %RN
$

&.P&r   r   N)r   r   rG   zOptional[_datetime])rM   
__future__r   collectionsr   r   r7   r   typingr   r   r	   pymongo.lockr
   cryptography.x509.ocspr   r   r   r   r   rO   r   r   <module>rU      s;    , " " *  / / %@U& U&r   