
    [j                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZ e	rddlmZmZ  G d	 d
          ZdS )z%Utilities for caching OCSP responses.    )annotations)
namedtuple)datetime)timezone)TYPE_CHECKINGAny)_create_lock)OCSPRequestOCSPResponsec                  N    e Zd ZdZ edg d          ZddZdd
ZddZddZ	dS )
_OCSPCachezA cache for OCSP responses.OcspResponseCacheKeyhash_algorithmissuer_name_hashissuer_key_hashserial_numberreturnNonec                :    i | _         t                      | _        d S )N)_datar	   _lock)selfs    V/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/pymongo/ocsp_cache.py__init__z_OCSPCache.__init__&   s    .0
!^^


    ocsp_requestr
   CACHE_KEY_TYPEc                    |                      |j        j                                        |j        |j        |j                  S )Nr   )r   r   namelowerr   r   r   )r   r   s     r   _get_cache_keyz_OCSPCache._get_cache_key+   sF    ""'6;AACC):(8&4	 # 
 
 	
r   keyvaluer   c                   | j         5  |                     |          }|j        )| j                            |d           	 ddd           dS |j        t          j        t          j	                  
                    d          cxk    r|j        k     sn 	 ddd           dS | j                            |d          }||j        |j        |j        k     r
|| j        |<   ddd           dS # 1 swxY w Y   dS )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"   next_updater   popthis_update	_datetimenowr   utcreplaceget)r   r#   r$   	cache_keycached_values        r   __setitem__z_OCSPCache.__setitem__3   s    Z 	. 	.++C00I
  (
y$///	. 	. 	. 	. 	. 	. 	. 	. !=HL111999FF$ $ $ $#$ $ $ $ !	. 	. 	. 	. 	. 	. 	. 	.(  :>>)T::L#(4 ,u/@@@(-
9%3	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   9C1AC1&>C11C58C5itemc                   | j         5  |                     |          }| j        |         }|j        J |j        J |j        t          j        t          j                  	                    d          cxk    r|j        k     rn n|cddd           S | j        
                    |d           t          |          # 1 swxY w Y   dS )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.
        Nr&   r(   )r   r"   r   r,   r*   r-   r.   r   r/   r0   r+   KeyError)r   r5   r2   r$   s       r   __getitem__z_OCSPCache.__getitem__V   s6    Z 	& 	&++D11IJy)E $000$000!=HL111999FF$ $ $ $#$ $ $ $ $ 	& 	& 	& 	& 	& 	& 	& 	& JNN9d+++9%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   BC *C  CCN)r   r   )r   r
   r   r   )r#   r
   r$   r   r   r   )r5   r
   r   r   )
__name__
__module____qualname____doc__r   r   r   r"   r4   r8    r   r   r   r      s        %%ZRRR N
$ $ $ $

 
 
 
!. !. !. !.F& & & & & &r   r   N)r<   
__future__r   collectionsr   r   r-   r   typingr   r   pymongo.lockr	   cryptography.x509.ocspr
   r   r   r=   r   r   <module>rC      s    , + " " " " " " " " " " " " * * * * * *       % % % % % % % % % % % % % % A@@@@@@@@N& N& N& N& N& N& N& N& N& N&r   