ó
ī%![c           @   sÅ   d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z m Z m	 Z	 d d l
 m Z i  Z d Z d   Z d   Z d   Z d	   Z e j e  e j e	 j e e  d S(
   s   Astroid hooks for the Python 2 GObject introspection bindings.

Helps with understanding everything imported from 'gi.repository'
i’’’’N(   t   MANAGERt   AstroidBuildingErrort   nodes(   t   AstroidBuilders   ^[A-Za-z_]\w*$c         C   s  i  } i  } i  } i  } xst  |   D]e} | j d  r@ q% n  t j t |  sX q% n  y t |  |  } Wn
 q% n Xt j |  r | | | <q% t j |  s² t j	 |  ræ | | | <q% t j
 |  sŻ t j |  rź | | | <q% t |  j d  s8t |  j d  s8t |  j d  s8t j |  rEd | | <q% t | t t f  rg| | | <q% t |  r| | | <q% d | | <q% Wd } | r®| d |  j 7} n  x t |  D]t } | d j   r×q»n  | | } t |  }	 t | t  rd t |  j d	 d
  }	 n  | d | |	 f 7} q»W| rF| d 7} n  | r`| d |  j 7} n  x, t |  D] } | d | 7} | d 7} qmW| r¢| d 7} n  | r¼| d |  j 7} n  x, t |  D] } | d | 7} | d 7} qÉW| rž| d 7} n  | r| d |  j 7} n  xt t |  D]f } | d | 7} t | |  }
 |
 sXd }
 n  x& |
 j   D] } | d | d 7} qeW| d 7} q%W| S(   s`   
    Inspect the passed module recursively and build stubs for functions,
    classes, etc.
    t   __s   <flagss   <enum s   <GType i    t    s   # %s constants

s   "%s"s   \s   \\s   %s = %s
s   

s   # %s functions

s   def %s(*args, **kwargs):
s	       pass
s   # %s methods

s   def %s(self, *args, **kwargs):
s   # %s classes

s   class %s(object):
s   pass
s       s   
(   t   dirt
   startswitht   ret   matcht   _identifier_ret   getattrt   inspectt   isclasst
   isfunctiont	   isbuiltint   ismethodt   ismethoddescriptort   strt   isdatadescriptort
   isinstancet   intt   callablet   __name__t   sortedt   isdigitt   replacet   _gi_build_stubt
   splitlines(   t   parentt   classest	   functionst	   constantst   methodst   namet   objt   rett   valt   strvalt   classrett   line(    (    s5   lib/python2.7/site-packages/astroid/brain/brain_gi.pyR      s    
	c      
   C   sŗ  |  j  d  s! t d |    n  |  t k r|  g } g  } |  d k rX | j d  n |  d k rt | j d  n  yÓ d } xĘ t j | |  D]² } y t j   t y: d d	 l m	 } m
 } t j d
 |  t j d
 |  Wn t k
 ró n Xt |  | t t j |  7} Wd  QXWq t k
 rA| | k rB  qBq Xq WWn t k
 rhd  } t |  <qXt t  j | |   } | t |  <n
 t |  } | d  k r¶t d |    n  | S(   Ns   gi.repository.t   modnames   gi.repository.GLibs   gi._glibs   gi.repository.GObjects   gi._gobjectR   i’’’’(   t   PyGIDeprecationWarningt   PyGIWarningt   ignore(   R   R   t   _inspected_modulest   appendt	   itertoolst   chaint   warningst   catch_warningst   giR*   R+   t   simplefiltert	   Exceptiont
   __import__R   t   syst   modulest   ImportErrort   NoneR   R    t   string_build(   R)   t   modnamest   optional_modnamest   modcodet   mR*   R+   t   astng(    (    s5   lib/python2.7/site-packages/astroid/brain/brain_gi.pyt   _import_gi_modulew   sB    	
!
c         C   s¶   t  |  j  d k r t St d   |  j D  s6 t S|  j } t | t j  r | j d k rd t St | j	 t j
  r | j	 j d k r t St St | t j
  r² | j d k St S(   Ni   c         s   s!   |  ] } t  | t j  Vq d  S(   N(   R   R   t   Const(   t   .0t   arg(    (    s5   lib/python2.7/site-packages/astroid/brain/brain_gi.pys	   <genexpr>­   s    t   require_versionR3   (   t   lent   argst   Falset   allt   funcR   R   t	   Attributet   attrnamet   exprt   NameR"   t   True(   t   nodeRJ   (    (    s5   lib/python2.7/site-packages/astroid/brain/brain_gi.pyt   _looks_like_require_version§   s    	'c         C   sL   y4 d d  l  } | j |  j d j |  j d j  Wn t k
 rG n X|  S(   Ni’’’’i    i   (   R3   RE   RG   t   valueR5   (   RP   R3   (    (    s5   lib/python2.7/site-packages/astroid/brain/brain_gi.pyt   _register_require_version¾   s    ((   t   __doc__R   R/   R7   R   R1   t   astroidR    R   R   t   astroid.builderR   R-   R
   R   RA   RQ   RS   t   register_failed_import_hookt   register_transformt   Call(    (    (    s5   lib/python2.7/site-packages/astroid/brain/brain_gi.pyt   <module>	   s   	^	0		
