a oeq@sdZddlZddlZddlZddlmZddlZddlZddlm Z ddZ dZ Gdd d e Z d Zejejejejejejejejejejejejejejejejejejej ej!ej"ej#ej$ej%ej&gZ'iZ(e'D] Z)de(e)<qGd d d Z*Gd ddZ+Gddde+Z,Gddde,Z-Gddde,Z.ejejej%ej#ejejiZ/ddZ0ddZ1ej2ej3dZ4ddZ5d%ddZ6dd Z7d&d!d"Z8e9d#kre:d$dS)'aContains knowledge to build a COM object definition. This module is used by both the @dynamic@ and @makepy@ modules to build all knowledge of a COM object. This module contains classes which contain the actual knowledge of the object. This include parameter and return type information, the COM dispid and CLSID, etc. Other modules may use this information to generate .py files, use the information dynamically, or possibly even generate .html documentation for objects. N) iskeyword)TimeTypecCstjdkr|d}t|S)N)mbcs)sys version_infoencodereprsr 6C:\Program Files\Certbot\pkgs\win32com\client\build.py_makeDocString s  rzPythonCOM.Client.Build errorc@s eZdZdS)NotSupportedExceptionN)__name__ __module__ __qualname__r r r r r)srDropIndirectionc@sFeZdZdZddejddfddZddZdd Zd d Z d d Z dS)MapEntryz3Simple holder for named attibutes - items in a map.NrcCsVt|tdkr||_d|_n|d|_||_||_||_||_||_d|_||_dSNr) typedispiddescnamesdoc resultCLSIDresultDocumentation wasPropertyhidden)selfZ desc_or_idrrr resultDocrr r r __init__Ss  zMapEntry.__init__cCs dj|dS)NzMapEntry(dispid={s.dispid}, desc={s.desc}, names={s.names}, doc={s.doc!r}, resultCLSID={s.resultCLSID}, resultDocumentation={s.resultDocumentation}, wasProperty={s.wasProperty}, hidden={s.hidden}r )formatrr r r __repr__lszMapEntry.__repr__cCs|j}|tjkrdS|S)N)r pythoncomIID_NULLrrcr r r GetResultCLSIDss zMapEntry.GetResultCLSIDcCs |}|durdStt|S)NNone)r)r strr'r r r GetResultCLSIDStrzs zMapEntry.GetResultCLSIDStrcCs|jdurdS|jdSr)rr#r r r GetResultNames zMapEntry.GetResultName) rrr__doc__r%r&r!r$r)r,r-r r r r rPs rc@seZdZdZdddZdS)OleItemNcCsF||_|jrt|jd|_nd|_d|_d|_d|_d|_d|_dSr)rMakePublicAttributeNameZ python_nameZbWritten bIsDispatchZbIsSinkclsidZco_class)rrr r r r!szOleItem.__init__)Nrrrtypenamer!r r r r r/sr/c@sjeZdZdZdddZddZddZd d Zd d Zdd dZ ddZ dddZ dddZ dddZ dS) DispatchItemNcCsFt||i|_i|_i|_i|_d|_d|_|rB||||dSr) r/r!propMap propMapGet propMapPutmapFuncsdefaultDispatchNamerBuild)rtypeinfoattrrbForUserr r r r!s zDispatchItem.__init__cCs||jd\}}}|dkr|d|ks<||jddkrJd|}d}n&d}||jvsb||jvrld|}n|}d|_||j|<|r|j|=dS)Nr6Setr)CountInOutOptArgsrr:r8rr9rkeyiteminsZoutsoptsZnewKeyZdeleteExistingr r r _propMapPutCheck_s  zDispatchItem._propMapPutCheck_cCs~||jd\}}}|dkrz|jd|ks4||krBd|}d}nd}||jvrZd|}n|}d|_||j|<|rz|j|=dS)Nr@rrAZGetr6)rCrr:rr8rDr r r _propMapGetCheck_s   zDispatchItem._propMapGetCheck_cCs|jtjksJ|j}|j}z||}|d}WntjyNd}d}Yn0d}z|rd||}WntjyzYn0|dkr|r||_|j } |j \} } } t | |\} } }| | | | f|_ g}|j D]4}|\} } } t | |\}}}|| | |f}| |qt||_ |tj@dk}| tjkr*|j}n| tjtjfvr|j|d}|dur|jdtjkrv|j}d|}nd|_||jd|<|j}n|j}n| tjkr|j}nd}|durt|||| ||||<|jtjkrdS||fSdS)NrrBr6)desckindr%ZDESCKIND_FUNCDESCmemidZ wFuncFlagsGetNames ole_errorGetDocumentationr;invkindZrettype _ResolveTypeargsappendtupleZFUNCFLAG_FHIDDENZINVOKE_PROPERTYGETr8ZINVOKE_PROPERTYPUTZINVOKE_PROPERTYPUTREFr9getrr:rZ INVOKE_FUNCrZfunckindZ FUNC_DISPATCH)rr=fdescr?idZ funcflagsrnamerrRtypereprflagdefvalrr ZargListZargDescZarg_typeZ arg_clsidZarg_docrmapexistingr r r _AddFunc_sd               zDispatchItem._AddFunc_cCs|jtjksJ|jtjkr|j}||}|j\}}}t||\}} } |||f|_d} z|rh| |} Wntj y~Yn0|j } |j d@dk} t ||| | | | | |d<|d| fSdSdS)N@r)rMr%ZDESCKIND_VARDESCZvarkindZ VAR_DISPATCHrNrOZ elemdescVarrSrQrPr7Z wVarFlagsr)rr=Zvardescr?rYrr[flagsr]rr rr^rr r r _AddVar_s(      zDispatchItem._AddVar_cCs|d|_|jtj@dk|_|dur(dSt|dD]}||}||||q4t|dD]}||}| |||q^t |j D]\}}| ||qt |j D]\}}|||qdS)NrrA)r2Z wTypeFlagsr%ZTYPEFLAG_FDISPATCHABLEr1rangeZ GetFuncDescr`Z GetVarDescrclistr8itemsrJr9rI)rr=r>r?jrXrErFr r r r<5s   zDispatchItem.BuildcCsxd}}}|D]\}|d}|dkr6|d}|d}q|tj@rH|d}|tj@rZ|d}|tj@r|d}q|||fS)zhReturn tuple counting in/outs/OPTS. Sum of result may not be len(argTuple), as some args may be in/out.rr6)r% PARAMFLAG_FINZPARAMFLAG_FOPTPARAMFLAG_FOUT)rZargTuplerGoutrHZargCheckinOutr r r rCMs      zDispatchItem.CountInOutOptArgscCsF|jdur4t|jdks&|jddkr4||||S||||SdS)NrA)rlenMakeDispatchFuncMethodMakeVarArgsFuncMethod)rentryrZ bMakeClassr r r MakeFuncMethod^s&zDispatchItem.MakeFuncMethodc Cs|j}|j}|j}g}|r,d}d} d} d} nd}d} d} d} d} |d} |d|d t||| | | | d }|||r|d r||dt|d |}|rd |}nd }|ddd}tdd|dD}dd|dD}dd|D}d}t|dkrRt|dkrR|d dkrR|d}|t vr^d|| |d||t ||f}n|t j t j fvrd|| |d|t|t ||f}|d|f}|t j kr|d|f}|d|f}|d|f}|d|f}|d|f}|d|t||f}|d|}n<|t jkrRd|f}|d|| |d|t|t ||f}|durd || |d||t||t ||f}|||d|S)!N ZdefaultNamedOptArgZdefaultNamedNotOptArgZdefaultUnnamedArgrKzpythoncom.Missingrdef z(selfz):r6z'%s'r*r@cSsg|]}|ddqS)Nr@r .0Zwhatr r r z7DispatchItem.MakeDispatchFuncMethod..cSsg|] }|dqS)r6r rwr r r ryrzcSs$g|]}|tjtjB@dkr|qS)r)r%rjZPARAMFLAG_FRETVAL)rxr\r r r rysz;%s return self._oleobj_.InvokeTypes(%d, LCID, %s, %s, %s%s)rLz;%s ret = self._oleobj_.InvokeTypes(%d, LCID, %s, %s, %s%s) z%s if ret is not None: z2%s # See if this IUnknown is really an IDispatch z %s try: z7%s ret = ret.QueryInterface(pythoncom.IID_IDispatch) z%s except pythoncom.error: z%s return ret z %s ret = Dispatch(ret, %s, %s) z %s return retz %s # Result is a Unicode object z5%s return self._ApplyTypes_(%d, %s, %s, %s, %s, %s%s))rrr BuildCallListrUrr)rVrnNoTranslateMap _BuildArgListr% VT_DISPATCH VT_UNKNOWNr ZVT_BSTR)rrqrZrrrXrrret linePrefixdefNamedOptArgdefNamedNotOptArg defUnnamedArg defOutArgrYr ZresclsidZretDescZargsDescZ param_flagsZ bad_paramsZrdr r r roes    *       z#DispatchItem.MakeDispatchFuncMethodc Cs|j}|j}|j}g}d}|r$d} nd} || d|d|d|rl|drl|| dt|d|rz|d} ntj} | d } || t|jd | |d f|d|S) NrrtrKru(z , *args):r6rLz7 return self._get_good_object_(self._oleobj_.Invoke(*((z,0,%d,1)+args)),'%s')r) rrrrUrr%ZDISPATCH_METHODr+r) rrqrZrrrXrrrZ argPrefixrZ invoketyper r r r rps(   z"DispatchItem.MakeVarArgsFuncMethod)NNNr6)r6)r6)r6)r6)rrrr4r!rIrJr`rcr<rCrsrorpr r r r r5s N   ~r5c@seZdZdddZdS) VTableItemr6cCst|||||dus Jdt|jt|jt|j}|jdddg|_|D]}|j |j |j |j fqddS)Nz%Cant build vtables without type info!cSs |jdS)Nrd)r)mr r r rzz"VTableItem.Build..)rE) r5r<rfr:valuesr8r9sortZ vtableFuncsrUrrr)rr=r>r?Z meth_listrqr r r r<s   zVTableItem.BuildN)r6)rrrr<r r r r rsrc@seZdZdZddZdS)LazyDispatchItemcCs |d|_t|d||ddSr)r2r5r!)rr>rr r r r!s zLazyDispatchItem.__init__Nr3r r r r rsrc Cs t|tkr|\}}|tjkr|t|tko8|dtjk}t||\}}}|rl|tjtjtjfvrl|||fS|tj B||fS|tj krt||\}}}tj |B||fS|tj krtj ddfS|tjkrz| |}WnVtjy,}z:|jtjtjfvrtjddfWYd}~SWYd}~n d}~00|} | j} | tjkrX| j} t| |S| tjtjfvrvtjddfS| tjkr|d} |d} tj| | fS| tjtjfvr|d} |d} tj| | fS| tjkrtjddfStdt !||ddfS)Nrrmz*Can not resolve alias or user-defined type)"rrVr%ZVT_PTRZVT_USERDEFINEDrSr~rZ VT_RECORDZVT_BYREFZ VT_SAFEARRAYZVT_ARRAYZ VT_CARRAYZGetRefTypeInfoZ com_errorZhresultwinerrorZTYPE_E_CANTLOADLIBRARYZTYPE_E_LIBNOTREGISTEREDZ GetTypeAttrZtypekindZ TKIND_ALIASZ tdescAliasZ TKIND_ENUMZ TKIND_MODULEVT_I4ZTKIND_DISPATCHrQZTKIND_INTERFACEZ TKIND_COCLASSZ TKIND_RECORDr typeSubstMaprW)r[Z itypeinfoZindir_vtZsubreprZwas_userZ sub_clsidZsub_docZresultTypeInfoZdetailsZ resultAttrZtypeKindZtdescr2Zretdocr r r rS"s\                  rScCst|dt|d}t|}d|vr@|d}d|f||<qttt|d|d}d}t||kr|dt|fq^tdt|dD]}||d||<qd d |S) z4Builds list of args to the underlying Invoke method.rAr@Narg%dr6rz ,, ) maxrnrfindexr^r0rUrejoin)rXrnumArgsiZname_numr r r r}hs  r}_cCsJd}||dkr|d7}q|dks*Jd||dd|d|dS)Nrrr6r@z1Should only be here with names starting with '__'r ) classNamerr r r demunge_leading_underscoress   rFcCs|dddkrt|S|dkr&d}nNt|rJ|}||krF|}|S|rttt|rt|}||krp|}|Sddd|DS)Nr@__r*ZNONErKcSsg|]}|tvr|qSr )valid_identifier_chars)rxcharr r r ryrzz+MakePublicAttributeName..)rr capitalizeupperhasattr __builtins__r)rZ is_globalrr r r r0sr0c Csz |d}Wnty$tj}Yn0|tj@r|d}t|tjrTtt|St |t ur|j }|j }|j }|j}|j}|j}|j} dtSt|SdS)Nr6r@z`pywintypes.Time((%(year)d, %(month)d, %(day)d, %(hour)d, %(minute)d, %(second)d,0,0,0,%(msec)d))) IndexErrorr%riZPARAMFLAG_FHASDEFAULT isinstancedatetimer rVZ utctimetuplerryearmonthdayhourminutesecondmseclocals) defArgValrlvalrrrrrrrr r r MakeDefaultArgReprs,      rc CsJt|d}|d}d} |dkr.|} |d}n||} t|D]} z|| d} | du} Wntypd} Yn0| s~d| } |d| }t|}|dur|dtjtjB@tjkr|}n| r| | kr|}q|}n|}t| } | dd dkr| d } |r| d } | d } | d | } |r>| d|} q>|dkrF| d|d} | S)z)Builds a Python declaration for a method.r@rArKrmr6Nrrr #z r=z, *)rnrerrr%rjrir0)rXrrrrrZ is_commentrZ numOptArgsZstrvalZ firstOptArgargZargNameZnamedArgZthisdescrr r r r{sP          r{__main__zFUse 'makepy.py' to generate Python code - this module is just a helper)F)F);r.rstringrkeywordrr%rZ pywintypesrrerror ExceptionrrZVT_BOOLZVT_CLSIDZVT_CYZVT_DATEZ VT_DECIMALZVT_EMPTYZVT_ERRORZ VT_FILETIMEZ VT_HRESULTZVT_I1ZVT_I2rZVT_I8ZVT_INTZVT_NULLZVT_R4ZVT_R8Z VT_STREAMZVT_UI1ZVT_UI2ZVT_UI4ZVT_UI8ZVT_UINTZVT_VOIDZNoTranslateTypesr|vrr/r5rrrrSr} ascii_lettersdigitsrrr0rr{rprintr r r r sz   8g F && C