
    Æe7                        d dl mZmZmZmZ d dlmZ d dlmZ  G d d      Z	 G d de	      Z
 G d d	e	      Z G d
 de	      Z G d de	      Z G d de	      Z G d de	      Z G d de	      Z G d de	      Z G d de	      Zd Zy)    )
exceptionslibutils	pyobjectsstdmods)occurrences)
importinfoc                   $    e Zd Zd Zd Zd Zd Zy)ImportInfoVisitorc                     	 d|j                   j                  j                  z   }t        | |      } |||j                         S # t        j
                  $ r Y y w xY w)Nvisit)import_info	__class____name__getattrr   ModuleNotFoundError)selfimport_method_namemethods       C/usr/lib/python3/dist-packages/rope/refactor/importutils/actions.pydispatchzImportInfoVisitor.dispatch   sZ    	!G$7$7$A$A$J$JJKT;/F'7#6#677-- 		s   AA AAc                      y N r   import_stmtr   s      r   visitEmptyImportz"ImportInfoVisitor.visitEmptyImport           c                      y r   r   r   s      r   visitNormalImportz#ImportInfoVisitor.visitNormalImport   r   r   c                      y r   r   r   s      r   visitFromImportz!ImportInfoVisitor.visitFromImport   r   r   N)r   
__module____qualname__r   r   r!   r#   r   r   r   r
   r
      s    r   r
   c                   $    e Zd Zd Zd Zd Zd Zy)RelativeToAbsoluteVisitorc                 d    g | _         || _        || _        t        j                  ||      | _        y r   )to_be_absoluteprojectfolderr   ImportContextcontextr   r*   current_folders      r   __init__z"RelativeToAbsoluteVisitor.__init__   s,     $!//Hr   c                    | j                   j                  | j                  |             g }|j                  D ]j  \  }}| j                  j                  || j                        }||j                  ||f       Ct        j                  |      }|j                  ||f       l |j                  ||j                        st        j                  |      |_        y y Nr+   )r)   extend_get_relative_to_absolute_listnames_and_aliasesr*   find_moduler+   appendr   modname_are_name_and_alias_lists_equalr   NormalImportr   )r   r   r   	new_pairsnamealiasresourceabsolute_names           r   r!   z+RelativeToAbsoluteVisitor.visitNormalImport    s    ""4#F#F{#ST	&88 	5KD%||//T[[/IH  $/$,,X6MmU34	5 ::{44
 '1&=&=i&HK#
r   c                     g }|j                   D ]`  \  }}|	| j                  j                  || j                        }|3t	        j
                  |      }||k7  sN|j                  ||f       b |S r2   )r6   r*   r7   r+   r   r9   r8   )r   r   resultr=   r>   r?   r@   s          r   r5   z8RelativeToAbsoluteVisitor._get_relative_to_absolute_list/   s    &88 	5KD% ||//T[[/IH$,,X6M$t]34	5 r   c                     |j                  | j                        }|y t        j                  |      }|j                  |k7  r't        j                  |d|j                        |_        y y Nr   )	get_imported_resourcer-   r   r9   module_namer   
FromImportr6   r   )r   r   r   r?   r@   s        r   r#   z)RelativeToAbsoluteVisitor.visitFromImport<   sb    44T\\B ((2""m3&0&;&;q+"?"?'K# 4r   N)r   r$   r%   r0   r!   r5   r#   r   r   r   r'   r'      s    IIr   r'   c                   $    e Zd Zd Zd Zd Zd Zy)FilteringVisitorc                     g | _         || _        | j                  |      | _        t	        j
                  ||      | _        y r   )r)   r*   _transform_can_select
can_selectr   r,   r-   r   r*   r+   rL   s       r   r0   zFilteringVisitor.__init__H   s7     44Z@!//@r   c                     fd}|S )Nc                      | }||} |      S r   r   )r=   r>   importedrL   s      r   can_select_name_and_aliaszIFilteringVisitor._transform_can_select.<locals>.can_select_name_and_aliasO   s    H  h''r   r   )r   rL   rQ   s    ` r   rK   z&FilteringVisitor._transform_can_selectN   s    	( )(r   c                     |j                   D cg c]  \  }}| j                  ||      r||f }}}t        j                  |      S c c}}w r   )r6   rL   r   r;   )r   r   r   r=   r>   r<   s         r   r!   z"FilteringVisitor.visitNormalImportW   sU      +<<
etU+ 5M
	 

 &&y11
