o
    ;h                     @   s   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 deZG dd deZdS )    N)datetime)	timedelta)Decimal)Optional)DynamoDBServiceResource)Flask)
want_bytes   )ServerSideSessionServerSideSessionInterface)Defaultsc                   @   s   e Zd ZdS )DynamoDBSessionN)__name__
__module____qualname__ r   r   R/var/www/html/venv/lib/python3.10/site-packages/flask_session/dynamodb/dynamodb.pyr      s    r   c                       s   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
dZdedee fddZdeddfddZdedededdfddZ  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	           	   	      s   |d u rt jdtdd tjdddddd}z+|jd	d
dg|d	ddgdd |jjdj	|d |jjj
| jdddd W n t|jjjjfyP   Y nw || _||| _t |||||| d S )NzjNo valid DynamoDBServiceResource instance provided, attempting to create a new instance on localhost:8000.   )
stacklevelZdynamodbzhttp://localhost:8000z	us-west-2dummy)Zendpoint_urlZregion_nameZaws_access_key_idZaws_secret_access_keyidS)AttributeNameZAttributeTypeHASH)r!   ZKeyTypeZPAY_PER_REQUEST)ZAttributeDefinitions	TableNameZ	KeySchemaZBillingModeZtable_exists)r#   TZ
expiration)ZEnabledr!   )r#   ZTimeToLiveSpecification)warningswarnRuntimeWarningboto3resourceZcreate_tablemetar   Z
get_waiterwaitZupdate_time_to_liver   AttributeError
exceptionsZResourceInUseExceptionTablestoresuper__init__)	selfr   r   r   r   r   r   r   r   	__class__r   r   r0   '   sT   

z!DynamoDBSessionInterface.__init__store_idreturnc                 C   s<   | j jd|idd}|rt|dj}| j|S d S )Nr   KeyZItemval)r.   Zget_itemgetr   value
serializerdecode)r1   r4   Zdocumentserialized_session_datar   r   r   _retrieve_session_datac   s
   z/DynamoDBSessionInterface._retrieve_session_dataNc                 C   s   | j jd|id d S )Nr   r6   )r.   Zdelete_item)r1   r4   r   r   r   _delete_sessionk   s   z(DynamoDBSessionInterface._delete_sessionsession_lifetimesessionc                 C   s@   t  | }| j|}| jjd|id|t| dd d S )Nr   z#SET val = :value, expiration = :exp)z:valuez:exp)r7   ZUpdateExpressionZExpressionAttributeValues)r   utcnowr;   encoder.   Zupdate_itemr   	timestamp)r1   r@   rA   r4   Zstorage_expiration_datetimer=   r   r   r   _upsert_sessionn   s   

z(DynamoDBSessionInterface._upsert_session)r   r   r   __doc__r   Zsession_classr   ZSESSION_DYNAMODBZSESSION_KEY_PREFIXZSESSION_USE_SIGNERZSESSION_PERMANENTZSESSION_ID_LENGTHZSESSION_SERIALIZATION_FORMATZSESSION_DYNAMODB_TABLEr   r   r   strboolintr0   dictr>   r?   	TimeDeltar
   rE   __classcell__r   r   r2   r   r      sL    	<r   )r$   r   r   rK   decimalr   typingr   r'   Z$mypy_boto3_dynamodb.service_resourcer   Zflaskr   Zitsdangerousr   baser
   r   defaultsr   r   r   r   r   r   r   <module>   s    