
    k7i                         S SK Jr  S SKJrJrJrJrJr  S SKJ	r	J
r
  S SKJr  S SKJrJr  S SKJr  S SKJr  S SKJr  \" S	\\\   -  S
9r " S S\\   5      rg)    )Sequence)AnyGenericSupportsFloatTypeVar
get_origin)DeserializationErrorSerializationError)
bear_spray)	BaseModelValidationError)TypeAdapter)PydanticSerializationError)AsyncKeyValueT)boundc                   @   \ rS rSrSr\  SS\S\\   S\	S-  S\
SS4
S	 jj5       rS
\\	\4   S\S-  4S jrS
\S\\	\4   4S jrSS.S\	S\	S-  S\S-  4S jjrSS.S\\	   S\	S-  S\\S-     4S jjrSSS.S\	S
\S\	S-  S\S-  SS4
S jjrSSS.S\\	   S\\   S\	S-  S\\S-     S-  SS4
S jjrSS.S\	S\	S-  S\
4S jjrSS.S\\	   S\	S-  S\4S jjrSS.S\	S\	S-  S\\S-  \S-  4   4S jjrSS.S\\	   S\	S-  S\\\S-  \S-  4      4S jjrSrg)PydanticAdapter   z^Adapter around a KVStore-compliant Store that allows type-safe persistence of Pydantic models.N	key_valuepydantic_modeldefault_collectionraise_on_validation_errorreturnc                     Xl         [        U5      nUSL=(       a    [        U[        5      U l        [
        [           " U5      U l        X0l        X@l	        g)a	  Create a new PydanticAdapter.

Args:
    key_value: The KVStore to use.
    pydantic_model: The Pydantic model to use.
    default_collection: The default collection to use.
    raise_on_validation_error: Whether to raise a ValidationError if the model is invalid.
N)

_key_valuer   
issubclassr   _is_list_modelr   r   _type_adapter_default_collection_raise_on_validation_error)selfr   r   r   r   origins         a/home/james-whalen/.local/lib/python3.13/site-packages/key_value/aio/adapters/pydantic/adapter.py__init__PydanticAdapter.__init__   sI    " *3N+$*$$6$W:fh;W(^N;/A 0I'    valuec                 $    U R                   (       a+  U R                  R                  UR                  S/ 5      5      $ U R                  R                  U5      $ ! [         a,  nU R
                  (       a  SU 3n[        U5      Ue S nAg S nAff = f)NitemsInvalid Pydantic model: )r   r   validate_pythongetr   r!   r	   r"   r(   emsgs       r$   _validate_modelPydanticAdapter._validate_model.   s~    		""))99%))GR:PQQ%%55e<< 	..08*3/Q6		s   ;A A 
B#"B

Bc                      U R                   (       a  SU R                  R                  USS90$ U R                  R                  USS9$ ! [         a  nSU 3n[	        U5      UeS nAff = f)Nr*   json)moder+   )r   r   dump_pythonr   r
   r.   s       r$   _serialize_model PydanticAdapter._serialize_model:   sv    	1""!3!3!?!?F!?!STT%%11%f1EE) 	1,QC0C$S)q0	1s   ,A	 A	 	
A)A$$A))
collectionkeyr9   c                   #    U=(       d    U R                   nU R                  R                  XS9I Sh  vN =n(       a  U R                  US9$ g N7f)a   Get and validate a model by key.

Returns:
    The parsed model instance, or None if not present.

Raises:
    DeserializationError if the stored data cannot be validated as the model and the PydanticAdapter is configured to
    raise on validation error.
r:   r9   Nr(   )r    r   r-   r1   )r"   r:   r9   r(   s       r$   r-   PydanticAdapter.getD   sT       ;4#;#;
//--#-MMM5M''e'44 Ns   2AAAkeysc                   #    U=(       d    U R                   nU R                  R                  XS9I Sh  vN nU Vs/ s H  oD(       a  U R                  US9OSPM     sn$  N,s  snf 7f)a  Batch get and validate models by keys, preserving order.

Returns:
    A list of parsed model instances, or None if missing.

Raises:
    DeserializationError if the stored data cannot be validated as the model and the PydanticAdapter is configured to
    raise on validation error.
