
    k7i                         S SK r S SKJrJr  S SKJr  S SKJrJrJr  S SK	J
r
  S SKJrJr  S SKJrJrJr  \" SS	9 " S
 S5      5       rS\\\4   S\4S jrS\S\\\4   4S jrg)    N)	dataclassfield)datetime)AnySupportsFloatcast)Self)DeserializationErrorSerializationError)nownow_plustry_parse_datetime_strT)kw_onlyc            
          \ rS rSr% Sr\\\4   \S'   \	" SS9r
\S-  \S'   \	" SS9r\S-  \S'   \	" SS9r\S-  \S'   \	" SS9r\S-  \S	'   SS jr\S
\4S j5       rSS jrSS\S\S\S
\4S jjr\SS\S\S\S-  S
\4S jj5       rSrg)ManagedEntry   a8  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ttl
expires_at_dumped_jsonreturnc                     U R                   b&  U R                  c  [        U R                   S9U l        g U R                  b  U R                   c  U R                  5         g g g )N)seconds)r   r   r   recalculate_ttlselfs    ^/home/james-whalen/.local/lib/python3.13/site-packages/key_value/shared/utils/managed_entry.py__post_init__ManagedEntry.__post_init__   sL    88DOO$;&txx8DO__(TXX-=  " .>(    c                 L    U R                   c  gU R                   [        5       :*  $ )NF)r   r   r   s    r   
is_expiredManagedEntry.is_expired$   s     ??"#%''r"   c                     U R                   b9  U R                  c+  U R                   [        5       -
  R                  5       U l        g g g N)r   r   r   total_secondsr   s    r   r   ManagedEntry.recalculate_ttl*   s8    ??&488+;#%/>>@DH ,<&r"   include_metadatainclude_expirationinclude_creationc                 2   0 nU(       az  U R                   US'   U(       a.  U R                  (       a  U R                  R                  5       US'   U(       a.  U R                  (       a  U R                  R                  5       US'   OU R                   n[	        US9$ )Nr   r   r   )obj)r   r   	isoformatr   dump_to_json)r   r*   r+   r,   datas        r   to_jsonManagedEntry.to_json.   sl    ! JJDMDOO%)__%>%>%@\"!doo%)__%>%>%@\"::D%%r"   json_strincludes_metadatac                    [        US9nU(       d  U " US9$ [        UR                  S5      S9n[        UR                  S5      S9nUR                  S5      nUc  Sn[        U5      eU " UUU(       a  [	        U5      US9$ S US9$ )N)r4   )r   r   r   r   zValue is None)r   r   r   r   )load_from_jsonr   getr
   float)	clsr4   r5   r   r1   r   r   r   msgs	            r   	from_jsonManagedEntry.from_json<   s    -x@   '=488LCY&Z
&<488LCY&Z
'+xx'8=!C&s++!!!c
	
 	
 (,	
 	
r"   )r   r   )r   N)TTT)TN)__name__
__module____qualname____firstlineno____doc__dictstrr   __annotations__r   r   r   r   r9   r   r   r    propertyboolr$   r   r2   classmethodr   r	   r<   __static_attributes__ r"   r   r   r      s     S>"'"5J45d+C+"'"5J45$T2L#*2# (D ( (
A& & &hl &x{ & 
 
 
=[_K_ 
ko 
 
r"   r   r.   r   c                      [         R                  " U 5      $ ! [         R                  [        4 a  nSU 3n[	        U5      UeS nAff = f)Nz$Failed to serialize object to JSON: )jsondumpsJSONDecodeError	TypeErrorr   )r.   er;   s      r   r0   r0   V   sI    -zz#  ), -9!= %1,-s    AAAr4   c                 6    [         R                  " U 5      n[        U[        5      (       d  Sn[	        U5      e[        S U 5       5      (       d  Sn[	        U5      e[        SUS9$ ! [         R                  [        4 a  nSU 3n[	        U5      UeS nAff = f)Nz#Failed to deserialize JSON string: z'Deserialized object is not a dictionaryc              3   B   #    U  H  n[        U[        5      v   M     g 7fr'   )
isinstancerD   ).0keys     r   	<genexpr>!load_from_json.<locals>.<genexpr>j   s     @/?z#s##/?s   z,Deserialized object contains non-string keyszdict[str, Any])typval)	rL   loadsrN   rO   r
   rS   rC   allr   )r4   deserialized_objrP   r;   s       r   r7   r7   ^   s    / $

8 4 &--7"3''@/?@@@<"3''$*:;;   ), /8<"3'Q./s   A( (BBB)rL   dataclassesr   r   r   typingr   r   r   typing_extensionsr	   key_value.shared.errorsr
   r   #key_value.shared.utils.time_to_liver   r   r   r   rC   rD   r0   r7   rJ   r"   r   <module>rb      sx     (  + + " L U U 4F
 F
 F
R-d38n - -<S <T#s(^ <r"   