³ò
™›\Kc           @   sO  d  Z  d d k Z d d k Z d d k Z d d k Z d d k Z d 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.iÿÿÿÿ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   append(   t   packagenamet   patht   paths(    (    s"   /usr/lib/python2.5/modulefinder.pyt   AddPackagePath!   s    c         C   s   | t  |  <d  S(   N(   t   replacePackageMap(   t   oldnamet   newname(    (    s"   /usr/lib/python2.5/modulefinder.pyt   ReplacePackage-   s    t   Modulec           B   s    e  Z d d d  „ Z d „  Z RS(   c         C   s:   | |  _  | |  _ | |  _ d  |  _ h  |  _ h  |  _ d  S(   N(   t   __name__t   __file__t   __path__t   Nonet   __code__t   globalnamest   starimports(   t   selft   namet   fileR   (    (    s"   /usr/lib/python2.5/modulefinder.pyt   __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   R   R   (   R   t   s(    (    s"   /usr/lib/python2.5/modulefinder.pyt   __repr__@   s    
N(   R   t
   __module__R   R   R    (    (    (    s"   /usr/lib/python2.5/modulefinder.pyR   1   s   t   ModuleFinderc           B   sø   e  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(   i    c         C   sf   | d  j o t i } n | |  _ h  |  _ h  |  _ | |  _ d |  _ | |  _ | |  _ g  |  _	 d  S(   Ni    (
   R   t   sysR   t   modulest
   badmodulest   debugt   indentt   excludest   replace_pathst   processed_paths(   R   R   R&   R(   R)   (    (    s"   /usr/lib/python2.5/modulefinder.pyR   K   s    							c         G   sV   | |  i  j oB x t |  i ƒ D]
 } d Gq  W| Gx | D] } t | ƒ Gq9 WHn d  S(   Ns      (   R&   t   rangeR'   t   repr(   R   t   levelt   strt   argst   it   arg(    (    s"   /usr/lib/python2.5/modulefinder.pyt   msgW   s      c         G   s?   | d } | |  i  j o! |  i d |  _ |  i | Œ  n d  S(   Ni    i   (   R&   R'   R2   (   R   R/   R-   (    (    s"   /usr/lib/python2.5/modulefinder.pyt   msgin`   s    
c         G   s?   | d } | |  i  j o! |  i d |  _ |  i | Œ  n d  S(   Ni    i   (   R&   R'   R2   (   R   R/   R-   (    (    s"   /usr/lib/python2.5/modulefinder.pyt   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__(   R2   t   opent	   READ_MODEt   impt	   PY_SOURCEt   load_module(   R   t   pathnamet   fpt   stuff(    (    s"   /usr/lib/python2.5/modulefinder.pyR5   l   s    c         C   sk   t  i i | ƒ \ } } t  i i | ƒ \ } } t | t ƒ } | d t i f } |  i | | | | ƒ d  S(   NR   (	   t   osR   t   splitt   splitextR8   R9   R:   R;   R<   (   R   R=   t   dirR   t   extR>   R?   (    (    s"   /usr/lib/python2.5/modulefinder.pyt	   load_filer   s
    c         C   sƒ   |  i  d d | | | ƒ |  i | ƒ } |  i | | ƒ \ } } |  i | | ƒ } | p | Sn | i o |  i | | ƒ n d  S(   Ni   t   import_hook(   R2   t   determine_parentt   find_head_packaget	   load_tailR   t   ensure_fromlistR   (   R   R   t   callert   fromlistt   parentt   qt   tailt   m(    (    s"   /usr/lib/python2.5/modulefinder.pyRF   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   RG   s   determine_parent -> Nones   determine_parent ->t   .(   R3   R4   R   R   R   R$   t   AssertionErrort   rfind(   R   RK   t   pnameRM   R0   (    (    s"   /usr/lib/python2.5/modulefinder.pyRG   „   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   RH   RQ   i   R6   s   %s.%ss   find_head_package ->s"   raise ImportError: No module nameds   No module named (   R3   t   findR   t   import_moduleR4   R   t   ImportError(   R   RM   R   R0   t   headRO   t   qnameRN   (    (    s"   /usr/lib/python2.5/modulefinder.pyRH   ™   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   RI   RQ   i    i   s   %s.%ss"   raise ImportError: No module nameds   No module named s   load_tail ->(   R3   RU   t   lenR   RV   R4   RW   (   R   RN   RO   RP   R0   RX   t   mname(    (    s"   /usr/lib/python2.5/modulefinder.pyRI   ´   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   RJ   t   *i   s   %s.%ss   No module named (   R2   t   find_all_submodulesRJ   t   hasattrR   RV   RW   (   R   RP   RL   t	   recursivet   subt   allt   subnamet   submod(    (    s"   /usr/lib/python2.5/modulefinder.pyRJ   Ã   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   (   R   R:   t   get_suffixesR	   R@   t   listdirt   errorR2   R   RZ   t   keys(   R   RP   R$   t   suffixest   tripleRC   t   namesR   t   modt   sufft   n(    (    s"   /usr/lib/python2.5/modulefinder.pyR]   Ñ   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   RV   s   import_module ->s   import_module -> None(   R3   R$   t   KeyErrorR4   R%   t   has_keyR   R   t   find_moduleRW   R<   t   closet   setattr(   R   t   partnamet   fqnameRM   RP   R>   R=   R?   (    (    s"   /usr/lib/python2.5/modulefinder.pyRV   ì   s6    	#	 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(   R3   R:   t   PKG_DIRECTORYt   load_packageR4   R;   t   compilet   readt   PY_COMPILEDt	   get_magicRW   t   marshalt   loadR   t
   add_moduleR   R)   t   replace_paths_in_codeR   t	   scan_code(
   R   Rt   R>   R=   t   .4t   suffixt   modet   typeRP   t   co(    (    s"   /usr/lib/python2.5/modulefinder.pyR<   
  s0      	
	c         C   s9   | |  i  j o h  |  i  | <n d |  i  | | i <d  S(   Ni   (   R%   R   (   R   R   RK   (    (    s"   /usr/lib/python2.5/modulefinder.pyt   _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:RQ   (   R%   R†   RF   RW   R2   R.   (   R   R   RK   RL   R2   R`   t   fullname(    (    s"   /usr/lib/python2.5/modulefinder.pyt   _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\   RQ   (   t   co_codeRZ   R   t   ordt   dist   HAVE_ARGUMENTR   t	   co_constsR   R„   t   tupleRR   t   co_namesRˆ   R   R$   R   R   R   t   updateR   R   t	   STORE_OPSt
   isinstanceR€   (   R   R…   RP   t   codeRm   R0   RL   t   ct   opt   opargR   t	   have_start   _[1]t   ft   mm(    (    s"   /usr/lib/python2.5/modulefinder.pyR€   @  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   Rw   R   s   load_package ->(
   R3   R   R   R~   R   R   R   Rp   R<   R4   (   R   Rt   R=   R   RP   R>   t   bufR?   (    (    s"   /usr/lib/python2.5/modulefinder.pyRw   u  s    
	c         C   s=   |  i  i | ƒ o |  i  | Sn t | ƒ |  i  | <} | S(   N(   R$   Ro   R   (   R   Rt   RP   (    (    s"   /usr/lib/python2.5/modulefinder.pyR~   †  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(   NRQ   i   s   find_module -> ExcludedR6   (   R   R   R(   R4   RW   R#   t   builtin_module_namesR:   t	   C_BUILTINR   Rp   (   R   R   R   RM   R‡   (    (    s"   /usr/lib/python2.5/modulefinder.pyRp   Œ  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   %-25sR6   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$   Rg   t   sortR   R   t   any_missing_maybeR%   t   join(   R   Rg   t   keyRP   t   missingt   maybeR   t   mods(    (    s"   /usr/lib/python2.5/modulefinder.pyt   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.
        (   R£   (   R   R¦   R§   (    (    s"   /usr/lib/python2.5/modulefinder.pyt   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.
        RQ   i    i   N(
   R%   R(   RS   R	   R$   R   R   R   R   R¢   (   R   R¦   R§   R   R0   Rb   t   pkgnamet   pkg(    (    s"   /usr/lib/python2.5/modulefinder.pyR£   Ê  s2    	
 



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(    R@   R   t   normpatht   co_filenameR)   t
   startswithRZ   R&   R*   R4   R	   t   listR   R+   R’   R„   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…   t   new_filenamet   original_filenameR™   R   t   constsR0   (    (    s"   /usr/lib/python2.5/modulefinder.pyR   ø  s.    
 	 N(   R   R!   R   R   R2   R3   R4   R5   RE   RF   RG   RH   RI   RJ   R]   RV   R<   R†   Rˆ   R€   Rw   R~   Rp   R©   Rª   R£   R   (    (    (    s"   /usr/lib/python2.5/modulefinder.pyR"   I   s0   															5			%		.c          C   s;  d 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 |	 ƒ qr qr W| p
 d
 }
 n | d }
 t i } t i i	 |
 ƒ | d <| | } | d j o) d GHx! | D] } d Gt
 | ƒ GHqn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ÿÿÿÿi   s   dmp:qx:i    s   -ds   -ms   -ps   -qs   -xs   hello.pys   path:s      iþÿÿÿs   .*R\   (   t   getoptR#   t   argvRf   RA   R@   t   pathsepR	   R   t   dirnameR,   R"   RF   R   RE   R5   R©   (   R¿   t   optsR/   R2   R&   t   domodst   addpatht   excludet   ot   at   scriptR   t   itemt   mfR1   (    (    s"   /usr/lib/python2.5/modulefinder.pyt   test  s^    #	 





  
R7   s   
[interrupt](   t   __doc__R‹   R:   R|   R@   R#   R±   R^   t
   __stdout__R9   t   opnamet   indexR   R   R   R   R‘   R   R   R   R   R   R"   RÌ   R   RË   t   KeyboardInterrupt(    (    (    s"   /usr/lib/python2.5/modulefinder.pys   <module>   s6   
		ÿ Ì	;