ó
öÀ„\c           @   s@  d  Z  d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l m	 Z
 d d l Z d d l m Z d d l m Z d d l m Z d d	 l m Z e rù d d
 l m Z m Z m Z m Z m Z m Z m Z m Z d d l m Z n  e j  e! ƒ Z" d d „ Z# d „  Z$ d e f d „  ƒ  YZ% d „  Z& d S(   s-  
    sphinx.ext.coverage
    ~~~~~~~~~~~~~~~~~~~

    Check Python modules and C API for coverage.  Mostly written by Josip
    Dzolonga for the Google Highly Open Participation contest.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iÿÿÿÿN(   t   path(   t	   iteritems(   t   cPickle(   t   Builder(   t   __(   t   logging(   t   safe_getattr(   t   Anyt   Callablet   Dictt   IOt   Listt   Patternt   Sett   Tuple(   t   Sphinxt   -c         C   s0   |  j  | d ƒ |  j  | t | ƒ d ƒ d  S(   Ns   
(   t   writet   len(   t   ft   textt   char(    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyt   write_header$   s    c         C   sb   g  } xU | D]M } y | j  t j | ƒ ƒ Wq t k
 rY t j t d ƒ | |  ƒ q Xq W| S(   Ns   invalid regex %r in %s(   t   appendt   ret   compilet	   Exceptiont   loggert   warningR   (   t   namet   expst   lstt   exp(    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyt   compile_regex_list*   s    !t   CoverageBuilderc           B   ss   e  Z d  Z d Z e d e j d ƒ Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z RS(   s:   
    Evaluates coverage of code in the documentation.
    t   coveragesN   Testing of coverage in the sources finished, look at the results in %(outdir)ss   python.txt.c         C   sU  g  |  _  xB |  j j D]4 } t j |  j | ƒ } |  j  j t j | ƒ ƒ q Wg  |  _ xm |  j j	 j
 ƒ  D]Y \ } } y# |  j j | t j | ƒ f ƒ Wqj t k
 rÂ t j t d ƒ | ƒ qj Xqj Wi  |  _ x6 t |  j j ƒ D]" \ } } t d | ƒ |  j | <qã Wt d |  j j ƒ |  _ t d |  j j ƒ |  _ t d |  j j ƒ |  _ d  S(   Ns&   invalid regex %r in coverage_c_regexest   coverage_ignore_c_itemst   coverage_ignore_modulest   coverage_ignore_classest   coverage_ignore_functions(   t   c_sourcefilest   configt   coverage_c_pathR    t   joint   srcdirt   extendt   globt	   c_regexest   coverage_c_regexest   itemsR   R   R   R   R   R   R   t   c_ignorexpsR   R$   R!   R%   t   mod_ignorexpsR&   t   cls_ignorexpsR'   t   fun_ignorexps(   t   selft   patternR   R    R   (    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyt   init=   s(    		#	c         C   s   d S(   Ns   coverage overview(    (   R6   (    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyt   get_outdated_docsV   s    c         G   s>   i  |  _  |  j ƒ  |  j ƒ  i  |  _ |  j ƒ  |  j ƒ  d  S(   N(   t   py_undoct   build_py_coveraget   write_py_coveraget   c_undoct   build_c_coveraget   write_c_coverage(   R6   t   ignored(    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyR   Z   s    	

	
c      
   C   s  |  j  j d d } xó |  j D]è } t ƒ  } t | d ƒ ² } x¨ | D]  } x— |  j D]Œ \ } } | j | ƒ } | rV | j ƒ  d }	 |	 | k rV xF |  j j	 | g  ƒ D] }
 |
 j |	 ƒ r© Pq© q© W| j
 | |	 f ƒ qV qV qV qV WqF WWd  QX| r | |  j | <q q Wd  S(   Nt   ct   objectst   ri    (   t   envt
   domaindataR(   t   sett   openR/   t   matcht   groupsR2   t   gett   addR=   (   R6   t	   c_objectst   filenamet   undocR   t   linet   keyt   regexRH   R   R    (    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyR>   d   s"    	c      
   C   sË   t  j |  j d ƒ } t | d ƒ ¡ } |  j j rF t | d d ƒ n  | j d ƒ xk t |  j	 ƒ D]Z \ } } t | | ƒ x1 t
 | ƒ D]# \ } } | j d | | f ƒ q‰ W| j d ƒ qc WWd  QXd  S(   Ns   c.txtt   ws   Undocumented C API elementst   =s   
