a oe) @sPdZddlZddlZddlZddlZddlZddlZddlZddl m Z ddZ dZ dZ dZdd lmZmZd d lmZe jd e jd e jde jde jde jdiZddZGdddZddZddZddZGdddZ GdddZ!Gd d!d!Z"Gd"d#d#Z#gd$Z$gd%Z%d&d'gZ&d(gZ'Gd)d*d*Z(e)d+krDe*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)axscriptcCstdd|S)Nz ( )| |( ) )resub)textrFC:\Program Files\Certbot\pkgs\win32comext\axscript\client\framework.pyRemoveCRsr i @) ExceptionIsCOMServerException)errorSCRIPTSTATE_UNINITIALIZEDSCRIPTSTATE_INITIALIZEDSCRIPTSTATE_STARTEDSCRIPTSTATE_CONNECTEDSCRIPTSTATE_DISCONNECTEDSCRIPTSTATE_CLOSEDc Gsjddl}|}z2|j|f|Wddl}||dSddl}||d0dS)Nrtime)profileZProfileruncallpstatsZStatsZ strip_dirsZ sort_statsZ print_stats)fnargsrZprofrrrrr-src@s2eZdZdZd ddZddZddZd d ZdS) SafeOutputrNcCs|durtj}||_dSN)sysstdoutredir)selfr rrr__init__@szSafeOutput.__init__cCs,z|j|Wnt|Yn0dSr)r writewin32apiZOutputDebugString)r!messagerrrr#EszSafeOutput.writecCsdSrrr!rrrflushKszSafeOutput.flushcCsdSrrr&rrrcloseNszSafeOutput.close)N)__name__ __module__ __qualname__Z softspacer"r#r'r(rrrrr=s  rcCsfttjtsbtt_t_ddl}dd}||j|jkrbz||j|Wnt y`Yn0dS)NrcSs tddS)Nz@WARNING: Ignoring keyboard interrupt from ActiveScripting engineprint)abrrrnoOp[szMakeValidSysOuts..noOp) isinstancerrrstderrsignal getsignalSIGINTdefault_int_handler ValueError)r3r0rrrMakeValidSysOutsTs  r8cGs |D]}t|ddqtdS)z8A function used instead of "print" for debugging output. )endNr,)rargrrrtraceisr<cCstdt|t||dS)zHA debugging function that raises an exception considered an "Assertion".z5**************** ASSERTION FAILED *******************N)r-r scodedescrrr RaiseAssertpsr@c@s0eZdZdZddZddZddZdd Zd S) AXScriptCodeBlockz:An object which represents a chunk of code in an AX ScriptcCs.||_||_d|_||_||_||_d|_dSNr)namecodeText codeObjectsourceContextCookiestartLineNumberflags beenExecuted)r!rCrDrFrGrHrrrr"zszAXScriptCodeBlock.__init__cCs d|jS)Nz<%s>rCr&rrr GetFileNameszAXScriptCodeBlock.GetFileNamecCs|jSrrJr&rrrGetDisplayNamesz AXScriptCodeBlock.GetDisplayNamecCstd}t|dD](}|jd|d}|dkrt|j}q|jd|d}|dkr^t|j}|j|d|S)Nrr)rangerDfindlenstrip)r!noposieposrrr GetLineNos  zAXScriptCodeBlock.GetLineNoN)r)r*r+__doc__r"rKrLrVrrrrrAws  rAc@s8eZdZdZddZddZddZdd 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&rrrResetsz Event.ResetcCsdSrrr&rrrClosesz Event.ClosecCs |d|_||jd|_dSrB)dispidGetNamesrC)r!typeinfofuncdescrrrBuilds z Event.BuildN) r)r*r+rWr"r[r\r]rbrrrrrXs rXc@s\eZdZdZgZddZddZddZdd Zd d Z d d Z ddZ ddZ ddZ 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 GetEngineProcessScriptItemEventmyInvokeMethodiid)r!ZmyItemrfrrrr"s  zEventSink.__init__cCs |dSr) Disconnectr&rrrr\szEventSink.ResetcCsBd|_d|_d|_d|_|jD] }|q"i|_|dSr)rkrgrjrfrdvaluesr\rl)r!eventrrrr]s zEventSink.ClosecCs||jkrtjj|SdSr)rkwin32comZserverutilwrapr!rkrrr_query_interface_s zEventSink._query_interface_cCs<z|j|}WnttjdYn0||j||||SNr>)rdr winerrorZDISP_E_MEMBERNOTFOUNDrjrg)r!r^lcidwFlagsrrnrrr_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 unexpectedN) GetTypeAttr pythoncom TKIND_COCLASSTKIND_INTERFACEr@rv E_UNEXPECTEDrNGetImplTypeFlagsIMPLTYPEFLAG_FDEFAULTIMPLTYPEFLAG_FSOURCEIMPLTYPEFLAG_FRESTRICTEDGetRefTypeOfImplTypeGetRefTypeInfo) r!r`attrcFuncstypeKind cImplTyperTrHZ flagsNeededhrefrrrGetSourceTypeInfos"     zEventSink.GetSourceTypeInfoc Csz|jtj}d}|}WnHtjyfd}d}z|jtj}Wntjy`d}Yn0Yn0t|D]}|r| |tj \}}n| }| |}d}|rp| } | d|_| d}t|D],} || } t} | || | |j| j<qqpdS)Nrrrz)rfQueryInterfacerIID_IProvideMultipleClassInfoGetMultiTypeInfoCountr com_errorZIID_IProvideClassInforNGetInfoOfIndexMULTICLASSINFO_GETTYPEINFOZ GetClassInforr~rk GetFuncDescrXrbrdr^) r!Z mainTypeInfoZisMulti numTypeInfositemr`rHZ sourceTyperrrTrarnrrr BuildEventss@        zEventSink.BuildEventscCs4|jdus|jdurdStjj|j||j|_dSr)rerkroZclientZconnectZSimpleConnectionrfr&rrrConnects  zEventSink.ConnectcCs4|jr0z|jWntjy(Yn0d|_dSr)rerlrrr&rrrrls zEventSink.DisconnectN)r)r*r+rW_public_methods_r"r\r]rsryrrrrlrrrrrcs %rcc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd 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) parentItemdispatchrCrH eventSinksubItemscreatedConnections isRegistered)r!rrCrrHrrrr"&szScriptItem.__init__cCs8d}|jdur|jtj@rd}d|jjt||j|fS)Nz/Globalz<%s at %d: %s%s>)rHrSCRIPTITEM_GLOBALMEMBERSrYr)rZrC)r!Z flagsDescrrrr[2szScriptItem.__repr__cCsg}|jdur$|jtj@r$|d|jdus>|jtj@dkrH|d|jdurh|jtj@rh|d|jdur|jtj@r|dtd|d|jdd |||j D]}| |d qdS) NzGLOBAL!rz NOT VISIBLEz EVENT SINKz CODE ONLYr9zName=z, flags=/r) rHrrappendSCRIPTITEM_ISVISIBLESCRIPTITEM_ISSOURCEZSCRIPTITEM_CODEONLYr-rCjoinrrm_dump_)r!levelZ flagDescssubItemrrrr=s    zScriptItem._dump_cCs:||jr|jd|_|jD] }|q(dSrB)rlrr\rrrmr!rrrrr\Ks  zScriptItem.ResetcCsR|d|_d|_|jr*|jd|_|jD] }|q4g|_d|_dSrB)r\rrrr]rrmrrrrrr]Ss  zScriptItem.ClosecCs2|jr dSd|_|jD]}|js|qdSNr)rrrmRegisterr!rrrrr_s  zScriptItem.RegistercCs |jtj@Sr)rHrrr&rrrIsGlobalsszScriptItem.IsGlobalcCs|jtjtjB@dkSrB)rHrrrr&rrr IsVisiblevszScriptItem.IsVisiblecCs |}|jj|jkr|j}q|jSr)rrYrrrrrh{szScriptItem.GetEnginecCs:|j}|jr6z|jd|}Wnty4Yn0|S)N.)rCr_GetFullItemNameAttributeError)r!retrrrrs zScriptItem._GetFullItemNamecCs|jSr)rYr&rrrGetSubItemClassszScriptItem.GetSubItemClasscCs|j|Sr)rlowerr!rCrrr GetSubItemszScriptItem.GetSubItemcCs|}z`|j|}|jdur<|dur<|j|kr     z#ScriptItem.GetDefaultSourceTypeInfoN)r)r*r+rWr"r[rr\r]rrrrhrrrrrrrlrrrrrrrr#s(      Br) SetScriptSite GetScriptSiteSetScriptStateGetScriptStater] AddNamedItem AddTypeLibGetScriptDispatchGetCurrentScriptThreadIDGetScriptThreadIDGetScriptThreadStateZInterruptScriptThreadClone)InitNew AddScriptletParseScriptTextGetInterfaceSafetyOptionsSetInterfaceSafetyOptionsParseProcedureTextc@seZdZdZeeeeZe j e j e j gZ ddZddZddZdd Zd d Zd d ZddZddZddZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Z d(d)Z!d*d+Z"d,d-Z#d.d/Z$d0d1Z%d2d3Z&d4d5Z'd6d7Z(d8d9Z)d:d;Z*dd?Z,d@dAZ-dBdCZ.dDdEZ/dFdGZ0dHdIZ1dJdKZ2dLdMZ3dNdOZ4dPdQZ5dRdSZ6dodUdVZ7dpdWdXZ8dqdYdZZ9drd[d\Z:dsd]d^Z;d_d`ZdedfZ?dgdhZ@didjZAdkdlZBdmdnZCdTS)t COMScriptzzAn ActiveX Scripting engine base class. This class implements the required COM interfaces for ActiveX scripting. cCsDtd|_d|_tj|_tj|_d|_d|_ d|_ i|_ i|_ dSNrMr) r8 baseThreadId debugManagerrZSCRIPTTHREADSTATE_NOTINSCRIPT threadStater scriptState scriptSite safetyOptionsrwrscriptCodeBlocksr&rrrr"[szCOMScript.__init__cCs|jr|j|SdSrB)rZ_query_interface_for_debugger_rrrrrrsis zCOMScript._query_interface_cCs|jdur|tjdSr)rrrrr&rrrrps zCOMScript.InitNewc Cs|||||||||dSr)ZDoAddScriptlet) r!Z defaultNamecodeitemNameZ subItemNameZ eventName delimiterrFrGrrrrts zCOMScript.AddScriptletc Cs^|s(|jtjks(|jtjks(|jtjkr2|tB}n |t@}|t@rL|||||||Sr)rrrrrSCRIPTTEXT_FORCEEXECUTIONRegisterNewNamedItemsZDoParseScriptText) r!rrcontextrrFrGrHZ bWantResultrrrrs       zCOMScript.ParseScriptTextc Cstd||||||||| dS)Nr)r<) r!rZ formalParamsZprocNamerZ unkContextrZ contextCookieZstartingLineNumberrHrrrrs zCOMScript.ParseProcedureTextcCs||_|jdur|jddl}z$ddl}ddlm}|||_Wnxtj yht dd|_YnXt yt dd|_Yn:| t dt dt dfd|_Yn0z||_Wntj yt|_Yn0|dS)Nrr)debugz|tjtjtjtjtjfvr.|}||jfSt t j ddSrtr)r!rkrrrrrs z#COMScript.GetInterfaceSafetyOptionscCs||dSr)rZDoExecutePendingScriptsr&rrrExecutePendingScriptsszCOMScript.ExecutePendingScriptscCs|||||||Sr)rZDoProcessScriptItemEvent)r!rrnrwrxrrrrrisz COMScript.ProcessScriptItemEventcCs|jD]}|dq dSrB)rrmrrrrr_DumpNamedItems_szCOMScript._DumpNamedItems_cCsF|j}i|_|D],\}}||jtj@r||j|jqdSr)ritemsr]rHrZSCRIPTITEM_ISPERSISTENTrrC)r!existingrCrrrrResetNamedItemss  zCOMScript.ResetNamedItemscCs|jSr)rr&rrrGetCurrentSafetyOptionssz!COMScript.GetCurrentSafetyOptionscCs"|jD]}|js |q dSr)rrmrrrrrrProcessNewNamedItemsConnectionssz)COMScript.ProcessNewNamedItemsConnectionscCs$|jD]}|js ||q dSr)rrmrRegisterNamedItemrrrrrszCOMScript.RegisterNewNamedItemscCs |dSr)rrrrrrszCOMScript.RegisterNamedItemcCs,|jtjtjfvrdSttjd|jdS)Nz"Not connected or disconnected - %d)rrrrr@rvrr&rrrCheckConnectedOrDisconnectedsz&COMScript.CheckConnectedOrDisconnectedcCs|||dSr)rrConnectEventHandlersr&rrrrszCOMScript.ConnectcCs8|jtjkr$|jtjkr$ttjd||dSrt) rrrrr rvrrZDoRunr&rrrrs   z COMScript.RuncCs |jtjkr||dSr)rrrrlr\r&rrrrs zCOMScript.StopcCs:|z |Wntjy(Yn0|tjdSr)r DisconnectEventHandlersrrrrrr&rrrrls  zCOMScript.DisconnectcCs(|jD] }|q |tjdSr)rrmrrrrrrrrr s zCOMScript.ConnectEventHandlerscCs|jD] }|q dSr)rrmrlrrrrr sz!COMScript.DisconnectEventHandlerscCs||tjdSr)rrrrr&rrrr\szCOMScript.Resetc Csv|z^||_z|jr$|j|Wn4tjyZ}z|j\}}}}WYd}~n d}~00W|n |0dSr)DisableInterruptsrrZ OnStateChangerrrEnableInterrupts)r!rZxxx_todo_changemehrr?excr;rrrrs&zCOMScript.ChangeScriptStatecCsF|jr:|j|jjjr0|jjj|g|RS||Sn||SdSr)r OnEnterScriptadb appDebuggerr)r!rrrrr_ApplyInScriptedSection's    z!COMScript._ApplyInScriptedSectioncCsv|zRz2|||W|jr(|j|WS|n|jrN|j|0Wn||Yn0dSr)BeginScriptedSectionrr OnLeaveScriptEndScriptedSectionHandleException)r! codeBlockrrrrrApplyInScriptedSection1s     z COMScript.ApplyInScriptedSectioncCs|jr|jt|||Sr)rrcompile)r!rrCrrrr_CompileInScriptedSection?s z#COMScript._CompileInScriptedSectionNcCs|jdurdS|dur|j}n|}|}|zbzB|t|||}||_W|jr`|j|WdS|n|jr|j|0Wn| |Yn0dSr) rErDrKrrr rrrr)r!rrZrealCoderrCrErrrCompileInScriptedSectionDs0    z"COMScript.CompileInScriptedSectioncCsJ|jr:|j|jjjr,|jj|||St|||n t|||dSr)rrrrrunexec)r!rEglobalslocalsrrr_ExecInScriptedSectionZs   z COMScript._ExecInScriptedSectioncCs|dur |}|jrJdd|_|zLz,||j||W|jrN|j|n|jrh|j|0Wn||Yn0dSNz-This code block should not have been executedr)rIrr!rErrrrr!rrr rrrExecInScriptedSectionds&   zCOMScript.ExecInScriptedSectioncCsJ|jr:|j|jjjr,|jj|||St|||Sn t|||SdSr)rrrrZrunevalevalr#rrr_EvalInScriptedSectionvs   z COMScript._EvalInScriptedSectioncCs|dur |}|jrJdd|_|zVz6||j||W|jrL|j|WS|n|jrr|j|0Wn||Yn0dSr")rIrr&rErrrrr#rrrEvalInScriptedSections2   zCOMScript.EvalInScriptedSectioncCst\}}}t|rd}ttj|rD|jtjkrDd}t |jdt |||||}d}t |j |j|}|durz|j d|WntjyYn0|tj|ttjddS)Nruz/Don't have an exception to raise to the caller!)rrr issubclassrrZhresultrZSCRIPT_E_REPORTEDr rZAXScriptExceptionZProcessAXScriptExceptionrrZOnScriptTerminaterrr@rvr)r!rexc_type exc_value exc_traceback exceptionZresult_exceptionrrrrs6      zCOMScript.HandleExceptioncCs$|jdurttjd|jdSrt)rr rvrrr&rrrrs  zCOMScript.BeginScriptedSectioncCs$|jdurttjd|jdSrt)rr rvrrr&rrrrs  zCOMScript.EndScriptedSectioncCsdSrrr&rrrr szCOMScript.DisableInterruptscCsdSrrr&rrrr szCOMScript.EnableInterruptscCs0z |j|WSty*ttjdYn0dSrt)rrr rvrrrrr GetNamedItems  zCOMScript.GetNamedItemcCstSr)rr&rrrrszCOMScript.GetNamedItemClasscCs$||j|<|jr |j|dSr)rrKrZAddScriptBlock)r!rrrr_AddScriptCodeBlockszCOMScript._AddScriptCodeBlock)N)N)N)N)N)Dr)r*r+rWIActiveScriptMethodsIActiveScriptParseMethodsIObjectSafetyMethods"IActiveScriptParseProcedureMethodsrrrrZIID_IObjectSafetyZ_com_interfaces_r"rsrrrrrrrrr]rrrrrrrrrrrrirrrrrrr rrrrlr r r\rrrrrr!r$r&r'rrrr r r-rr.rrrrrIs%%2"          *r__main__z6This is a framework class - please use pyscript.py etccCsdS]Z}t||}|d}z||}WntjyDd}Yn0||}td|d|qtdt|dD]*}t| |}||}td|d|qtdS)NZMethodsrzrr9zhas attrZ Variables) r~r-rNlistrr_rZ ole_errorZGetDocumentationZ GetVarDesc)r`rjrrZrdocrrr dumptypeinfos"   r8),rWrrrr$Zwin32com.client.connectroZwin32com.server.utilrvZwin32com.axscriptrr rZSCRIPTTEXT_ISEXPRESSIONZSCRIPTTEXT_ISPERSISTENTZwin32com.server.exceptionr r rrrrrrrrZ state_maprrr8r<r@rArXrcrr/r0r1r2rr)r-r8rrrrsZ    u