
    Æe*4                         d Z ddlZddlZddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZ ddlmZmZ  G d d	      Z G d
 d      Zd Zd ZddZy)zA package for handling imports

This package provides tools for modifying module imports after
refactorings or as a separate task.

    N)libutils)ChangeContents	ChangeSet)occurrencesrename)actionsmodule_imports)
FromImportNormalImportc                   J    e Zd ZdZd ZddZddZddZddZddZ	d	 Z
d
 Zy)ImportOrganizerzgPerform some import-related commands

    Each method returns a `rope.base.change.Change` object.

    c                 F    || _         t        | j                         | _        y N)projectImportToolsimport_toolsselfr   s     D/usr/lib/python3/dist-packages/rope/refactor/importutils/__init__.py__init__zImportOrganizer.__init__   s    '5    Nc                 P    | j                  | j                  j                  ||      S r   ) _perform_command_on_import_toolsr   organize_importsr   resourceoffsets      r   r   z ImportOrganizer.organize_imports   (    44..&
 	
r   c                 P    | j                  | j                  j                  ||      S r   )r   r   expand_starsr   s      r   expand_star_importsz#ImportOrganizer.expand_star_imports    s(    44**Hf
 	
r   c                 P    | j                  | j                  j                  ||      S r   )r   r   froms_to_importsr   s      r   r#   z ImportOrganizer.froms_to_imports%   r   r   c                 P    | j                  | j                  j                  ||      S r   )r   r   relatives_to_absolutesr   s      r   r%   z&ImportOrganizer.relatives_to_absolutes*   s(    4444h
 	
r   c                 P    | j                  | j                  j                  ||      S r   )r   r   handle_long_importsr   s      r   r'   z#ImportOrganizer.handle_long_imports/   s(    44118V
 	
