Ë
    }D™jˆ  ã                   ó¬   — d Z ddlmZ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 dd	lmZ dd
lmZmZ ddlmZmZmZ  G d„ de«      Z G d„ de«      Zy)z¬DynamoDB cache backend. For usage details, see :ref:`Backends: DynamoDB <dynamodb>`.

.. automodsumm:: requests_cache.backends.dynamodb
   :classes-only:
   :nosignatures:
é    )ÚIterableÚOptionalN)ÚBinary)ÚServiceResource)ÚClientError)ÚVTé   )Úget_valid_kwargs)ÚSerializerTypeÚdynamodb_document_serializeré   )Ú	BaseCacheÚBaseStorageÚDictStoragec                   óZ   ‡ — e Zd ZdZ	 	 ddddddœdedededee   d	ed
ee   fˆ fd„Z	ˆ xZ
S )ÚDynamoDbCacheaR  DynamoDB cache backend.
    By default, responses are only partially serialized into a DynamoDB-compatible document format.

    Args:
        table_name: DynamoDB table name
        create_table: Whether or not to automatically create the dynamo backend table.
        connection: :boto3:`DynamoDB Resource <services/dynamodb/service-resource/index.html#service-resource>`
            object to use instead of creating a new one
        ttl: Use DynamoDB TTL to automatically remove expired items
        kwargs: Additional keyword arguments for :py:meth:`~boto3.session.Session.resource`
    TN)ÚttlÚ
connectionÚdecode_contentÚ
serializerÚ
table_nameÚcreate_tabler   r   r   r   c                ó†   •— t        ‰	| �  dd|i|¤Ž |rd|i|¥n|}t        |f||||dœ|¤Ž| _        t	        «       | _        y )NÚ
cache_namer   )r   r   r   r   © )ÚsuperÚ__init__ÚDynamoDbDictÚ	responsesr   Ú	redirects)
Úselfr   r   r   r   r   r   ÚkwargsÚskwargsÚ	__class__s
            €úl/var/www/html/Astrologybackend/backend/venv/lib/python3.12/site-packages/requests_cache/backends/dynamodb.pyr   zDynamoDbCache.__init__#   sb   ø€ ô 	‰ÑÑ9 JÐ9°&Ò9Ù:D�< Ð6¨vÑ6È&ˆÜ%Øð
à%ØØ!Ø)ñ
ð ñ
ˆŒô 1<³ˆ�ó    )Ú
http_cacheT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚboolr   r   r   r   Ú__classcell__©r$   s   @r%   r   r      sq   ø„ ñ
ð 'Ø!ð>ð
 Ø04Ø#Ø/3ò>àð>ð ð>ð
 ð>ð ˜_Ñ-ð>ð ð>ð ˜^Ñ,÷>ñ >r&   r   c                   ó¦   ‡ — e Zd ZdZdddefdedededee   dee	   f
ˆ fd	„Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdee   fd„Zd„ Zdefˆ fd„Zd„ Zˆ xZS )r   a  A dictionary-like interface for DynamoDB table

    Args:
        table_name: DynamoDB table name
        create_table: Whether or not to automatically create the dynamo backend table.
        connection: :boto3:`DynamoDB Resource <services/dynamodb/service-resource/index.html#service-resource>`
            object to use instead of creating a new one
        ttl: Use DynamoDB TTL to automatically remove expired items
        kwargs: Additional keyword arguments for :py:meth:`~boto3.session.Session.resource`
    TNr   r   r   r   r   c                 ól  •— t        ‰| �  dd|i|¤Ž t        t        j                  j                  |dg¬«      }|xs t        j
                  di |¤Ž| _        || _        || _        | j                  j                  | j                  «      | _
        |r| j                  «        |r| j                  «        y y )Nr   Úendpoint_url)Úextrasr   )Údynamodb)r   r   r
   Úboto3ÚSessionÚresourcer   r   r   ÚTableÚ_tableÚ_create_tableÚ_enable_ttl)	r!   r   r   r   r   r   r"   Úconnection_kwargsr$   s	           €r%   r   zDynamoDbDict.__init__H   sŸ   ø€ ô 	‰ÑÑ9 JÐ9°&Ò9Ü,Ü�M‰M×"Ñ" F°NÐ3Cô
