ó
’›V]c           @   sö   d  d l  Z  d  d l Z d  d l m Z m Z m Z d  d l m Z m Z d  d l	 m
 Z
 d  d l m Z d  d l m Z d  d l m Z d  d l m Z d	 Z d Z d Z d „  Z d „  Z d e f d „  ƒ  YZ d „  Z d „  Z d d „ Z d S(   iÿÿÿÿN(   t   FileNotFoundErrort   PermissionErrort   IsADirectoryError(   t   SameEnvironmentt   get_cached_default_environment(   t   WrongVersion(   t   force_unicode(   t   discover_buildout_paths(   t   evaluator_as_method_param_cache(   t   traverse_parentss   .jedis   setup.pys   .gits   .hgs   requirements.txts   MANIFEST.ini   c         c   sB   t  ƒ  } x2 |  D]* } | | k r( q n  | j | ƒ | Vq Wd  S(   N(   t   sett   add(   t   patht   usedt   p(    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   _remove_duplicates_from_path   s    	c         C   s   t  t t |  ƒ ƒ S(   N(   t   listt   mapR   (   t   lst(    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   _force_unicode_list   s    t   Projectc           B   sƒ   e  Z d	 Z d
 Z e d „  ƒ Z e d „  ƒ Z d „  Z	 e
 ƒ  d
 d „ ƒ Z e
 ƒ  d
 e d „ ƒ Z d „  Z d „  Z d „  Z RS(   t   _environmentc         C   s   t  j j |  t d ƒ S(   Ns   project.json(   t   osR   t   joint   _CONFIG_FOLDER(   t	   base_path(    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   _get_json_path%   s    c         C   so   t  |  j | ƒ ƒ  } t j | ƒ \ } } Wd QX| d k r_ |  j ƒ  } | j j | ƒ | St d ƒ ‚ d S(   sV   
        :param path: The path of the directory you want to use as a project.
        Ni   sE   The Jedi version of this project seems newer than what we can handle.(   t   openR   t   jsont   loadt   __new__t   __dict__t   updateR   (   t   clsR   t   ft   versiont   datat   self(    (    s/   lib/python2.7/site-packages/jedi/api/project.pyR   )   s    c            s,   d d t t ‡  f d † } | | |  d S(   sÒ  
        :param path: The base path for this project.
        :param sys_path: list of str. You can override the sys path if you
            want. By default the ``sys.path.`` is generated from the
            environment (virtualenvs, etc).
        :param smart_sys_path: If this is enabled (default), adds paths from
            local directories. Otherwise you will have to rely on your packages
            being properly configured on the ``sys.path``.
        c            sO   t  j j |  ƒ ˆ  _ t | t ƒ r0 | ˆ  _ n  | ˆ  _ | ˆ  _ | ˆ  _	 d  S(   N(
   R   R   t   abspatht   _patht
   isinstanceR   R   t	   _sys_patht   _smart_sys_patht   _django(   R   t   environmentt   sys_patht   smart_sys_pathR+   (   R%   (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   py2_compD   s    		N(   t   Nonet   Truet   False(   R%   R   t   kwargsR/   (    (   R%   s/   lib/python2.7/site-packages/jedi/api/project.pyt   __init__:   s    
	c         C   sl   |  j  d  k	 r |  j  S| d  k r1 |  j ƒ  } n  t | j ƒ  ƒ } y | j d ƒ Wn t k
 rg n X| S(   Nt    (   R)   R0   t   get_environmentR   t   get_sys_patht   removet
   ValueError(   R%   t	   evaluatorR,   R-   (    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   _get_base_sys_pathP   s    c   	      C   sÖ   g  } g  } t  |  j | | ƒ ƒ } |  j r– | j |  j ƒ | j d k	 r– | t | | j ƒ 7} | r“ t  t | j ƒ ƒ } | t	 | ƒ 7} q“ q– n  |  j
 r² | j |  j ƒ n  | | | } t  t t | ƒ ƒ ƒ S(   sƒ   
        Keep this method private for all users of jedi. However internally this
        one is used like a public method.
        N(   R   R;   R*   t   appendR'   t   script_pathR0   R   R	   t   reversedR+   R   R   (	   R%   R:   R,   t   add_parent_pathst   suffixedt   prefixedR-   t	   traversedR   (    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   _get_sys_path`   s    		c         C   sq   t  |  j ƒ } x! |  j D] } | j | d  ƒ q Wt |  j |  j ƒ d ƒ  } t j	 t
 | f | ƒ SWd  QXd  S(   Nt   wb(   t   dictR   t   _serializer_ignore_attributest   popR0   R   R   R'   R   t   dumpt   _SERIALIZER_VERSION(   R%   R$   t	   attributeR"   (    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   save~   s
    c         C   s   |  j  d  k r t ƒ  S|  j  S(   N(   R   R0   R   (   R%   (    (    s/   lib/python2.7/site-packages/jedi/api/project.pyR6   †   s    c         C   s   d |  j  j |  j f S(   Ns   <%s: %s>(   t	   __class__t   __name__R'   (   R%   (    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   __repr__Œ   s    (   R   N(   RM   t
   __module__RF   R0   R   t   staticmethodR   t   classmethodR   R4   R   R;   R1   RC   RK   R6   RN   (    (    (    s/   lib/python2.7/site-packages/jedi/api/project.pyR       s   			c         C   s:   x3 t  D]+ } t j j t j j |  | ƒ ƒ r t Sq Wt S(   N(   t   _CONTAINS_POTENTIAL_PROJECTR   R   t   existsR   R1   R2   (   R   t   name(    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   _is_potential_project   s    !c         C   s]   y; t  t j j |  d ƒ d ƒ  } d | j ƒ  k SWd QXWn t t t f k
 rX t SXt S(   sB    Detects the path of the very well known Django library (if used) s	   manage.pyt   rbt   DJANGO_SETTINGS_MODULEN(	   R   R   R   R   t   readR    R   R   R2   (   t	   directoryR"   (    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   _is_django_path—   s    !c         C   s]  |  d  k r t j ƒ  }  n  t j j |  ƒ } d  } d  } xÁ t | d t ƒD]­ } y t j | ƒ SWn t	 t
 t f k
 r n X| d  k r¼ t j j t j j | d ƒ ƒ r³ qL q¼ | } n  t | ƒ rØ t | d t ƒS| d  k rL t | ƒ rL | } qL qL W| d  k	 rt | ƒ S| d  k	 r)t | ƒ St j j |  ƒ rA|  n t j j |  ƒ } t | ƒ S(   Nt   include_currents   __init__.pyR+   (   R0   R   t   getcwdR   t   realpathR	   R1   R   R   R    R   R   RS   R   RZ   RU   t   isdirt   dirname(   R   t   checkt   probable_patht   first_no_init_filet   dirt   curdir(    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   get_default_project¢   s0    !	

*(   s   setup.pys   .gits   .hgs   requirements.txts   MANIFEST.in(   R   R   t   jedi._compatibilityR    R   R   t   jedi.api.environmentR   R   t   jedi.api.exceptionsR   R   t   jedi.evaluate.sys_pathR   t   jedi.evaluate.cacheR   t   jedi.common.utilsR	   R   RR   RI   R   R   t   objectR   RU   RZ   R0   Re   (    (    (    s/   lib/python2.7/site-packages/jedi/api/project.pyt   <module>   s"   			p		