File: //usr/local/lib/python3.9/site-packages/celery/utils/__pycache__/annotations.cpython-39.pyc
a
X>h$ � @ sx d Z ddlZddlZddlZddlmZ ejed�dd�Zejejd�dd �Z ejed�d
d�Z
ejeed�d
d�ZdS )z%Code related to handling annotations.� N)�isclass)�value�returnc C s t jdk r| td�u S | tjkS )z'Check if the given value is a NoneType.�� �
N)�sys�version_info�type�typesZNoneType)r � r �B/usr/local/lib/python3.9/site-packages/celery/utils/annotations.py�is_none_type s
r )�
annotationr c C sv t �| �}|t jkr,tjdkr,|tjkr,dS t �| �}t|�dkrFdS t dd� |D ��}t
dd� |D ��}|rr|S dS )zWGet the argument from an Optional[...] annotation, or None if it is no such annotation.r N� c s s | ]}t |�V qd S �N�r ��.0�argr r r
� <genexpr> � z#get_optional_arg.<locals>.<genexpr>c s s | ]}t |�s|V qd S r r r r r r
r r )�typing�
get_origin�Unionr r r Z UnionType�get_args�len�any�next)r �originZ
union_argsZhas_none_argZtype_argr r r
�get_optional_arg s
r c C s2 dt j krdk r*n nt| tj�r*dS 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% )r �clsr c C s t | �ot| |�S )z4Test if a given annotation is of the given subclass.)r% �
issubclass)r r&