a oe| @sdZddlZddlZddlZddlZddlZddlmZdZdZ dZ dZ d Z ej d ejd ejd ejd ejd ejd ejd ejd ejd ejd ejd ejdejdejd ejdejd iZddZddZddZ ddZ!GdddZ"Gdddej#e"Z$ddZ%Gdddej#e"Z&Gd d!d!ej#e"Z'Gd"d#d#ej(e"Z(Gd$d%d%ej)e"Z)Gd&d'd'ej#e"Z*Gd(d)d)Z+Gd*d+d+Z,e-d,kre.d-dS).agenpy.py - The worker for makepy. See makepy.py for more details This code was moved simply to speed Python in normal circumstances. As the makepy.py is normally run from the command line, it reparses the code each time. Now makepy is nothing more than the command line handler and public interface. The makepy command line etc handling is also getting large enough in its own right! N)buildz makepy.errorz0.5.01Zfullz demand(base)z demand(child)z types.IntTypeztypes.FloatTypeztypes.StringTypeztypes.TypeTypeztypes.LongTypezpythoncom.PyTimeTypecCs>g}|ddD]$}t|}|dur*q6||qt|SNr)rMakeDefaultArgReprappendtuple)ZargsDescretdescdefaultr 6C:\Program Files\Certbot\pkgs\win32com\client\genpy.pyMakeDefaultArgsForPropertyPut>s  r cCs.tdd|D}d|||dd|||fS)NcSsg|]}|ddqS)Nr ).0Zwhatr r r Jz$MakeMapLineEntry..z(%s, %d, %s, %s, "%s", %s)r)r)dispidZwFlagsZretTypeZargTypesuser resultCLSIDr r r MakeMapLineEntryHs rcCs |dddkr|Sd|SdS)NrZOnr )Z eventNamer r r MakeEventMethodNameUsrcCsvtd|dt|jt|jt|jD].\}}|j}td|jt|j df|dq6td|ddS)Nz _dispid_to_func_ = {filez %9d : "%s",rz }) printlist propMapGetitems propMapPutmapFuncsr memidrnames)objstreamnameentryfdescr r r WriteSinkEventMap\s     r&c@s$eZdZddZddZddZdS) WritableItemcCs6t|j|j}|dkr2|jr2t|jd|jd}|S)zCompare for sortingr)cmporderdoc)selfotherrr r r __cmp__oszWritableItem.__cmp__cCs$|j|jkr|j|jkS|j|jkSN)r)r*)r+r,r r r __lt__ws  zWritableItem.__lt__cCsdt|j|jfS)NzOleItem: doc=%s, order=%d)reprr*r)r+r r r __repr__|szWritableItem.__repr__N)__name__ __module__ __qualname__r-r/r2r r r r r'msr'c@s&eZdZdZdZd ddZddZdS) RecordItem ZRECORDNrcCstj|||d|_dSNr)rOleItem__init__clsid)r+ZtypeInfoZtypeAttrr*bForUserr r r r:szRecordItem.__init__cCsdSr.r r+ generatorr r r WriteClassszRecordItem.WriteClass)Nrr3r4r5r)typenamer:r?r r r r r6s r6cCs>|D]0}|jr|jr|jd|jdkr|||qdSr8)valuesr*aliasDocWriteAliasItem)itemZ aliasItemsr"aliasr r r WriteAliasesForItems  rGc@s&eZdZdZdZd ddZddZdS) AliasItemrZALIASNrcCsztj|||d}||_t|tdkrjt|dtdkrj|d}||}|d|_||_ n d|_d|_ dS)Nr rr) rr9r:attrtypeGetRefTypeInfoGetDocumentationrC GetTypeAttrZ aliasAttr)r+typeinforKr*r<aiZhrefZalinfor r r r:s   zAliasItem.__init__cCs|jr dS|jrN|jd}||vr2||||t|jdd||dnr|jd}t|tdkrz&t|}td|jd|f|dWn0tyt|jddt ||dYn0t|dd|_dS)Nrz = rrIz# %s=%sz# = None # Can't convert alias info r) bWrittenrCrDrr*rKrLmapVTToTypeStringKeyErrorstr)r+Z aliasDictr"ZdepNamerQZtypeStrr r r rDs&     zAliasItem.WriteAliasItem)Nr)r3r4r5r)rAr:rDr r r r rHs rHc@s&eZdZdZdZdddZddZdS) EnumerationItemrZ ENUMERATIONNc Cs~tj|||d|_i|_|d}|tj@p8|tj@|_t |dD]0}| |}| |dd}t ||j|<qHdS)Nr ) rr9r:r;mapVars pythoncomZTYPEFLAG_FHIDDENZTYPEFLAG_FRESTRICTEDhiddenrangeZ GetVarDescZGetNamesZMapEntry) r+rPrKr*r<Z typeFlagsjvdescr#r r r r:s   zEnumerationItem.__init__c Csd}|jd}t|j}||D]}|j|}|j}|dtjkr(|d}t|} zt | ddWn.t y| dd} d| dd} Yn0t d t |d | |f|d |d7}q(|S) Nrrzeval"'z6 # This VARIANT type cannot be converted automaticallyz %-30s=%-10s # from enum %sTr)r*rrYkeyssortr rZZ VAR_CONSTr0compile SyntaxErrorreplacerrMakePublicAttributeName) r+r"ZnumZenumNamer r#r$r^valZuser r r WriteEnumerationItemss<     z%EnumerationItem.WriteEnumerationItems)Nr)r3r4r5r)rAr:rjr r r r rVs rVc@s eZdZdZddZddZdS) VTableItemr_cCs||d|_dSr)WriteVTableMaprRr=r r r r? s zVTableItem.WriteClassc Cs|j}td|j|jf|dtd|jf|d|jD]}|\}}}|jtjksXJg}d}tdd|d|D]:} tt| dd|d|d }|d dkrrtd d|dqrtd ||j |j fd|d|j D]t} |d }|d dkrtd d|dt | } | d durd} n t| d } tt| d| d | | fdd|dqtdd|dtt|jdd|dtt|jdd|dtt|jdd|dtt|jdd|dtt|jdd|dtt|jdd|dtt|jdd|dtd|dq8td|dt|ddS)Nz%s_vtables_dispatch_ = %drz%s_vtables_ = [rz (( )endr,rz z), %d, (%r, %r, [z],z)),])rr python_name bIsDispatchZ vtableFuncsdesckindrZDESCKIND_FUNCDESCr0rZ scodeArrayargsrrfunckindinvkindZcallconvZ cParamsOptZoVftZrettype wFuncFlags) r+r>r"vr rr Z arg_reprsZitem_numr#argZdefvalZ arg3_reprr r r rl sX        zVTableItem.WriteVTableMapN)r3r4r5r)r?rlr r r r rksrkc@sBeZdZdZdddZddZddZd d Zd d Zd dZ dS) DispatchItemrqNcCs"tj||||||_d|_dSr.)rr}r: type_attr coclass_clsid)r+rPrKr*r r r r:AszDispatchItem.__init__cCs^|js|jjtjksdS|jr4||||n||| |t |j dd|_ dS)Nrr) rtr~typekindrZTKIND_DISPATCHbIsSinkWriteEventSinkClassHeaderWriteCallbackClassBodyWriteClassHeaderWriteClassBodyrrrRr=r r r r?Fs      zDispatchItem.WriteClasscCs||j}|j}td|jd|d|drLtdt|d|dz t|j }td||dWntj yYn0tdt |j |d|j durtd|dntd t |j |dt|dd|_ dS) Nclass z(DispatchBaseClass):rr + # This class is creatable by the name '%s'z CLSID =  coclass_clsid = None coclass_clsid = )checkWriteDispatchBaseClassr*rrrsr_makeDocStringrZProgIDFromCLSIDr; com_errorr0rrRr+r>r*r"progIdr r r rWs&    zDispatchItem.WriteClassHeadercCs||j}|j}td|jd|d|drLtdt|d|dz t|j }td||dWntj yYn0tdt |j |d|j durtd|dntd t |j |dtd |dt ||t|dtd |dtd |dtd |dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd|dtd |dt|dd|_dS)!Nr:rrrrz CLSID = CLSID_Sink = rrz/ _public_methods_ = [] # For COM Server supportz! def __init__(self, oobj = None):z if oobj is None:z self._olecp = Nonez else:z import win32com.server.utilz8 from win32com.server.policy import EventHandlerPolicyzL cpc=oobj._oleobj_.QueryInterface(pythoncom.IID_IConnectionPointContainer)z. cp=cpc.FindConnectionPoint(self.CLSID_Sink)zR cookie=cp.Advise(win32com.server.util.wrap(self, usePolicy=EventHandlerPolicy))z- self._olecp,self._olecp_cookie = cp,cookiez def __del__(self): try:z self.close()z except pythoncom.com_error:z passz def close(self):z if self._olecp is not None:zV cp,cookie,self._olecp,self._olecp_cookie = self._olecp,self._olecp_cookie,None,Nonez cp.Unadvise(cookie)z" def _query_interface_(self, iid):z import win32com.server.utilzA if iid==self.CLSID_Sink: return win32com.server.util.wrap(self))checkWriteEventBaseClassr*rrrsrrrZrr;rr0rr&rRrr r r rmst                        z&DispatchItem.WriteEventSinkClassHeaderc Cs|j}td|dtd|dt|jt|jt|jD]z\}}|j}t|j d}td|dt j ||j ddd d d d d |d|j rH|j drHtdt |j d|dqHt|dd|_dS)Nz # Event HandlersrzE # If you create handlers, they should have the following prototypes:rz# def z(selfZdefaultNamedOptArgZdefaultNamedNotOptArgZdefaultUnnamedArgzpythoncom.MissingT)Z is_commentz):rz# )rrrrrrrr rr rZ BuildCallListr*rrR)r+r>r"r#r$r%ZmethNamer r r rsL        z#DispatchItem.WriteCallbackClassBodyc CsD|j}t|j}|ddddd}d}|D]}|j|}|jjtjksTJ|jj }|jj tj @rv|tj krvq2|jj tjkrq2|tjkrd} n(|tj kr||jjdf|d<q2n|} | |vr|| dur||jjdf|| <|js|js2|rtd||d|jr&td||d||t|} | D]} t| |dq raise TypeError("This object does not support enumeration")z. return win32com.client.util.Iterator(ob, %s)rEz^ #This class has Item property/method which allows indexed access with the object[key] syntax.zQ #Some objects will accept a string or other type of key in addition to integers.z? #Note that many Office objects do not use zero-based indexing.z def __getitem__(self, key):zZ return self._get_good_object_(self._oleobj_.Invoke(*(%d, LCID, %d, 1, key)), "Item", %s)r__len__z3 def __len__(self): return self._ApplyTypes_(*%s)z; #This class has Count() %s - allow len(ob) to provide thiszP #This class has a __len__ - this is needed so 'if object:' always returns TRUE.z def __nonzero__(self):z return True)%rrrrcrdr rurZrvrrzZFUNCFLAG_FRESTRICTEDZDISPID_NEWENUMrxZ FUNC_DISPATCHZ DISPID_VALUErylower bBuildHiddenr[Z GetResultNamerZ wasPropertyZMakeFuncMethodrrhZpropMaprZDISPATCH_PROPERTYGETZGetResultCLSIDStrrrZDISPATCH_PROPERTYPUTrr r ZDISPATCH_METHOD)r+r>r"r Z specialItemsZ itemCountr#r$rZlkeyrlinekeyZ resultNameZdetailsZ resultDescZargDescZmapEntryZ defArgDescZ invoketypeZpropArgsrAZ enumEntryryrr r r rs                                              zDispatchItem.WriteClassBody)N) r3r4r5r)r:r?rrrrr r r r r}>s =#r}c@s.eZdZdZdZdggdfddZddZdS) CoClassItemrpZCOCLASSNrcCs.tj|||d|_||_||_d|_dS)Nrr)rr9r:r;sources interfacesrt)r+rPrKr*rrr<r r r r:s  zCoClassItem.__init__c Cs||j}|j}|jtkrg}|jD]\}}||q(|jD]\}}||qBtd|d|D]B}td|j |j f|dtd|j |j |j |j f|dd|_ qfz t |j}td||dWnt jyYn0td|j |d|r|drtd|d|dtd |jf|dtd |dd}|jD]H\} }|t j@rX| }| j rh| j } ntt| j} td | |dq@td |d|r|j r|j } ntt|j} td | f|dtd|dd}|jD]J\} }|t j@r| }| j r | j } ntt| j} td | f|dqtd |d|rp|j rP|j } ntt|j} td| f|dd|_ t|ddS)Nz import sysrz__import__('%s.%s')z%s = sys.modules['%s.%s'].%srz(# This CoClass is known by the name '%s'z'class %s(CoClassBaseClass): # A CoClassz # z CLSID = %rz coclass_sources = [z %s,z ]z default_source = %sz coclass_interfaces = [z default_interface = %s)checkWriteCoClassBaseClassr*r generate_typeGEN_DEMAND_CHILDrrrr base_mod_namersrRrZrr;rZIMPLTYPEFLAG_FDEFAULTr0rU) r+r>r*r"Zreferenced_itemsrefflagrZdefItemrErZdefNamer r r r?s             zCoClassItem.WriteClassr@r r r r rsrc@sXeZdZddZddZddZddd Zdd d Zd d ZddZ ddZ ddZ dS)GeneratorProgresscCsdSr.r r1r r r r:UszGeneratorProgress.__init__cCs ||_dS)zCalled when the process starts.N)tlb_desc)r+rr r r StartingXszGeneratorProgress.StartingcCsdS)z$Called when the process is complete.Nr r1r r r Finished\szGeneratorProgress.FinishedNcCsdS)zyWe are entering a major step. If maxticks, then this is how many ticks we expect to make until finished Nr )r+r Zmaxticksr r r SetDescription_sz GeneratorProgress.SetDescriptioncCsdS)z>Minor progress step. Can provide new description if necessaryNr r+r r r r TickdszGeneratorProgress.TickcCsdS)zVerbose/Debugging output.Nr rr r r VerboseProgressgsz!GeneratorProgress.VerboseProgresscCsdS)zIf a warning is generatedNr rr r r LogWarningjszGeneratorProgress.LogWarningcCsdSr.r r+filenamer r r LogBeginGeneratemsz"GeneratorProgress.LogBeginGeneratecCsdSr.r r1r r r ClosepszGeneratorProgress.Close)N)N) r3r4r5r:rrrrrrrrr r r r rTs  rc@seZdZd'ddZddZddZd d Zd d Zd dZd(ddZ ddZ ddZ d)ddZ ddZ ddZddZdd Zd!d"Zd#d$Zd%d&ZdS)* GeneratorrNcCsD|dusJdd|_d|_d|_||_||_||_||_d|_dS)Nz#this is deprecated and will go awayr)bHaveWrittenDispatchBaseClassbHaveWrittenCoClassBaseClassbHaveWrittenEventBaseClasstypelibsourceFilenamerprogressr)r+rrZprogressObjectrZbUnicodeToStringr r r r:uszGenerator.__init__cCsZg}t|jD]B}|j|}|j|}|j|}|}|||||fq|Sr.)r\rZGetTypeInfoCountZ GetTypeInfoZGetTypeInfoTyperNrOr)r+riinfoinfotyper*rKr r r CollectOleItemInfosFromTypes   z%Generator.CollectOleItemInfosFromTypec Cs|\}}}}g}t|dD]b}||}z|||} WntjyVYqYn0| } ||| j| | d| |fqt |||} | |fS)NrrJ) r\ZGetImplTypeFlagsrMGetRefTypeOfImplTyperZrrOrrrNr) r+type_info_tuplerrr*rK child_infosr]flagsrefTyperefAttrnewItemr r r _Build_CoClasss(    zGenerator._Build_CoClasscCs i}i}|D]\}}} } } } | jtjksB| jtjkr | dtj@r | d} | |vr\|| }nt| | | }|||j<|j|_| tj@rd|_ || f||j<n|| f||j<| |vr | dtj @r | | d} | } | jtjksJdt| | | }||| <q t||_t||_dS)NrWrrrJzmust be interface bynow!)rrZrTKIND_INTERFACETYPEFLAG_FDISPATCHABLEr}r;rZIMPLTYPEFLAG_FSOURCErTYPEFLAG_FDUALrMrrOrkrrBrr)r+ZcoclassZ coclass_infooleItems vtableItemsrrr info_typerr*rrr;ZdispItem vtableItemr r r _Build_CoClassChildrens:          z Generator._Build_CoClassChildrenc Cs|\}}}}d}}|tjks6|tjkrv|dtj@rvt|||}|jtj@rr|d}||}| }tj}nd}|dtjfvsJd|tjkrt |||}||fS)NrWrJz&Must be a real interface at this point) rZrrrr}Z wTypeFlagsrrrMrOrk) r+rrrr*rKoleItemrZrefhtyper r r _Build_Interfaces.         zGenerator._Build_InterfacecCs>|jsJdi}i}i}i}|D]}|\}}}} | d} |tjksT|tjkrpt|| |} | || jd<q&|tjtjfvr| |vr| |\} } | || <| dur| || <q&|tj ks|tj krt || |} | || j <q&|tjkrq&q&|tjkr ||\} }|| |||| || j <q&|jd|q&||||fS)NzNThis code doesnt look at the hidden flag - I thought everyone set it true!?!?!rzUnknown TKIND found: %d)rrrZZ TKIND_ENUMZ TKIND_MODULErVr*rrrZ TKIND_RECORDZ TKIND_UNIONr6r;Z TKIND_ALIAS TKIND_COCLASSrrrr)r+r enumItems recordItemsrrrrr*rKr;rrrrr r r BuildOleItemsFromTypesD        zGenerator.BuildOleItemsFromTypembcscCs||}t|d|dS)NZwt)encoding)get_temp_filenameopen)r+rr temp_filenamer r r open_writers zGenerator.open_writerc Cs|zt|Wntjy*Yn0||}|rzt||Wqtjyzt|Wntjy|Yn0t||Yq0n t|dSr.)closeosunlinkerrorrrename)r+rfworkedrr r r finish_writers  zGenerator.finish_writercCsd|tfS)Nz %s.%d.temp)rgetpidrr r r r;szGenerator.get_temp_filenamercCs4|r t|_nt|_||_|d|_|jdSr.)GEN_DEMAND_BASErGEN_FULLr do_generaterr)r+rZ is_for_demandr r r generate>szGenerator.generatecCsR|j}|jd}d}|dr*|d}d|_d|_d|_|jjsNJ|j|jj}td|f|jdtdt f|jdtdt j d d f|jd|j rtd tj|j df|jdtd tt|jdtt||jdtd tt |jdtdt jf|jdt|jdtd|jdtd|jdtd|jdtd|jdt|jdtd|jdtd|jdtd|jdtd|jdtd|jdt|jdtdt|d|jdtdt|d|jdtdt|d|jdtdt|d|jdtdt|d|jdt|jddS) NrJrrrz# -*- coding: %s -*-rz!# Created by makepy.py version %sz# By python version %s -z# From type library '%s'z# On %szmakepy_version =zpython_version = 0x%xz:import win32com.client.CLSIDToClass, pythoncom, pywintypeszimport win32com.client.utilzfrom pywintypes import IIDz$from win32com.client import DispatchzC# The following 3 lines may need tweaking for the particular serverz;# Candidates are pythoncom.Missing, .Empty and .ArgNotFoundz"defaultNamedOptArg=pythoncom.Emptyz%defaultNamedNotOptArg=pythoncom.Emptyz!defaultUnnamedArg=pythoncom.EmptyzCLSID = zMajorVersion = rqzMinorVersion = r_zLibraryFlags = rpzLCID = )r GetLibAttrrNrrrrrrmakepy_versionsysversionrgrrpathsplittimectimerrr0 hexversionrUhex)r+la moduleDocdocDescrr r r do_gen_file_headerHsd     zGenerator.do_gen_file_headercCsN|jd}|j}d}|dr&|d}|j||jd||\}}}}|jdt|t|t||rt d|dt | }| d} |D]} | | |7} |jq| st d |dt |d|jtkrXd d | D}| |D]} |j| |qt | }| |D]} |j| |q:n|jt|t|t d |d| D]f} | jtjkrt d t| jdtt| jf|dn(t dt| jdtt| jf|dqt d|dt |d|jtkrt d|d| D]4} | dur"| jr"t dt| j| jf|dq"t d|dt d|dt d|dt d|dt d|d| D]} t d| j| jf|dqt d|dt |dnt d|dt d|d| D]0} | durt dt| jt| jf|dqt d|dt d|dt d|d| D]} t d| j| jf|dqRt d|dt |dt |di} | D](} | durt| ts| j| | j<q| D]} | j| | j<qt d|d| D]\}}t d||f|dqt d|dt |d|r@t d|dt |ddS)NrJrr)Building definitions from type library... Generating...zclass constants:rrz passcSsg|]}|dur|qSr.r )rlr r r rrz)Generator.do_generate..z RecordMap = {zE ###%s: %s, # Record disabled because it doesn't have a non-null GUIDz %s: %s,}zCLSIDToClassMap = {z '%s' : %s,zCLSIDToPackageMap = {}zFwin32com.client.CLSIDToClass.RegisterCLSIDsFromDict( CLSIDToClassMap )zVTablesToPackageMap = {}zVTablesToClassMap = {z '%s' : '%s',zCLSIDToClassMap = {}zCLSIDToPackageMap = {zVTablesToClassMap = {}zVTablesToPackageMap = {zNamesToIIDMap = {z>win32com.client.constants.__dicts__.append(constants.__dict__))rrNrrrrrrlenrrrBrdrjrrrr?r;rZZIID_NULLr0r*rUrRrs isinstancerr)r+rr"rrrrrrZ num_writtenoleitemrecordrEmapr#Ziidr r r rs                                             zGenerator.do_generatec# Cst|_|j}|d}|d}|d}|d}dt|ddd|||f|_zxi}i} |} d} | D]} | \} }}}|tjkrp| | \}}t |d|k} | s|D]*\} }}}}}t |d|krd} qq| rp|||j <| |||| qqp| st| D]d} | \} }}}|tjtjfvrt |d|krd} || \}}|||<|dur|| |<q| sJd |fi}|D]\}}|df||<q| D]>\}}||d}|dur|d|f}nd|f}|||<q|jd t||D]\}}|p|} |jr0Jd tj|| jd }!d }"||!|_zP|durj|||dur~|||jd}"W||!|j|"d|_n||!|j|"d|_0qW|j n |j 0dS)zRGenerate a single child. May force a few children to be built as we generate depsrrrqr_zwin32com.gen_py.rJz x%sx%sx%sNz@Cant find the '%s' interface in the CoClasses, or the interfacesrzalready have a file?z.pyFT)!rrrrrUrrrZrrrrhr;rrrrrgetrrrrBrrrjoinrsrdo_gen_child_itemrrr)#r+childdirrZlcidr;majorminorrrZinfosfoundrrrr*rKZ coClassItemrrrrrrrrrrexistingnew_valrZ vtableitemZan_itemZout_namerr r r generate_childs                   zGenerator.generate_childcCsn|jd}d}|dr |d}|j||jd||||jrjtd|j |j f|j ddS)NrJrrrz6win32com.client.CLSIDToClass.RegisterCLSID( "%s", %s )r) rrNrrrrr?rRrr;rsr)r+rrrr r r ras     zGenerator.do_gen_child_itemcCs|jstd|jdd|_dS)Nz-from win32com.client import DispatchBaseClassrr)rrrr1r r r rqsz%Generator.checkWriteDispatchBaseClasscCs|jstd|jdd|_dS)Nz,from win32com.client import CoClassBaseClassrr)rrrr1r r r rvsz$Generator.checkWriteCoClassBaseClasscCs|js d|_dSr)rr1r r r r{sz"Generator.checkWriteEventBaseClass)rN)r)r)r3r4r5r:rrrrrrrrrrrrrrrrr r r r rts&  !(   <zcr__main__zEThis is a worker module. Please use makepy to generate Python files.)/__doc__rrrrZZwin32comrrrrrrrZVT_I2ZVT_I4ZVT_R4ZVT_R8ZVT_BSTRZVT_BOOLZ VT_VARIANTZVT_I1ZVT_UI1ZVT_UI2ZVT_UI4ZVT_I8ZVT_UI8ZVT_INTZVT_DATEZVT_UINTrSr rrr&r'r9r6rGrHrVrkr}rrrr3rr r r r sf   ->8=\