r   c                 v   | j                   j                  |      }|j                  }d }|*| j                  |j                  j                  |            } |||      }|X||k7  rRt        |j                  j                  dd      d|j                  z  z         }|j                  t        ||             |S y y )N)import_filter_ z in <%s>)r   get_pymodulesource_code_line_filterlinesget_line_numberr   __name__replacepath
add_changer   )	r   methodr   r   pymodulebefore_performingr)   resultchangess	            r   r   z0ImportOrganizer._perform_command_on_import_tools4   s    <<,,X6$00 --hnn.L.LV.TUM>&,="=''S1J4NNG ~h?@N #>r   c                     fd}|S )Nc                 L    | j                   cxk  xr | j                  k  S c S r   )
start_lineend_line)import_stmtlinenos    r   r)   z3ImportOrganizer._line_filter.<locals>.import_filterC   s%    ))VJk6J6JJJJJr    )r   r?   r)   s    ` r   r.   zImportOrganizer._line_filterB   s    	K r   r   )r1   
__module____qualname____doc__r   r   r!   r#   r%   r'   r   r.   r@   r   r   r   r      s/    6









r   r   c                       e Zd Zd Zd Zd ZddZddZddZd Z	d	 Z
dd
Zd Z	 	 	 	 	 ddZddZddZddZ	 ddZy)r   c                     || _         y r   )r   r   s     r   r   zImportTools.__init__J   s	    r   c                 H    t        j                  |      }t        |dff      S )z#The import statement for `resource`N)r   modnamer   )r   r   module_names      r   
get_importzImportTools.get_importM   s%    &&x0k40233r   c                     t        j                  |      }g }t        |t              r|D cg c]  }|df }}n|dfg}t	        |dt        |            S c c}w )z2The from import statement for `name` in `resource`Nr   )r   rG   
isinstancelistr
   tuple)r   r   namerH   namesimporteds         r   get_from_importzImportTools.get_from_importR   sc    &&x0dD!6:;(h%;E; tE +q%,77 <s   ANc                 D    t        j                  | j                  ||      S r   )r	   ModuleImportsr   )r   moduleimports_filters      r   r	   zImportTools.module_imports^   s    ++DLL&.QQr   c                 
   | j                  ||      }| j                  ||      }|j                  D ]<  }|j                  s| j	                  |j
                        s+| j                  ||      }> | j                  ||      }|j                  D ]R  }|j                  r| j	                  |j
                        s,t        |j
                  j                  d ff      |_        T  |j                           |j                         S r   )_clean_up_importsr	   importsreadonly_is_transformable_to_normalimport_info_from_to_normalr   rH   remove_duplicatesget_changed_source)r   r6   r)   r	   r>   s        r   r#   zImportTools.froms_to_importsa   s   ))(MB,,X}E)11 	CK##4+K+K'', ++HkBH	C ,,X}E)11 	K''D,L,L''- +7!--994@B+'		 	)((*0~0022r   c                 j    | j                  ||      } |j                           |j                         S r   )r	   r    r^   r   r6   r)   r	   s       r   r    zImportTools.expand_starsw   3    ,,X}E###%0~0022r   c                 ^   |j                         }|j                  }|j                  }|j                  D ]u  \  }}|}||}t	        j
                  | j                  |||   dd      }	t        j                  |	|dz   |z   |d      }
|
Ut        j                  | j                  |
|      }w |S )NF)rX   keywords.T)r6   replace_primary)get_resourcer[   rH   names_and_aliasesr   create_finderr   r   rename_in_moduler   get_string_module)r   r6   r>   r   from_importrH   rN   aliasrP   occurrence_findersources              r   r\   zImportTools._from_to_normal|   s    ((*!--!--&88 	VKD%H   + 9 9"! ,,!c!D(! $	F !#55dllFHU%	V& r   c                    |j                         }| j                  ||      }|j                          |j                         }|!t	        j
                  | j                  ||      }| j                  |      }|!t	        j
                  | j                  ||      }| j                  ||      }|j                          |j                          |j                         }|!t	        j
                  | j                  ||      }|S r   )
rf   r	   r    r^   r   rj   r   r%   r]   remove_unused_imports)r   r6   r)   r   module_with_importsrn   s         r   rW   zImportTools._clean_up_imports   s    ((*"11(MJ((*$77911$,,QH,,X611$,,QH"11(MJ--/113$77911$,,QHr   c                 
   | j                  ||      } |j                         }|D ]  \  }}| j                  |||      } | j                  ||      } |j                           |j                         }||j                  }|S r   )r	   get_relative_to_absolute_list_rename_in_moduler^   r-   )r   r6   r)   r	   to_be_absolute_listrN   absolute_namern   s           r   r%   z"ImportTools.relatives_to_absolutes   s    ,,X}EJnJJL#6 	MD---hmLH	M,,X}E44462224>))Fr   c                 "    t        |t              S r   )rK   r
   )r   r[   s     r   rZ   z'ImportTools._is_transformable_to_normal   s    +z22r   c                    |s|r| j                  ||      }|r |j                          | j                  j                  j	                  d      r |j
                          |r |j                           |j                         }|/t        j                  | j                  ||j                               }|r| j                  ||      }|r| j                  ||      S |j                  S )Nsplit_imports)r	   rp   r   prefsgetforce_single_importsr]   r^   r   rj   rf   _remove_self_importssort_importsr-   )	r   r6   unused
duplicatesselfssortr)   r	   rn   s	            r   r   zImportTools.organize_imports   s     Z!00=IN4446||!!%%o6333500026^668F!#55LL&(*?*?*A 00=IH$$X}=='''r   c                    | j                  ||      } |j                         \  }}|D ]  }	 | j                  ||dd      } |D ]  \  }}| j                  |||      } | j                  ||      } |j                           |j                         }|/t        j                  | j                  ||j                               }|S # t        $ r |cY c S w xY w)N T)till_dot)	r	   #get_self_import_fix_and_rename_listrt   
ValueErrorr^   r   rj   r   rf   )	r   r6   r)   r	   to_be_fixedto_be_renamedrN   new_namern   s	            r   r}   z ImportTools._remove_self_imports   s    ,,X}E ?N>>@	
 	 D 11(D"t1T	  , 	HND(--hhGH	H,,X}E:::<222411fh&;&;&=H     s   CCCc                 "   |j                  d      d   }t        j                  j                  j	                  |j                         |      }t        j                  | j                  ||d      }t        j                  j                  j                  |j                        }|j                  |      D ]  }	|	j                         \  }
}|rl|j                  j                  d|      dz   }|j                  ||dz
   j                         }|dk(  s&|D ]!  }|j!                         r|dvst#                |}|j%                  |
||        |j'                         }|/t)        j*                  | j                  ||j-                               }|S )	Nrd   F)rX   )r6      r   \)splitropebaseevaluateeval_str	get_scoper   rh   r   codeanalyzeChangeCollectorr-   find_occurrencesget_primary_rangeindexstripisspacer   r4   get_changedr   rj   rf   )r   r6   rN   r   r   old_name
old_pynamerm   r9   
occurrencestartendnew_endspacecrn   s                   r   rt   zImportTools._rename_in_module   sn   ::c?2&YY''001C1C1EtL
'55LL(J
 ))''778L8LM+<<h<O 
	5J#557JE3"..44S#>B ,,S7Q;?EEG{" / yy{q}",,./ uc84
	5 $$&11fh&;&;&=H r   c                 j    | j                  ||      } |j                           |j                         S r   )r	   r~   r^   r`   s       r   r~   zImportTools.sort_imports  ra   r   c                 L   | j                  ||      } |j                  ||      }t        j                  | j                   |j
                         |j                               }|D ]'  }| j                  |||j                  d      d         }) | j                  |dd|      S )N)r   rd   r   F)r   r   r)   )
