o
    Ni                     @  s4  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 ddlmZ dd	lmZmZ erTdd
lmZmZ ddlmZ ddlmZ eeZG dd dZeddfd/ddZG dd deZ G dd deZ!G dd  d eZ"ej#d0d$d%Z$d1d(d)Z%d2d+d,Z&d3d-d.Z'dS )4zmock for autodoc    )annotationsN)LoaderMetaPathFinder)
ModuleSpec)
MethodType
ModuleType)TYPE_CHECKING)logging)isboundmethodsafe_getattr)IteratorSequence)Any)TypeIsc                      s   e Zd ZU dZd ZdZ dZdZded< d' fddZd(ddZ	d)ddZ
d*ddZd+ddZd,ddZd-dd Zd.d!d"Zd'd#d$Zd/d%d&Z  ZS )0_MockObjectUsed by autodoc_mock_imports. T tuple[Any, ...]__sphinx_decorator_args__argsr   kwargsreturnc                   sV   t |dkr%t|d tr%|d d j}|| u r%t|d |j||d dS t | S )N      r      )
superclass
attributes)len
isinstancetuple	__class___make_subclass__display_name__super__new__)clsr   r   r   r"   r   K/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/ext/autodoc/mock.pyr&   !   s   z_MockObject.__new__Nonec                 O  s   | j | _d S N)__name____qualname__)selfr   r   r   r   r)   __init__+   s   z_MockObject.__init__intc                 C     dS )Nr   r   r.   r   r   r)   __len__.      z_MockObject.__len__keystrboolc                 C  r1   )NFr   r.   r5   r   r   r)   __contains__1   r4   z_MockObject.__contains__Iterator[Any]c                 C  s   t dS )Nr   )iterr2   r   r   r)   __iter__4      z_MockObject.__iter__basestuple[type, ...]c                 C  s   | j fS r+   r(   )r.   r>   r   r   r)   __mro_entries__7   r=   z_MockObject.__mro_entries__c                 C  s   t t|| j| j S r+   )r#   r6   r$   r"   r8   r   r   r)   __getitem__:   s   z_MockObject.__getitem__c                 C  s   t || j| j S r+   )r#   r$   r"   r8   r   r   r)   __getattr__=   s   z_MockObject.__getattr__c                 O  s   |   }||_|S r+   )r"   r   )r.   r   r   callr   r   r)   __call__@   s   z_MockObject.__call__c                 C     | j S r+   )r$   r2   r   r   r)   __repr__E      z_MockObject.__repr__)r   r   r   r   r   r   )r   r   r   r   r   r*   )r   r0   )r5   r6   r   r7   )r   r:   )r>   r   r   r?   )r5   r   r   r   )r5   r6   r   r   r   r6   )r,   
__module__r-   __doc__r$   __sphinx_mock__r   __annotations__r&   r/   r3   r9   r<   r@   rA   rB   rD   rF   __classcell__r   r   r(   r)   r      s    
 








r   r   namer6   moduler   r   r   decorator_argsr   r   c                 C  s2   ||d |  | |d}| |pi  t| |f|S )N.)rI   r$   r,   r   )updatetype)rN   rO   r   r   rP   attrsr   r   r)   r#   I   s   
r#   c                      s@   e Zd ZdZejZdZd fddZdd
dZ	dddZ
  ZS )_MockModuler   TrN   r6   r   r*   c                   s   t  | g | _g | _d S r+   )r%   r/   __all____path__r.   rN   r(   r   r)   r/   Z   s   
z_MockModule.__init__r   c                 C  s   t || j S r+   )r#   r,   rX   r   r   r)   rB   _   s   z_MockModule.__getattr__c                 C  rE   r+   )r,   r2   r   r   r)   rF   b   rG   z_MockModule.__repr__)rN   r6   r   r*   )rN   r6   r   r   rH   )r,   rI   r-   rJ   osdevnull__file__rK   r/   rB   rF   rM   r   r   r(   r)   rU   T   s    
rU   c                      s6   e Zd ZdZd fddZdddZdddZ  ZS )
MockLoaderzA loader for mocking.finder
MockFinderr   r*   c                   s   t    || _d S r+   )r%   r/   r]   )r.   r]   r(   r   r)   r/   i   s   

zMockLoader.__init__specr   r   c                 C  s(   t d|j | jj|j t|jS )Nz%[autodoc] adding a mock module as %s!)loggerdebugrN   r]   mocked_modulesappendrU   )r.   r_   r   r   r)   create_modulem   s   
zMockLoader.create_modulerO   c                 C  s   d S r+   r   )r.   rO   r   r   r)   exec_moduler   r4   zMockLoader.exec_module)r]   r^   r   r*   )r_   r   r   r   )rO   r   r   r*   )r,   rI   r-   rJ   r/   rd   re   rM   r   r   r(   r)   r\   f   s
    
r\   c                      s:   e Zd ZdZd fddZ	ddddZdddZ  ZS )r^   zA finder for mocking.modnames	list[str]r   r*   c                   s$   t    || _t| | _g | _d S r+   )r%   r/   rf   r\   loaderrb   )r.   rf   r(   r   r)   r/   y   s   


zMockFinder.__init__Nfullnamer6   pathSequence[bytes | str] | NonetargetModuleType | NoneModuleSpec | Nonec                 C  s6   | j D ]}||ks||d rt|| j  S qd S )NrQ   )rf   
startswithr   rh   )r.   ri   rj   rl   modnamer   r   r)   	find_spec   s
   
zMockFinder.find_specc                 C  s   | j D ]	}tj|d qdS )z)Invalidate mocked modules on sys.modules.N)rb   sysmodulespop)r.   rp   r   r   r)   invalidate_caches   s   
zMockFinder.invalidate_caches)rf   rg   r   r*   r+   )ri   r6   rj   rk   rl   rm   r   rn   )r   r*   )r,   rI   r-   rJ   r/   rq   ru   rM   r   r   r(   r)   r^   v   s    	r^   rf   rg   Iterator[None]c              	   c  sP    t | }ztjd| dV  W tj| |  dS tj| |  w )zInsert mock modules during context::

    with mock(['target.module.name']):
        # mock modules are enabled here
        ...
    r   N)r^   rr   	meta_pathinsertremoveru   )rf   r]   r   r   r)   mock   s   
rz   subjectTypeIs[_MockModule]c                 C  s
   t | tS )z'Check if the object is a mocked module.)r    rU   r{   r   r   r)   ismockmodule   s   
r~   r7   c                 C  s   zt | dddu rW dS W n
 ty   Y dS w t| trdS t| tr,t| r,| j}n| }zt t|dg }t|dkrF|d t	u rIW dS W dS W dS  tyU   Y dS w )zCheck if the object is mocked.rK   NFT__mro__r   )
r   AttributeErrorr    rU   r   r
   __func__rS   r   r   )r{   tmp_subjectr   r   r   r)   ismock   s0   
r   c                 C  s   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}   r   r   r)   
undecorate   s   
r   )rN   r6   rO   r6   r   r   r   r   rP   r   r   r   )rf   rg   r   rv   )r{   r   r   r|   )r{   r   r   r7   )r{   r   r   r   )(rJ   
__future__r   
contextlibrY   rr   importlib.abcr   r   importlib.machineryr   typesr   r   typingr   sphinx.utilr	   sphinx.util.inspectr
   r   collections.abcr   r   r   typing_extensionsr   	getLoggerr,   r`   r   r#   rU   r\   r^   contextmanagerrz   r~   r   r   r   r   r   r)   <module>   s8    
0