s    * %-50s [%9s]
(   R    R+   t   outdirRG   R)   t   coverage_write_headlineR   R   R   R=   t   sorted(   R6   t   output_filet   opRM   RN   t   typR   (    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyR?   z   s    c         C   s?  |  j  j d d } |  j  j d d } |  j j } x| D]ü} t } x* |  j D] } | j | ƒ rQ t } PqQ qQ W| r€ q; n  y t | d d g ƒ} WnC t	 k
 rÞ } t
 j t d ƒ | | ƒ i | d 6|  j | <q; n Xg  }	 i  }
 x.t j | ƒ D]\ } } | d d	 k rqû n  t | d
 ƒ s2qû n  | j | k rGqû n  d | | f } t j | ƒ rÂ| | k rxJ |  j D] } | j | ƒ r|Pq|q|W| r¯| j r¯qû n  |	 j | ƒ qqû t j | ƒ rû xD|  j D] } | j | ƒ rÛPqÛqÛW| | k r*| r| j rqû n  g  |
 | <qû n  g  } xÏ t | ƒ D]Á } | | j k rXq=n  y t | | ƒ } Wn t k
 rq=n Xt j | ƒ pt j | ƒ s¦q=n  | d d	 k r¼q=n  | rÒ| j rÒq=n  d | | f } | | k r=| j | ƒ q=q=W| r| |
 | <qqû qû Wi |	 d 6|
 d 6|  j | <q; Wd  S(   Nt   pyRB   t   modulest   fromlistt   foos#   module %s could not be imported: %st   errori    t   _t
   __module__s   %s.%st   funcst   classes(   RD   RE   R)   t   coverage_skip_undoc_in_sourcet   FalseR3   RH   t   Truet
   __import__t   ImportErrorR   R   R   R:   t   inspectt
   getmemberst   hasattrR`   t
   isfunctionR5   t   __doc__R   t   isclassR4   t   dirt   __dict__R   t   AttributeErrort   ismethod(   R6   RB   R[   t
   skip_undoct   mod_namet   ignoreR    t   modt   errRa   Rb   R   t   objt	   full_namet   attrst	   attr_namet   attrt   full_attr_name(    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyR;   ˆ   s‚    
c      	   C   s×  t  j |  j d ƒ } g  } t | d ƒ §} |  j j rL t | d d ƒ n  t |  j j	 ƒ  ƒ } x<| D]4} |  j | } d | k r¡ | j
 | | d f ƒ qh | d r½ | d r½ qh n  t | | ƒ | d r| j d ƒ | j d	 „  | d Dƒ ƒ | j d
 ƒ n  | d rh | j d ƒ xf t t | d ƒ ƒ D]N \ } } | s`| j d | ƒ q:| j d | ƒ | j d „  | Dƒ ƒ q:W| j d
 ƒ qh qh W| rÍt | d ƒ | j d „  | Dƒ ƒ n  Wd  QXd  S(   Ns
   python.txtRR   s   Undocumented Python objectsRS   R^   Rb   Ra   s   Functions:
c         s   s   |  ] } d  | Vq d S(   s    * %s
N(    (   t   .0t   x(    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pys	   <genexpr>õ   s    s   
s	   Classes:
s    * %s
s    * %s -- missing methods:

c         s   s   |  ] } d  | Vq d S(   s      - %s
N(    (   R}   R~   (    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pys	   <genexpr>ÿ   s    s   Modules that failed to importc         s   s   |  ] } d  | Vq d S(   s    * %s -- %s
N(    (   R}   R~   (    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pys	   <genexpr>  s    (   R    R+   RT   RG   R)   RU   R   RV   R:   t   keysR   R   t
   writelinesR   (   R6   RW   t   failedRX   R   R   RN   t   methods(    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyR<   â   s:    

c         C   sM   t  j |  j d ƒ } t | d ƒ # } t j |  j |  j f | ƒ Wd  QXd  S(   Ns   undoc.picklet   wb(   R    R+   RT   RG   t   picklet   dumpR:   R=   (   R6   t
   picklepatht   dumpfile(    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyt   finish  s    (   t   __name__R`   Rl   R   R   R    t   sept   epilogR8   R9   R   R>   R?   R;   R<   Rˆ   (    (    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyR"   5   s   			
			Z	$c         C   sº   |  j  t ƒ |  j d g  t ƒ |  j d g  t ƒ |  j d g  t ƒ |  j d g  t ƒ |  j d i  t ƒ |  j d i  t ƒ |  j d t t ƒ |  j d t t ƒ i t j d	 6t d
 6S(   NR%   R'   R&   R*   R0   R$   RU   Rc   t   versiont   parallel_read_safe(   t   add_builderR"   t   add_config_valueRd   Re   t   sphinxt   __display_version__(   t   app(    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyt   setup  s    ('   Rl   R.   Rh   R   t   osR    t   sixR   t	   six.movesR   R„   R   t   sphinx.buildersR   t   sphinx.localeR   t   sphinx.utilR   t   sphinx.util.inspectR   Rd   t   typingR   R   R	   R
   R   R   R   R   t   sphinx.applicationR   t	   getLoggerR‰   R   R   R!   R"   R“   (    (    (    s2   lib/python2.7/site-packages/sphinx/ext/coverage.pyt   <module>   s&   :	Ù