
    FeT                    n   d Z ddlm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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  ej4                  e      Z G d d      Zeddf	 	 	 	 	 ddZ G d de      Z G d de      Z  G d de      Z!ejD                  dd       Z#ddZ$ddZ%ddZ&y)zmock for autodoc    )annotationsN)LoaderMetaPathFinder)
ModuleSpec)
MethodType
ModuleType)TYPE_CHECKINGAny)logging)isboundmethodsafe_getattr)	GeneratorIteratorSequencec                       e Zd ZU dZd ZdZ dZdZded<   d fdZddZ	dd	Z
dd
ZddZddZddZddZddZddZ xZS )_MockObjectUsed by autodoc_mock_imports. T ztuple[Any, ...]__sphinx_decorator_args__c                    t        |      dk(  rHt        |d   t              r5|d   d   j                  }|| u rt	        |d   |j
                  ||d         S t        |   |       S )N      r      )
superclass
attributes)len
isinstancetuple	__class___make_subclass__display_name__super__new__)clsargskwargsr   r!   s       9/usr/lib/python3/dist-packages/sphinx/ext/autodoc/mock.pyr%   z_MockObject.__new__   sm    t9>ja%8a..JS %d1gz/J/J1;QQ Q ws##    c                &    | j                   | _        y N)__name____qualname__)selfr'   r(   s      r)   __init__z_MockObject.__init__(   s     MMr*   c                     y)Nr   r   r/   s    r)   __len__z_MockObject.__len__+   s    r*   c                     y)NFr   r/   keys     r)   __contains__z_MockObject.__contains__.   s    r*   c                    t        g       S r,   )iterr2   s    r)   __iter__z_MockObject.__iter__1   s    Bxr*   c                    | j                   fS r,   r!   )r/   basess     r)   __mro_entries__z_MockObject.__mro_entries__4   s      r*   c                `     t        t        |      | j                  | j                               S r,   )r"   strr#   r!   r5   s     r)   __getitem__z_MockObject.__getitem__7   s$    N~c#h(=(=t~~NPPr*   c                N     t        || j                  | j                               S r,   )r"   r#   r!   r5   s     r)   __getattr__z_MockObject.__getattr__:   s     I~c4#8#8$..IKKr*   c                4    | j                         }||_        |S r,   )r!   r   )r/   r'   r(   calls       r)   __call__z_MockObject.__call__=   s    ~~)-&r*   c                    | j                   S r,   )r#   r2   s    r)   __repr__z_MockObject.__repr__B   s    $$$r*   )r'   r
   r(   r
   returnr
   )r'   r
   r(   r
   rI   None)rI   int)r6   r@   rI   bool)rI   r   )r=   r    rI   r    )r6   r
   rI   r   )r6   r@   rI   r   rI   r@   )r-   
__module__r.   __doc__r#   __sphinx_mock__r   __annotations__r%   r0   r3   r7   r:   r>   rA   rC   rF   rH   __classcell__r<   s   @r)   r   r      sU    '$HO133$*!QL
%r*   r   r   c                b    ||dz   | z   | |d}|j                  |xs i        t        | |f|      S )N.)rN   r#   r-   r   )updatetype)namemoduler   r   decorator_argsattrss         r)   r"   r"   F   sB    !!'#!4*8:E 
LL!r"zmU++r*   c                  P     e Zd ZdZej
                  ZdZd fdZddZ	ddZ
 xZS )	_MockModuler   Tc                @    t         |   |       g | _        g | _        y r,   )r$   r0   __all____path__)r/   rW   r!   s     r)   r0   z_MockModule.__init__V   s    "$#%r*   c                8     t        || j                               S r,   )r"   r-   )r/   rW   s     r)   rC   z_MockModule.__getattr__[   s    2~dDMM244r*   c                    | j                   S r,   )r-   r2   s    r)   rH   z_MockModule.__repr__^   s    }}r*   )rW   r@   rI   rJ   )rW   r@   rI   r   rM   )r-   rN   r.   rO   osdevnull__file__rP   r0   rC   rH   rR   r<   s   @r)   r\   r\   Q   s#    'zzHO&
