a
    g                     @  s|  d Z ddlm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 ddlmZ ddlmZ eeddZeejdddddddZeejdddddddZeejdddddddZd d!d"d#d$Z d d%d"d&d'Z!d(d%d)d*d+Z"d,d-d(d.d/d0d1Z#d,d-d(d.d/d2d3Z$dS )4z
Update use of request.META to fetch headers to use request.headers
https://docs.djangoproject.com/en/2.2/releases/2.2/#requests-and-responses
    )annotationsN)Iterable)partial)Offset)Token)ast_start_offset)Fixer)State)	TokenFunc)NAME)STRING)find)replace)str_repr_matching)   r   )min_versionr	   zast.Subscriptztuple[ast.AST, ...]z"Iterable[tuple[Offset, TokenFunc]])statenodeparentsreturnc                 c  st   t |jrpt|d tjspt|d tjr8||d jv spt|j }d urpt	| }d urpt
|tt|dfV  d S )Nheader_name)is_request_or_self_request_metavalue
isinstanceastDeleteAssigntargetsextract_constantsliceget_header_namer   r   rewrite_header_accessr   r   r   	meta_namer    r&   d/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/django_upgrade/fixers/request_headers.pyvisit_Subscript   s    r(   zast.Callc                 c  s   t |jtjr|jjdkrt|jjrt|jdkrt |jd tj	rt |jd j }t
rt| }d urt|tt|dfV  d S )Nget   r   r   )r   funcr   	Attributeattrr   r   lenargsConstantstrr"   r   r   r#   r$   r&   r&   r'   
visit_Call1   s"    

	r2   zast.Comparec                 c  s~   t |jdkrzt|jd tjtjfrzt |jdkrzt|jd rzt|jtj	rzt
|jj }d urzt|tt|dfV  d S )Nr*   r   r   )r.   opsr   r   InNotIncomparatorsr   leftr0   r"   r   r   r   rewrite_in_statement)r   r   r   r   r&   r&   r'   visit_CompareE   s    r9   zast.ASTbool)r   r   c                 C  sh   t | tjof| jdkoft | jtjr0| jjdkpft | jtjoft | jjtjof| jjjdkof| jjdkS )NMETArequestself)r   r   r,   r-   r   Nameidr   r&   r&   r'   r   X   s    
r   z
str | Nonec                 C  s"   t | tjrt | jtr| jS d S N)r   r   r0   r   r1   r@   r&   r&   r'   r    h   s    r    r1   )r%   r   c                 C  sP   d}|  |r | t|d }n| dv r.| }ndS ddd | dD S )z9Extract HTTP header name, unless it isn't an HTTP header.ZHTTP_N>   CONTENT_LENGTHCONTENT_TYPE-c                 s  s   | ]
}|V  qd S rA   r&   ).0xr&   r&   r'   	<genexpr>w       z"get_header_name.<locals>.<genexpr>_)
startswithr.   joinlowersplit)r%   Zhttp_prefixnamer&   r&   r'   r"   n   s    
r"   zlist[Token]intNone)tokensir   r   c                C  sP   t | |tdd}t| |dd t | |td}t|| | jd}t| ||d d S )Nr;   rN   srcheadersrT   )rN   Zmatch_quotes)r   r   r   r   r   rT   )rQ   rR   r   meta_idxZstr_idx
header_srcr&   r&   r'   r#   z   s
    r#   c                C  sB   t || | jd}t| ||d t| |tdd}t| |dd d S )NrW   rV   r;   rS   rU   )r   rT   r   r   r   )rQ   rR   r   rY   rX   r&   r&   r'   r8      s    r8   )%__doc__
__future__r   r   collections.abcr   	functoolsr   Ztokenize_rtr   r   Zdjango_upgrade.astr   Zdjango_upgrade.datar   r	   r
   Zdjango_upgrade.tokensr   r   r   r   r   __name__Zfixerregister	Subscriptr(   Callr2   Comparer9   r   r    r"   r#   r8   r&   r&   r&   r'   <module>   s<   


