o
    Ti
                     @  s   d dl mZ d dlmZmZ d dlmZmZmZ ddl	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rBddlmZ dddZ	dd ddZdS )!    )annotations)TYPE_CHECKINGAny)NOTHING	AttributeFactory   )get_argsis_annotatedis_bare_final)StructureHook)StructureHandlerNotFoundError)raise_error   )AttributeOverride)BaseConvertertyper   defaultr   returnc                 C  s,   t | rt| D ]}t|tr|  S q|S )zq
    If the type is Annotated containing an AttributeOverride, return it.
    Otherwise, return the default.
    )r
   r	   
isinstancer   )r   r   arg r   F/home/ubuntu/.local/lib/python3.10/site-packages/cattrs/gen/_shared.py_annotated_override_or_default   s   
r   Far   cr   prefer_attrs_convertersboolStructureHook | Nonec                   s  zu| j dur|rd}|W S | j dur8|s8 dur8z	|j dd}W n ty.   d}Y |W S w |tkr5d}|W S  durpt rf| jturft| jtsf| jj	 |j dd}||j
krc|f fdd	}|W S |j dd}|W S |j}|W S  ty   |j Y S w )zdFind the appropriate structure handler to use.

    Return `None` if no handler should be used.
    NF)cache_resultc                   s
   ||  S )Nr   )v__hr   r   r   handlerF   s   
z'find_structure_handler.<locals>.handler)	converterget_structure_hookr   r   r   r   r   r   r   	__class___structure_call	structureRecursionError)r   r   r   r   r$   r   r#   r   find_structure_handler    s@   "



r+   N)r   r   r   r   r   r   )F)
r   r   r   r   r   r   r   r   r   r   )
__future__r   typingr   r   attrsr   r   r   _compatr	   r
   r   dispatchr   errorsr   fnsr   _constsr   
convertersr   r   r+   r   r   r   r   <module>   s    
