a
    g                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 er\d dl
mZ dd	d
ddZdddddZdddddZedZddddddZddddd d!ZdS )"    )annotationsN)TYPE_CHECKING)Literal)cast)Offset)Statestrz
ast.Module)contents_textreturnc                 C  sD   t  ( t d t|  W  d    S 1 s60    Y  d S )Nignore)warningscatch_warningssimplefilterastparseencode)r	    r   Q/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/django_upgrade/ast.py	ast_parse   s    

r   z!ast.expr | ast.keyword | ast.stmtr   )noder
   c                 C  s   t | j| jS N)r   lineno
col_offsetr   r   r   r   ast_start_offset   s    r   zast.ImportFromboolc                 C  s*   | j dko(t| jdko&| jd jdk S )Nr      *)levellennamesnamer   r   r   r   is_rewritable_import_from   s    r"   )	requestgetpostheadoptionsputpatchdeletetracezast.ASTz!Literal['async_client', 'client'])r   client_namer
   c                 C  sf   t | tjodt | jtjod| jjtv odt | jjtjod| jjj|kodt | jjjtjod| jjjj	dkS )Nself)

isinstancer   Callfunc	AttributeattrTEST_CLIENT_REQUEST_METHODSvalueNameid)r   r,   r   r   r   looks_like_test_client_call.   s    
r7   zast.Comparer   zLiteral['pass', 'fail', None])teststater
   c                 C  st  t | j }tjrt |jtjr|jjdkr|jdkrt| j	dkrt | j	d tj
tjtjtjfrt| jdkrt | jd  }tjrdt|j  krdkrn n(tdd |jD rtdd |jD sd	S td
d |jD }t | j	d tj
r|jj|krpdS nbt | j	d tjr6|jj|krpdS n:t | j	d tjr^|jj|krpdS n|jj|krpdS d	S )z
    Return whether the given ast.Compare node compares a version tuple with
    django.VERSION and would pass or fail for the current target version, or
    None if no match or cannot determine.
    ZdjangoVERSIONr   r      c                 s  s   | ]}t |tjV  qd S r   )r.   r   Constant.0er   r   r   	<genexpr>N       z(is_passing_comparison.<locals>.<genexpr>c                 s  s"   | ]}t ttj|jtV  qd S r   )r.   r   r   r<   r4   intr=   r   r   r   r@   O   rA   Nc                 s  s   | ]}t tj|jV  qd S r   )r   r   r<   r4   r=   r   r   r   r@   S   rA   passZfail)r.   leftr   r1   r4   r5   r6   r2   r   opsGtGtELtLtEcomparatorsTupleeltsalltuplesettingsZtarget_version)r8   r9   rD   Z
comparatormin_versionr   r   r   is_passing_comparison<   sL    	
	
	

rQ   )
__future__r   r   r   typingr   r   r   Ztokenize_rtr   Zdjango_upgrade.datar   r   r   r"   	frozensetr3   r7   rQ   r   r   r   r   <module>   s    