o
    Ưhc                     @   s  d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZmZ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mZ e
r|ddlmZ edee ef ee ef dZ!edee ef ee ef ee ef e!dZ"de de fddZ#de dee e f fddZ$efde dedee  fddZ%de de fddZ&	 d,de d!e d"e'd#ee d$f d%e(dee(e f fd&d'Z)G d(d) d)eZ*efde dede*fd*d+Z+dS )-zFDefines parsing functions used by isort for parsing import definitions    N)OrderedDictdefaultdict)partial)chain)TYPE_CHECKINGAnyDictList
NamedTupleOptionalSetTuple)warn   )place)parse)MissingSection)DEFAULT_CONFIGConfig)	TypedDictCommentsAboveDictstraightfromCommentsDictr   r   nestedabovecontentsreturnc                 C   s   d| v rdS d| v rdS dS )Nz

 )r   r"   r"   H/var/www/Befach/backend/venv/lib/python3.10/site-packages/isort/parse.py_infer_line_separator!   s
   r$   raw_linec                 C   sX   t dd| }t dd|}|dd}t dd|}t d	d
|}|dd}|| fS )zrNormalizes import related statements in the provided line.

    Returns (normalized_line: str, raw_line: str)
    zfrom(\.+)cimport zfrom \g<1> cimport zfrom(\.+)import zfrom \g<1> import zimport*zimport *z (\.+)import z \g<1> import z (\.+)cimport z \g<1> cimport 	 )resubreplace)r%   liner"   r"   r#   normalize_line)   s   r,   r+   configc                 C   sX   |j r|   drdS d| v sd| v sd| v rdS | dr#dS | dr*d	S dS )
zPIf the current line is an import line it will return its type (from or straight)noqaN
isort:skipisort: skipzisort: splitimport zcimport r   from r   )
honor_noqalowerrstripendswith
startswith)r+   r-   r"   r"   r#   import_type7   s   

r9   import_stringc                 C   s   |  dd} |  dd} dD ]}|  |d} q|  }dD ]}||v r(|| qd|} |  dd} |  dd} |  dd	 d
dS )N_importz[[i]]_cimportz[[ci]])\(),r'   )r   importcimport{ {| }|})r*   splitremovejoin)r:   remove_syntaximport_listkeyr"   r"   r#   strip_syntaxD   s   

