o ?Ogs@sdZddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z ddl mZddlmZmZddlmZGdd d eZd d eeDZd ZeZd dZddZddZddZddZddZ dddZ!ddZ"ddZ#d d!Z$d"d#Z%dd$d%Z&d&d'Z'd(d)Z(d*d+Z)Gd,d-d-e*Z+Gd.d/d/e*Z,e,Z-e-j.Z.e-j/Z0e-j1Z2hd0Z3d1d2Z4Gd3d4d4e5Z6d5d6Z7Gd7d8d8e*Z8Gd9d:d:e*Z9Gd;d<dd>e5Z>d?d@Z?GdAdBdBe9Z@GdCdDdDe@e:ZAdEdFZBdGdHZCdIdJZDGdKdLdLe*ZEdMdNZFe.dddddfddOdPdQZG  ddRdSZHe.dddddfddOdTdUZIGdVdWdWe*ZJdXdYZKdZd[ZLeGeI_*eJeI_MeHeI_NeLeI_Od\eI_Pd]ZQd^ZRd_Sd`daeRTDZUd_SdbdaeRTDZVhdcZWdddeZXdfd d_SeQeReUeVgTDZYhdgZZdhhZ[eZe[BZ\eYeWBZ]e]e\BZ^hdiZ_djdkdldkdmdkdndkdoZ`eaeaeaeadpddddqdrd dpdds ZbdtduZcdvdwZddxdyZedzd{Zfecedeeefd|Zgd}d~ZhGddde9ZiGdddeie:ZjGdddeiZkGdddeieAZlGddde9ZmGddde9ZnGdddenekeAZoGddde*ZpepZqddZrGdddesZtetddZu  dddOddZvddZwGddde*ZxeyeveyeqjzfZ{da|ddZ}dddZ~GdddeAZddZGdddZdS))Mock MagicMockpatchsentinelDEFAULTANYcallcreate_autospec AsyncMock FILTER_DIRNonCallableMockNonCallableMagicMock mock_open PropertyMocksealN)iscoroutinefunction)CodeType ModuleType MethodType) safe_repr)wrapspartial)RLockc@ eZdZdS)InvalidSpecErrorN__name__ __module__ __qualname__rr4/opt/alt/python310/lib64/python3.10/unittest/mock.pyr(rcCsh|] }|ds|qS_ startswith).0namerrr ,r(TcCs<t|r t|ts dSt|drt|d}t|pt|S)NF__func__)_is_instance_mock isinstancer hasattrgetattrrinspectZ isawaitableobjrrr _is_async_obj4s   r2cCst|ddr t|SdS)N__code__F)r.rfuncrrr _is_async_func<s r6cCstt|tSN) issubclasstyper r0rrr r+Csr+cCst|tpt|tot|tSr7)r, BaseExceptionr9r8r0rrr _is_exceptionIs r;cCst|tr t|dr |jS|SNmock)r, FunctionTypesr-r=r0rrr _extract_mockPsr?cCs t|tr|s|j}d}nt|ts#z|j}Wn ty"YdSw|r+t|d}n|}z|t|fWSt y?YdSwNT) r,r9__init__r>__call__AttributeErrorrr/ signature ValueError)r5Z as_instanceZeat_selfZsig_funcrrr _get_signature_objectYs$     rFFcsNt|||dur dS\}fdd}t|||t|_t|_dS)Ncsj|i|dSr7bindselfargskwargssigrr checksig{z"_check_signature..checksig)rF_copy_func_detailsr9_mock_check_sig __signature__)r5r= skipfirstinstancerOrrMr _check_signaturevs    rVc Cs6dD]}z t||t||WqtyYqwdS)N)r__doc____text_signature__r __defaults____kwdefaults__)setattrr.rC)r5funcopy attributerrr rQs rQcCs@t|trdSt|tttfrt|jSt|dddurdSdS)NTrBF)r,r9 staticmethod classmethodr _callabler*r.r0rrr r`s  r`cCst|ttfvSr7)r9listtupler0rrr _is_listsrccCsH t|tst|ddduS|f|jD] }|jddur!dSqdS)NrBTF)r,r9r.__mro____dict__get)r1baserrr _instance_callables rhc st|t}t|||}|dur|S|\}fdd}t|||j}|s)d}||d}d|} t| |||} t| || S)Ncsj|i|dSr7rGrKrLrMrr rOrPz _set_signature..checksigr\)Z _checksig_r=zYdef %s(*args, **kwargs): _checksig_(*args, **kwargs) return mock(*args, **kwargs))r,r9rFrQr isidentifierexec _setup_func) r=originalrUrTresultr5rOr'contextsrcr\rrMr _set_signatures$       rqc s_fdd}fdd}fdd}fdd}fd d }fd d }fd d} fdd} d_d_d_t_t_t_j_j _ j _ |_ |_ |_ | _| _|_|_|_|__dS)Ncj|i|Sr7)assert_called_withrir=rr rsz'_setup_func..assert_called_withcrrr7) assert_calledrirtrr rvruz"_setup_func..assert_calledcrrr7)assert_not_calledrirtrr rwruz&_setup_func..assert_not_calledcrrr7)assert_called_oncerirtrr rxruz'_setup_func..assert_called_oncecrrr7)assert_called_once_withrirtrr ryruz,_setup_func..assert_called_once_withcrrr7)assert_has_callsrirtrr rzruz%_setup_func..assert_has_callscrrr7)assert_any_callrirtrr r{ruz$_setup_func..assert_any_callcsBt_t_j}t|r|ur|dSdSdSr7) _CallList method_calls mock_calls reset_mock return_valuer+)retr\r=rr rs z_setup_func..reset_mockFr)r=called call_count call_argsr|call_args_listr}r~r side_effect_mock_childrenrsryrzr{rrvrwrxrS_mock_delegate) r\r=rNrsrvrwrxryrzr{rrrr rls8        rlcsJtjj_d_d_t_fdd}dD] }t|t||qdS)Nrcstj||i|Sr7)r.r=)attrrKrLrtrr wrapperz"_setup_async_mock..wrapper)assert_awaitedassert_awaited_onceassert_awaited_withassert_awaited_once_withassert_any_awaitassert_has_awaitsassert_not_awaited) asyncio coroutines _is_coroutine await_count await_argsr|await_args_listr[r)r=rr]rrtr _setup_async_mocks   rcCsd|dd|kS)N__%s__rr'rrr _is_magicrPrc@&eZdZ ddZddZddZdS)_SentinelObjectcCs ||_dSr7rrJr'rrr rA z_SentinelObject.__init__cC d|jSNz sentinel.%srrJrrr __repr__rz_SentinelObject.__repr__cCrrrrrrr __reduce__!rz_SentinelObject.__reduce__N)rrrrArrrrrr rs  rc@r) _SentinelcCs i|_dSr7) _sentinelsrrrr rA'rz_Sentinel.__init__cCs|dkrt|j|t|S)N __bases__)rCr setdefaultrrrrr __getattr__*sz_Sentinel.__getattr__cCdS)Nrrrrrr r0z_Sentinel.__reduce__N)rrrrArrrrrr r%s  r>r_mock_new_name _mock_parent _mock_name_mock_new_parent_mock_return_valuer_mock_side_effectcCs8t|d|}||fdd}||fdd}t||S)NZ_mock_cSs"|j}|dur t||St||Sr7)rr.)rJr' _the_namerNrrr _getEs  z"_delegating_property.._getcSs,|j}|dur||j|<dSt|||dSr7)rrer[)rJvaluer'rrNrrr _setJsz"_delegating_property.._set)_allowed_namesaddproperty)r'rrrrrr _delegating_propertyBs  rc@eZdZddZddZdS)r|cCslt|ts t||St|}t|}||krdStd||dD]}||||}||kr3dSq"dS)NFrT)r,ra __contains__lenrange)rJrZ len_valueZlen_selfiZsub_listrrr rWs  z_CallList.__contains__cCstt|Sr7)pprintZpformatrarrrr rez_CallList.__repr__N)rrrrrrrrr r|Us r|cCst|}t|s dS|js|js|jdus|jdurdS|}|dur/||ur(dS|j}|dus"|r7||_||_|r?||_||_dS)NFT)r?r+rrrr)parentrr'new_name_parentrrr _check_and_set_parentis(   rc@r) _MockItercCst||_dSr7)iterr1)rJr1rrr rArz_MockIter.__init__cCs t|jSr7)nextr1rrrr __next__rz_MockIter.__next__N)rrrrArrrrr rs rc@seZdZeZdZddZdS)BaseNcOdSr7rrIrrr rArz Base.__init__)rrrrrrrArrrr rs rc@sreZdZ eZddZ   dKddZdd ZdLd d Z  dMd d Z ddZ ddZ dZ e e e e Ze ddZedZedZedZedZedZddZddZe eeZdNddddd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Z d/d0Z!dOd2d3Z"d4d5Z#d6d7Z$d8d9Z%d:d;Z&dd?Z(d@dAZ)dLdBdCZ*dDdEZ+dFdGZ,dPdIdJZ-dS)Qr cOs||f}t|ts*tj|g|Ri|j}|d|d}|dur*t|r*t|f}t|j|d|j i}t t | |}|S)Nspec_setspecrW) r8AsyncMockMixin _MOCK_SIGZ bind_partialZ argumentsrfr2r9rrW _safe_superr __new__)clsrKkwbasesZ bound_argsZspec_argnewrUrrr rs zNonCallableMock.__new__NFc Ks|dur|}|j} || d<|| d<|| d<|| d<d| d<|dur%|}d}| dur-|du} |||| | i| d<|| d <d| d <d| d <d| d <d | d<t| d<t| d<t| d<| | d<| rj|jdi| tt|||||||dS)NrrrrF _mock_sealedTr _mock_wrapsrZ _mock_calledZ_mock_call_argsrZ_mock_call_countZ_mock_call_args_listZ_mock_mock_callsr} _mock_unsafer)re_mock_add_specr|configure_mockrr rA)rJrrr'rr _spec_state _new_name _new_parent_spec_as_instance _eat_selfunsaferLrerrr rAs<     zNonCallableMock.__init__cCs2 t|}d|_d|_d|_d|_t|||dSNr)r?rrrrr[)rJr=r]Z inner_mockrrr attach_mockszNonCallableMock.attach_mockcCs |||dSr7)rrJrrrrr mock_add_specszNonCallableMock.mock_add_specc Csd}d}g}t|D]}tt||dr||q |dur>t|s>t|tr*|}nt|}t|||} | o9| d}t|}|j} || d<|| d<|| d<|| d<|| d<dS)Nr _spec_class _spec_set_spec_signature _mock_methods _spec_asyncs) dirrr.appendrcr,r9rFre) rJrrrrrrrrresrerrr rs,     zNonCallableMock._mock_add_speccCs8|j}|jdur |jj}|tur|j|dd}||_|S)N()rr)rrrr_get_child_mock)rJrrrr Z__get_return_values z"NonCallableMock.__get_return_valuecCs.|jdur ||j_dS||_t||dddS)Nr)rrrr)rJrrrr Z__set_return_values  z"NonCallableMock.__set_return_valuez1The value to be returned when the mock is called.cCs|jdur t|S|jSr7)rr9rrrr __class__'s zNonCallableMock.__class__rrrrr~cCsN|j}|dur |jS|j}|dur%t|s%t|ts%t|s%t|}||_|Sr7)rrrcallabler,rr;)rJ delegatedZsfrrr Z__get_side_effect4sz!NonCallableMock.__get_side_effectcCs*t|}|j}|dur||_dS||_dSr7) _try_iterrrr)rJrrrrr Z__set_side_effect?s   z!NonCallableMock.__set_side_effectrrcCs |durg}t||vrdS|t|d|_d|_d|_t|_t|_t|_|r0t |_ |r5d|_ |j D]}t|tsE|turFq:|j|||dq:|j }t|ra||urc||dSdSdS)NFrr)idrrrrr|r~rr}rrrrvaluesr, _SpecState_deletedrr+)rJZvisitedrrchildrrrr rJs0 zNonCallableMock.reset_mockcKsZ t|dddD]\}}|d}|}|}|D]}t||}qt|||q dS)NcSs|ddS)Nr.)count)entryrrr usz0NonCallableMock.configure_mock..)keyr)sorteditemssplitpopr.r[)rJrLargvalrKfinalr1rrrr rhs  zNonCallableMock.configure_mockcCs|dvrt||jdur||jvs|tvrtd|nt|r%t||js?|jr0||jvr?|dr?t|d|dtj|j |}|t urQt||durrd}|j durbt |j |}|j |||||d}||j|<nJt|trzt|j|j|j|j|j}Wn ty|jdp|}td|d |d |d |jd w||j|<Wd|SWd|SWd|S1swY|S) N>rrzMock object has no attribute %r)assertZassretZasertZaseertZassrtz6 is not a valid assertion. Use a spec for the mock if z is meant to be an attribute.)rr'rrrrCannot autospec attr from target , as it has already been mocked out. [target=, attr=])rCr _all_magicsrrr%r _lockrrfrrr.rr,rrrrrUrr'rre)rJr'rnr target_namerrr r~sr              zNonCallableMock.__getattr__cCs|jg}|j}|}d}|dgkrd}|dur0|}||j|d}|jdkr)d}|j}|dustt|}|jp:d}t|dkrK|ddvrK|d7}||d<d|S)Nrrrr=r)rz().r)rrrrareversedrrjoin)rJZ _name_listrZlastdotZ_firstrrr _extract_mock_names*      z"NonCallableMock._extract_mock_namecCs^|}d}|dvrd|}d}|jdur"d}|jrd}||jj}dt|j||t|fS)Nr)r=zmock.z name=%rz spec=%rz spec_set=%rz<%s%s%s id='%s'>)rrrrr9r)rJr'Z name_stringZ spec_stringrrr rs   zNonCallableMock.__repr__cCsx tst|S|jp g}tt|}t|j}dd|j D}dd|D}dd|D}t t ||||S)NcSsg|] \}}|tur|qSr)r)r&Zm_nameZm_valuerrr s z+NonCallableMock.__dir__..cSsg|] }|ds|qSr"r$r&errr rr)cSs"g|] }|dr t|r|qSr")r%rrrrr rs ) r object__dir__rrr9rarerrrset)rJZextrasZ from_typeZ from_dictZfrom_child_mocksrrr rs    zNonCallableMock.__dir__csJ|tvr t||Sjr#jdur#|jvr#|jvr#td||tvr/d|}t||tvrqjdurC|jvrCtd|t |s\t t |t |||fdd}n*t |d|t t |||j|<n|dkrz|_dSt |||r|j|<jrt|sd|}td|t||S)Nz!Mock object has no attribute '%s'z.Attempting to set unsupported magic method %r.csg|Ri|Sr7rrKrrmrJrr rz-NonCallableMock.__setattr__..rrz Cannot set )rr __setattr__rrrerC_unsupported_magicsrr+r[r9 _get_methodrrrrr-r)rJr'rmsg mock_namerrr r!s8      zNonCallableMock.__setattr__cCs|tvr|t|jvrtt||||jvrdS|j|t}||jvr.tt| |n|t ur6t ||tur>|j|=t |j|<dSr7) rr9redelattrrrf_missingrr __delattr__rrC)rJr'r1rrr r(s  zNonCallableMock.__delattr__cCs|jpd}t|||Sr<)r_format_call_signaturerJrKrLr'rrr _format_mock_call_signature)s  z+NonCallableMock._format_mock_call_signaturercCs.d}|||}|j}|j|}||||fS)Nz.expected %s not found. Expected: %s Actual: %s)r+r)rJrKrLactionmessageexpected_stringrZ actual_stringrrr _format_mock_failure_message.s   z,NonCallableMock._format_mock_failure_messagecCsl |s|jSd}|ddd}|j}|D]}||}|dus&t|tr)|St|}|j}|j}q|S)Nrrr)rreplacerrrfr,rr?)rJr'rNnameschildrenrrrr _get_call_signature_from_name6s   z-NonCallableMock._get_call_signature_from_namec Cs t|trt|dkr||d}n|j}|durVt|dkr(d}|\}}n|\}}}z|j|i|}t||j|jWSt yU}z | dWYd}~Sd}~ww|S)Nrrr) r,rbrr3rrHrrKrL TypeErrorwith_traceback)rJ_callrNr'rKrLZ bound_callrrrr _call_matcherWs"   zNonCallableMock._call_matchercCs2 |jdkrd|jp d|j|f}t|dS)Nrz9Expected '%s' to not have been called. Called %s times.%sr=rr _calls_reprAssertionErrorrJr$rrr rwr z!NonCallableMock.assert_not_calledcCs& |jdkrd|jp d}t|dS)Nrz"Expected '%s' to have been called.r=)rrr:r;rrr rv|s zNonCallableMock.assert_calledcCs2 |jdksd|jp d|j|f}t|dS)Nrz:Expected '%s' to have been called once. Called %s times.%sr=r8r;rrr rxr<z"NonCallableMock.assert_called_oncecs jdur}d}d||f}t|fdd}tfdd}j}||krDt|tr<|nd}t||dS)Nz not called.z0expected call not found. Expected: %s Actual: %scs}|Sr7r/r$rKrLrJrr _error_messages z:NonCallableMock.assert_called_with.._error_messageTtwo)rr+r:r7_Callr, Exception)rJrKrLexpectedactualZ error_messager@causerr?r rss    z"NonCallableMock.assert_called_withcOs> |jdksd|jp d|j|f}t||j|i|S)Nrz3Expected '%s' to be called once. Called %s times.%sr=)rrr9r:rsrJrKrLr$rrr rys z'NonCallableMock.assert_called_once_withc s fdd|D}tdd|Dd}tfddjD}|sN||vrL|dur-d}n ddd|D}t|d t|jd d d |dSt|}g}|D]}z||WqVt ym| |YqVw|rtd j pvdt ||f|dS)Ncg|]}|qSrr7r&crrr rr z4NonCallableMock.assert_has_calls..cs|] }t|tr|VqdSr7r,rDrrrr z3NonCallableMock.assert_has_calls..c3|]}|VqdSr7rJrKrrr rOzCalls not found.z+Error processing expected calls. Errors: {}cSg|] }t|tr |ndqSr7rNrrrr r Expected: ZActual)prefixrz@%r does not contain all of %r in its call list, found %r insteadr=) rr|r~formatr:r9rstripraremoverErrrb) rJcalls any_orderrErGZ all_callsproblem not_foundkallrrr rzsX  z NonCallableMock.assert_has_callscl t||fdd}t|tr|nd}fddjD}|s'|t|vr4||}td||dS)NTrAcrIrrJrKrrr rr z3NonCallableMock.assert_any_call..z%s call not found)r7rCr,rDr _AnyComparerr+r:rJrKrLrErGrFr.rrr r{s zNonCallableMock.assert_any_callcKs |jrd|vrd|dnd}||}t||d}||jdvr.tdi|St|}t|tr>|t vr>t}n1t|t rU|t vsO|j rR||j vrRt}nt}nt|t sjt|trbt}n t|trit}n|jd}|di|S)Nr'rrrrrr)rrrCrfrer r9r8r_async_method_magicsr_all_sync_magicsr CallableMixinr r rrd)rJrr]r%r_typeklassrrr rs4        zNonCallableMock._get_child_mockCallscCs$ |jsdSd|dt|jdS)Nr z: r)r~r)rJrVrrr r9szNonCallableMock._calls_repr) NNNNNNrNFNFF)FFr7)r)rg).rrrrrrrArrrZ"_NonCallableMock__get_return_valueZ"_NonCallableMock__set_return_valueZ"_NonCallableMock__return_value_docrrrrrrrrr~Z!_NonCallableMock__get_side_effectZ!_NonCallableMock__set_side_effectrrrrrrrr!r(r+r/r3r7rwrvrxrsryrzr{rr9rrrr r sd -      0' !   -&r c@seZdZ ddZdS)r`cCs,|D]}tddt||DrdSqdS)NcSsg|]\}}||kqSrr)r&rErFrrr r+sz-_AnyComparer.__contains__..TF)allzip)rJitemr6rrr r(sz_AnyComparer.__contains__N)rrrrrrrr r`#s r`cCsF|dur|St|r |St|r|Szt|WSty"|YSwr7)r;r`rr4r0rrr r3s  rc @sReZdZddedddddddf ddZddZddZd d Zd d Zd dZ dS)rdNrc Ks:||jd<tt|j||||||| | fi| ||_dS)Nr)rerrdrAr) rJrrrrr'rrrrrrLrrr rADs    zCallableMixin.__init__cOrr7rrIrrr rRPszCallableMixin._mock_check_sigcOs0|j|i||j|i||j|i|Sr7)rR_increment_mock_call _mock_callrIrrr rBUszCallableMixin.__call__cOs|j|i|Sr7)_execute_mock_callrIrrr rn]ruzCallableMixin._mock_callc Os d|_|jd7_t||fdd}||_|j||jdu}|j}|j}|dk}|j td||f|j }|dur|rW|j t|||f|jdu}|rW|jd|}t|||f} |j | |jrz|rld} nd} |jdk}|j| |}|j }|dus|j|i|S|jSr7)rr;r`rrrrr)rJrKrLeffectrnrrr ros"  z CallableMixin._execute_mock_call) rrrrrArRrBrnrmrorrrr rdBs   .rdc@r)rNrrrrr rr!rcCs2zt||WStyt|t||YSwr7)r.rC __import__)thingcomp import_pathrrr _dot_lookups   rucCsB|d}|d}t|}|D]}|d|7}t|||}q|S)Nrrz.%s)rrrqru)targetZ componentsrtrrrsrrr _importers   rwcCs(d}|D] }||vrt|dqdS)N)Z autospectZ auto_specZset_specz5 might be a typo; use unsafe=True if this is intended) RuntimeError)Zkwargs_to_checkZtyposZtyporrr _check_spec_arg_typossryc@seZdZdZgZddddZddZdd Zd d Ze j d d Z ddZ ddZ ddZddZddZddZddZdS)_patchNFrc  Cs|dur|tur td|durtd| st| t|r)td|d|dt|r8td|d|d||_||_||_||_||_ ||_ d|_ ||_ ||_ | |_g|_dS)Nz,Cannot use 'new' and 'new_callable' togetherz1Cannot use 'autospec' and 'new_callable' togetherzCannot spec attr z0 as the spec has already been mocked out. [spec=rz? as the spec_set target has already been mocked out. [spec_set=F)rrEryr+rgetterr]r new_callablercreateZ has_localrautospecrLadditional_patchers) rJr|r]rrr~rrr}rLrrrr rAsD z_patch.__init__c CsHt|j|j|j|j|j|j|j|j|j }|j |_ dd|j D|_ |S)NcSsg|]}|qSr)copy)r&prrr r-z_patch.copy..) rzr|r]rrr~rrr}rLattribute_namer)rJpatcherrrr r&s z _patch.copycC2t|tr ||St|r||S||Sr7r,r9decorate_classr/rdecorate_async_callabledecorate_callablerJr5rrr rB3     z_patch.__call__cCsNt|D] }|tjs qt||}t|dsq|}t||||q|SNrB)rr%r TEST_PREFIXr.r-rr[)rJrfr attr_valuerrrr r;s    z_patch.decorate_classccsg}t4}|jD]}||}|jdur||q |jtur'||q |t |7}||fVWddS1s>wYdSr7) contextlib ExitStack patchings enter_contextrupdaterrrrb)rJpatchedrKkeywargs extra_args exit_stackpatchingrrrr decoration_helperIs         "z_patch.decoration_helperc>tdr jStfddg_S)NrcsD||\}}|i|WdS1swYdSr7rrKrZnewargsZ newkeywargsr5rrJrr r^s $z)_patch.decorate_callable..patchedr-rrrrrrr rX  z_patch.decorate_callablecr)NrcsL||\}}|i|IdHWdS1swYdSr7rrrrr ros$z/_patch.decorate_async_callable..patchedrrrrr rirz_patch.decorate_async_callablec Cs|}|j}t}d}z|j|}Wnttfy#t||t}Ynwd}|tvr2t|t r2d|_ |j sA|turAtd||f||fS)NFTz!%s does not have the attribute %r) r|r]rrerCKeyErrorr. _builtinsr,rr~)rJrvr'rmlocalrrr get_originalzs" z_patch.get_originalc Cs |j|j|j}}}|j|j}}|j}||_|dur!d}|dur'd}|dur-d}|dur9|dur9td|dusA|durI|dvrItd| \}}|t ur/|dur/d} |durj|}|duri|}d}n|durw|durv|}d}n|dur}|}|dus|dur|t urtdt |t rd} |durt |rt} nt} i} |dur|} n)|dus|dur|} |dur|} t| rd| v} nt|  } t | rt} n| rt} |dur|| d<|dur|| d <t | t rt| tr|jr|j| d <| || di| }| r.t|r.|} |dur|} t| st| st} | d | d|d d | |_nl|dur|t ur=td |t urFtdt|}|durQ|}t|jrgtd|jd|jd|dt|rt|jd|j}td|jd|d|jd|d t|f||jd|}n|rtd|}||_||_ t!"|_#z9t$|j|j||j%duri}|jt ur|||j%<|j&D]}|j#'|}|jt ur||q|WS|WS|j(t)*sYdS)NFzCan't specify spec and autospec)TNz6Can't provide explicit spec_set *and* spec or autospecTz!Can't use 'spec' with create=TruerBrrr'rrzBautospec creates the mock for you. Can't specify autospec and new.z%Can't use 'autospec' with create=Truer z: as the patch target has already been mocked out. [target=rrrr r)r_namez.Can't pass kwargs to a mock we aren't creatingr)+rrrrrLr}r|rvr4rrr,r9r2r rrcrr r8r r]rr+rhrrboolrr.r temp_originalis_localrr _exit_stackr[rrr__exit__sysexc_info)rJrrrrrLr}rmrZinheritKlass_kwargsZ this_specZ not_callablerZnew_attrrrrrrr __enter__s                            z_patch.__enter__cGs |jr|jturt|j|j|jnt|j|j|js2t|j|jr)|jdvr2t|j|j|j|`|`|`|j }|` |j |S)N)rWrrY__annotations__rZ) rrrr[rvr]r&r~r-rr)rJrrrrr r$s  z_patch.__exit__cCs |}|j||Sr7)r_active_patchesrrJrnrrr start9 z _patch.startcCs6 z|j|Wn tyYdSw|dddSr7)rrYrErrrrr stop@ z _patch.stop)rrrrrrArrBrrcontextmanagerrrrrrrrrrrrr rzs$ %   rzc sLz dd\}Wntttfytdwfdd}||fS)Nrrz,Need a valid target to patch. You supplied: ctSr7rwrrvrr rRz_get_target..)rsplitr4rErC)rvr]r|rrr _get_targetLs rr{c sD tturtdfdd} t| |||||||| |d S)Nz3 must be the actual object to be patched, not a strcSr7rrrrr rlz_patch_object..r{)r9strr4rz) rvr]rrr~rrr}rrLr|rrr _patch_objectVs    rc s tturfdd}nfdd}|stdt|}|d\} } t|| | |||||i } | | _|ddD]\} } t|| | |||||i } | | _| j| q;| S)Ncrr7rrrrr rrz!_patch_multiple..crr7rrrrr rrz=Must supply at least one keyword argument with patch.multiplerr) r9rrErarrzrrr) rvrr~rrr}rLr|rr]rrZ this_patcherrrr _patch_multipless.      rc Ks* t|\} } t| | ||||||||d S)Nr{)rrz) rvrrr~rrr}rrLr|r]rrr rs  G  rc@sheZdZ dddZddZddZd d Zd d Zd dZddZ ddZ ddZ ddZ ddZ dS) _patch_dictrFcKs,||_t||_|j|||_d|_dSr7)in_dictdictrrclear _original)rJrrrrLrrr rAs    z_patch_dict.__init__cCrr7r)rJfrrr rBrz_patch_dict.__call__ctfdd}|S)Ncs,z |i|WSwr7r _unpatch_dictrrrJrr _inner%sz-_patch_dict.decorate_callable.._innerrrJrrrrr r$z_patch_dict.decorate_callablecr)Ncs4z|i|IdHWSwr7rrrrr r1s z3_patch_dict.decorate_async_callable.._innerrrrrr r0rz#_patch_dict.decorate_async_callablecCsXt|D]%}t||}|tjr)t|dr)t|j|j|j }||}t |||q|Sr) rr.r%rrr-rrrrr[)rJrfrrZ decoratorZ decoratedrrr r<s    z_patch_dict.decorate_classcCs ||jSr7)rrrrrr rGsz_patch_dict.__enter__cCs|j}t|jtrt|j|_|j}|j}z|}Wnty1i}|D]}||||<q&Ynw||_|r;t |z| |WdStyX|D]}||||<qLYdSwr7) rr,rrrwrrrCr _clear_dictr)rJrrrrmrrrr rMs.     z_patch_dict._patch_dictcCsP|j}|j}t|z||WdSty'|D]}||||<qYdSwr7)rrrrrC)rJrrmrrrr ris z_patch_dict._unpatch_dictcGs |jdur |dSNF)rr)rJrKrrr rvs z_patch_dict.__exit__cCs |}tj||Sr7)rrzrrrrrr r}rz_patch_dict.startcCs6 ztj|Wn tyYdSw|dddSr7)rzrrYrErrrrr rrz_patch_dict.stopN)rF)rrrrArBrrrrrrrrrrrrr rs       rcCs<z|WdStyt|}|D]}||=qYdSwr7)rrCra)rkeysrrrr rs rcCs ttjD]}|qdSr7)rrzrr)rrrr _patch_stopalls rtestzlt le gt ge eq ne getitem setitem delitem len contains iter hash str sizeof enter exit divmod rdivmod neg pos abs invert complex int float index round trunc floor ceil bool next fspath aiter zHadd sub mul matmul div floordiv mod lshift rshift and xor or pow truediv cc|]}d|VqdS)zi%sNrr&nrrr rOrOccr)zr%sNrrrrr rOr>r __reversed____subclasses__Z__getinitargs__ __missing__ __reduce_ex__ __delete__ __setstate__ __getstate__r__getnewargs_ex____get__ __getformat____set__ __setformat__r__getnewargs__ __format__cs fdd}||_|S)Ncs|g|Ri|Sr7rrJrKrr4rr methodrz_get_method..method)r)r'r5rrr4r r#s r#cCsh|]}d|qS)rr)r&rrrr r(r> __aexit__ __aenter__ __anext__ __aiter__> __prepare__r__subclasscheck__r!rrA__del____instancecheck__cC t|Sr7)r__hash__rrrr r rcCrr7)r__str__rrrr rrcCrr7)r __sizeof__rrrr rrcCs"t|jd|dt|S)N/)r9rrrrrrr rs")rrr __fspath__ry?g?) __lt____gt____le____ge____int__r__len__r __complex__ __float____bool__ __index__rcfdd}|S)Ncs$jj}|tur |S|urdStSr@)__eq__rrNotImplemented)otherret_valrrr rs z_get_eq..__eq__r)rJrrrr _get_eq r cr)Ncs jjturtS|urdStSr)__ne__rrr)rrrr r s z_get_ne..__ne__r)rJr rrr _get_nes r cr)Ncs jj}|tur tgSt|Sr7)__iter__rrrrrrr r sz_get_iter..__iter__r)rJr rrr _get_iterr rcr)Ncs(jj}|turttgStt|Sr7)rrr_AsyncIteratorrrrrr rs  z"_get_async_iter..__aiter__r)rJrrrr _get_async_iters r)rr r rcCsft|t}|tur||_dSt|}|dur!||}||_dSt|}|dur1|||_dSdSr7)_return_valuesrfrr_calculate_return_value_side_effect_methodsr)r=rr'ZfixedZreturn_calculatorrZ side_effectorrrr _set_return_value*s   rc@r) MagicMixincO*|tt|j|i||dSr7)_mock_set_magicsrrrArrrr rA= zMagicMixin.__init__cCsttB}|}t|dddur,||j}t}||}|D]}|t|jvr+t||q|tt|j}t|}|D] }t ||t ||q;dS)Nr) _magicsrbr. intersectionrrr9rer&r[ MagicProxy)rJZ orig_magicsZ these_magicsZ remove_magicsrrerrr rCs  zMagicMixin._mock_set_magicsN)rrrrArrrrr r<s rc@eZdZ dddZdS)r FcC ||||dSr7rrrrrr r]  z"NonCallableMagicMock.mock_add_specNrirrrrrrrr r [sr c@seZdZddZdS)AsyncMagicMixincOrr7)rrr"rArrrr rAhrzAsyncMagicMixin.__init__NrrrrArrrr r"gs r"c@r)rFcCrr7rrrrr rxr zMagicMock.mock_add_specNrir!rrrr rms rc@s&eZdZddZddZdddZdS) rcCs||_||_dSr7r'r)rJr'rrrr rAs zMagicProxy.__init__cCs8|j}|j}|j|||d}t|||t||||S)N)r'rr)r'rrr[r)rJrrmrrr create_mocks  zMagicProxy.create_mockNcCs|Sr7)r&)rJr1rerrr rszMagicProxy.__get__r7)rrrrAr&rrrrr rs rcseZdZedZedZedZfddZddZdd Z d d Z d d Z ddZ ddZ dddZddZfddZZS)rrrrcstj|i|tjj|jd<d|jd<d|jd<t|jd<ttd}t j |_ ||jd<d|jd <t |jd <i|jd <d|jd <dS) NrrZ_mock_await_countZ_mock_await_argsZ_mock_await_args_listrr3r rrYrZr) superrArrrrer|r rr/Z CO_COROUTINEco_flagsrb)rJrKrL code_mockrrr rAs        zAsyncMockMixin.__init__cs t||fdd}|jd7_||_|j||j}|dur]t|r&|t|sAzt|}Wn t y9t wt|r@|nt |rP||i|IdH}n||i|}|t ur]|S|j t ure|jS|jdurt |jrz|j|i|IdHS|j|i|S|jS)NTrAr)rCrrrrrr;r`r StopIterationStopAsyncIterationrrrrr)rJrKrLr6rprnrrr ros<      z!AsyncMockMixin._execute_mock_callcCs* |jdkrd|jp dd}t|dS)Nr Expected r=z to have been awaited.rrr:r;rrr rs  zAsyncMockMixin.assert_awaitedcCs2 |jdksd|jp dd|jd}t|dSNrr.r=z$ to have been awaited once. Awaited  times.r/r;rrr r z"AsyncMockMixin.assert_awaited_oncecs jdur}td|dfdd}tfdd}j}||kr@t|tr8|nd}t||dS)NzExpected await: z Not awaitedcsjdd}|S)Nawait)r,r=r>r?rr r@sz:AsyncMockMixin.assert_awaited_with.._error_messageTrA)rr+r:r7rCr,rD)rJrKrLrEr@rFrGrr?r rs    z"AsyncMockMixin.assert_awaited_withcOs> |jdksd|jp dd|jd}t||j|i|Sr0)rrr:rrHrrr rs z'AsyncMockMixin.assert_awaited_once_withcr_)NTrAcrIrrJrKrrr r r z3AsyncMockMixin.assert_any_await..z%s await not found)r7rCr,rDrr`r+r:rarrr r s zAsyncMockMixin.assert_any_awaitFc s fdd|D}tdd|Dd}tfddjD}|sI||vrG|dur-d}n ddd|D}t|d t|d j|dSt|}g}|D]}z||WqQtyh||YqQw|rutd t |f|dS) NcrIrrJrKrrr r r z4AsyncMockMixin.assert_has_awaits..csrMr7rNrrrr rO rPz3AsyncMockMixin.assert_has_awaits..c3rQr7rJrKrrr rO rRzAwaits not found.z,Error processing expected awaits. Errors: {}cSrSr7rNrrrr r' rTrUz Actual: z%r not all found in await list) rr|rrWr:rarYrErrb) rJrZr[rErGZ all_awaitsr\r]r^rrr r sP   z AsyncMockMixin.assert_has_awaitscCs2 |jdkrd|jp dd|jd}t|dS)Nrr.r=z# to not have been awaited. Awaited r1r/r;rrr r= r2z!AsyncMockMixin.assert_not_awaitedcs, tj|i|d|_d|_t|_dSNr)r(rrrr|rrIr+rr rF s  zAsyncMockMixin.reset_mockri)rrrrrrrrArorrrrrrrr __classcell__rrr+r rs (  , rc@r)r Nrrrrr r P r!r c@r)_ANYcCrr@rrJrrrr r~ rz _ANY.__eq__cCrrrr7rrr r  rz _ANY.__ne__cCr)Nzrrrrr r rz _ANY.__repr__N)rrrrr rrrrr r6{ s  r6cCs`d|}d}ddd|D}ddd|D}|r |}|r,|r(|d7}||7}||S)Nz%s(%%s)rz, cSsg|]}t|qSr)repr)r&rrrr r sz*_format_call_signature..cSsg|] \}}d||fqS)z%s=%rr)r&rrrrr r s)rr)r'rKrLr-Zformatted_argsZ args_stringZ kwargs_stringrrr r) s r)c@seZdZ  dddZ  ddd Zd d ZejZd d ZddZ ddZ ddZ e ddZ e ddZddZddZdS)rCrrNFTc Csd}i}t|}|dkr|\}}}n9|dkr2|\} } t| tr,| }t| tr)| }n"| }n| | }}n|dkrK|\}t|trA|}n t|trI|}n|}|rUt|||fSt||||fS)Nrrr)rr,rrbr) rrr'rrB from_kallrKrL_lenfirstsecondrrr r s.      z _Call.__new__cCs||_||_||_dSr7)rr_mock_from_kall)rJrr'rrBr:rrr rA s z_Call.__init__c CsRzt|}Wn tytYSwd}t|dkr|\}}n|\}}}t|ddr8t|ddr8|j|jkr8dSd}|dkrDdi}}nU|dkrN|\}}}nK|dkrq|\} t| tr_| }i}n:t| trl| }di}}n-d}| }n(|dkr|\} } t| tr| }t| tr| i}}nd| }}n| | }}ndS|r||krdS||f||fkS) NrrrFrrr9r)rr4rr.rr,rbr) rJrZ len_otherZ self_nameZ self_argsZ self_kwargsZ other_nameZ other_argsZ other_kwargsrr<r=rrr r sN                 z _Call.__eq__cOs<|jdurtd||fddS|jd}t|j||f||dS)Nrrrr$rrCr*rrr rB s  z_Call.__call__cCs2|jdur t|ddSd|j|f}t||ddS)NF)r'r:z%s.%s)r'rr:r?)rJrr'rrr r s  z_Call.__getattr__cCs|tjvrtt||Sr7)rbrerC__getattribute__)rJrrrr r@ s  z_Call.__getattribute__cCs.t|dkr|\}}||fS|\}}}||fS)Nr)rr*rrr _get_call_arguments$ s  z_Call._get_call_argumentscC |dSr4rArrrr rK,  z _Call.argscCrB)NrrCrrrr rL0 rDz _Call.kwargscCs||js|jpd}|drd|}|St|dkr d}|\}}n|\}}}|s*d}n|ds4d|}nd|}t|||S)Nrrzcall%srzcall.%s)r>rr%rr))rJr'rKrLrrr r4 s        z_Call.__repr__cCs< g}|}|dur|jr|||j}|dus tt|Sr7)r>rrr|r)rJZvalsrrrrr call_listI s  z_Call.call_list)rrNFT)rNNFT)rrrrrArrr rBrr@rArrKrLrrErrrr rC s(   5   rC)r:c Ksj t|r t|}t|t}t|rtd|dt|}d|i} |r)d|i} n|dur/i} | r7|r7d| d<|s=t|| |t} t |rLi} n|rW|rTt dt } nt |s^t} n |rh|rht|sht} | d|}|} |durvd } | d||| |d | } t|trt| |} |rt| nt|| |||dur|s| |j|<|r|sd |vrt||dd | d | _t|D]w} t| rqzt|| }Wn tyYqwd|i}|rd|i}t|tst||| | |}|| j| <n6| }t|tr| j}t|| |}||d<t|r t }nt}|d|| | |d|}|| j| <t|||dt|tr2t | | |q| S)Nz'Cannot autospec a Mock object. [object=rrrTrzJInstance can not be True when create_autospec is mocking an async functionr'r)rrrr'rr)rUrrr)rr'rr)rTr)!rcr9r,r+rr6ryrrr/Zisdatadescriptorrxr r`r rhrr>rqrrVrrrrrr.rCrr= _must_skiprr[)rrrUrrrrLis_typeZ is_async_funcrrrr=rrmrrrTZ child_klassrrr rY s                       rcCsx t|ts|t|divrdS|j}|jD]#}|j|t}|tur$qt|tt fr.dSt|t r7|SdS|S)NreF) r,r9r.rrdrerfrr^r_r>)rrrGrfrnrrr rF s   rFc@seZdZ  dddZdS)rFNcCs(||_||_||_||_||_||_dSr7)ridsrrrUr')rJrrrr'rHrUrrr rA s  z_SpecState.__init__)FNNNFr#rrrr r srcCst|tr t|St|Sr7)r,bytesioBytesIOStringIO) read_datarrr _to_stream s   rNrcs( t}|dgfdd}fdd}fddfddfd d }tdurEd dl}ttt|jtt|ja|durOt d t d }t tdj _ dj _ dj_ dj_ dj_ |j_d<dj_|j_j_|j_fdd}||_|_ |S)Nc(jjdur jjSdj|i|Sr4) readlinesrri_statehandlerr _readlines_side_effect.  z)mock_open.._readlines_side_effectcrOr4)readrrirQrr _read_side_effect3 rUz$mock_open.._read_side_effectc?s(EdH dj|i|VqNTr)readlineri)_iter_side_effectrRrr _readline_side_effect8 s  z(mock_open.._readline_side_effectc3s4jjdur jjVqdD]}|VqdSrX)rYr)linerQrr rZ= s   z$mock_open.._iter_side_effectcs jjdur jjStdSr4)rYrrrrQrr _next_side_effectD s  z$mock_open.._next_side_effectropen)r'r)rrcs6td<jjdkrd<dj_tS)Nrr)rNrYrrri)r[rRrSrMrr reset_data` s   zmock_open..reset_data)rN file_spec_iorarr TextIOWrapperunionrKrr^rrwriterVrYrPrr r)r=rMZ _read_datarTrWr]rar_r)rZr[rRrSrMr r  s: "    r c@s(eZdZ ddZdddZddZdS) rcKstdi|S)Nr)r)rJrLrrr rv rzPropertyMock._get_child_mockNcCs|Sr7r)rJr1Zobj_typerrr ry szPropertyMock.__get__cCs ||dSr7r)rJr1r rrr r{ s zPropertyMock.__set__r7)rrrrrrrrrr rm s   rc Csn d|_t|D],}zt||}Wn tyYqwt|ts!qt|j|tr+q|j |ur4t |qdSr@) rrr.rCr,r rrfrrr)r=rr%rrr r s     rc@seZdZ ddZddZdS)rcCs&||_ttd}tj|_||jd<dS)Nr'r3)iteratorr rr/ZCO_ITERABLE_COROUTINEr)re)rJrer*rrr rA s z_AsyncIterator.__init__cs$zt|jWStyYtwr7)rrer,r-rrrr r s  z_AsyncIterator.__anext__N)rrrrArrrrr r s rri)NFNNN)FFNNr)__all__rrrJr/rrbuiltinsrtypesrrrZ unittest.utilr functoolsrrZ threadingrrDrrrr r(rr2r6r+r;r?rFrVrQr`rcrhrqrlrrrrrrrMISSINGr'ZDELETEDrrrrar|rrrr rDrArr`rrdrrurwryrzrrrrrrrrZmultipleZstopallrZ magic_methodsZnumericsrrZinplacerightZ _non_defaultsr#rrbZ_sync_async_magicsZ _async_magicsrcrr"rrrr r rrrrrr r"rrrr r6rr)rbrCrrrFrr9rr>r`rNr rrrrrrr sD        1  h4  R   2 R        <+  :   N