r?   r9   Nr=   )r    r   get_manyr1   )r"   r?   r9   valuesr(   s        r$   rB   PydanticAdapter.get_manyU   sg       ;4#;#;
48OO4L4LRV4L4n.nRXYRXU$$5$1DRXYY /oYs    2A(A!A(!A#A(#A()r9   ttlrE   c                   #    U=(       d    U R                   nU R                  US9nU R                  R                  XX4S9I Sh  vN   g N7f)z_Serialize and store a model.

Propagates SerializationError if the model cannot be serialized.
r=   )r:   r(   r9   rE   N)r    r7   r   put)r"   r:   r(   r9   rE   
value_dicts         r$   rG   PydanticAdapter.pute   sG     
  ;4#;#;
%)%:%:%:%G
oo!!c
!\\\s   AAA
ArC   c                   #    U=(       d    U R                   nU Vs/ s H  oPR                  US9PM     nnU R                  R                  XX4S9I Sh  vN   gs  snf  N
7f)zJSerialize and store multiple models, preserving order alignment with keys.r=   )r?   rC   r9   rE   N)r    r7   r   put_many)r"   r?   rC   r9   rE   r(   value_dictss          r$   rK   PydanticAdapter.put_manyp   sa       ;4#;#;
]c,d]cTY-B-B-B-O]c,doo&&DQ[&eee -ees   A AA AA c                z   #    U=(       d    U R                   nU R                  R                  XS9I Sh  vN $  N7f)zGDelete a model by key. Returns True if a value was deleted, else False.r<   N)r    r   delete)r"   r:   r9   s      r$   rO   PydanticAdapter.deletez   s3     ;4#;#;
__+++KKKK   2;9;c                z   #    U=(       d    U R                   nU R                  R                  XS9I Sh  vN $  N7f)zDDelete multiple models by key. Returns the count of deleted entries.rA   N)r    r   delete_many)r"   r?   r9   s      r$   rS   PydanticAdapter.delete_many   s3     ;4#;#;
__00d0RRRRrQ   c                   #    U=(       d    U R                   nU R                  R                  XS9I Sh  vN u  p4Uc  gU R                  US9=n(       a  XT4$ g N$7f)zfGet a model and its TTL seconds if present.

Returns (model, ttl_seconds) or (None, None) if missing.
r<   N)NNr=   )r    r   rE   r1   )r"   r:   r9   entryttl_infovalidated_models         r$   rE   PydanticAdapter.ttl   sh     
  ;4#;#;

 !% 3 3 3 SS="222????#.. Ts   2AA%Ac                   #    U=(       d    U R                   nU R                  R                  XS9I Sh  vN nU VVs/ s H  u  pEU(       a  U R                  US9OSU4PM!     snn$  N3s  snnf 7f)zKBatch get models with TTLs. Each element is (model|None, ttl_seconds|None).rA   Nr=   )r    r   ttl_manyr1   )r"   r?   r9   entriesrV   rW   s         r$   r[   PydanticAdapter.ttl_many   st     ;4#;#;
JN//JbJbhlJb  KE  EEhophoUdUZe%%E%2xPhopp EEps    2A0A(	A0&A*$A0*A0)r    r   r   r!   r   )NF)__name__
__module____qualname____firstlineno____doc__r   r   typer   strboolr%   dictr   r1   r7   r-   listrB   r   rG   r   rK   rO   intrS   tuplefloatrE   r[   __static_attributes__ r'   r$   r   r      s   h 
 *.*/J J QJ  $J	J
 $(J 
J J2
T#s(^ 
D 
1a 1DcN 1 ?C S t q4x " KO Z49 ZS4Z ZSWXY\`X`Sa Z  IMjn 	]S 	] 	]3: 	]S`cgSg 	]sw 	] QU  DHfIf'/{fCF:f[cdqtxdx[y  }A  \Af	f BF L LC$J L$ L NR Sd3i Sd
 SVY S ?C S t uQQUXW\_cWcMcGd ( KO q49 qS4Z qSWX]^_bf^fhmptht^tXuSv q qr'   r   N)collections.abcr   typingr   r   r   r   r   key_value.shared.errorsr	   r
   )key_value.shared.type_checking.bear_sprayr   pydanticr   r   pydantic.type_adapterr   pydantic_corer   !key_value.aio.protocols.key_valuer   r   r   rl   r'   r$   <module>ru      sJ    $ C C L @ / - 4 ;Cy8I#667Qqgaj Qqr'   