Ðð %ÒW¬¯©Ñ(WÐEVÑ(WˆŒØ$ˆŒØˆŒà—o‘o×+Ñ+¨D¯O©OÓ<ˆŒÙØ×ÑÔ ÙØ×ÑÕð r&   c                 óô   — 	 | j                   j                  dddœg| j                  dddœgd¬«       | j                  j	                  «        y# t
        $ r }|j                  d   d	   d
k7  r‚ Y d}~yd}~ww xY w)z4Create a default table if one does not already existÚkeyÚS)ÚAttributeNameÚAttributeTypeÚHASH)r@   ÚKeyTypeÚPAY_PER_REQUEST)ÚAttributeDefinitionsÚ	TableNameÚ	KeySchemaÚBillingModeÚErrorÚCodeÚResourceInUseExceptionN)r   r   r   r9   Úwait_until_existsr   Úresponse©r!   Úes     r%   r:   zDynamoDbDict._create_table_   sˆ   € ð	Ø�O‰O×(Ñ(à&+¸cÑBð&ð Ÿ/™/à&+¸Ñ?ðð .ð )ô 	ð �K‰K×)Ñ)Õ+øäò 	Ø�z‰z˜'Ñ" 6Ñ*Ð.FÒFØô Gûð	ús   ‚AA Á	A7ÁA2Á2A7c                 óÚ   — 	 | j                   j                  j                  j                  | j                  dddœ¬«       y# t
        $ r }|j                  d   d   dk7  r‚ Y d}~yd}~ww xY w)	z"Enable TTL, if not already enabledr   T)r@   ÚEnabled)rF   ÚTimeToLiveSpecificationrI   rJ   ÚValidationExceptionN)r   ÚmetaÚclientÚupdate_time_to_liver   r   rM   rN   s     r%   r;   zDynamoDbDict._enable_ttlr   sk   € ð	Ø�O‰O× Ñ ×'Ñ'×;Ñ;ØŸ/™/Ø:?ÈDÑ(Qð <õ øô
 ò 	Ø�z‰z˜'Ñ" 6Ñ*Ð.CÒCØô Dûð	ús   ‚>A Á	A*Á
