o
    h$                     @   s   d Z ddlZddlZddlZddlmZ dejdefddZdejdejfd	d
Z	dejdefddZ
dejdedefddZdS )z%Code related to handling annotations.    N)isclassvaluereturnc                 C   s    t jdk r| tdu S | tjkS )z'Check if the given value is a NoneType.   
   N)sysversion_infotypetypesNoneType)r    r   Z/var/www/html/optinet_system/venv/lib/python3.10/site-packages/celery/utils/annotations.pyis_none_type	   s   

r   
annotationc                 C   sv   t | }|t jkrtjdkr|tjkrdS t | }t|dkr#dS t	dd |D }t
dd |D }|r9|S dS )zWGet the argument from an Optional[...] annotation, or None if it is no such annotation.r   N   c                 s   s    | ]}t |V  qd S Nr   .0argr   r   r   	<genexpr>   s    z#get_optional_arg.<locals>.<genexpr>c                 s   s    | ]	}t |s|V  qd S r   r   r   r   r   r   r      s    )typing
get_originUnionr   r	   r   	UnionTypeget_argslenanynext)r   origin
union_argshas_none_argtype_argr   r   r   get_optional_arg   s   

r$   c                 C   s8   dt j  krdk rn t| S t| tjrdS t| S )zTTest if a given annotation is a class that can be used in isinstance()/issubclass().)r   	   )r      F)r   r	   
isinstancer   GenericAliasr   )r   r   r   r   annotation_is_class%   s
   r)   clsc                 C   s   t | ot| |S )z4Test if a given annotation is of the given subclass.)r)   
issubclass)r   r*   r   r   r   annotation_issubclass/   s   r,   )__doc__r   r   r   inspectr   Anyboolr   r$   r)   r
   r,   r   r   r   r   <module>   s    