rM   Tin_quoteindexsection_comments.needs_importc           	      C   s  t |}d| v sd| v r_d}|t| k r_| | dkr|d7 }n6|r0| ||t|  |kr/d}n%| | dv rN| ||d  }|d	v rI|}|d
7 }n| | }n| | dkrUn
|d7 }|t| k sd| dd v r|rdd | dD D ]}|r|ds|dsd}qtt |p||fS )zDetermine if a given line should be skipped.

    Returns back a tuple containing:

    (skip_line: bool,
     in_quote: str,)
    "'r   r=   r    )rS   rR      )"""'''   #;c                 s   s    | ]}|  V  qd S Nstrip.0partr"   r"   r#   	<genexpr>v   s    zskip_line.<locals>.<genexpr>r3   r1   T)boollenrG   r8   )	r+   rN   rO   rP   rQ   should_skip
char_index
long_quoter`   r"   r"   r#   	skip_lineS   s>   


rg   c                   @   s   e Zd ZU ee ed< ee ed< eed< eeee f ed< eeef ed< eeeeee f f ed< eeeeef f ed< ded	< eed
< eed< eed< eed< ee ed< e	e ed< dS )ParsedContentin_lineslines_without_importsimport_indexplace_importsimport_placementsas_mapimportsr   categorized_commentschange_countoriginal_line_countline_separatorsectionsverbose_outputtrailing_commasN)
__name__
__module____qualname__r	   str__annotations__intr   r   r   r"   r"   r"   r#   rh      s   
 rh   c           :         sJ  |j pt| }|  }| r| d dv r|d g }t|}|jr.ddlm} ||dj}nt	t
j|d}t|}i }	i }
ttttd}t }g }t|j|jD ]}t t d||< qRi i i i i dd}t }d	}d}d}||k r|| }|d7 }|}t||||jd
\}}||jv s||jv r|s|dkr|d }qqd|v r|dr|dd  d	  }g |	|< ||
|< nd|v r|dr|dd  d	  }g |	|< ||
|< |r|| qq| }|jr|dkr|r|s|ds|ds|ds|ds3|ds3|d }|r2||d  s2|d8 }|r2||d  r$n|ddd	  }d|v sGd|v rd|v rd|vr|}|}d|v s_d|v r|ddd	 }d|v r| ds||k r||k r| ds|| ddd	 }|d7 }||k r| drn|d7 }||krn|| }d|v s_d|v s_|dd^}}d|v rdd |dD }n|g}|r|d  d|d	  |d< |D ]}t|\}}t||pd}|g}|s|| q|dkr|d }i } t |\}!}"|"r|"gng }#dd t!|! dD }$|dkrCt|$dkrC|#rC|#d	 | |$d < d|ddd	 v r||k r|dd	  ds||k rt || \}}%|d7 }|%ry|#|% t!| }&|dkr|&rd|&"ddvr|%r|#d | |&< |!|| 7 }!|| |dd	  ds||k sen| drt || \}}%| }|d7 }|%r|#|% d|dd	 v rd|dd	 vr||k rt!| }&|dkr|&rd|&"ddvr|%r|#d | |&< |!|| 7 }!|| |dd	  ds||k rt || \}}%|d7 }|%rB|#|% t!| }&|dkrb|&rbd|&"ddvrb|%rb|#d | |&< |!|| 7 }!|| |dd	  ds||k s.t!| }&|dkr|&rd|&"ddvr|%r|#d | |&< |! ds| dr|!|| 7 }!n|! dd |  }!| ds|dkr#|!"d d!"dd"d"d}!d#|!vr|#| qd$|!v r|!d$}'d%}(n|!d&}'d'}(|'d	 d})|(r
d$nd&$|)d	 d d$|)dd(  g|'dd(  }!d)d t!|! D }*d(}+|*dd(  d%},d}-d*|*v r>|*%d*d t|*k r>d'},d*|*v r>d(}.|*%d*}/|dkr|*|/d  }.|*d	 }-|-d+ |. }0|*|/d  }1 &|.  &|1  &d* |.|1kr|j'rn|1|d |0 vr|d |0 |1 |. d|1 }2| (|2}3|3r|3|d, )|-i |2< |3|#v r|#*|#%|3 n(|*|/d  }0|*|/d  }1|0|1kr|j'rn|1|d- |0 vr|d- |0 |1 |#r2|+d(u r2|.r	|j+r	|d )|- d.g }+n)|dks|j'r%|1|0d+d kr%|d- )|0g }+n|d- )|0 d|1 g }+|*|/|/d = d*|*v sR|dkr|**d	|}4|j,r_|j-s_t.d/ d0|4  n|j,rn|d/ d0|4  |4dkrt/d1 d2| d3dd4 |4r|4|vrt0|4d5||4 | |*D ]"}5| (|5}3|3r|3|d, )i |5< |3|#v r|#*|#%|3 q|j1r|#r|+d(u rt|*dkr|d, )i }6|6(|*d	 d}7|7 |7rd6nd d6$|# |6|*d	 < g }#|#r|+d(u r|d )g }+t|t2|dd kr|r|d  nd}8|8dr|8ds|8dsd|8vrd|8vr|j3s|8 |j4vr|d7 d )g 5d	|*d |r\|d  }8nd}8|8dr|8ds|8dsd|8vrd|8vr|j3s|8 |j4vsA|d |kr|t|d7 d (g 8 }vrt fd8d9|*D < n 6 fd:d9|*D  |#r|+d(ur|+#|# |*r|*d rd;|!|*d d v r|7 q|#r|+d(ur|+#|# g }#|*D ]}0|#r|#|d- |0< g }#t|t2|ddd kr|r|d  nd}8|8dr|8ds|8dsd|8vrd|8vr|j3s|8 |j4vr|d7 d- )|0g 5d	|*d |r`|d  }8nd}8|8dr|8ds|8dsd|8vrd|8vr|j3s|8 |j4vsE|d |kr|t|d7 d- (|0g 8 }||0}4|j,r|j-st.d<|0 d0|4  n|j,r|d<|0 d0|4  |4dkrt/d1|0 d2| d3dd4 |)dt t d |4r|4|vrt0|0|4d5|,||4 | (|0d'O },|,||4 | |0< qq||k svt|| }9t8||||	|
||||9|||j||d=S )>z9Parses a python file taking out and categorizing imports.)r!   r    rT   r   )FindersManager)r-   r   r   r   )rN   rO   rP   zisort:imports-rY   zisort: imports-rW   rV   rA   r   r/   r0   r>   r?   rZ   c                 S   s   g | ]}|  qS r"   r\   )r_   r+   r"   r"   r#   
<listcomp>      z!file_contents.<locals>.<listcomp>c                 S   s   g | ]}|r|qS r"   r"   r^   r"   r"   r#   r     r   r'   rX   z as r=   )z importz cimportr1   zimport(zimport (r!   r2   z	 cimport Tz import FNc                 S   s    g | ]}| d d ddqS )rD   rC   rF   rE   )r*   )r_   itemr"   r"   r#   r   |  s    as.r   r   z.__combined_as__zfrom-type place_module for z
 returned zcould not place module z	 of line z, -- Do you need to define a default section?)
stacklevel)import_modulesectionz; r   c                 3   s    | ]	}|| v fV  qd S r[   r"   r_   module)direct_importsr"   r#   ra      s    
z file_contents.<locals>.<genexpr>c                 3   s,    | ]}|  |d p| v fV  qdS )FN)getr   r   import_fromrootr"   r#   ra     s
    
r@   zelse-type place_module for )ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   )9line_endingr$   
splitlinesappendrc   old_findersdeprecated.findersr~   findr   r   r   r   listr   r   rt   forced_separatesetrg   rP   section_comments_endr8   rG   upperlstripfloat_to_topr]   r6   r7   r,   r9   parse_commentsrM   r*   extendrI   rO   rH   remove_redundant_aliasesr   
setdefaultpopcombine_as_importsverboseonly_modifiedprintr   r   force_single_linemaxtreat_all_comments_as_codetreat_comments_as_codeinsertupdateaddrh   ):r   r-   rs   ri   	out_linesrr   r~   finder
line_countrl   rm   rn   ro   ru   r   rp   rv   rO   rk   rN   r+   statement_indexskipping_linelstripped_linecommentlessstarting_lineend_of_line_comment
statements	statementr%   type_of_import	raw_linesnested_commentsr:   commentcomments
line_partsnew_commentstripped_linepartscimportsfrom_importjust_importsattach_comments_tostraight_importtop_level_modulenested_moduleas_indexr   as_name	full_nameassociated_commentplaced_moduleimport_namenested_from_commentsexisting_commentlastrq   r"   r   r#   file_contents   sn  















 $


$



$


$

7





*
"











2










	









	
     r   )T),__doc__r(   collectionsr   r   	functoolsr   	itertoolsr   typingr   r   r   r	   r
   r   r   r   warningsr   rT   r   r   r   r   
exceptionsr   settingsr   r   mypy_extensionsr   rz   r   r   r$   r,   r9   rM   r|   rb   rg   rh   r   r"   r"   r"   r#   <module>   sX    (





.