
    hX                     V    d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	  G d de	      Z
y)    N)OptionalTuple)AioBaseClient)get_session)Backendc            	           e Zd ZdZddedee   ddfdZddZddZd	ede	e
ef   fd
Zd	edefdZdd	ededee
   ddfdZddee   d	ee   de
fdZy)DynamoBackenda  
    Amazon DynamoDB backend provider

    This backend requires an existing table within your AWS environment to be passed during
    backend init. If ttl is going to be used, this needs to be manually enabled on the table
    using the `ttl` key. Dynamo will take care of deleting outdated objects, but this is not
    instant so don't be alarmed when they linger around for a bit.

    As with all AWS clients, credentials will be taken from the environment. Check the AWS SDK
    for more information.

    Usage:
        >> dynamodb = DynamoBackend(table_name="your-cache", region="eu-west-1")
        >> await dynamodb.init()
        >> FastAPICache.init(dynamodb)
    N
table_nameregionreturnc                 L    t               | _        d | _        || _        || _        y N)r   sessionclientr
   r   )selfr
   r   s      j/var/www/html/retail-simulation-api/retail/lib/python3.12/site-packages/fastapi_cache/backends/dynamodb.py__init__zDynamoBackend.__init__   s     "}/3$    c                    K   | j                   j                  d| j                        j                          d {   | _        y 7 
w)Ndynamodb)region_name)r   create_clientr   
__aenter__r   r   s    r   initzDynamoBackend.init"   s;      LL66DKK 7 

*, s   9AAAc                 d   K   | j                   j                  d d d        d {   | _         y 7 
wr   )r   	__aexit__r   s    r   closezDynamoBackend.close'   s&      KK11$dCCCs   !0.0keyc                   K   | j                   j                  | j                  dd|ii       d {   }d|v r|d   j                  di       j                  d      }|d   j                  di       j                  d      }|sd|fS t	        |      t	        t
        j
                  j                         j                               z
  }|d	kD  r||fS y
7 w)Nr   S	TableNameKeyItemvaluettlNr   )r   N)r   get_itemr
   getintdatetimenow	timestamp)r   r   responser&   r'   expires         r   get_with_ttlzDynamoBackend.get_with_ttl*   s     --eVY[^U_M`-aaXV$(("599#>E6"&&ub155c:C5y  XH$5$5$9$9$;$E$E$G HHFzu}$ bs   /CCB"Cc                    K   | j                   j                  | j                  dd|ii       d {   }d|v r$|d   j                  di       j                  d      S y 7 -w)Nr   r!   r"   r%   r&   )r   r*   r
   r+   )r   r   r0   s      r   r+   zDynamoBackend.get;   sh     --eVY[^U_M`-aaXF#''488==  bs   /A!A.A!r&   r1   c           
      >  K   |rYddt        t        t        j                  j                         t        j                  |      z   j                                     iini }| j                  j                  | j                  i d|id|id|       d {    y 7 w)Nr'   r(   )secondsr!   )r   r&   )r#   r%   )	strr,   r-   r.   	timedeltar/   r   put_itemr
   )r   r   r&   r1   r'   s        r   setzDynamoBackend.set@   s        ( 1 1 5 5 7(:L:LU[:\ \'ik
  	  kk""oo:!5\
  # 	
 		
 		
s   BBBB	namespacec                    K   t         wr   )NotImplementedError)r   r:   r   s      r   clearzDynamoBackend.clear\   s     !!s   	r   )r   N)NN)__name__
__module____qualname____doc__r6   r   r   r   r   r   r,   r2   r+   r9   r=    r   r   r	   r	   
   s    "3   
Dc eCHo ">S >S >

S 
 
hsm 
t 
8"Xc] " "Y\ "r   r	   )r-   typingr   r   aiobotocore.clientr   aiobotocore.sessionr   fastapi_cache.backendsr   r	   rB   r   r   <module>rG      s"     " , + *S"G S"r   