s    Ac                    t        |      r|S g }|j                         rS|j                  | j                        D ]4  }| j	                  |d       s|j                  |j                  d           n< n:|j                  D ]+  \  }}| j	                  ||      s|j                  ||f       - t        j                  |j                  |j                  |      S rD   )
_is_futureis_star_importget_imported_namesr-   rL   r8   r6   r   rG   rF   level)r   r   r   r<   r=   r>   s         r   r#   z FilteringVisitor.visitFromImport_   s    k"	%%'#66t||D ??4.$$[%B%B1%EF
  +<< 4e??4/$$dE]34 $$##[%6%6	
 	
r   N)r   r$   r%   r0   rK   r!   r#   r   r   r   rI   rI   G   s    A)2
r   rI   c                       e Zd Zd Zd Zy)RemovingVisitorc                 D    g | _         || _        t        |||      | _        y r   )r)   r*   rI   	filteringrM   s       r   r0   zRemovingVisitor.__init__r   s!     )'6:Fr   c                 N    | j                   j                  |      }|||_        y y r   )r[   r   r   r   r   rB   s      r   r   zRemovingVisitor.dispatchw   s)    ((1"(G r   N)r   r$   r%   r0   r   r   r   r   rY   rY   q   s    G
)r   rY   c                   (    e Zd ZdZd Zd Zd Zd Zy)AddingVisitorzA class for adding imports

    Given a list of `ImportInfo`, it tries to add each import to the
    module and returns `True` and gives up when an import can be added
    to older ones.

    c                 .    || _         || _        d | _        y r   )r*   import_listr   )r   r*   ra   s      r   r0   zAddingVisitor.__init__   s    &r   c                 d    | j                   D ]!  }|| _        t        j                  | |      s! y y )NT)ra   r   r
   r   )r   r   r   s      r   r   zAddingVisitor.dispatch   s2    ++ 	K*D ))$8	r   c                 8   t        | j                  |j                        syt        |j                        t        | j                  j                        cxk(  rdk(  rn n|j                  d   }| j                  j                  d   }|d   |d   cxk(  rJn nG|d   j                  |d   dz         ry|d   j                  |d   dz         r| j                  |_        y| j                  j                  |j                  | j                  j                        ryy )NF   r   .T)
isinstancer   r   lenr6   
startswithr:   )r   r   r   	imported1	imported2s        r   r!   zAddingVisitor.visitNormalImport   s   $**K,A,AB --.4##556 $55a8I((::1=I|y|33Q<**9Q<#+=>Q<**9Q<#+=>.2.>.>K+ ;;))4+;+;+M+M
 
