mò
­fIc           @   s=  d  Z  d k Z d k Z d k Z d k Z d k Z d k Z e e i d ƒ o
 d Z	 n d Z	 e i
 i d ƒ Z e i
 i d ƒ Z e i
 i d ƒ Z e i
 i d ƒ Z e e g Z h  Z d	 „  Z h  Z d
 „  Z d f  d „  ƒ  YZ d f  d „  ƒ  YZ d „  Z e d j o, y e ƒ  Z Wn e j
 o d GHn Xn d S(   s3   Find modules used by a script, using introspection.Nt   newlinest   Ut   rt
   LOAD_CONSTt   IMPORT_NAMEt
   STORE_NAMEt   STORE_GLOBALc         C   s-   t  i |  g  ƒ } | i | ƒ | t  |  <d  S(   N(   t   packagePathMapt   gett   packagenamet   pathst   appendt   path(   R	   R   R
   (    (    t)   /mit/python/lib/python2.4/modulefinder.pyt   AddPackagePath!   s    c         C   s   | t |  <d  S(   N(   t   newnamet   replacePackageMapt   oldname(   R   R   (    (    R   t   ReplacePackage-   s    t   Modulec           B   s    t  Z d  d  d „ Z d „  Z RS(   Nc         C   s:   | |  _ | |  _ | |  _ d  |  _ h  |  _	 h  |  _
 d  S(   N(   t   namet   selft   __name__t   filet   __file__R   t   __path__t   Nonet   __code__t   globalnamest   starimports(   R   R   R   R   (    (    R   t   __init__3   s    					c         C   sn   d |  i f } |  i d  j	 o | d |  i f } n |  i d  j	 o | d |  i f } n | d } | S(   Ns	   Module(%rs   , %rt   )(   R   R   t   sR   R   R   (   R   R    (    (    R   t   __repr__@   s    
(   R   t
   __module__R   R   R!   (    (    (    R   R   1   s   t   ModuleFinderc           B   sø   t  Z d  d g  g  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d  d  d „ Z	 d	 „  Z
 d
 „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d  d „ Z d „  Z d „  Z d „  Z d „  Z RS(   Ni    c         C   sf   | d  j o t i  } n | |  _  h  |  _ h  |  _ | |  _ d |  _ | |  _ | |  _	 g  |  _
 d  S(   Ni    (   R   R   t   sysR   t   modulest
   badmodulest   debugt   indentt   excludest   replace_pathst   processed_paths(   R   R   R'   R)   R*   (    (    R   R   K   s    							c         G   sV   | |  i j oB x t |  i ƒ D]
 } d Gq  W| Gx | D] } t	 | ƒ Gq9 WHn d  S(   Ns      (
   t   levelR   R'   t   rangeR(   t   it   strt   argst   argt   repr(   R   R,   R/   R0   R.   R1   (    (    R   t   msgW   s      c         G   s?   | d } | |  i j o! |  i d |  _ |  i | Œ  n d  S(   Ni    i   (   R0   R,   R   R'   R(   R3   (   R   R0   R,   (    (    R   t   msgin`   s    
c         G   s?   | d } | |  i j o! |  i d |  _ |  i | Œ  n d  S(   Ni    i   (   R0   R,   R   R'   R(   R3   (   R   R0   R,   (    (    R   t   msgoutf   s    
c         C   sN   |  i d d | ƒ t | t ƒ } d d t i f } |  i	 d | | | ƒ d  S(   Ni   t
   run_scriptt    R   t   __main__(
   R   R3   t   pathnamet   opent	   READ_MODEt   fpt   impt	   PY_SOURCEt   stufft   load_module(   R   R9   R<   R?   (    (    R   R6   l   s    c         C   sk   t  i i | ƒ \ } } t  i i | ƒ \ } } t | t	 ƒ } | d t i f } |  i | | | | ƒ d  S(   NR   (   t   osR   t   splitR9   t   dirR   t   splitextt   extR:   R;   R<   R=   R>   R?   R   R@   (   R   R9   R<   R?   R   RE   RC   (    (    R   t	   load_filer   s
    c         C   sƒ   |  i d d | | | ƒ |  i | ƒ } |  i | | ƒ \ } } |  i
 | | ƒ } | p | Sn | i o |  i | | ƒ n d  S(   Ni   t   import_hook(   R   R3   R   t   callert   fromlistt   determine_parentt   parentt   find_head_packaget   qt   tailt	   load_tailt   mR   t   ensure_fromlistR   (   R   R   RH   RI   RK   RP   RM   RN   (    (    R   RG   y   s    
c         C   sú   |  i d d | ƒ | p |  i d d ƒ d  Sn | i } | i o< |  i | } | | j p t
 ‚ |  i d d | ƒ | Sn d | j oX | i d ƒ } | |  } |  i | } | i | j p t
 ‚ |  i d d | ƒ | Sn |  i d d ƒ d  S(   Ni   RJ   s   determine_parent -> Nones   determine_parent ->t   .(   R   R4   RH   R5   R   R   t   pnameR   R%   RK   t   AssertionErrort   rfindR.   (   R   RH   RK   R.   RS   (    (    R   RJ   „   s&    	

c         C   s?  |  i d d | | ƒ d | j o+ | i d ƒ } | |  } | | d } n | } d } | o d | i | f } n | } |  i
 | | | ƒ } | o' |  i d d | | f ƒ | | f Sn | oS | } d  } |  i
 | | | ƒ } | o' |  i d d | | f ƒ | | f Sqn |  i d d | ƒ t d	 | ‚ d  S(
   Ni   RL   RR   i   R7   s   %s.%ss   find_head_package ->s"   raise ImportError: No module nameds   No module named (   R   R4   RK   R   t   findR.   t   headRN   R   t   qnamet   import_moduleRM   R5   R   t   ImportError(   R   RK   R   RW   R.   RX   RM   RN   (    (    R   RL   ™   s.    
c         C   sÚ   |  i d d | | ƒ | } x¤ | oœ | i d ƒ } | d j  o t | ƒ } n | |  | | d } } d | i	 | f } |  i | | | ƒ } | p$ |  i d d | ƒ t d | ‚ q q W|  i d d	 | ƒ | S(
   Ni   RO   RR   i    i   s   %s.%ss"   raise ImportError: No module nameds   No module named s   load_tail ->(   R   R4   RM   RN   RP   RV   R.   t   lenRW   R   t   mnameRY   R5   RZ   (   R   RM   RN   RW   R.   R\   RP   (    (    R   RO   ´   s      c         C   sË   |  i d d | | | ƒ x« | D]£ } | d j o< | p1 |  i | ƒ } | o |  i | | d ƒ qk qÃ q  t	 | | ƒ pD d | i
 | f } |  i | | | ƒ } | p t d | ‚ qÃ q  q  Wd  S(   Ni   RQ   t   *i   s   %s.%ss   No module named (   R   R3   RP   RI   t	   recursivet   subt   find_all_submodulest   allRQ   t   hasattrR   t   subnameRY   t   submodRZ   (   R   RP   RI   R^   Ra   Rc   Rd   R_   (    (    R   RQ   Ã   s     c         C   s  | i p d  Sn h  } g  }
 x% t i ƒ  D] } |
 i | d ƒ q+ WxË | i D]À }	 y t	 i
 |	 ƒ } Wn, t	 i j
 o |  i d d |	 ƒ qP n Xxu | D]m } d  } x< |
 D]4 } t | ƒ } | | | j o | |  } Pq² q² W| o | d j o | | | <qŸ qŸ WqP W| i ƒ  S(   Ni    i   s   can't list directoryR   (   RP   R   R%   t   suffixesR=   t   get_suffixest   tripleR   RC   RA   t   listdirt   namest   errorR   R3   R   R   t   modt   suffR[   t   nt   keys(   R   RP   Rl   R   R%   Rm   Ri   Rg   Rk   RC   Re   (    (    R   R`   Ñ   s4    
 
   	c         C   sq  |  i d d | | | ƒ y |  i | } Wn t j
 o n X|  i d d | ƒ | S|  i	 i
 | ƒ o |  i d d ƒ d  Sn | o( | i d  j o |  i d d ƒ d  Sn y, |  i | | o | i | ƒ \ } } } Wn* t j
 o |  i d d d  ƒ d  Sn Xz |  i | | | | ƒ } Wd  | o | i ƒ  n X| o t | | | ƒ n |  i d d | ƒ | S(   Ni   RY   s   import_module ->s   import_module -> None(   R   R4   t   partnamet   fqnameRK   R%   RP   t   KeyErrorR5   R&   t   has_keyR   R   t   find_moduleR<   R9   R?   RZ   R@   t   closet   setattr(   R   Ro   Rp   RK   R<   RP   R?   R9   (    (    R   RY   ì   s8    	#	  c   
      C   s‚  | \ } } } |  i d d | | o d | ƒ | t i	 j o- |  i
 | | ƒ }	 |  i d d |	 ƒ |	 Sn | t i j o  t | i ƒ  d | d ƒ } nw | t i j o` | i d ƒ t i ƒ  j o$ |  i d d | ƒ t d	 | ‚ n | i d ƒ t i | ƒ } n d  } |  i | ƒ }	 | |	 _ | o: |  i o |  i | ƒ } n | |	 _ |  i | |	 ƒ n |  i d d |	 ƒ |	 S(
   Ni   R@   R<   s   load_module ->s   
t   execi   s#   raise ImportError: Bad magic numbers   Bad magic number in %s(   t   suffixt   modet   typeR   R4   Rp   R<   R9   R=   t   PKG_DIRECTORYt   load_packageRP   R5   R>   t   compilet   readt   cot   PY_COMPILEDt	   get_magicRZ   t   marshalt   loadR   t
   add_moduleR   R*   t   replace_paths_in_codeR   t	   scan_code(
   R   Rp   R<   R9   t   .8Rw   Rx   Ry   R~   RP   (    (    R   R@   
  s.     	
	c         C   s9   | |  i j o h  |  i | <n d |  i | | i <d  S(   Ni   (   R   R   R&   RH   R   (   R   R   RH   (    (    R   t   _add_badmodule$  s    c         C   s-  | |  i j o |  i | | ƒ d  Sn y |  i | | ƒ Wn> t j
 o2 } |  i d d t | ƒ ƒ |  i | | ƒ n® X| o¥ x¢ | D]– } | |  i j o |  i | | ƒ q‹ n y |  i | | | g ƒ Wq‹ t j
 o@ } |  i d d t | ƒ ƒ | d | } |  i | | ƒ q‹ Xq‹ Wn d  S(   Ni   s   ImportError:RR   (   R   R   R&   R‡   RH   RG   RZ   R3   R/   RI   R_   t   fullname(   R   R   RH   RI   R3   Rˆ   R_   (    (    R   t   _safe_import_hook)  s(     c         C   s¡  | i } t | ƒ } d }
 d  } x;|
 | j  o-| |
 } |
 d }
 t	 | ƒ } | t i j o4 t	 | |
 ƒ t	 | |
 d ƒ d } |
 d }
 n | t j o | i | } q$ | t j oo| d  j p t | ƒ t j p t ‚ | i | } d } | d  j	 oM d | j o
 d } n g  } | D] }	 |	 d j o | |	 q)q)~ } n |  i | | | ƒ | o½ d  } | i o! |  i i | i  d | ƒ } n | d  j o |  i i | ƒ } n | d  j	 oK | i! i" | i! ƒ | i# i" | i# ƒ | i$ d  j o d | i# | <q'q+d | i# | <qZq$ | t% j o | i | } d | i! | <q$ q$ Wx; | i D]0 } t& | t | ƒ ƒ o |  i' | | ƒ qiqiWd  S(   Ni    i   i   i   R]   RR   ((   R~   t   co_codet   codeR[   Rm   R.   R   RI   t   ct   ordt   opt   dist   HAVE_ARGUMENTt   opargR   t	   co_constsR   Ry   t   tupleRT   t   co_namesR   t	   have_start   _[1]t   fR   R‰   RP   t   mmR   R%   R   R   R   t   updateR   R   t	   STORE_OPSt
   isinstanceR…   (   R   R~   RP   RI   R‹   R‘   R•   RŒ   R   R—   R.   Rm   R–   R˜   RŽ   (    (    R   R…   @  sT    	 

&'
6
!
 c         C   sÁ   |  i d d | | ƒ t i | ƒ } | o
 | } n |  i | ƒ } | | _	 | g | _
 | i
 t i | g  ƒ | _
 |  i d | i
 ƒ \ } } } |  i | | | | ƒ |  i d d | ƒ | S(   Ni   R{   R   s   load_package ->(   R   R4   Rp   R9   R   R   R   Rƒ   RP   R   R   R   Rs   R<   t   bufR?   R@   R5   (   R   Rp   R9   R<   R?   R   RP   Rœ   (    (    R   R{   u  s    
	c         C   s=   |  i i | ƒ o |  i | Sn t | ƒ |  i | <} | S(   N(   R   R%   Rr   Rp   R   RP   (   R   Rp   RP   (    (    R   Rƒ   †  s    c         C   s¯   | d  j	 o | i d | } n | } | |  i j o  |  i d d | ƒ t | ‚ n | d  j o: | t
 i j o d  d  d d t i f f Sn |  i	 } n t i | | ƒ S(   NRR   i   s   find_module -> ExcludedR7   (   RK   R   R   R   Rˆ   R   R)   R5   RZ   R   R$   t   builtin_module_namesR=   t	   C_BUILTINRs   (   R   R   R   RK   Rˆ   (    (    R   Rs   Œ  s    c         C   sC  Hd d GHd d GH|  i i ƒ  } | i ƒ  xH | D]@ } |  i | } | i o d Gn d Gd | G| i p d GHq3 W|  i ƒ  \ } } | oR Hd	 GHxI | D]= } |  i | i ƒ  } | i ƒ  d
 G| Gd Gd i | ƒ GHq Wn | oV Hd Gd GHxI | D]= } |  i | i ƒ  } | i ƒ  d
 G| Gd Gd i | ƒ GHqú Wn d S(   s’   Print a report to stdout, listing the found modules with their
        paths, as well as modules that are missing, or seem to be missing.
        s
     %-25s %st   Namet   Files   ----t   PRP   s   %-25sR7   s   Missing modules:t   ?s   imported froms   , s7   Submodules thay appear to be missing, but could also bes#   global names in the parent package:N(   RŸ   R    (   s   ----s   ----(   R   R%   Rn   t   sortt   keyRP   R   R   t   any_missing_maybet   missingt   maybeR   R&   t   modst   join(   R   R¨   R   R¦   Rn   R§   RP   R¤   (    (    R   t   report  s>     		
 
 
" 
c         C   s   |  i ƒ  \ } } | | S(   s½   Return a list of modules that appear to be missing. Use
        any_missing_maybe() if you want to know which modules are
        certain to be missing, and which *may* be missing.
        N(   R   R¥   R¦   R§   (   R   R§   R¦   (    (    R   t   any_missingÂ  s     c         C   s.  g  } g  } x|  i D]ö } | |  i j o q n | i d ƒ } | d j  o | i | ƒ q n | | d } | |  } |  i i | ƒ } | d j	 oe | |  i | j o | i | ƒ q| | i j o q| i o | i | ƒ q| i | ƒ q | i | ƒ q W| i ƒ  | i ƒ  | | f S(   s®  Return two lists, one with modules that are certainly missing
        and one with modules that *may* be missing. The latter names could
        either be submodules *or* just global names in the package.

        The reason it can't always be determined is that it's impossible to
        tell which names are imported when "from module import *" is done
        with an extension module, short of actually importing it.
        RR   i    i   N(   R¦   R§   R   R&   R   R)   RU   R.   R   Rc   t   pkgnameR%   R   t   pkgR   R   R   R£   (   R   R¬   R   R¦   R.   R§   Rc   R­   (    (    R   R¥   Ê  s4     
 



c         C   s‹  t  i i | i ƒ } } x@ |  i D]5 \ } } | i | ƒ o | | t | ƒ } Pq# q# W|  i of | |  i j oV | | j o |  i d d | | f ƒ n |  i d d | f ƒ |  i i | ƒ n t | i ƒ } xO t t | ƒ ƒ D]; } t | | t | ƒ ƒ o |  i | | ƒ | | <qî qî Wt i | i | i | i | i | i t  | ƒ | i! | i" | | i# | i$ | i% | i& | i' ƒ S(   Ni   s   co_filename %r changed to %rs    co_filename %r remains unchanged((   RA   R   t   normpathR~   t   co_filenamet   new_filenamet   original_filenameR   R*   R—   R   t
   startswithR[   R'   R+   R5   R   t   listR’   t   constsR-   R.   R›   Ry   R„   t   newR‹   t   co_argcountt
   co_nlocalst   co_stacksizet   co_flagsRŠ   R“   R”   t   co_varnamest   co_namet   co_firstlinenot	   co_lnotabt   co_freevarst   co_cellvars(   R   R~   R°   R—   R.   R´   R   R±   (    (    R   R„   ø  s*    
 	 (   R   R"   R   R   R3   R4   R5   R6   RF   RG   RJ   RL   RO   RQ   R`   RY   R@   R‡   R‰   R…   R{   Rƒ   Rs   Rª   R«   R¥   R„   (    (    (    R   R#   I   s0   															5			%		.c          C   s8  d  k  } y# | i  t i d d ƒ \ } } Wn! | i j
 o } | GHd  Sn Xd } d } g  } g  }
 x¢ | D]š \ } }  | d j o | d } n | d j o
 d } n | d j o | |  i t i ƒ } n | d j o
 d } n | d j o |
 i |  ƒ qo qo W| p
 d	 } n | d } t i } t i i | ƒ | d <| | } | d j o) d
 GHx! | D] }	 d Gt |	 ƒ GHqkWn t | | |
 ƒ } x€ | d D]t } | d j o d } q¥n | o@ | d d j o | i | d  d  d g ƒ q| i | ƒ q¥| i | ƒ q¥W| i | ƒ | i ƒ  | S(   Ni   s   dmp:qx:i    s   -ds   -ms   -ps   -qs   -xs   hello.pys   path:s      iþÿÿÿs   .*R]   (   t   getoptR$   t   argvt   optsR0   Rj   R3   R'   t   domodst   addpatht   excludet   ot   aRB   RA   t   pathsepR   t   scriptR   t   dirnamet   itemR2   R#   t   mfR1   RG   R   RF   R6   Rª   (   RÇ   RÄ   RÉ   R1   R0   RÆ   R3   RÃ   RÌ   RË   RÅ   R'   RÀ   R   RÂ   (    (    R   t   test  s^    	#	 





  
R8   s   
[interrupt](   t   __doc__R   R=   R   RA   R$   Rµ   Rb   t
   __stdout__R;   t   opnamet   indexR   R   R   R   Rš   R   R   R   R   R   R#   RÍ   R   RÌ   t   KeyboardInterrupt(   R   R   R   R;   R   Rš   R=   R   RÍ   Rµ   R   R$   R   RÌ   R#   R   R   RA   R   R   (    (    R   R¢      s6   						
		ÿ Ì	;