a „oe÷&ã@sÂdZddlZddlmZddlZddlZddlZddlmZddl m Z Gdd„dƒZ Gdd „d e ƒZ Gd d „d e ƒZ Gd d „d e ƒZGdd„de ƒZzddlZe ZWney¼e ZYn0dS)zNDispatcher Please see policy.py for a discussion on dispatchers and policies éN)Úexc_info)ÚIsCOMServerException)ÚIIDToInterfaceNamec@s˜eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$S)%ÚDispatcherBaseaƒThe base class for all Dispatchers. This dispatcher supports wrapping all operations in exception handlers, and all the necessary delegation to the policy. This base class supports the printing of "unexpected" exceptions. Note, however, that exactly where the output of print goes may not be useful! A derived class may provide additional semantics for this. cCs||ƒ|_ttddƒ|_dS)NÚlogger)ÚpolicyÚgetattrÚwin32comr)ÚselfÚ policyClassÚobject©r ú;C:\Program Files\Certbot\pkgs\win32com\server\dispatcher.pyÚ__init__s zDispatcherBase.__init__cCs6z|j ||¡t ||¡WS| ¡YS0dS©N)rÚ_CreateInstance_Ú pythoncomZ WrapObjectÚ_HandleException_)r ZclsidZreqIIDr r rr%s zDispatcherBase._CreateInstance_cCs(z|j |¡WS| ¡YS0dSr)rÚ_QueryInterface_r)r Úiidr r rr,szDispatcherBase._QueryInterface_cCs.z|j ||||¡WS| ¡YS0dSr)rÚ_Invoke_r©r ÚdispidÚlcidÚwFlagsÚargsr r rr2szDispatcherBase._Invoke_cCs*z|j ||¡WS| ¡YS0dSr)rÚ_GetIDsOfNames_r©r Únamesrr r rr8szDispatcherBase._GetIDsOfNames_cCs*z|j ||¡WS| ¡YS0dSr)rÚ _GetTypeInfo_r©r Úindexrr r rr>szDispatcherBase._GetTypeInfo_cCs&z |j ¡WS| ¡YS0dSr)rÚ_GetTypeInfoCount_r©r r r rr"Ds z!DispatcherBase._GetTypeInfoCount_cCs*z|j ||¡WS| ¡YS0dSr)rÚ _GetDispID_r©r ÚnameÚfdexr r rr$JszDispatcherBase._GetDispID_cCs2z|j ||||||¡WS| ¡YS0dSr)rÚ _InvokeEx_r©r rrrrÚkwargsZserviceProviderr r rr(Ps  ÿzDispatcherBase._InvokeEx_cCs*z|j ||¡WS| ¡YS0dSr)rÚ_DeleteMemberByName_rr%r r rr+Xsz#DispatcherBase._DeleteMemberByName_cCs(z|j |¡WS| ¡YS0dSr)rÚ_DeleteMemberByDispID_r©r Úidr r rr,^sz%DispatcherBase._DeleteMemberByDispID_cCs*z|j ||¡WS| ¡YS0dSr)rÚ_GetMemberProperties_r©r r.r'r r rr/dsz$DispatcherBase._GetMemberProperties_cCs(z|j |¡WS| ¡YS0dSr)rÚ_GetMemberName_r©r rr r rr1jszDispatcherBase._GetMemberName_cCs*z|j ||¡WS| ¡YS0dSr)rÚ_GetNextDispID_r©r r'Úflagsr r rr3pszDispatcherBase._GetNextDispID_cCs&z |j ¡WS| ¡YS0dSr)rÚ_GetNameSpaceParent_rr#r r rr6vs z#DispatcherBase._GetNameSpaceParent_cCs,tƒs&|jdur|j d¡nt ¡‚dS)zfCalled whenever an exception is raised. Default behaviour is to print the exception. Nzpythoncom server error)rrÚ exceptionÚ tracebackÚ print_excr#r r rr|s  z DispatcherBase._HandleException_cGsV|jdur(d tt|ƒ¡}|j |¡n*|dd…D]}t|ddq4t|dƒdS)Nú éÿÿÿÿ)Úend)rÚjoinÚmapÚstrÚdebugÚprint)r rÚrecordÚargr r rÚ_trace_Šs  zDispatcherBase._trace_N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrrrr"r$r(r+r,r/r1r3r6rrDr r r rrs$  rc@sxeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)ÚDispatcherTracezGA dispatcher, which causes a 'print' line for each COM function called.cCs4t ||¡}|s0| dt|jjƒt|ƒ|f¡|S)Nz3in %s._QueryInterface_ with unsupported IID %s (%s))rrrDÚreprrÚ_obj_r)r rÚrcr r rr—s ÿÿz DispatcherTrace._QueryInterface_cCs | d||f¡t |||¡S)Nz&in _GetIDsOfNames_ with '%s' and '%d' )rDrrrr r rr szDispatcherTrace._GetIDsOfNames_cCs | d||f¡t |||¡S)Nz(in _GetTypeInfo_ with index=%d, lcid=%d )rDrrr r r rr¤szDispatcherTrace._GetTypeInfo_cCs| d¡t |¡S)Nzin _GetTypeInfoCount_ )rDrr"r#r r rr"¨s z"DispatcherTrace._GetTypeInfoCount_cCs$| d||||¡t |||||¡S)Nzin _Invoke_ with)rDrrrr r rr¬szDispatcherTrace._Invoke_cCs| d||¡t |||¡S)Nzin _GetDispID_ with)rDrr$r%r r rr$°szDispatcherTrace._GetDispID_c Cs4| d|jj|||||f¡t |||||||¡S)Nz in %r._InvokeEx_-%s%r [%x,%s,%r])rDrrKrr(r)r r rr(´sÿÿÿzDispatcherTrace._InvokeEx_cCs| d||¡t |||¡S)Nzin _DeleteMemberByName_ with)rDrr+r%r r rr+½sz$DispatcherTrace._DeleteMemberByName_cCs| d|¡t ||¡S)Nzin _DeleteMemberByDispID_ with)rDrr,r-r r rr,Ás z&DispatcherTrace._DeleteMemberByDispID_cCs| d||¡t |||¡S)Nzin _GetMemberProperties_ with)rDrr/r0r r rr/Åsz%DispatcherTrace._GetMemberProperties_cCs| d|¡t ||¡S)Nzin _GetMemberName_ with)rDrr1r2r r rr1És zDispatcherTrace._GetMemberName_cCs| d||¡t |||¡S)Nzin _GetNextDispID_ with)rDrr3r4r r rr3ÍszDispatcherTrace._GetNextDispID_cCs| d¡t |¡S)Nzin _GetNameSpaceParent_)rDrr6r#r r rr6Ñs z$DispatcherTrace._GetNameSpaceParent_N)rErFrGrHrrrr"rr$r(r+r,r/r1r3r6r r r rrI”s  rIc@seZdZdZdd„ZdS)ÚDispatcherWin32tracezNA tracing dispatcher that sends its output to the win32trace remote collector.cCs6t |||¡|jdur ddl}| dt|ƒ¡dS)Nrz5Object with win32trace dispatcher created (object=%s))rIrrÚwin32traceutilrDrJ)r r r rNr r rrÙs   ÿzDispatcherWin32trace.__init__N)rErFrGrHrr r r rrMÖsrMc@seZdZdZdd„ZdS)ÚDispatcherOutputDebugStringzHA tracing dispatcher that sends its output to win32api.OutputDebugStringcGs>|dd…D]}t t|ƒd¡q t t|dƒd¡dS)Nr;r:Ú )Úwin32apiZOutputDebugStringr?)r rrCr r rrDæsz#DispatcherOutputDebugString._trace_N)rErFrGrHrDr r r rrOãsrOc@s eZdZdZdd„Zdd„ZdS)ÚDispatcherWin32dbgz·A source-level debugger dispatcher A dispatcher which invokes the debugger as an object is instantiated, or when an unexpected exception occurs. Requires Pythonwin. cCs4tj ¡tdƒtdƒtdƒt |||¡dS)Nz0The DispatcherWin32dbg dispatcher is deprecated!z(Please let me know if this is a problem.z:Uncomment the relevant lines in dispatcher.py to re-enable)ÚpywinÚdebuggerZbrkrArr)r r Úobr r rrõs  zDispatcherWin32dbg.__init__cCsŠtƒ\}}}d}z ||ƒ‚Wn6tyDtj ¡ tjjj¡}Ynd}Yn0|r‚ztj |||¡Wnt   ¡Yn0~‚dS)z*Invoke the debugger post mortem capabilityréN) rÚ ExceptionrSrTZ GetDebuggerZ get_optionZdbgconZOPT_STOP_EXCEPTIONSZ post_mortemr8r9)r ÚtypÚvalÚtbr@r r rrs"    ÿ z$DispatcherWin32dbg._HandleException_N)rErFrGrHrrr r r rrRìsrR)rHr8ÚsysrrrQr Zwin32com.server.exceptionrZ win32com.utilrrrIrMrOrRZ win32traceZDefaultDebugDispatcherÚ ImportErrorr r r rÚs$   B  2