a oeT!@shddlZddlmZejZejZdddZddZddZGd d d ZGd d d Z Gd ddZ dS)N)gencachec Cslg}zt||||}Wnty.d}Yn0|durddl}t||||}|} |durg}t|D]R} | | } | | } | } | j tj ks| j tjkrr| jtj@rr|| dqr|D]}| |\}}|durtd|f| } | j tjkr$|d}||}| } |jj|| | d}t|j|j|j|j|jD],} | \}}}|d}||||dfqXqn|st|j }|D]}z|j!|}Wn"t"ytd|fYn0t#|}t$||dd}t$||dd}|dus|dur$td|ft|||||D],} | \}}}|d}||||dfq6q|S) Nrz%The interface '%s' can not be locatedz4Interface '%s' does not exist in this cached typelibZ_vtables_dispatch_Z _vtables_z Interface '%s' is IDispatch only)%rZGetModuleForTypelib ImportErrorZwin32com.client.build pythoncomZLoadRegTypeLibZ GetTypeComprangeZGetTypeInfoCountZ GetTypeInfoZGetDocumentationZ GetTypeAttrZtypekindZTKIND_INTERFACEZTKIND_DISPATCHZ wTypeFlagsZTYPEFLAG_FDUALappendZBindType ValueErrorZGetRefTypeOfImplTypeZGetRefTypeInfoZclientbuildZ VTableItem_doCreateVTableclsidZ python_nameZ bIsDispatchZ vtableFuncslistZVTablesToClassMapvaluesZ NamesToIIDMapKeyErrorZGetModuleForCLSIDgetattr)Z typelibGUIDZlcidmajorminorZinterface_namesretmodZwin32comZtlbZ typecomp_libiinfodocattrnameZ type_infoZ type_compZrefhtypeitemnamesdispiddescinvkindiidZsub_mod is_dispatch method_defsr"3C:\Program Files\Certbot\pkgs\win32com\universal.pyRegisterInterfaces s|                r$cCs*t|||}t||}t|||dSN) Definition_univgwZ CreateVTableZRegisterVTable)rZinterface_namer r!ZdefnZvtblr"r"r#r Ws  r cCsX|d}|tjtjB@r*ttjd}n*|tjkrFttjd}nt|d}|S)Nr)rZVT_BYREFZVT_ARRAYr'ZSizeOfVTZVT_PTRZ VT_RECORD)Z typeTupletcbr"r"r# _CalcTypeSize]s r+c@seZdZdddZdS)ArgNcCs.||_|\|_|_|_|_t||_d|_dSNr)rvtinOutdefaultr r+sizeoffset)selfZarg_inforr"r"r#__init__ss z Arg.__init__)N)__name__ __module__ __qualname__r4r"r"r"r#r,rsr,c@s&eZdZd ddZddZddZdS) MethodrcCs|\}}}|d}|dd}|d}|d} |d} ||_||_|r^|dddkr^d|}||_d} g|_| D](} t| } | | _| | j} |j| qr| |_| |_ | |_ dS)Nrr(rZOnzOn%s) rrrargsr,r2r1rcbArgs_GenerateInArgTuple _gw_in_args_GenerateOutArgTuple _gw_out_args)r3Z method_infoZ isEventSinkZ all_namesrrrrrZarg_defsZret_defr<ZargDescargr"r"r#r4|s*    zMethod.__init__cCsDg}|jD]0}|jtj@s$|jdkr ||j|j|jfq t|Sr-) r;r/rZ PARAMFLAG_FINrr.r2r1tupler3lrAr"r"r#r=s  zMethod._GenerateInArgTuplecCsTg}|jD]@}|jtj@s0|jtj@s0|jdkr ||j|j|j|j fq t |Sr-) r;r/rZPARAMFLAG_FOUTZPARAMFLAG_FRETVALrr.r2r1r rBrCr"r"r#r?s   zMethod._GenerateOutArgTupleN)r)r5r6r7r4r=r?r"r"r"r#r8{s r8c@s>eZdZddZddZddZddZejej fd d Z d S) r&cCs4||_g|_||_|D]}t|}|j|qdSr%)_iid_methodsZ _is_dispatchr8r)r3rr r!rentryr"r"r#r4s zDefinition.__init__cCs|jSr%)rEr3r"r"r#rszDefinition.iidcCsdd|jDS)NcSsg|] }|jqSr")r<.0mr"r"r# z,Definition.vtbl_argsizes..rFrHr"r"r# vtbl_argsizesszDefinition.vtbl_argsizescCsdd|jDS)NcSsg|]}t|jqSr")lenr;rIr"r"r#rLrMz-Definition.vtbl_argcounts..rNrHr"r"r#vtbl_argcountsszDefinition.vtbl_argcountsc Cs|j|}d}||j|}t|d|}|j|j|j<||jd|j|dd} t| t krt | t |j dkr| d}| dd} qt dt |j dt | fn(| g} | dgt |j dt | } || |j ||S)z'Dispatch a call to an interface method.rZpolicyNr(z"Expected %s return values, got: %s)rFr>rrZ_dispid_to_func_rZ _InvokeEx_rtyperBrPr@ TypeErrorextend) r3obindexZargPtrReadFromInTupleWriteFromOutTuplemethhrr;ZretValr"r"r#dispatchs(    zDefinition.dispatchN) r5r6r7r4rrOrQr'rWrXr[r"r"r"r#r&sr&)N) rZwin32com.clientrZ com_errorr'r$r r+r,r8r&r"r"r"r#s  K 0