r   c                    t        | j                  |j                        rE|j                  | j                  j                  k(  r |j                  | j                  j                  k(  r|j                         ry| j                  j                         r| j                  |_        y| j                  j                  j                  d      r#| j                  j                  |j                  k(  S t        |j                        }| j                  j                  D ]  }||vs|j                  |        t        j                  |j                  |j                  |      |_        yy y y )NTsplit_imports)rf   r   r   rF   rW   rU   r*   prefsgetr6   listr8   r   rG   )r   r   r   r<   pairs        r   r#   zAddingVisitor.visitFromImport   s6   t'')>)>?''4+;+;+G+GG!!T%5%5%;%;;))+..0*.*:*:'||!!%%o6$$66+:W:WW [::;I((:: +y($$T*+ '1&;&;''):):I'K# % < H @r   N)r   r$   r%   __doc__r0   r   r!   r#   r   r   r   r_   r_   }   s     
0r   r_   c                       e Zd Zd Zd Zd Zy)ExpandStarsVisitorc                 l    || _         t        |||      | _        t        j                  ||      | _        y r   )r*   rI   r[   r   r,   r-   rM   s       r   r0   zExpandStarsVisitor.__init__   s-    )'6:F!//@r   c                 :    | j                   j                  |       y r   )r[   r   r   s      r   r!   z$ExpandStarsVisitor.visitNormalImport   s    ,r   c                 R   |j                         rw|j                  | j                        D cg c]  }|d f }}t        j                  |j
                  |j                  |      }| j                  j                  d |      |_	        y | j                  j                  |       y c c}w r   )rU   rV   r-   r   rG   rF   rW   r[   r#   r   r   )r   r   r   r=   r<   
new_imports         r   r#   z"ExpandStarsVisitor.visitFromImport   s    %%')4)G)G)U!%tI  $..''):):IJ '+nn&D&DT:&VK#NN##K0s   B$N)r   r$   r%   r0   r!   r#   r   r   r   rs   rs      s    A
-
1r   rs   c                   $    e Zd Zd Zd Zd Zd Zy)SelfImportVisitorc                     || _         || _        || _        t               | _        t               | _        t        j                  ||      | _        y r   )	r*   r+   r?   setto_be_fixedto_be_renamedr   r,   r-   )r   r*   r/   r?   s       r   r0   zSelfImportVisitor.__init__   s?    $ 5 U!//Hr   c                 x   g }|j                   D ]r  \  }}| j                  j                  || j                        }|1|| j                  k(  r"|}||}| j
                  j                  |       `|j                  ||f       t |j                  ||j                         st        j                  |      |_        y y r2   )r6   r*   r7   r+   r?   r|   addr8   r:   r   r;   r   )r   r   r   r<   r=   r>   r?   rP   s           r   r!   z#SelfImportVisitor.visitNormalImport   s    	&88 	0KD%||//T[[/IH#DMM(A$$H  $$X.  $/	0 ::{44
 '1&=&=i&HK#
r   c                    |j                  | j                        }|y || j                  k(  r| j                  ||       y | j                  j                  |      }g }|j                  D ]  \  }}	 ||   j                         }t        |t        j                        r?|j                         | j                  k(  r"|}	||}	| j                  j                  |	       n|j                  ||f        |j#                  ||j                        s1t%        j&                  |j(                  |j*                  |      |_        y y # t        j                   $ r |j                  ||f       Y w xY wr   )rE   r-   r?   _importing_names_from_selfr*   get_pymoduler6   
get_objectrf   r   PyModuleget_resourcer|   r   r8   r   AttributeNotFoundErrorr:   r   rG   rF   rW   r   )
r   r   r   r?   pymoduler<   r=   r>   rB   rP   s
             r   r#   z!SelfImportVisitor.visitFromImport   sT   44T\\Bt}}$++KE<<,,X6	&88 	0KD%0!$224vy'9'9:++->#H(#($$((2$$dE]3	0 ::{44
 '1&;&;''):):I'K#
 44 0  $/0s   1A?E  &E)(E)c                     |j                         s4|j                  D ]%  \  }}|	| j                  j                  ||f       ' |j	                          y r   )rU   r6   r}   r   empty_import)r   r   r   r=   r>   s        r   r   z,SelfImportVisitor._importing_names_from_self  sS    ))+*<< :e$&&**E4=9: 	  "r   N)r   r$   r%   r0   r!   r#   r   r   r   r   ry   ry      s    II >#r   ry   c                   $    e Zd Zd Zd Zd Zd Zy)SortingVisitorc                     || _         || _        t               | _        t               | _        t               | _        t               | _        t        j                  ||      | _	        y r   )
r*   r+   r{   standardthird_party
in_projectfuturer   r,   r-   r.   s      r   r0   zSortingVisitor.__init__  sI    $5%e!//Hr   c                     |j                   rM|j                   d   \  }}| j                  j                  || j                        }| j	                  |||       y y )Nr   r3   )r6   r*   r7   r+   _check_imported_resource)r   r   r   r=   r>   r?   s         r   r!   z SortingVisitor.visitNormalImport#  sS    ((%77:KD%||//T[[/IH))+xF )r   c                 t    |j                  | j                        }| j                  |||j                         y r   )rE   r-   r   rF   )r   r   r   r?   s       r   r#   zSortingVisitor.visitFromImport)  s.    44T\\B%%k8[=T=TUr   c                    |j                   }|5|j                  | j                  k(  r| j                  j                  |       y t	        |      r| j
                  j                  |       y |j                  d      d   t        j                         v r| j                  j                  |       y | j                  j                  |       y )Nre   r   )r   r*   r   r   rT   r   splitr   standard_modulesr   r   )r   r   r?   imported_nameinfos        r   r   z'SortingVisitor._check_imported_resource-  s    &&H$4$4$DOO,KKOOK(  %a(G,D,D,FFMMk*  -r   N)r   r$   r%   r0   r!   r#   r   r   r   r   r   r     s    IGV	.r   r   c                       e Zd Zd Zd Zd Zy)LongImportVisitorc                 h    || _         || _        t               | _        || _        || _        g | _        y r   )maxdots	maxlengthr{   r}   r/   r*   new_imports)r   r/   r*   r   r   s        r   r0   zLongImportVisitor.__init__:  s1    " U,r   c           	      .   |j                   D ]  \  }}|	| j                  |      s| j                  j                  |       |j	                  d      }|d | }||dz   d  }| j
                  j                  t        j                  |d|d ff              y )Nre   rd   r   )	r6   _is_longr}   r   rindexr   r8   r   rG   )r   r   r   r=   r>   last_dotfrom_rP   s           r   r!   z#LongImportVisitor.visitNormalImportB  s    &88 	KD%}t!4""&&t,;;s+Yh1/  ''))%h5E4GH	r   c                 ~    |j                  d      | j                  kD  xs d|v xr t        |      | j                  kD  S )Nre   )countr   rg   r   )r   r=   s     r   r   zLongImportVisitor._is_longM  s9    zz#- 
4K6CI6	
r   N)r   r$   r%   r0   r!   r   r   r   r   r   r   9  s    	
r   r   c                       e Zd Zd Zd Zd Zy)RemovePyNameVisitorc                 V    || _         || _        t        j                  ||      | _        y r   )r   pynamer   r,   r-   )r   r*   r   r   r+   s        r   r0   zRemovePyNameVisitor.__init__T  s$     !//@r   c                 h   g }|j                         s]|j                  D ]N  \  }}	 | j                  |xs |   }t        j                  | j
                  |      r;	 |j                  ||f       P t        j                  |j                  |j                  |      S # t        j                  $ r Y Uw xY wr   )rU   r6   r   r   same_pynamer   r   r   r8   r   rG   rF   rW   )r   r   r   r<   r=   r>   r   s          r   r#   z#RemovePyNameVisitor.visitFromImportY  s    	))+*<< 0e!]]5=D9F"..t{{FC  D   $/0 $$##[%6%6	
 	
 "88 s   3BB10B1c                 D    t         j                  | |      }|||_        y y r   )r
   r   r   r]   s      r   r   zRemovePyNameVisitor.dispatchh  s'    "++D':"(G r   N)r   r$   r%   r0   r#   r   r   r   r   r   r   S  s    A

)r   r   c                 X    t        | t        j                        xr | j                  dk(  S )N
__future__)rf   r   rG   rF   )r   s    r   rT   rT   n  s%    dJ112Wt7G7G<7WWr   N)	rope.baser   r   r   r   rope.refactorr   rope.refactor.importutilsr   r
   r'   rI   rY   r_   rs   ry   r   r   r   rT   r   r   r   <module>r      s    > > % 0 &+ 1 +\'
( '
T	)' 	)C% CL1* 1,=#) =#@.& .@
) 
4)+ )6Xr   