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 | } |  i d d | ƒ | Sn d | j oA | i
 d ƒ } | |  } |  i | } |  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   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   RV   R.   RW   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   RU   R.   t   lenRV   R   t   mnameRX   R5   RY   (   R   RM   RN   RV   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   subnameRX   t   submodRY   (   R   RP   RI   R]   R`   Rb   Rc   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   suffRZ   t   nt   keys(   R   RP   Rk   R   R%   Rl   Rh   Rf   Rj   RC   Rd   (    (    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   RX   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?   RY   R@   t   closet   setattr(   R   Rn   Ro   RK   R<   RP   R?   R9   (    (    R   RX   ì   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   Ro   R<   R9   R=   t   PKG_DIRECTORYt   load_packageRP   R5   R>   t   compilet   readt   cot   PY_COMPILEDt	   get_magicRY   t   marshalt   loadR   t
   add_moduleR   R*   t   replace_paths_in_codeR   t	   scan_code(
   R   Ro   R<   R9   t   .8Rv   Rw   Rx   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   RY   R3   R/   RI   R^   t   fullname(   R   R   RH   RI   R3   R‡   R^   (    (    R   t   _safe_import_hook)  s(     c         C   sz  | 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 oH| 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  | <q3q$ | t" j o | i | } d | i | <q$ q$ Wx; | i D]0 } t# | t$ | ƒ ƒ o |  i% | | ƒ qBqBWd  S(   Ni    i   i   i   R\   RR   (&   R}   t   co_codet   codeRZ   Rl   R.   R   RI   t   ct   ordt   opt   dist   HAVE_ARGUMENTt   opargR   t	   co_constsR   t   co_namesR   t	   have_start   _[1]t   fR   Rˆ   RP   t   mmR   R%   R   R   R   t   updateR   R   t	   STORE_OPSt
   isinstanceRx   R„   (   R   R}   RP   RI   RŠ   R   R“   R‹   R   R•   R–   Rl   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   Rz   R   s   load_package ->(   R   R4   Ro   R9   R   R   R   R‚   RP   R   R   R   Rr   R<   t   bufR?   R@   R5   (   R   Ro   R9   R<   R?   R   RP   Rš   (    (    R   Rz   u  s    
	c         C   s=   |  i i | ƒ o |  i | Sn t | ƒ |  i | <} | S(   N(   R   R%   Rq   Ro   R   RP   (   R   Ro   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   RY   R   R$   t   builtin_module_namesR=   t	   C_BUILTINRr   (   R   R   R   RK   R‡   (    (    R   Rr   Œ  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%   Rm   t   sortt   keyRP   R   R   t   any_missing_maybet   missingt   maybeR   R&   t   modst   join(   R   R¦   R   R¤   Rm   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)   RT   R.   R   Rb   t   pkgnameR%   R   t   pkgR   R   R   R¡   (   R   Rª   R   R¤   R.   R¥   Rb   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
   startswithRZ   R'   R+   R5   R   t   listR‘   t   constsR-   R.   R™   Rx   Rƒ   t   newRŠ   t   co_argcountt
   co_nlocalst   co_stacksizet   co_flagsR‰   t   tupleR’   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_   RX   R@   R†   Rˆ   R„   Rz   R‚   Rr   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   Ri   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³   Ra   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   						
		ÿ Ì	;