
    ՟f                         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y)    N)datetime)	timedelta)Decimal)Optional)DynamoDBServiceResource)Flask)
want_bytes   )ServerSideSessionServerSideSessionInterface)Defaultsc                       e Zd Zy)DynamoDBSessionN)__name__
__module____qualname__     Z/var/www/cvtools/html/venv/lib/python3.12/site-packages/flask_session/dynamodb/dynamodb.pyr   r      s    r   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	                 X   |6t        j                  dt        d       t        j                  ddddd      }	 |j                  d	d
dg|d	ddgd       |j                  j                  j                  d      j                  |       |j                  j                  j                  | j                  ddd       || _        |j                  |      | _        t"        	| I  ||||||       y # t        |j                  j                  j                  j                  f$ r Y gw xY w)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__'   s8    >MM|
 ^^4'")&-F	&*SA& %&*v> .   	 KK)).9>>>TKK22//#%1) 3  \\*-
 	
  2 2 = = T TU 		s   BC3 33D)(D)store_idreturnc                     | j                   j                  d|i      j                  d      }|r?t        |j                  d      j                        }| j
                  j                  |      S y )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   s_    ::&&D(+;&<@@H&0e1D1J1J&K#??))*ABBr   Nc                 @    | j                   j                  d|i       y )Nr)   rN   )rF   delete_item)rI   rK   s     r   _delete_sessionz(DynamoDBSessionInterface._delete_sessionk   s    

D(#34r   session_lifetimesessionc           	          t        j                         |z   }| j                  j                  |      }| j                  j                  d|id|t        |j                               d       y )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   sm     '/oo&7:J&J#"&//"8"8"A

h C1 ; E E G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      s      $M
 5=4M4M"55#66"44"44$,$I$I"99:
:
 01:
 	:

 :
 :
 :
 ":
 :
xs x~ 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~      sB      +    H  # @ 	' 	j
9 j
r   