
    Ki		                         d dl mZ d dlmZ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  edeee   z  	      Z G d
 dee         Zy)    )Sequence)TypeVar
get_origin)
bear_spray)	BaseModel)TypeAdapter)BasePydanticAdapter)AsyncKeyValueT)boundc                   T    e Zd ZdZe	 	 d
dedee   dedz  de	ddf
d       Z
defd	Zy)PydanticAdapterz^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                     || _         t        |      }|t        u | _        ||t        urd| }t	        |      t        t           |      | _        || _        || _	        y)aZ  Create a new PydanticAdapter.

        Args:
            key_value: The KVStore to use.
            pydantic_model: The Pydantic model to use. Can be a single Pydantic model or list[Pydantic model].
            default_collection: The default collection to use.
            raise_on_validation_error: Whether to raise a DeserializationError if validation fails during reads. Otherwise,
                                       calls will return None if validation fails.

        Raises:
            TypeError: If pydantic_model is a sequence type other than list (e.g., tuple is not supported).
        Nz:Only list[BaseModel] is supported for sequence types, got )

_key_valuer   list_is_list_model	TypeErrorr   r   _type_adapter_default_collection_raise_on_validation_error)selfr   r   r   r   originmsgs          s/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/key_value/aio/adapters/pydantic/adapter.py__init__zPydanticAdapter.__init__   sh    ( $N+$n &"4N~N^_CC. (^N;#5 *C'    c                      y)z.Return the model type name for error messages.zPydantic model )r   s    r   _get_model_type_namez$PydanticAdapter._get_model_type_name5   s    r!   )NF)__name__
__module____qualname____doc__r   r
   typer   strboolr    r$   r#   r!   r   r   r      sm    h 
 *.*/D D QD  $J	D
 $(D 
D DB c  r!   r   N)collections.abcr   typingr   r   )key_value.shared.type_checking.bear_sprayr   pydanticr   pydantic.type_adapterr   $key_value.aio.adapters.pydantic.baser	   !key_value.aio.protocols.key_valuer
   r   r   r#   r!   r   <module>r3      sB    $ & @  - D ;Cy8I#667) )!, ) r!   