ó
öÀ„\c           @   sŠ  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m 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 m Z e rá d d l m Z m Z m Z m Z m Z m Z m Z m Z n  e j e ƒ Z d	 e  f d
 „  ƒ  YZ! d e
 f d „  ƒ  YZ" d e  f d „  ƒ  YZ# e j$ d „  ƒ Z% e d „ Z& d e e d „ Z' e d d d d g ƒ Z( d d „ Z* d S(   s×   
    sphinx.ext.autodoc.importer
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Importer utilities for autodoc

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿN(   t
   namedtuple(   t   FunctionTypet
   MethodTypet
   ModuleType(   t   PY2t	   iteritems(   t   logging(   t   isenumclasst   safe_getattr(   t   Anyt   Callablet   Dictt	   Generatort   Iteratort   Listt   Optionalt   Tuplet   _MockObjectc           B   s_   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   s   Used by autodoc_mock_imports.c         O   st   t  | ƒ d k rZ t | d t ƒ rZ | d d j |  k rZ t | d t f | d |  St t |  ƒ j |  ƒ Sd  S(   Ni   i   iÿÿÿÿi    i   (   t   lent
   isinstancet   tuplet	   __class__t   typeR   t   supert   __new__(   t   clst   argst   kwargs(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyR   "   s    <c         O   s   d |  _  d  S(   Nt    (   t   __qualname__(   t   selfR   R   (    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   __init__*   s    c         C   s   d S(   Ni    (    (   R   (    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   __len__.   s    c         C   s   t  S(   N(   t   False(   R   t   key(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   __contains__2   s    c         C   s
   t  g  ƒ S(   N(   t   iter(   R   (    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   __iter__6   s    c         C   s
   |  j  f S(   N(   R   (   R   t   bases(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   __mro_entries__:   s    c         C   s   |  S(   N(    (   R   R"   (    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   __getitem__>   s    c         C   s   |  S(   N(    (   R   R"   (    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   __getattr__B   s    c         O   s.   | r* t  | d ƒ t t g k r* | d S|  S(   Ni    (   R   R   R   (   R   R   t   kw(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   __call__F   s    "(   t   __name__t
   __module__t   __doc__R   R   R    R#   R%   R'   R(   R)   R+   (    (    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyR      s   								t   _MockModulec           B   s&   e  Z d  Z d Z d „  Z d „  Z RS(   s   Used by autodoc_mock_imports.s	   /dev/nullc         C   s/   | |  _  |  _ | |  _ g  |  _ g  |  _ d  S(   N(   R,   t   __package__t
   __loader__t   __all__t   __path__(   R   t   namet   loader(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyR   R   s    		c         C   s   t  ƒ  } |  j | _ | S(   N(   R   R,   R-   (   R   R4   t   o(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyR)   Y   s    	(   R,   R-   R.   t   __file__R   R)   (    (    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyR/   N   s   	t   _MockImporterc           B   s/   e  Z d  „  Z d „  Z d d „ Z d „  Z RS(   c         C   s)   | |  _  g  |  _ t j j d |  ƒ d  S(   Ni    (   t   namest   mocked_modulest   syst	   meta_patht   insert(   R   R9   (    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyR   a   s    		c         C   s_   g  t  j D] } | |  k	 r
 | ^ q
 t  _ x- |  j D]" } | t  j k r5 t  j | =q5 q5 Wd  S(   N(   R;   R<   R:   t   modules(   R   t   it   m(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   disableh   s    +c         C   s;   x4 |  j  D]) } | | k s/ | j | d ƒ r
 |  Sq
 Wd  S(   Nt   .(   R9   t
   startswitht   None(   R   R4   t   patht   n(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   find_moduler   s    c         C   s^   | t  j k r t  j | St j d | ƒ t | |  ƒ } | t  j | <|  j j | ƒ | Sd  S(   Ns"   [autodoc] adding a mock module %s!(   R;   R>   t   loggert   debugR/   R:   t   append(   R   R4   t   module(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   load_modulez   s    N(   R,   R-   R   RA   RD   RG   RL   (    (    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyR8   `   s   		
c         c   s'   z t  |  ƒ } d  VWd  | j ƒ  Xd  S(   N(   R8   RA   (   R9   t   importer(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   mock‡   s    	c      
   C   s…   yV t  j ƒ  D t  j d d t ƒt j | ƒ  t |  ƒ t j |  SWd QXWd QXWn( t	 k
 r€ } t
 | t j ƒ  ƒ ‚ n Xd S(   sE   
    Call __import__(modname), convert exceptions to ImportError
    t   ignoret   categoryN(   t   warningst   catch_warningst   filterwarningst   ImportWarningR   t   skip_warningiserrort
   __import__R;   R>   t   BaseExceptiont   ImportErrort	   tracebackt
   format_exc(   t   modnamet   warningiserrort   exc(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   import_module‘   s    
R   c         C   s”  | r% t  j d |  d j | ƒ ƒ n t  j d |  ƒ y,d  } d  } t | ƒ } xŸ | d  k rñ y) t |  d | ƒ} t  j d |  | ƒ WqS t k
 rí } t  j d |  ƒ | } d |  k rç |  j d d ƒ \ }  } | j d | ƒ qî ‚  qS XqS W| }	 d  }
 d  } xI | D]A } |	 }
 t  j d	 | ƒ | |	 | ƒ }	 t  j d
 |	 ƒ | } qW| |
 | |	 g SWn,t	 t f k
 r} t
 | t	 ƒ r—| r—| } n  | r¼d | d j | ƒ |  f } n d | |  f } t
 | t ƒ rG| j \ } } t
 | t ƒ r| d 7} q[t
 | t ƒ r6| j r6| d | j d 7} q[| d | 7} n | d t j ƒ  7} t rs| j d ƒ } n  t  j | ƒ t | ƒ ‚ n Xd  S(   Ns   [autodoc] from %s import %sRB   s   [autodoc] import %sR\   s   [autodoc] import %s => %rs   [autodoc] import %s => failedi   i    s   [autodoc] getattr(_, %r)s   [autodoc] => %rs.   autodoc: failed to import %s %r from module %rs   autodoc: failed to import %s %rsJ   ; the module executes module level statement and it might call sys.exit().s(   ; the following exception was raised:
%ss   utf-8(   RH   RI   t   joinRD   t   listR^   RX   t   rsplitR=   t   AttributeErrorR   R   t
   SystemExitRY   RZ   R   t   decode(   R[   t   objpatht   objtypet
   attrgetterR\   RK   t   exc_on_importingR]   R4   t   objt   parentt   object_namet   attrnamet   errmsgt   real_exct   traceback_msg(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   import_object¢   s^    
	t	   AttributeR4   t   directly_definedt   valuec         C   s  | |  d i  ƒ } t  j d  d	 k rj t |  ƒ rj t | ƒ } x* |  j j ƒ  D] \ } } | | | <qM Wn  i  } t |  ƒ rxB |  j j ƒ  D]1 \ } } | | k rŒ t | t | ƒ | | <qŒ qŒ W|  j d } xE t	 | ƒ D]4 \ } } | | j
 k rÛ t | t | ƒ | | <qÛ qÛ Wn  xo t |  ƒ D]a } yD | |  | ƒ } | | k }	 | | k rlt | |	 | ƒ | | <n  Wq#t k
 rƒq#q#Xq#W| rþd d l m }
 d j | ƒ } xN | j ƒ  D]= \ } } | | k rº| | k rºt | t |
 ƒ | | <qºqºWn  | S(
   s,   Get members and attributes of target object.t   __dict__i   i   i   i   iÿÿÿÿ(   t   INSTANCEATTRRB   (   i   i   (   R;   t   version_infoR   t   dictt   __members__t   itemsRq   t   Truet   __mro__R   Rt   t   dirRb   t   sphinx.ext.autodocRu   R_   t   find_attr_docs(   t   subjectRe   Rg   t   analyzert   obj_dictR4   Rs   t   memberst
   superclassRr   Ru   t	   namespacet   ns(    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   get_object_membersç   s:      (+   R.   t
   contextlibR;   RY   RQ   t   collectionsR    t   typesR   R   R   t   sixR   R   t   sphinx.utilR   t   sphinx.util.inspectR   R   R!   t   typingR	   R
   R   R   R   R   R   R   t	   getLoggerR,   RH   t   objectR   R/   R8   t   contextmanagerRN   R^   Rp   Rq   RD   R†   (    (    (    s:   lib/python2.7/site-packages/sphinx/ext/autodoc/importer.pyt   <module>
   s(   =/'
B