
    KiF                     2   d dl Z d dlmZ d dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d d	lmZmZmZ  ed
       G d d             Zedeeef   defd       Zededeeef   fd       Zededeeef   fd       Zdeeef   defdZy)    N)Mapping)	dataclassfielddatetime)AnySupportsFloat)Self)DeserializationErrorSerializationError)bear_enforce)nownow_plus
seconds_toT)kw_onlyc            
       B   e Zd ZU dZeeef   ed<    ed      Z	e
dz  ed<    ed      Ze
dz  ed<   edefd       Zededz  fd	       Zedefd
       Zedeeef   fd       Zededz  fd       Zededz  fd       Zedddeeef   de
dz  dedefd       Zy)ManagedEntryaH  A managed cache entry containing value data and TTL metadata.

    The entry supports either TTL seconds or absolute expiration datetime. On init:
    - If `ttl` is provided but `expires_at` is not, an `expires_at` will be computed.
    - If `expires_at` is provided but `ttl` is not, a live TTL will be computed on access.
    valueN)default
created_at
expires_atreturnc                 J    | j                   y| j                   t               k  S )NF)r   r   selfs    p/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/key_value/shared/utils/managed_entry.py
is_expiredzManagedEntry.is_expired   s     ??"#%''    c                 H    | j                   y t        | j                         S )Nr   )r   r   r   s    r   ttlzManagedEntry.ttl"   s    ??"4??33r   c                 .    t        | j                        S )z"Return the value as a JSON string.obj)dump_to_jsonvalue_as_dictr   s    r   value_as_jsonzManagedEntry.value_as_json(   s      2 233r   c                 .    t        | j                        S )Nr"   )verify_dictr   r   s    r   r%   zManagedEntry.value_as_dict-   s    tzz**r   c                 R    | j                   r| j                   j                         S d S N)r   	isoformatr   s    r   created_at_isoformatz!ManagedEntry.created_at_isoformat1        .2oot((*G4Gr   c                 R    | j                   r| j                   j                         S d S r*   )r   r+   r   s    r   expires_at_isoformatz!ManagedEntry.expires_at_isoformat5   r-   r   )r   r    c          	      P     | |||rt        t        |                  S d       S )N)seconds)r   r   r   )r   float)clsr   r   r    s       r   from_ttlzManagedEntry.from_ttl9   s4    !8;s4
 	
 BF
 	
r   )__name__
__module____qualname____doc__r   strr   __annotations__r   r   r   r   propertyboolr   r2   r    r&   dictr%   r,   r/   classmethodr	   r
   r4    r   r   r   r      s:    38"'"5J45"'"5J45(D ( (
 4UT\ 4 4
 4s 4 4 +tCH~ + + HcDj H H HcDj H H QU 
S 1 
x$ 
\i 
nr 
 
r   r   r#   r   c                     	 t        j                  | d      S # t         j                  t        f$ r}d| }t	        |      |d }~ww xY w)NT)	sort_keysz$Failed to serialize object to JSON: )jsondumpsJSONDecodeError	TypeErrorr   )r#   emsgs      r   r$   r$   B   sL    -zz#..  ), -9!= %1,-s    AAAjson_strc                     	 t        t        j                  |             S # t        j                  t        f$ r}d| }t        |      |d }~ww xY w)Nr"   z#Failed to deserialize JSON string: )r(   rB   loadsrD   rE   r   )rH   rF   rG   s      r   load_from_jsonrK   K   sO    /tzz(344  ), /8<"3'Q./s   ! AAAc                     t        | t              sd}t        |      t        d | D              sd}t        |      t	        |       S )NzObject is not a Mappingc              3   <   K   | ]  }t        |t                y wr*   )
isinstancer9   ).0keys     r   	<genexpr>zverify_dict.<locals>.<genexpr>[   s     3z#s#3s   zObject contains non-string keys)rN   r   rE   allr=   )r#   rG   s     r   r(   r(   U   sB    c7#'n3s33/n9r   r   c                 >    t        t        t        |                   S )a  Estimate the serialized size of a value without creating a ManagedEntry.

    This function provides a more efficient way to estimate the size of a value
    when serialized to JSON, without the overhead of creating a full ManagedEntry object.
    This is useful for size-based checks in wrappers.

    Args:
        value: The value mapping to estimate the size for.

    Returns:
        The estimated size in bytes when serialized to JSON.
    r"   )lenr$   r=   )r   s    r   estimate_serialized_sizerU   b   s     |U,--r   )rB   collections.abcr   dataclassesr   r   r   typingr   r	   typing_extensionsr
   key_value.shared.errorsr   r   )key_value.shared.type_checking.bear_sprayr   #key_value.shared.utils.time_to_liver   r   r   r   r=   r9   r$   rK   r(   intrU   r?   r   r   <module>r^      s     # (  % " L B I I 40
 0
 0
f -d38n - - - /S /T#s(^ / / 	S 	T#s(^ 	 	.GCH$5 .# .r   