
    Ki
                         d dl mZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ  ed      Z G d	 d
ee         Zy)    )Sequence)is_dataclass)AnyTypeVarget_args
get_origin)
bear_spray)TypeAdapter)BasePydanticAdapter)AsyncKeyValueTc                   f    e Zd ZU dZee   ed<   e	 	 ddedee	   de
dz  deddf
d	       Zde
fd
Zy)DataclassAdaptera  Adapter around a KVStore-compliant Store that allows type-safe persistence of dataclasses.

    This adapter works with both standard library dataclasses and Pydantic dataclasses,
    leveraging Pydantic's TypeAdapter for robust validation and serialization.
    _inner_typeN	key_valuedataclass_typedefault_collectionraise_on_validation_errorreturnc                    || _         t        |      }|duxr" t        |t              xr t	        |t
              | _        | j                  r)t        |      }|sd| d}t        |      |d   | _	        n|| _	        t        | j                        s| j                   d}t        |      t        t           |      | _        || _        || _        y)a-  Create a new DataclassAdapter.

        Args:
            key_value: The AsyncKeyValue to use.
            dataclass_type: The dataclass type to use. Can be a single dataclass or list[dataclass].
            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 dataclass_type is not a dataclass type.
        Nz
List type z must have a type argumentr   z is not a dataclass)
_key_valuer   
isinstancetype
issubclassr   _is_list_modelr   	TypeErrorr   r   r
   r   _type_adapter_default_collection_raise_on_validation_error)selfr   r   r   r   originargsmsgs           t/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/key_value/aio/adapters/dataclass/adapter.py__init__zDataclassAdapter.__init__   s    ( $N+$D0nZ5MnR\]cemRn N+D">"22LMn$#AwD-D D,,-%%&&9:CC. (^N;#5 *C'    c                      y)z.Return the model type name for error messages.	dataclass )r    s    r$   _get_model_type_namez%DataclassAdapter._get_model_type_nameE   s    r&   )NF)__name__
__module____qualname____doc__r   r   __annotations__r	   r   r   strboolr%   r*   r)   r&   r$   r   r      s{     c 
 *.*/)D )D Q)D  $J	)D
 $()D 
)D )DVc r&   r   N)collections.abcr   dataclassesr   typingr   r   r   r   )key_value.shared.type_checking.bear_sprayr	   pydantic.type_adapterr
   $key_value.aio.adapters.pydantic.baser   !key_value.aio.protocols.key_valuer   r   r   r)   r&   r$   <module>r9      s8    $ $ 5 5 @ - D ;CL9*1- 9r&   