r	   r'   r   rj   r   r^   rf   rt   r   r   )r   r6   maxdots	maxlengthr)   r	   r   rN   s           r   r'   zImportTools.handle_long_imports	  s    
 ,,X}E8n88)L--LL-N--/**,

   	SD--hdjjob>QRH	S $$E] % 
 	
r   r   )TTTTN)F)      N)r1   rA   rB   r   rI   rQ   r	   r#   r    r\   rW   r%   rZ   r   r}   rt   r~   r'   r@   r   r   r   r   I   sf    4

8R3,3
2&
3 (:.23 @D
r   r   c                     |j                         }t        j                  | |      }||k(  r$|j                  D cg c]  }|j                   c}S |j                  |      S c c}w )z7A shortcut for getting the `ImportInfo` used in a scope)
get_moduler	   rS   rX   r[   get_used_imports)r   	pydefinedr6   rT   stmts        r   get_importsr     s[    ##%H))'8<F9-3^^<T  <<""9-- =s   A!c                 .    t        j                  | |      S )z?A shortcut for creating a `module_imports.ModuleImports` object)r	   rS   )r   r6   s     r   get_module_importsr   '  s    ''::r   c                 (   t        | |      }g }g }d }|2t        |d|d fg      }|j                  |       |j                  |       d|v r~|j                  dd      \  }	}
t        |	d|
d fg      }| j                  j                  d      r|}|j                  |       |r|j                  |
dz   |z          n|j                  |
       t        |d fg      }|r|j                  |dz   |z          n|j                  |       |j                  |       t        j                  | |      }||}|j                  D ]!  }|j                  |      s|j                  } n |j                  |       ||j                  |         }|j                         |fS )Nr   rd   r   prefer_module_from_imports)r   r
   appendrsplitrz   r{   r   r   AddingVisitorrX   acceptr[   
add_importr   r^   )r   r6   rH   rN   rX   
candidatesrO   selected_importrk   pkgmodnormal_importvisitorimport_statementimported_names                  r   r   r   ,  s    (3GJEO a4,@T+&
k%%c1-S a3+7==9:)O+&LLsT)*LL ;"5!67M[3&-.[!m$##GZ8G'#OO ""7+%11O '***?;<M%%'66r   r   )rC   rope.base.codeanalyzer   rope.base.evaluate	rope.baser   rope.base.changer   r   rope.refactorr   r   rope.refactor.importutilsr   r	   $rope.refactor.importutils.importinfor
   r   r   r   r   r   r   r@   r   r   <module>r      sH       6 - = I6 6rR
 R
j.;
'7r   