A%Á%A*c                 ó‚   — | j                   j                  d|i¬«      }d|vrt        ‚| j                  ||d   d   «      S )Nr>   ©ÚKeyÚItemÚvalue)r9   Úget_itemÚKeyErrorÚdeserialize)r!   r>   Úresults      r%   Ú__getitem__zDynamoDbDict.__getitem__~   sF   € Ø—‘×%Ñ%¨5°#¨,Ð%Ó7ˆØ˜ÑÜˆNØ×Ñ  V¨F¡^°GÑ%<Ó=Ð=r&   c                 ó´   — || j                  |«      dœ}| j                  rt        |dd «      r|j                  |d<   | j                  j                  |¬«       y )N)r>   r[   Úexpires_unixr   )rZ   )Ú	serializer   Úgetattrrb   r9   Úput_item)r!   r>   r[   Úitems       r%   Ú__setitem__zDynamoDbDict.__setitem__„   sM   € Ø T§^¡^°EÓ%:Ñ;ˆð �8Š8œ  ~°tÔ<Ø×,Ñ,ˆD�‰Kà�‰×Ñ $ÐÕ'r&   c                 óV   — | j                   j                  d|id¬«      }d|vrt        ‚y )Nr>   ÚALL_OLD)rY   ÚReturnValuesÚ
Attributes)r9   Údelete_itemr]   )r!   r>   rM   s      r%   Ú__delitem__zDynamoDbDict.__delitem__�   s1   € Ø—;‘;×*Ñ*°°s¨|È)Ð*ÓTˆØ˜xÑ'ÜˆNð (r&   c              #   ó¨   K  — dddidœ}	  | j                   j                  di |¤Ž}|d   D ]	  }|d   –— Œ |j                  d«      }|sy ||d<   ŒG­w)Nz#kr>   )ÚProjectionExpressionÚExpressionAttributeNamesÚItemsÚLastEvaluatedKeyÚExclusiveStartKeyr   )r9   ÚscanÚget©r!   Úscan_kwargsÚresultsrf   Úlast_keys        r%   Ú__iter__zDynamoDbDict.__iter__’   sz   è ø€ ð %)Ø)-¨u¨ñ
ˆð Ø&�d—k‘k×&Ñ&Ñ5¨Ñ5ˆGØ Ñ(ò "�Ø˜5‘kÓ!ð"à—{‘{Ð#5Ó6ˆHÙØØ/7ˆKÐ+Ñ,ð ùs   ‚AAc                 ó.   — | j                   j                  S )zÐGet the number of items in the table.

        **Note:** This is an estimate, and is updated every 6 hours. A full table scan will use up
        your provisioned throughput, so it's not recommended.
        )r9   Ú
item_count©r!   s    r%   Ú__len__zDynamoDbDict.__len__¡   s   € ð �{‰{×%Ñ%Ð%r&   Úkeysc                 óš   — | j                   j                  «       5 }|D ]  }|j                  d|i¬«       Œ 	 ddd«       y# 1 sw Y   yxY w)zLDelete multiple keys from the cache. Does not raise errors for missing keys.r>   rX   N)r9   Úbatch_writerrl   )r!   r   Úbatchr>   s       r%   Úbulk_deletezDynamoDbDict.bulk_delete©   sM   € à�[‰[×%Ñ%Ó'ð 	4¨5Øò 4�Ø×!Ñ! u¨c lÐ!Õ3ñ4÷	4÷ 	4ñ 	4ús   ›AÁA
c                 ó4   — | j                  d„ | D «       «       y )Nc              3   ó    K  — | ]  }|–— Œ y ­w)Nr   )Ú.0Úks     r%   ú	<genexpr>z%DynamoDbDict.clear.<locals>.<genexpr>°   s   è ø€ Ò* œ!Ñ*ùs   ‚)rƒ   r}   s    r%   ÚclearzDynamoDbDict.clear¯   s   € Ø×ÑÑ* TÔ*Õ+r&   r[   c                 ó`   •— t        |t        «      r|j                  n|}t        ‰| �  ||«      S )z.Handle Binary objects from a custom serializer)Ú
isinstancer   r[   r   r^   )r!   r>   r[   Úserialized_valuer$   s       €r%   r^   zDynamoDbDict.deserialize²   s+   ø€ ä*4°U¼FÔ*C˜5Ÿ;š;ÈÐÜ‰wÑ" 3Ð(8Ó9Ð9r&   c              #   óÄ   K  — i }	  | j                   j                  di |¤Ž}|d   D ]  }| j                  |d   |d   «      –— Œ |j                  d«      }|sy ||d<   ŒZ­w)Nrq   r>   r[   rr   rs   r   )r9   rt   r^   ru   rv   s        r%   ÚvalueszDynamoDbDict.values·   s}   è ø€ ØˆØØ&�d—k‘k×&Ñ&Ñ5¨Ñ5ˆGØ Ñ(ò C�Ø×&Ñ& t¨E¡{°D¸±MÓBÓBðCà—{‘{Ð#5Ó6ˆHÙØØ/7ˆKÐ+Ñ,ð ùs   ‚AA )r(   r)   r*   r+   r   r,   r-   r   r   r   r   r:   r;   r`   rg   rm   rz   r~   r   rƒ   r‰   r   r^   rŽ   r.   r/   s   @r%   r   r   <   sž   ø„ ñ	ð "ØØ04Ø/Kñàðð ðð ð	ð
 ˜_Ñ-ðð ˜^Ñ,õò.ò&
ò>ò(òò
8ò&ð4 ¨¡ó 4ò,ð: bõ :ö
	8r&   r   )r+   Útypingr   r   r5   Úboto3.dynamodb.typesr   Úboto3.resources.baser   Úbotocore.exceptionsr   Úrequests_cache.backends.baser   Ú_utilsr
   Úserializersr   r   Ú r   r   r   r   r   r   r&   r%   ú<module>r—      sE   ðñ÷ &ã Ý 'Ý 0Ý +å +å %ß Fß 1Ñ 1ô#>�Iô #>ôLD8�;õ D8r&   