o $a @s>dZddlZddlZddlZddlmZmZddlmZddl m Z ddl m Z m Z mZmZmZmZmZmZddlmZddlmZeeZGd d d Zedd fd ed ede de dede f ddZGddde ZGdddeZGdddeZ ej!deede dfddZ"de de#fdd Z$dede fd!d"Z%dS)#z sphinx.ext.autodoc.mock ~~~~~~~~~~~~~~~~~~~~~~~ mock for autodoc :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N)LoaderMetaPathFinder) ModuleSpec) ModuleType)Any GeneratorIteratorListOptionalSequenceTupleUnion)logging) safe_getattrcseZdZUdZdZdZdZdZeedfe d<deded effd d Z deded d fd dZ d e fddZ ded efddZd efddZded efddZded dfddZded dfddZdeded efddZd efdd ZZS)! _MockObjectUsed by autodoc_mock_imports.T.__sphinx_decorator_args__argskwargsreturncsVt|dkr%t|dtr%|ddj}||ur%t|d|j||ddSt|S)Nr) superclass attributes)len isinstancetuple __class___make_subclass__display_name__super__new__)clsrrrr!r9/usr/lib/python3/dist-packages/sphinx/ext/autodoc/mock.pyr%!s  z_MockObject.__new__NcOs |j|_dSN)__name__ __qualname__)selfrrrrr(__init__+s z_MockObject.__init__cCdS)Nrrr,rrr(__len__.z_MockObject.__len__keycCr.)NFrr,r2rrr( __contains__1r1z_MockObject.__contains__cCstgSr))iterr/rrr(__iter__4z_MockObject.__iter__basescCs|jfSr)r')r,r8rrr(__mro_entries__7r7z_MockObject.__mro_entries__cCstt||j|jSr))r"strr#r!r3rrr( __getitem__:sz_MockObject.__getitem__cCst||j|jSr))r"r#r!r3rrr( __getattr__=sz_MockObject.__getattr__cOs|}||_|Sr))r!r)r,rrcallrrr(__call__@sz_MockObject.__call__cC|jSr))r#r/rrr(__repr__Ez_MockObject.__repr__)r* __module__r+__doc__r#__sphinx_mock__rr r__annotations__r%r-intr0r:boolr4rr6r9r;r<r>r@ __classcell__rrr'r(rs  rrnamemodulerrdecorator_argsrcCs2||d|||d}||pit||f|S)N.)rBr#r*r)updatetype)rIrJrrrKattrsrrr(r"Is r"csTeZdZdZejZdZdeddffdd Z dede fdd Z defd d Z Z S) _MockModulerTrIrNcst|g|_g|_dSr))r$r-__all____path__r,rIr'rr(r-Ys  z_MockModule.__init__cCst||jSr))r"r*rSrrr(r<^sz_MockModule.__getattr__cCr?r))r*r/rrr(r@arAz_MockModule.__repr__)r*rBr+rCosdevnull__file__rDr:r-rr<r@rHrrr'r(rPTsrPcsFeZdZdZdfdd Zdedefd d Zd eddfd d ZZ S) MockLoaderzA loader for mocking.finder MockFinderrNcst||_dSr))r$r-rX)r,rXr'rr(r-gs  zMockLoader.__init__speccCs(td|j|jj|jt|jS)Nz%[autodoc] adding a mock module as %s!)loggerdebugrIrXmocked_modulesappendrP)r,rZrrr( create_moduleks zMockLoader.create_modulerJcCsdSr)r)r,rJrrr( exec_modulepr1zMockLoader.exec_module)rXrYrN) r*rBr+rCr-rrr_r`rHrrr'r(rWes rWc sjeZdZdZdeeddffdd Z ddedeee e efd e dee fd d Z dd d ZZS)rYzA finder for mocking.modnamesrNcs$t||_t||_g|_dSr))r$r-rarWloaderr])r,rar'rr(r-ws   zMockFinder.__init__fullnamepathtargetcCs6|jD]}||ks||drt||jSqdS)NrL)ra startswithrrb)r,rcrdremodnamerrr( find_spec}s zMockFinder.find_speccCs|jD] }tj|dqdS)z)Invalidate mocked modules on sys.modules.N)r]sysmodulespop)r,rgrrr(invalidate_cachess zMockFinder.invalidate_cachesr))rN)r*rBr+rCr r:r-r r r bytesrrrhrlrHrrr'r(rYts  rYra)NNNc csPzt|}tjd|dVWtj||dStj||w)zInsert mock modules during context:: with mock(['target.module.name']): # mock modules are enabled here ... rN)rYri meta_pathinsertremoverl)rarXrrr(mocks   rqsubjectcCsz t|dddur WdSWn tyYdSwt|trdSztt|dg}t|dkr7|dtur:WdSWdSWdStyFYdSw)zCheck if the object is mocked.rDNFT__mro__rr)rAttributeErrorrrPrNrr)rrrsrrr(ismocks*   rucCst|r |jr |jdS|S)zsUnwrap mock if *subject* is decorated by mocked object. If not decorated, returns given *subject* itself. r)rur)rrrrr( undecorates rv)&rC contextlibrTri importlib.abcrrimportlib.machineryrtypesrtypingrrrr r r r r sphinx.utilrsphinx.util.inspectr getLoggerr*r[rr:r"rPrWrYcontextmanagerrqrGrurvrrrr(s8   (   0