5r*   r\   c                  4     e Zd ZdZd fdZddZddZ xZS )
MockLoaderzA loader for mocking.c                0    t         |           || _        y r,   )r$   r0   finder)r/   rh   r!   s     r)   r0   zMockLoader.__init__d   s    r*   c                    t         j                  d|j                         | j                  j                  j                  |j                         t        |j                        S )Nz%[autodoc] adding a mock module as %s!)loggerdebugrW   rh   mocked_modulesappendr\   )r/   specs     r)   create_modulezMockLoader.create_moduleh   s@    <diiH""))$))4499%%r*   c                     y r,   r   )r/   rX   s     r)   exec_modulezMockLoader.exec_modulem   s    r*   )rh   
MockFinderrI   rJ   )rn   r   rI   r   )rX   r   rI   rJ   )r-   rN   r.   rO   r0   ro   rq   rR   r<   s   @r)   rf   rf   b   s    &
r*   rf   c                  >     e Zd ZdZd fdZ	 d	 	 	 ddZddZ xZS )	rr   zA finder for mocking.c                ^    t         |           || _        t        |       | _        g | _        y r,   )r$   r0   modnamesrf   loaderrl   )r/   ru   r!   s     r)   r0   zMockFinder.__init__t   s)      &)+r*   c                    | j                   D ]3  }||k(  s|j                  |dz         st        || j                        c S  y )NrT   )ru   
startswithr   rv   )r/   fullnamepathtargetmodnames        r)   	find_speczMockFinder.find_specz   sD    }} 	9G("h&9&9'C-&H!(DKK88	9
 r*   c                f    | j                   D ]"  }t        j                  j                  |d       $ y)z)Invalidate mocked modules on sys.modules.N)rl   sysmodulespop)r/   r|   s     r)   invalidate_cacheszMockFinder.invalidate_caches   s)    ** 	+GKKOOGT*	+r*   )ru   	list[str]rI   rJ   r,   )ry   r@   rz   zSequence[bytes | str] | Noner{   zModuleType | NonerI   zModuleSpec | None)rI   rJ   )r-   rN   r.   rO   r0   r}   r   rR   r<   s   @r)   rr   rr   q   s*    , /3+7H+r*   rr   c              #  2  K   	 t        |       }t        j                  j                  d|       d t        j                  j	                  |       |j                          y# t        j                  j	                         |j                          w xY ww)zInsert mock modules during context::

        with mock(['target.module.name']):
            # mock modules are enabled here
            ...
    r   N)rr   r   	meta_pathinsertremover   )ru   rh   s     r)   mockr      sk     #H%Q'V$  " 	V$  "s   B/A# 0B#1BBc                "    t        | t              S )z'Check if the object is a mocked module.)r   r\   subjects    r)   ismockmoduler      s    g{++r*   c                8   	 t        | dd      y	 t        | t              ryt        | t              rt        |       r| j                  }n| }	 t        t        |      dg       }t        |      dkD  r|d   t        u ryy# t        $ r Y yw xY w# t        $ r Y yw xY w)zCheck if the object is mocked.rP   NFT__mro__r   )
r   AttributeErrorr   r\   r   r   __func__rV   r   r   )r   tmp_subjectr   s      r)   ismockr      s    !2D9A B ';' ':&=+A&&tK0)R@w<!{ : -  &  s#   A> /B >	B
	B
	BBc                R    t        |       r| j                  r| j                  d   S | S )zsUnwrap mock if *subject* is decorated by mocked object.

    If not decorated, returns given *subject* itself.
    r   )r   r   r   s    r)   
undecorater      s)    
 g7<<0033r*   )rW   r@   rX   r@   r   r
   r   r
   rY   r    rI   r
   )ru   r   rI   zGenerator[None, None, None])r   r
   rI   rL   )r   r   rI   r
   )'rO   
__future__r   
contextlibrb   r   importlib.abcr   r   importlib.machineryr   typesr   r   typingr	   r
   sphinx.utilr   sphinx.util.inspectr   r   collections.abcr   r   r   	getLoggerr-   rj   r   r"   r\   rf   rr   contextmanagerr   r   r   r   r   r*   r)   <module>r      s     "  	 
 0 * ( %  ;==			8	$-% -%` >I%)2,",;@,JM,* " + +0 # # ,
>r*   