a „oe)²ã @sPdZddlZddlZddlZddlZddlZddlZddlZddl m Z dd„Z dZ dZ dZdd lmZmZd d lmZe jd e jd e jde jde jde jdiZdd„ZGdd„dƒZdd„Zdd„Zdd„ZGdd„dƒZ Gdd„dƒZ!Gd d!„d!ƒZ"Gd"d#„d#ƒZ#gd$¢Z$gd%¢Z%d&d'gZ&d(gZ'Gd)d*„d*ƒZ(e)d+k�rDe*d,ƒd-d.„Z+dS)/a AXScript Client Framework This module provides a core framework for an ActiveX Scripting client. Derived classes actually implement the AX Client itself, including the scoping rules, etc. There are classes defined for the engine itself, and for ScriptItems éN)ÚaxscriptcCst dd|¡S)Nz ( )| |( )Ú )ÚreÚsub)Útext©rúFC:\Program Files\Certbot\pkgs\win32comext\axscript\client\framework.pyÚRemoveCRsr i€é é@)Ú ExceptionÚIsCOMServerExceptioné)ÚerrorÚSCRIPTSTATE_UNINITIALIZEDÚSCRIPTSTATE_INITIALIZEDÚSCRIPTSTATE_STARTEDÚSCRIPTSTATE_CONNECTEDÚSCRIPTSTATE_DISCONNECTEDÚSCRIPTSTATE_CLOSEDc Gsjddl}| ¡}z2|j|f|ŽWddl}| |¡ ¡ d¡ ¡Sddl}| |¡ ¡ d¡ ¡0dS)NrÚtime)ÚprofileZProfileÚruncallÚpstatsZStatsZ strip_dirsZ sort_statsZ print_stats)ÚfnÚargsrZprofrrrrr-súürc@s2eZdZdZd dd„Zdd„Zdd„Zd d „ZdS) Ú SafeOutputrNcCs|durtj}||_dS©N)ÚsysÚstdoutÚredir)Úselfr rrrÚ__init__@szSafeOutput.__init__cCs,z|j |¡Wnt |¡Yn0dSr)r ÚwriteÚwin32apiZOutputDebugString)r!Úmessagerrrr#EszSafeOutput.writecCsdSrr©r!rrrÚflushKszSafeOutput.flushcCsdSrrr&rrrÚcloseNszSafeOutput.close)N)Ú__name__Ú __module__Ú __qualname__Z softspacer"r#r'r(rrrrr=s  rcCsfttjtƒsbtƒt_t_ddl}dd„}| |j¡|jkrbz| |j|¡Wnt y`Yn0dS)NrcSs tdƒdS)Nz@WARNING: Ignoring keyboard interrupt from ActiveScripting engine©Úprint)ÚaÚbrrrÚnoOp[szMakeValidSysOuts..noOp) Ú isinstancerrrÚstderrÚsignalÚ getsignalÚSIGINTÚdefault_int_handlerÚ ValueError)r3r0rrrÚMakeValidSysOutsTs  r8cGs |D]}t|dd�qtƒdS)z8A function used instead of "print" for debugging output.ú )ÚendNr,)rÚargrrrÚtraceisr<cCstdƒt|ƒt||ƒ‚dS)zHA debugging function that raises an exception considered an "Assertion".z5**************** ASSERTION FAILED *******************N)r-r ©ÚscodeÚdescrrrÚ RaiseAssertpsr@c@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚAXScriptCodeBlockz:An object which represents a chunk of code in an AX ScriptcCs.||_||_d|_||_||_||_d|_dS©Nr)ÚnameÚcodeTextÚ codeObjectÚsourceContextCookieÚstartLineNumberÚflagsÚ beenExecuted)r!rCrDrFrGrHrrrr"zszAXScriptCodeBlock.__init__cCs d|jS)Nz<%s>©rCr&rrrÚ GetFileNameƒszAXScriptCodeBlock.GetFileNamecCs|jSrrJr&rrrÚGetDisplayNameˆsz AXScriptCodeBlock.GetDisplayNamecCstd}t|dƒD](}|j d|d¡}|dkrt|jƒ}q|j d|d¡}|dkr^t|jƒ}|j|d|… ¡S)Néÿÿÿÿrr)ÚrangerDÚfindÚlenÚstrip)r!ÚnoÚposÚiÚeposrrrÚ GetLineNo‹s  zAXScriptCodeBlock.GetLineNoN)r)r*r+Ú__doc__r"rKrLrVrrrrrAws  rAc@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) ÚEventz*A single event for a ActiveX named object.cCs d|_dS)NzrJr&rrrr"šszEvent.__init__cCsd|jjt|ƒ|jfS)Nz<%s at %d: %s>)Ú __class__r)ÚidrCr&rrrÚ__repr__�szEvent.__repr__cCsdSrrr&rrrÚReset sz Event.ResetcCsdSrrr&rrrÚClose£sz Event.ClosecCs |d|_| |j¡d|_dSrB)ÚdispidÚGetNamesrC)r!ÚtypeinfoÚfuncdescrrrÚBuild¦s z Event.BuildN) r)r*r+rWr"r[r\r]rbrrrrrX—s rXc@s\eZdZdZgZdd„Zdd„Zdd„Zdd „Zd d „Z d d „Z dd„Z dd„Z dd„Z dS)Ú EventSinkzRA set of events against an item. Note this is a COM client for connection points.cCs.i|_d|_||_||_| ¡j|_d|_dSr)ÚeventsÚ connectionÚ coDispatchÚ myScriptItemÚ GetEngineÚProcessScriptItemEventÚmyInvokeMethodÚiid)r!ZmyItemrfrrrr"³s  zEventSink.__init__cCs | ¡dSr)Ú Disconnectr&rrrr\»szEventSink.ResetcCsBd|_d|_d|_d|_|j ¡D] }| ¡q"i|_| ¡dSr)rkrgrjrfrdÚvaluesr\rl)r!Úeventrrrr]¾s zEventSink.ClosecCs||jkrtjj |¡SdSr)rkÚwin32comZserverÚutilÚwrap©r!rkrrrÚ_query_interface_És zEventSink._query_interface_cCs<z|j|}Wnttjd�‚Yn0| |j||||¡S©N©r>)rdr ÚwinerrorZDISP_E_MEMBERNOTFOUNDrjrg)r!r^ÚlcidÚwFlagsrrnrrrÚ_invoke_Ís zEventSink._invoke_c CsŽ| ¡}|d}|d}|tjtjfvr4ttjdƒ|d}t|ƒD]D}| |¡}tj tj B}||tj B@|krD|  |¡} |  | ¡SqDdS)z?Gets the typeinfo for the Source Events for the passed typeinfoééú(The typeKind of the object is unexpectedéN)Ú GetTypeAttrÚ pythoncomÚ TKIND_COCLASSÚTKIND_INTERFACEr@rvÚ E_UNEXPECTEDrNÚGetImplTypeFlagsÚIMPLTYPEFLAG_FDEFAULTÚIMPLTYPEFLAG_FSOURCEÚIMPLTYPEFLAG_FRESTRICTEDÚGetRefTypeOfImplTypeÚGetRefTypeInfo) r!r`ÚattrÚcFuncsÚtypeKindÚ cImplTyperTrHZ flagsNeededÚhrefrrrÚGetSourceTypeInfoÕs"ÿ   ÿ ÿ zEventSink.GetSourceTypeInfoc Csüz|j tj¡}d}| ¡}WnHtjyfd}d}z|j tj¡}Wntjy`d}Yn0Yn0t|ƒD]†}|rŒ|  |tj ¡\}}n|  ¡}|  |¡}d}|rp|  ¡} | d|_| d}t|ƒD],} | | ¡} tƒ} |  || ¡| |j| j<qÈqpdS)Nrrrz)rfÚQueryInterfacerÚIID_IProvideMultipleClassInfoÚGetMultiTypeInfoCountrÚ com_errorZIID_IProvideClassInforNÚGetInfoOfIndexÚMULTICLASSINFO_GETTYPEINFOZ GetClassInforŽr~rkÚ GetFuncDescrXrbrdr^) r!Z mainTypeInfoZisMultiÚ numTypeInfosÚitemr`rHZ sourceTyperŠr‰rTrarnrrrÚ BuildEventsís@ÿ ÿ ÿ      zEventSink.BuildEventscCs4|jdus|jdurdStjj |j||j¡|_dSr)rerkroZclientZconnectZSimpleConnectionrfr&rrrÚConnects  ÿzEventSink.ConnectcCs4|jr0z|j ¡Wntjy(Yn0d|_dSr)rerlrr’r&rrrrls zEventSink.DisconnectN)r)r*r+rWÚ_public_methods_r"r\r]rsryrŽr˜r™rlrrrrrc®s %rcc@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$d%„Zd&d'„Zd(S))Ú ScriptItemz:An item (or subitem) that is exposed to the ActiveX scriptcCs4||_||_||_||_d|_i|_d|_d|_dSrB)Ú parentItemÚdispatchrCrHÚ eventSinkÚsubItemsÚcreatedConnectionsÚ isRegistered)r!rœrCr�rHrrrr"&szScriptItem.__init__cCs8d}|jdur|jtj@rd}d|jjt|ƒ|j|fS)NÚz/Globalz<%s at %d: %s%s>)rHrÚSCRIPTITEM_GLOBALMEMBERSrYr)rZrC)r!Z flagsDescrrrr[2süzScriptItem.__repr__cCsÈg}|jdur$|jtj@r$| d¡|jdus>|jtj@dkrH| d¡|jdurh|jtj@rh| d¡|jdurˆ|jtj@rˆ| d¡td|d|jdd   |¡|ƒ|j   ¡D]}|  |d ¡q°dS) NzGLOBAL!rz NOT VISIBLEz EVENT SINKz CODE ONLYr9zName=z, flags=ú/r) rHrr£ÚappendÚSCRIPTITEM_ISVISIBLEÚSCRIPTITEM_ISSOURCEZSCRIPTITEM_CODEONLYr-rCÚjoinrŸrmÚ_dump_)r!ÚlevelZ flagDescsÚsubItemrrrr©=s    zScriptItem._dump_cCs:| ¡|jr|j ¡d|_|j ¡D] }| ¡q(dSrB)rlržr\r¡rŸrm©r!r«rrrr\Ks  zScriptItem.ResetcCsR| ¡d|_d|_|jr*|j ¡d|_|j ¡D] }| ¡q4g|_d|_dSrB)r\r�rœržr]rŸrmr r¬rrrr]Ss  zScriptItem.ClosecCs2|jr dSd|_|j ¡D]}|js| ¡qdS©Nr)r¡rŸrmÚRegister©r!r—rrrr®_s  zScriptItem.RegistercCs |jtj@Sr)rHrr£r&rrrÚIsGlobalsszScriptItem.IsGlobalcCs|jtjtjB@dkSrB)rHrr¦r§r&rrrÚ IsVisiblevsþzScriptItem.IsVisiblecCs |}|jj|jkr|j}q|jSr)rœrYr¯rrrrh{szScriptItem.GetEnginecCs:|j}|jr6z|j ¡d|}Wnty4Yn0|S)NÚ.)rCrœÚ_GetFullItemNameÚAttributeError)r!Úretrrrr³�s zScriptItem._GetFullItemNamecCs|jSr)rYr&rrrÚGetSubItemClassŠszScriptItem.GetSubItemClasscCs|j| ¡Sr)rŸÚlower©r!rCrrrÚ GetSubItem�szScriptItem.GetSubItemcCsœ| ¡}z`|j|}|jdur<|dur<|j|krÿ  ÿþþù  ÿþ z#ScriptItem.GetDefaultSourceTypeInfoN)r)r*r+rWr"r[r©r\r]r®r°r±rhr³r¶r¹r½r¿r™rlr˜r¾rÃrrrrr›#s(      Br›) Ú SetScriptSiteÚ GetScriptSiteÚSetScriptStateÚGetScriptStater]Ú AddNamedItemÚ AddTypeLibÚGetScriptDispatchÚGetCurrentScriptThreadIDÚGetScriptThreadIDÚGetScriptThreadStateZInterruptScriptThreadÚClone)ÚInitNewÚ AddScriptletÚParseScriptTextÚGetInterfaceSafetyOptionsÚSetInterfaceSafetyOptionsÚParseProcedureTextc@sêeZdZdZeeeeZe j e j e j gZ dd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Z d(d)„Z!d*d+„Z"d,d-„Z#d.d/„Z$d0d1„Z%d2d3„Z&d4d5„Z'd6d7„Z(d8d9„Z)d:d;„Z*dd?„Z,d@dA„Z-dBdC„Z.dDdE„Z/dFdG„Z0dHdI„Z1dJdK„Z2dLdM„Z3dNdO„Z4dPdQ„Z5dRdS„Z6dodUdV„Z7dpdWdX„Z8dqdYdZ„Z9drd[d\„Z:dsd]d^„Z;d_d`„Zdedf„Z?dgdh„Z@didj„ZAdkdl„ZBdmdn„ZCdTS)tÚ COMScriptzzAn ActiveX Scripting engine base class. This class implements the required COM interfaces for ActiveX scripting. cCsDtƒd|_d|_tj|_tj|_d|_d|_ d|_ i|_ i|_ dS©NrMr) r8Ú baseThreadIdÚ debugManagerrZSCRIPTTHREADSTATE_NOTINSCRIPTÚ threadStaterÚ scriptStateÚ scriptSiteÚ safetyOptionsrwrŸÚscriptCodeBlocksr&rrrr"[szCOMScript.__init__cCs|jr|j |¡SdSrB)rßZ_query_interface_for_debugger_rrrrrrsis zCOMScript._query_interface_cCs|jdur| tj¡dSr)rârÍrrr&rrrrÖps zCOMScript.InitNewc Cs| ||||||||¡dSr)ZDoAddScriptlet) r!Z defaultNameÚcodeÚitemNameZ subItemNameZ eventNameÚ delimiterrFrGrrrr×ts øzCOMScript.AddScriptletc Cs^|s(|jtjks(|jtjks(|jtjkr2|tB}n |t@}|t@rL| ¡| |||||¡Sr)rárrrrÚSCRIPTTEXT_FORCEEXECUTIONÚRegisterNewNamedItemsZDoParseScriptText) r!råræÚcontextrçrFrGrHZ bWantResultrrrrØ‹s ÿ þ ý ü   ÿzCOMScript.ParseScriptTextc Cstd||||||||| ƒ dS)NrÛ)r<) r!råZ formalParamsZprocNameræZ unkContextrçZ contextCookieZstartingLineNumberrHrrrrÛªs özCOMScript.ParseProcedureTextcCsú||_|jdur|j ¡ddl}z$ddl}ddlm}| |¡|_Wnxtj yht dƒd|_YnXt y†t dƒd|_Yn:|  ¡t dt  ¡dt  ¡dfƒd|_Yn0z| ¡|_Wntj yìt ¡|_Yn0| ¡dS)Nrr)Údebugz|tjtjtjtjtjfvr.| ¡}||jfSt t j d�‚dSrtrü)r!rkrrrrrÙ¥sû z#COMScript.GetInterfaceSafetyOptionscCs| ¡| ¡dSr)réZDoExecutePendingScriptsr&rrrÚExecutePendingScripts´szCOMScript.ExecutePendingScriptscCs| ¡| |||||¡Sr)réZDoProcessScriptItemEvent)r!r—rnrwrxrrrrri¸sz COMScript.ProcessScriptItemEventcCs|j ¡D]}| d¡q dSrB)rŸrmr©r¯rrrÚ_DumpNamedItems_½szCOMScript._DumpNamedItems_cCsF|j}i|_| ¡D],\}}| ¡|jtj@r| |j|j¡qdSr)rŸÚitemsr]rHrZSCRIPTITEM_ISPERSISTENTrÏrC)r!ÚexistingrCr—rrrÚResetNamedItemsÁs  zCOMScript.ResetNamedItemscCs|jSr)rãr&rrrÚGetCurrentSafetyOptionsÊsz!COMScript.GetCurrentSafetyOptionscCs"|j ¡D]}|js | ¡q dSr)rŸrmr r¿r¯rrrÚProcessNewNamedItemsConnectionsÍsz)COMScript.ProcessNewNamedItemsConnectionscCs$|j ¡D]}|js | |¡q dSr)rŸrmr¡ÚRegisterNamedItemr¯rrrréÓszCOMScript.RegisterNewNamedItemscCs | ¡dSr)r®r¯rrrrÙszCOMScript.RegisterNamedItemcCs,|jtjtjfvrdSttjd|jƒdS)Nz"Not connected or disconnected - %d)rárrrr@rvr‚r&rrrÚCheckConnectedOrDisconnectedÜsþþz&COMScript.CheckConnectedOrDisconnectedcCs| ¡| ¡| ¡dSr)rréÚConnectEventHandlersr&rrrr™çszCOMScript.ConnectcCs8|jtjkr$|jtjkr$ttjd�‚| ¡| ¡dSrt) rárrrr rvr‚rZDoRunr&rrrrñìs ÿ þ z COMScript.RuncCs |jtjkr| ¡| ¡dSr)rárrrlr\r&rrrrð÷s zCOMScript.StopcCs:| ¡z | ¡Wntjy(Yn0| tj¡dSr)r ÚDisconnectEventHandlersrr’ròrrr&rrrrlþs  zCOMScript.DisconnectcCs(|j ¡D] }| ¡q | tj¡dSr)rŸrmr™ròrrr¯rrrr s zCOMScript.ConnectEventHandlerscCs|j ¡D] }| ¡q dSr)rŸrmrlr¯rrrr sz!COMScript.DisconnectEventHandlerscCs| ¡| tj¡dSr)rròrrr&rrrr\szCOMScript.Resetc Csv| ¡z^||_z|jr$|j |¡Wn4tjyZ}z|j\}}}}WYd}~n d}~00W| ¡n | ¡0dSr)ÚDisableInterruptsrárâZ OnStateChangerr’rÚEnableInterrupts)r!róZxxx_todo_changemeÚhrr?Úexcr;rrrròs&zCOMScript.ChangeScriptStatecCsF|jr:|j ¡|jjjr0|jjj|g|¢RŽS||ŽSn||ŽSdSr)rßÚ OnEnterScriptÚadbÚ appDebuggerr)r!rrrrrÚ_ApplyInScriptedSection's    z!COMScript._ApplyInScriptedSectioncCsv| ¡zRz2| ||¡W|jr(|j ¡| ¡WS| ¡n|jrN|j ¡| ¡0Wn| |¡Yn0dSr)ÚBeginScriptedSectionrrßÚ OnLeaveScriptÚEndScriptedSectionÚHandleException)r!Ú codeBlockrrrrrÚApplyInScriptedSection1s   ü þ z COMScript.ApplyInScriptedSectioncCs|jr|j ¡t|||ƒSr)rßrÚcompile)r!rårCrÄrrrÚ_CompileInScriptedSection?s z#COMScript._CompileInScriptedSectionNcCs°|jdurdS|dur|j}n|}| ¡}| ¡zbzB| t|ƒ||¡}||_W|jr`|j ¡| ¡WdS| ¡n|jrˆ|j ¡| ¡0Wn|  |¡Yn0dSr­) rErDrKrrr rßrrr)r!rrÄZrealCoderårCrErrrÚCompileInScriptedSectionDs0  ü þ z"COMScript.CompileInScriptedSectioncCsJ|jr:|j ¡|jjjr,|jj |||¡St|||ƒn t|||ƒdSr)rßrrrÚrunÚexec)r!rEÚglobalsÚlocalsrrrÚ_ExecInScriptedSectionZs   z COMScript._ExecInScriptedSectioncCs�|dur |}|jrJdƒ‚d|_| ¡zLz,| |j||¡W|jrN|j ¡| ¡n|jrh|j ¡| ¡0Wn| |¡Yn0dS©Nz-This code block should not have been executedr)rIrr!rErßrrr©r!rrr rrrÚExecInScriptedSectionds&ÿþ  þ zCOMScript.ExecInScriptedSectioncCsJ|jr:|j ¡|jjjr,|jj |||¡St|||ƒSn t|||ƒSdSr)rßrrrZrunevalÚevalr#rrrÚ_EvalInScriptedSectionvs   z COMScript._EvalInScriptedSectioncCsš|dur |}|jrJdƒ‚d|_| ¡zVz6| |j||¡W|jrL|j ¡| ¡WS| ¡n|jrr|j ¡| ¡0Wn| |¡Yn0dSr")rIrr&rErßrrrr#rrrÚEvalInScriptedSection€s2ÿþÿ ú þ zCOMScript.EvalInScriptedSectioncCs¼t ¡\}}}t|ƒrd}‚ttj|ƒrD|jtjkrDd}t |jd�‚t   |||||¡}d}t   |j |j|¡}|dur¬z|j  d|¡WntjyšYn0| tj¡|‚ttjdƒdS)Nruz/Don't have an exception to raise to the caller!)rrïr Ú issubclassrr’ZhresultrZSCRIPT_E_REPORTEDr rZAXScriptExceptionZProcessAXScriptExceptionrârßZOnScriptTerminaterÍrr@rvr‚)r!rÚexc_typeÚ exc_valueÚ exc_tracebackÚ exceptionZresult_exceptionrrrr”s6 ÿ þ  ÿ ÿ ÿzCOMScript.HandleExceptioncCs$|jdurttjd�‚|j ¡dSrt)râr rvr‚rr&rrrr¾s  zCOMScript.BeginScriptedSectioncCs$|jdurttjd�‚|j ¡dSrt)râr rvr‚rr&rrrrÃs  zCOMScript.EndScriptedSectioncCsdSrrr&rrrr ÈszCOMScript.DisableInterruptscCsdSrrr&rrrr ËszCOMScript.EnableInterruptscCs0z |j|WSty*ttjd�‚Yn0dSrt)rŸr»r rvrºr¸rrrÚ GetNamedItemÎs  zCOMScript.GetNamedItemcCstSr)r›r&rrrrõÔszCOMScript.GetNamedItemClasscCs$||j| ¡<|jr |j |¡dSr)rärKrßZAddScriptBlock)r!rrrrÚ_AddScriptCodeBlock×szCOMScript._AddScriptCodeBlock)N)N)N)N)N)Dr)r*r+rWÚIActiveScriptMethodsÚIActiveScriptParseMethodsÚIObjectSafetyMethodsÚ"IActiveScriptParseProcedureMethodsršrrýrþZIID_IObjectSafetyZ_com_interfaces_r"rsrÖr×rØrÛrËrÌrÍrÎr]rÏrÑrÒrÓrÔrÐrÕrÚrÿrÙrrirrrrrérr r™rñrðrlr r r\ròrrrrr!r$r&r'rrrr r r-rõr.rrrrrÜIs†ÿþýÿý%%2"          *rÜÚ__main__z6This is a framework class - please use pyscript.py etccCs¤dS]Z}t| |¡ƒ}|d}z| |¡}WntjyDd}Yn0| |¡}td|d|ƒqtdƒt|dƒD]*}t|  |¡ƒ}| |¡}td|d|ƒqtdS)NZMethodsrzrr9zhas attrZ Variablesé) r~r-rNÚlistr•r_rZ ole_errorZGetDocumentationZ GetVarDesc)r`r‰ÚjrÇrZrÈÚdocrrrÚ dumptypeinfoás"   r8),rWrrrr$Zwin32com.client.connectroZwin32com.server.utilrvZwin32com.axscriptrr rèZSCRIPTTEXT_ISEXPRESSIONZSCRIPTTEXT_ISPERSISTENTZwin32com.server.exceptionr r r¢rrrrrrrZ state_maprrr8r<r@rArXrcr›r/r0r1r2rÜr)r-r8rrrrÚsZ  ú  u