ó
• –Qc           @   sÎ   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l m Z d  d l	 j
 Z d  d l Z d  d l Z e j e ƒ Z d  Z d d d d g Z d d d	 „  ƒ  YZ d
 d d „  ƒ  YZ d S(   iÿÿÿÿN(   t   dependt   hooks(   t   is_wins	   top-levelt   conditionalt   delayeds   delayed, conditionalt   ImportTrackerModulegraphc           B   s2   e  Z d  Z d d d d „ Z d „  Z d „  Z RS(   sU  
    New import tracker based on module 'modulegraph' for resolving
    dependencies on Python modules.

    PyInstaller is not able to handle some cases of resolving dependencies.
    Rather try use a module for that than trying to fix current implementation.

    Public api:

        self.analyze_scripts()
        self.getwarnings()
    c         C   s   i  |  _  | r | |  _ n  |  j j t j ƒ t ƒ  |  _ | rS t j j | ƒ n  | d  k rn t	 ƒ  |  _
 n t	 | ƒ |  _
 d  S(   N(   t   warningst   patht   extendt   syst   dictt   modulesR   t   __path__t   Nonet   sett   excludes(   t   selft   xpatht	   hookspathR   (    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyt   __init__3   s    	c         C   sG   d d l  m } m } | | d |  j ƒ} | | ƒ \ } } | | f S(   s–   
        Analyze given scripts and get dependencies on other Python modules.

        return two lists - python modules and python extensions
        iÿÿÿÿ(   t   find_modulest   parse_mf_resultsR   (   t   modulegraph.find_modulesR   R   R   (   R   t	   filenamesR   R   t   mft   py_filest
   extensions(    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyt   analyze_scriptA   s    c         C   sq   |  j  j ƒ  } x[ |  j j ƒ  D]J \ } } | r x5 | j  D]' } | j | d | j | j f ƒ q; Wq q W| S(   Ns
    - %s (%s)(   R   t   keysR   t   itemst   appendt   __name__t   __file__(   R   R   t   nmt   modt   w(    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyt   getwarningsN   s    ,N(   R   t
   __module__t   __doc__R   R   R   R$   (    (    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR   &   s   	t   ImportTrackerc           B   sq   e  Z d d d d d  „ Z d d „ Z d d d d „ Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z RS(   c            s9  t  r= ˆ  r= d t j f ‡  ‡ f d †  ƒ  Y‰ ˆ ƒ  |  _ n t ƒ  |  _ g  |  _ i  |  _ | rm | |  _ n  |  j j t j ƒ t rÅ t	 j
 j j ƒ  t	 j
 j j ƒ  t	 j
 j j |  j ƒ g |  _ n- t	 j
 j j ƒ  t	 j
 j j |  j ƒ g |  _ | rt j j | ƒ n  | d  k r&t ƒ  |  _ n t | ƒ |  _ d  S(   Nt   LogDictc              s2   e  Z d  Z ‡  ‡ f d †  Z d „  Z d „  Z RS(   i    c            su   t  j  j |  | Œ ˆ j d 7_ d d j t t t j ƒ ƒ ˆ j f } t j	 j ˆ  | ƒ } t
 | d ƒ |  _ d  S(   Ni   s   logdict%s-%d.logt   .R#   (   t   UserDictR   t   countt   joint   mapt   strR	   t   version_infot   osR   t   opent   logfile(   R   t   argsR2   (   t   workpathR(   (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR   `   s    c         S   sC   |  j  j d | |  j j | ƒ | f ƒ t j j |  | | ƒ d  S(   Ns   %s: %s -> %s
(   R2   t   writet   datat   getR*   t   __setitem__(   R   t   keyt   value(    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR8   h   s    )c         S   s+   |  j  j d | ƒ t j j |  | ƒ d  S(   Ns	     DEL %s
(   R2   R5   R*   t   __delitem__(   R   R9   (    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR;   l   s    (   R   R%   R+   R   R8   R;   (    (   R4   R(   (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR(   ]   s   	(   t	   __debug__R*   R   R
   R   R   R   R	   R   t   PyInstallerR    t   impdirectort   BuiltinImportDirectort   RegistryImportDirectort   PathImportDirectort   metapathR   R   R   R   R   (   R   R   R   R   R4   (    (   R4   R(   s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR   Y   s(    "		!c         C   s  | } | d  k r d } n  i  } |  j | | ƒ } t d  | | g t | ƒ ƒ } d } x$| t | ƒ k  r~| | \ } } | j | d ƒ r¼ | | =|  j | } | r{| j | ƒ q{q[ | d } d | | <| } |  j | } | r[ | j | ƒ x‚ | j D]t \ }	 }
 } } |
 d | } |  j |	 | | | ƒ } t d  | | g t | ƒ ƒ } | | | | +| t | ƒ } q Wq[ q[ Wt d „  | ƒ S(   Nt   __main__i    i   i   c         S   s   |  d S(   Ni    (    (   t   a(    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyt   <lambda>©   s    (   R   t   analyze_oneR-   t   lenR7   R   t   xreft   imports(   R   R!   t
   importernmt   importert   seent   nmst   iR"   t   jt   namet	   isdelayedt   isconditionalt   levelt   imptypt   newnms(    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyt	   analyze_r   s6    	

i    iÿÿÿÿc         C   s_  | s | } d
 } d } n  | j d ƒ } | d k  r¢ d
 g } | r)|  j | ƒ rg | j d | ƒ qŸ d j | j d ƒ d  ƒ } | rŸ | j d | ƒ qŸ q)n‡ | d k rÀ d
 } d
 g } ni | d k r)|  j | ƒ rè | d 8} n  | d k rd j | j d ƒ |  ƒ } n  | d
 g } d
 } n  d
 } | s;t ‚ | d d k r[| d =g  } n  g  }	 xË | D]Ã }
 |
 } xª t | ƒ D]’ \ } } | r¤| d | } n | } |  j j | t	 ƒ } | t	 k rót
 j d | ƒ |  j | | | ƒ } n  | r|	 j | j ƒ | } qPqW| d } | rhPqhqhW| t | ƒ k  r¿| r{t |  j | | | ƒ re|	 S|  j | ƒ s{|	 Sn  d |  j d | t | | pšd f <| |  j k r»|  j | =n  |	 S| d
 k rÏ|	 S|  j | } | j ƒ  r[xp | j D]b } t | | ƒ sò|  j | | | d | ƒ } | r=|	 j | j ƒ qT| j j d	 | ƒ qòqòWn  |	 S(   sm   
        break the name being imported up so we get:
        a.b.c -> [a, b, c] ; ..z -> ['', '', z]
        i    R)   iÿÿÿÿi   t   *s   Analyzing %ss'   W: no module named %s (%s import by %s)RC   s   W: name %s not foundN(   R   t   splitt	   ispackaget   insertR,   t   AssertionErrort	   enumerateR   R7   t   UNTRIEDt   loggert   debugt   doimportR   R   RG   t   hasattrR   t   imptypst   _all(   R   R!   RJ   RT   RS   t   nmpartst   contextst   pkgnmRc   RM   t   contextt   ctxRN   t   fqnameR"   t	   bottommod(    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyRF   «   s†    		 			
$c         C   s   y/ t  | d ƒ j ƒ  d } t | | d ƒ } Wn, t k
 r] } t j | ƒ t d ƒ ‚ n Xt j j	 | | ƒ } | |  j d <|  j
 d ƒ S(   Nt   rUs   
t   execi
   RC   (   R1   t   readt   compilet   SyntaxErrorR^   t	   exceptiont
   SystemExitR    R   t   PyScriptRV   (   R   t   fnmt   stufft   cot   eR"   (    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR     s    c         C   s   |  j  | j ƒ  S(   N(   R   RY   (   R   R!   (    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyRY     s    c   
      C   s›  d | k s t  | ƒ ‚ | |  j k r+ d S| r| |  j | } | j ƒ  ru | j | ƒ } | ry t | | | ƒ qy q© d Sn- x* |  j D] } | j | ƒ } | r† Pq† q† W| rr| | _	 y; d | } t
 d t ƒ  t ƒ  | g ƒ } t | | ƒ }	 Wn t k
 rn\ Xt j d | ƒ |  j | |	 ƒ } | | j	 k rbt j d | | j	 ƒ | |  j | j	 <n  | |  j | <n% | d k sŠt  | ƒ ‚ d |  j | <| S(   sã   

        nm      name
                e.g.:
        ctx     context
                e.g.:
        fqname  fully qualified name
                e.g.:

        Return dict containing collected information about module (
        R)   s   hook-s   PyInstaller.hookss   Processing hook %ss   %s is changing its name to %sN(   R[   R   R   R   RY   R`   t   setattrRB   t   getmodR   t
   __import__t   globalst   localst   getattrt   AttributeErrorR^   t   infot   _handle_hookt   warn(
   R   R!   Rh   Ri   t   parentR"   t   directort	   hookmodnmR   t   hook(    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR`     s@    	
	c         C   sw  t  | d ƒ r! | j | ƒ } n  t  | d ƒ rc x0 | j D]" } | j j | d d d f ƒ q: Wn  t  | d ƒ rŸ x* | j D] \ } } t | | | ƒ q| Wn  t  | d ƒ rsd „  } | j } x° | j D]¢ \ } }	 |	 rì |	 t j	 7}	 n  x} t
 j
 | ƒ D]l }
 t j j |
 ƒ r=| j |	 t j j |
 ƒ |
 d f ƒ qü t j j |
 | t j j |
 ƒ |	 | f ƒ qü WqÊ Wn  | S(	   NR„   t   hiddenimportsi    iÿÿÿÿt   attrst   datasc         S   sv   |  \ } } } x` | D]X } t  j j | | ƒ } t  j j | ƒ r | j | | t | ƒ d | d f ƒ q q Wd  S(   Ni   t   DATA(   R0   R   R,   t   isfileR   RG   (   t   .0t   dirnamet   namest   baset   dest_dirR‡   t   fn(    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyt   _visitf  s
    Rˆ   (   Ra   R„   R…   RI   R   R†   Rw   R‡   R0   t   sept   globR   R‰   t   basenamet   walkR‹   (   R   R"   R„   t   impnmt   attrt   valR   R‡   t   gRŽ   R   (    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR   Y  s(    #		)'c         C   sq   |  j  j ƒ  } x[ |  j j ƒ  D]J \ } } | r x5 | j  D]' } | j | d | j | j f ƒ q; Wq q W| S(   Ns
    - %s (%s)(   R   R   R   R   R   R   R    (   R   R   R!   R"   R#   (    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR$   x  s    ,c         C   so   |  j  j ƒ  } | j ƒ  g  } xI | D]A \ } } | r& | j j ƒ  } | j ƒ  | j | | f ƒ q& q& W| S(   N(   R   R   t   sortt   _xrefR   R   (   R   t   modst   rsltR!   R"   t	   importers(    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyt   getxref€  s    

N(   R   R%   R   R   RV   RF   R   RY   R`   R   R$   Rž   (    (    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyR'   W   s   4\			D		(    (    (   R	   R0   R’   R*   R=   R    R   t   PyInstaller.compatR   t   PyInstaller.logt   logt   loggingt   PyInstaller.depend.ownert   PyInstaller.depend.impdirectort	   getLoggerR   R^   R]   Rb   R   R'   (    (    (    s`   C:\Users\Salopaasi\My Documents\pyinstaller-pyinstaller-275d4c9\PyInstaller\depend\imptracker.pyt   <module>   s   1