
    Xf                         d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl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  G d de          Z G d de          ZdS )    N)datetime)	timedelta)Decimal)Optional)DynamoDBServiceResource)Flask)
want_bytes   )ServerSideSessionServerSideSessionInterface)Defaultsc                       e Zd ZdS )DynamoDBSessionN)__name__
__module____qualname__     S/var/www/piapp/venv/lib/python3.11/site-packages/flask_session/dynamodb/dynamodb.pyr   r      s        Dr   r   c                        e Zd ZdZeZej        ej        ej	        ej
        ej        ej        ej        fdedee         dededededed	ef fd
Zdedee         fdZdeddfdZdedededdfdZ xZS )DynamoDBSessionInterfaceao  A Session interface that uses dynamodb as backend. (`boto3` required)

    :param client: A ``DynamoDBServiceResource`` instance.
    :param key_prefix: A prefix that is added to all DynamoDB store keys.
    :param use_signer: Whether to sign the session id cookie or not.
    :param permanent: Whether to use permanent session or not.
    :param sid_length: The length of the generated session id in bytes.
    :param table_name: DynamoDB table name to store the session.

    .. versionadded:: 0.6
        The `sid_length` parameter was added.

    .. versionadded:: 0.2
        The `use_signer` parameter was added.
    appclient
key_prefix
use_signer	permanent
sid_lengthserialization_format
table_namec	                 N   |5t          j        dt          d           t          j        ddddd          }	 |                    d	d
dg|d	ddgd           |j        j                            d          	                    |           |j        j        
                    | j        ddd           n&# t          |j        j        j        j        f$ r Y nw xY w|| _        |                    |          | _        t#                                          ||||||           d S )NzjNo valid DynamoDBServiceResource instance provided, attempting to create a new instance on localhost:8000.   )
stackleveldynamodbzhttp://localhost:8000z	us-west-2dummy)endpoint_urlregion_nameaws_access_key_idaws_secret_access_keyidS)AttributeNameAttributeTypeHASH)r+   KeyTypePAY_PER_REQUEST)AttributeDefinitions	TableName	KeySchemaBillingModetable_exists)r1   T
expiration)Enabledr+   )r1   TimeToLiveSpecification)warningswarnRuntimeWarningboto3resourcecreate_tablemetar   
get_waiterwaitupdate_time_to_liver   AttributeError
exceptionsResourceInUseExceptionTablestoresuper__init__)
selfr   r   r   r   r   r   r   r   	__class__s
            r   rH   z!DynamoDBSessionInterface.__init__'   s    >M|   
 ^4'")&-  F	&*SAA& %&*v>> .   	 	 	 K)).99>>>TTTK22/#%1) ) 3      2 = TU 	 	 	D	 \\*--
 	
 	
 	
 	
 	
s   A=B8 8 CCstore_idreturnc                     | j                             d|i                              d          }|rAt          |                    d          j                  }| j                            |          S d S )Nr)   KeyItemval)rF   get_itemgetr	   value
serializerdecode)rI   rK   documentserialized_session_datas       r   _retrieve_session_dataz/DynamoDBSessionInterface._retrieve_session_datac   so    :&&D(+;&<<@@HH 	C&0e1D1D1J&K&K#?))*ABBBtr   Nc                 @    | j                             d|i           d S )Nr)   rN   )rF   delete_item)rI   rK   s     r   _delete_sessionz(DynamoDBSessionInterface._delete_sessionk   s&    
D(#344444r   session_lifetimesessionc           	          t          j                    |z   }| j                            |          }| j                            d|id|t          |                                          d           d S )Nr)   z#SET val = :value, expiration = :exp)z:valuez:exp)rO   UpdateExpressionExpressionAttributeValues)r   utcnowrU   encoderF   update_itemr   	timestamp)rI   r]   r^   rK   storage_expiration_datetimerX   s         r   _upsert_sessionz(DynamoDBSessionInterface._upsert_sessionn   s     '/o&7&7:J&J#"&/"8"8"A"A
h C1 ; E E G GHH' ' 	 		
 		
 		
 		
 		
r   )r   r   r   __doc__r   session_classr   SESSION_DYNAMODBSESSION_KEY_PREFIXSESSION_USE_SIGNERSESSION_PERMANENTSESSION_ID_LENGTHSESSION_SERIALIZATION_FORMATSESSION_DYNAMODB_TABLEr   r   r   strboolintrH   dictrY   r\   	TimeDeltar   rg   __classcell__)rJ   s   @r   r   r      sP          $M
 5=4M"5#6"4"4$,$I"9:
 :
:
 01:
 	:

 :
 :
 :
 ":
 :
 :
 :
 :
 :
 :
xs x~    5 5 5 5 5 5
 )
4E
QT
	
 
 
 
 
 
 
 
r   r   )r8   r   r   ru   decimalr   typingr   r;   $mypy_boto3_dynamodb.service_resourcer   flaskr   itsdangerousr	   baser   r   defaultsr   r   r   r   r   r   <module>r~      s)          + + + + + +              H H H H H H       # # # # # # @ @ @ @ @ @ @ @      	 	 	 	 	' 	 	 	j
 j
 j
 j
 j
9 j
 j
 j
 j
 j
r   