a
    g                     @  s  U d dl mZ d dl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 d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ G dd dZedZedZedZedZedZedZedZG dd dZedej dZ!ee"e e#gdf Z$eee!e%ej df gee%ee$f  f Z&erjd dlm'Z' ne(Z'G dd de'Z)ddd d!d"d#d$Z*G d%d& d&Z+i Z,d'e-d(< d)d*d+d,Z.e.  dddd-d.d/Z/dS )0    )annotationsN)defaultdict)Iterable)cached_property)TYPE_CHECKING)Any)Callable)DefaultDict)TypeVar)Offset)Token)fixersc                   @  s&   e Zd ZdZd	dddddddZdS )
Settings)target_versionenabled_fixersNtuple[int, int]zset[str] | NoneNone)r   only_fixersskip_fixersreturnc                   s    || _  fddtD | _d S )Nc                   s0   h | ](} d u s| v rd u s(|vr|qS N .0namer   r   r   R/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/django_upgrade/data.py	<setcomp>"   s   z$Settings.__init__.<locals>.<setcomp>)r   FIXERSr   )selfr   r   r   r   r   r   __init__   s    zSettings.__init__)NN)__name__
__module____qualname__	__slots__r    r   r   r   r   r      s     r   z(\b|_)admin(\b|_)z%(^|[\\/])management[\\/]commands[\\/]z(^|[\\/])__init__\.py$z(^|[\\/])migrations([\\/])z(\b|_)settings(\b|_)z(\b|_)tests?(\b|_)z(^|[\\/])models([\\/]|\.py)c                   @  s   e Zd ZdZdddddddZed	d
ddZed	d
ddZed	d
ddZed	d
ddZ	ed	d
ddZ
ed	d
ddZed	d
ddZdS )State)settingsfilenamefrom_imports__weakref____dict__r   strzDefaultDict[str, set[str]]r   )r&   r'   r(   r   c                 C  s   || _ || _|| _d S r   r&   r'   r(   )r   r&   r'   r(   r   r   r   r    6   s    zState.__init__boolr   c                 C  s   t | jd uS r   )admin_researchr'   r   r   r   r   looks_like_admin_file@   s    zState.looks_like_admin_filec                 C  s   t | jd uS r   )commands_rer0   r'   r1   r   r   r   looks_like_command_fileD   s    zState.looks_like_command_filec                 C  s   t | jd uS r   )dunder_init_rer0   r'   r1   r   r   r   looks_like_dunder_init_fileH   s    z!State.looks_like_dunder_init_filec                 C  s   t | jd uS r   )migrations_rer0   r'   r1   r   r   r   looks_like_migrations_fileL   s    z State.looks_like_migrations_filec                 C  s   t | jd uS r   )settings_rer0   r'   r1   r   r   r   looks_like_settings_fileP   s    zState.looks_like_settings_filec                 C  s   t | jd uS r   )test_rer0   r'   r1   r   r   r   looks_like_test_fileT   s    zState.looks_like_test_filec                 C  s   t | jd uS r   )	models_rer0   r'   r1   r   r   r   looks_like_models_fileX   s    zState.looks_like_models_fileN)r!   r"   r#   r$   r    r   r2   r4   r6   r8   r:   r<   r>   r   r   r   r   r%   3   s    
r%   AST_T)bound.)Protocolc                   @  s*   e Zd ZdddddZdddd	Zd
S )ASTCallbackMappingtype[AST_T]zlist[ASTFunc[AST_T]])tpr   c                 C  s   d S r   r   )r   rD   r   r   r   __getitem__j   s    zASTCallbackMapping.__getitem__zIterable[tuple[Any, Any]]r.   c                 C  s   d S r   r   r1   r   r   r   itemsm   s    zASTCallbackMapping.itemsN)r!   r"   r#   rE   rF   r   r   r   r   rB   i   s   rB   z
ast.Moduler+   zdict[Offset, list[TokenFunc]])treer&   r'   r   c                 C  sH  t ||ttd}t||}| dfg}tt}|rD| \}}|t| D ](}	|	|||D ]\}
}||
 | q\qLt|t	j
r|jdkr|jd ur|jds|jdv r|j|j dd |jD  ||f }t|jD ]b}t||}t|t	jr
|||f qt|trt|D ]"}t|t	jr|||f qqq.|S )Nr,   r   r   zdjango.)ZdjangoZunittestc                 s  s(   | ] }|j d u r|jdkr|jV  qd S )N*)asnamer   r   r   r   r   	<genexpr>   s   zvisit.<locals>.<genexpr>)r%   r   setget_ast_funcslistpoptypeappend
isinstanceast
ImportFromlevelmodule
startswithr(   updatenamesreversed_fieldsgetattrAST)rG   r&   r'   state	ast_funcsnodesretnodeparentsZast_funcoffsetZ
token_funcZ
subparentsr   valueZsubvaluer   r   r   visitq   sH    






re   c                   @  s6   e Zd ZdZdddddddd	Zd
ddddZdS )Fixer)r   min_versionr^   	conditionNr+   r   zCallable[[State], bool] | Noner   )module_namerg   rh   r   c                 C  s4   | dd | _|| _tt| _|| _| t| j< d S )N.   )
rpartitionr   rg   r   rM   r^   rh   r   )r   ri   rg   rh   r   r   r   r       s
    
zFixer.__init__rC   z*Callable[[ASTFunc[AST_T]], ASTFunc[AST_T]])type_r   c                   s   ddd fdd}|S )NzASTFunc[AST_T])funcr   c                   s    j  |  | S r   )r^   rP   )rn   r   rm   r   r   	decorator   s    z!Fixer.register.<locals>.decoratorr   )r   rm   rp   r   ro   r   register   s    zFixer.register)N)r!   r"   r#   r$   r    rq   r   r   r   r   rf      s    rf   zdict[str, Fixer]r   r   r.   c                  C  s<   t j} t| t j d}|D ]\}}}t|dgd qd S )Nrj   Z_trash)fromlist)r   __path__pkgutilwalk_packagesr!   
__import__)Zfixers_pathZ	mod_infos_r   r   r   r   _import_fixers   s    rx   )r]   r&   r   c                 C  sl   t t}t D ]V}|j|jvr"q|j| jjkr|j	d u sD|	| r|j
 D ]\}}|| | qNq|S r   )r   rM   r   valuesr   r   rg   r&   r   rh   r^   rF   extend)r]   r&   r^   Zfixerrm   Z
type_funcsr   r   r   rL      s    rL   )0
__future__r   rR   rt   recollectionsr   collections.abcr   	functoolsr   typingr   r   r   r	   r
   Ztokenize_rtr   r   Zdjango_upgrader   r   compiler/   r3   r5   r7   r9   r;   r=   r%   r\   r?   rM   intZ	TokenFunctupleZASTFuncrA   objectrB   re   rf   r   __annotations__rx   rL   r   r   r   r   <module>   sL   






*"3