
[Mc           @   sG  d  Z  d d l Z d d l Z d d l m Z d d l Z d d l m Z d d l Z d d l	 Z	 d   Z
 d Z d e f d     YZ d	 Z e j e j e j e j e j e j e j e j e j e j e j e j e j e j e j e j e j e j e j  e j! e j" e j# e j$ e j% e j& g Z' i  Z( x e' D] Z) e* e( e) <q6Wd
 f  d     YZ+ d f  d     YZ, d e, f d     YZ- d e- f d     YZ. d e- f d     YZ/ i e j e j 6e j e j% 6e j e j 6Z0 d   Z1 d   Z2 e j3 e j4 d Z5 d   Z6 e7 d  Z8 d   Z9 e7 d  Z: e; d k rCd GHn  d S(   s  Contains 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.
iN(   t	   iskeyword(   t   TimeTypec         C   s)   |  d d k r! |  d  d }  n  d |  S(   Nit   "s   \"s   """%s"""(    (   t   s(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   _safeQuotedString   s     s   PythonCOM.Client.Build errort   NotSupportedExceptionc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR   "   s    t   DropIndirectiont   MapEntryc           B   sD   e  Z d  Z d d e j d d d  Z d   Z d   Z d   Z	 RS(   s3   Simple holder for named attibutes - items in a map.i    c         C   s}   t  |  t  d  k r- | |  _ d  |  _ n | d |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d |  _ | |  _	 d  S(   Ni    (
   t   typet   dispidt   Nonet   desct   namest   doct   resultCLSIDt   resultDocumentationt   wasPropertyt   hidden(   t   selft
   desc_or_idR   R   R   t	   resultDocR   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   __init__7   s    							c         C   s    |  j  } | t j k r d  S| S(   N(   R   t	   pythoncomt   IID_NULLR   (   R   t   rc(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   GetResultCLSIDE   s    	 c         C   s,   |  j    } | d  k r d St t |   S(   NR   (   R   R   t   reprt   str(   R   R   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   GetResultCLSIDStrJ   s     c         C   s   |  j  d  k r d  S|  j  d S(   Ni    (   R   R   (   R   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   GetResultNameO   s    N(
   R   R   t   __doc__R   R   R   R   R   R   R   (    (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR	   5   s
   		t   OleItemc           B   s   e  Z d  Z d d  Z RS(   R!   c         C   se   | |  _  |  j  r+ t |  j  d  |  _ n	 d  |  _ d |  _ d |  _ d |  _ d  |  _ d  |  _ d  S(   Ni    (	   R   t   MakePublicAttributeNamet   python_nameR   t   bWrittent   bIsDispatcht   bIsSinkt   clsidt   co_class(   R   R   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR   W   s    							N(   R   R   t   typenameR   R   (    (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR!   T   s   t   DispatchItemc           B   s   e  Z d  Z d d d d d  Z d   Z d   Z d   Z d   Z d d  Z	 d   Z
 d d	  Z d d
  Z d d  Z RS(   R*   i   c         C   sf   t  j |  |  i  |  _ i  |  _ i  |  _ i  |  _ d  |  _ d |  _ | rb |  j	 | | |  n  d  S(   Ni    (
   R!   R   t   propMapt
   propMapGett
   propMapPutt   mapFuncsR   t   defaultDispatchNameR   t   Build(   R   t   typeinfot   attrR   t   bForUser(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR   f   s    						c         C   s   |  j  | j d  \ } } } | d k r | d | k sR | | j d d k re d | } d } n7 d } | |  j k s | |  j k r d | } n | } d | _ | |  j | <| r |  j | =q n  d  S(   Ni   i   i   t   Seti    (   t   CountInOutOptArgsR   R.   R,   R   R-   (   R   t   keyt   itemt   inst   outst   optst   newKeyt   deleteExisting(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   _propMapPutCheck_r   s    '
		c         C   s   |  j  | j d  \ } } } | d k r | j d | k sJ | | k r] d | } d } n( d } | |  j k r d | } n | } d | _ | |  j | <| r |  j | =q n  d  S(   Ni   i    i   t   Geti   (   R5   R   R.   R   R,   (   R   R6   R7   R8   R9   R:   R;   R<   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   _propMapGetCheck_   s    
		c         C   s  | j  } | j } y | j |  } | d } Wn  t j k
 rQ d } d  } n Xd  } y | rs | j |  } n  Wn t j k
 r n X| d k r | r | |  _ n  | j }	 | j	 \ }
 } } t
 |
 |  \ }
 } } |
 | | | f | _	 g  } xW | j D]L } | \ }
 } } t
 |
 |  \ } } } | | | | f } | j |  qWt |  | _ | t j @d k } |	 t j k r|  j } n |	 t j t j f k r%|  j j | d   } | d  k	 r| j d t j k r|  j } d | } q"d | _ | |  j d | <|  j } qF|  j } n! |	 t j k r@|  j } n d  } | d  k	 rt t |  | | | | |  | | <| j t j k rd  S| | f Sd  S(   Ni    t    i   R4   i   (   t   memidt
   wFuncFlagst   GetNamesR   t	   ole_errorR   t   GetDocumentationR/   t   invkindt   rettypet   _ResolveTypet   argst   appendt   tuplet   FUNCFLAG_FHIDDENt   INVOKE_PROPERTYGETR,   t   INVOKE_PROPERTYPUTt   INVOKE_PROPERTYPUTREFR-   t   getR   R.   R   t   INVOKE_FUNCR	   t   funckindt   FUNC_DISPATCH(   R   R1   t   fdescR3   t   idt	   funcflagsR   t   nameR   RF   t   typereprt   flagt   defvalR   R   t   argListt   argDesct   arg_typet	   arg_clsidt   arg_docR   t   mapt   existing(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt	   _AddFunc_   sb    		
			%
c         C   s  | j  t j k r
| j } | j |  } | j \ } } } t | |  \ } }	 }
 | | | f | _ d  } y | r | j |  } n  Wn t j	 k
 r n X|  j
 } d } t | d  r | j d @d k } n  t t |  | | |	 |
 |  | | d <| d | f Sd  Sd  S(   Ni    t	   wVarFlagsi@   (   t   varkindR   t   VAR_DISPATCHRA   RC   t   elemdescVarRH   R   RE   RD   R+   t   hasattrRc   R	   RK   (   R   R1   RT   R3   RU   R   RX   t   flagsRZ   R   R   R   R`   R   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   _AddVar_   s&    	 	)c         C   s   | d |  _  | j t j @d k |  _ | d  k r6 d  Sx: t | d  D]( } | j |  } |  j | | |  qG Wx: t | d  D]( } | j	 |  } |  j
 | | |  q Wx3 t |  j j    D] \ } } |  j | |  q Wx3 t |  j j    D] \ } } |  j | |  q Wd  S(   Ni    i   i   (   R'   t
   wTypeFlagsR   t   TYPEFLAG_FDISPATCHABLER%   R   t   ranget   GetFuncDescRb   t
   GetVarDescRi   t   listR,   t   itemsR?   R-   R=   (   R   R1   R2   R3   t   jRT   R6   R7   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR0      s     ""c         C   s   d } } } x | D] } | d } | d k rH | d } | d } q | t  j @rb | d } n  | t  j @r| | d } n  | t  j @r | d } q q W| | | f S(   sh   Return tuple counting in/outs/OPTS.  Sum of result may not be len(argTuple), as some args may be in/out.i    i   (   R   t   PARAMFLAG_FINt   PARAMFLAG_FOPTt   PARAMFLAG_FOUT(   R   t   argTupleR8   t   outR:   t   argCheckt   inOut(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR5     s    

c         C   sa   | j  d  k	 rJ t | j   d k  s7 | j  d d k rJ |  j | | |  S|  j | | |  Sd  S(   Ni   i(   R   R   t   lent   MakeDispatchFuncMethodt   MakeVarArgsFuncMethod(   R   t   entryRW   t
   bMakeClass(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   MakeFuncMethod%  s    7c         C   s  | j  } | j } | j } g  } | rB d } d }	 d }
 d } n d } d }	 d }
 d } d } | d } | d | d	 t | | |	 |
 | |  d
 } | j |  | r | d r | j | d t | d   n  | j   } | r d | } n d } | d d  } t g  | d D] } | d  ^ q } g  | d D] } | d ^ q=} g  | D]& } | t j	 t j
 B@d k rZ| ^ qZ} d  } t |  d k rDt |  d k rD| d d k rD| d } | t k rd | | | d | | t | |  f } qD| t j t j g k rd | | | d | t |  t | |  f } | d | f } | t j k r| d | f } | d | f } | d | f } | d | f } | d | f } n  | d | t |  | f } | d | } qD| t j k rDd | f } | d | | | d | t |  t | |  f } qDn  | d  k rd | | | d | | t |  | t | |  f } n  | j |  | j d  | S(   Ns   	t   defaultNamedOptArgt   defaultNamedNotOptArgt   defaultUnnamedArgR@   s   pythoncom.Missingi    s   def s   (selfs   ):i   s   '%s'R   i   i   s;   %s	return self._oleobj_.InvokeTypes(%d, LCID, %s, %s, %s%s)i   s;   %s	ret = self._oleobj_.InvokeTypes(%d, LCID, %s, %s, %s%s)
s   %s	if ret is not None:
s2   %s		# See if this IUnknown is really an IDispatch
s	   %s		try:
s7   %s			ret = ret.QueryInterface(pythoncom.IID_IDispatch)
s   %s		except pythoncom.error:
s   %s			return ret
s    %s		ret = Dispatch(ret, %s, %s)
s   %s	return rets    %s	# Result is a Unicode object
s5   %s	return self._ApplyTypes_(%d, %s, %s, %s, %s, %s%s)(   R   R   R   t   BuildCallListRJ   R   R   RK   R   Rt   t   PARAMFLAG_FRETVALR   Ry   t   NoTranslateMapt   _BuildArgListt   VT_DISPATCHt
   VT_UNKNOWNR   t   VT_BSTR(   R   R|   RW   R}   RT   R   R   t   rett
   linePrefixt   defNamedOptArgt   defNamedNotOptArgt   defUnnamedArgt	   defOutArgRU   R   t   resclsidt   retDesct   whatt   argsDesct   param_flagsRY   t
   bad_paramst   rd(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyRz   ,  sf    				
/"'!34
,/98c         C   s   | j  } | j } | j } g  } d } | r6 d }	 n d }	 | j |	 d | d | d  | r | d r | j |	 d t | d   n  | r | d }
 n	 t j }
 |	 d	 } | j | t | j  d
 |
 | d f  | j d  | S(   NR   s   	R@   s   def t   (s	   , *args):i   i   s7   	return self._get_good_object_(self._oleobj_.Invoke(*((s   ,0,%d,1)+args)),'%s')i    (	   R   R   R   RJ   R   R   t   DISPATCH_METHODR   R   (   R   R|   RW   R}   RT   R   R   R   t	   argPrefixR   t
   invoketypeR   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR{   n  s$    				! "	
,N(   R   R   R)   R   R   R=   R?   Rb   Ri   R0   R5   R~   Rz   R{   (    (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR*   c   s   			M		Bt
   VTableItemc           B   s   e  Z d  d  Z RS(   i   c         C   s   t  j |  | | |  | d  k	 s+ t d  t |  j j    t |  j j    t |  j j    } t	 j
 d k  r d   } | j |  n | j d d    g  |  _ x0 | D]( } |  j j | j | j | j f  q Wd  S(   Ns%   Cant build vtables without type info!i   i   c         S   s   t  |  j d | j d  S(   Ni   (   t   cmpR   (   t   m1t   m2(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   cmp_vtable_off  s    R6   c         S   s   |  j  d S(   Ni   (   R   (   t   m(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   <lambda>  s    (   i   i   (   R*   R0   R   t   AssertionErrorRo   R.   t   valuesR,   R-   t   syst   version_infot   sortt   vtableFuncsRJ   R   R   R   (   R   R1   R2   R3   t	   meth_listR   R|   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR0     s    ;		(   R   R   R0   (    (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR     s   t   LazyDispatchItemc           B   s   e  Z d  Z d   Z RS(   R   c         C   s*   | d |  _  t j |  d  | | d  d  S(   Ni    (   R'   R*   R   R   (   R   R2   R   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR     s    (   R   R   R)   R   (    (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR     s   c         C   s  t  |   t k r|  \ } } | t j k r t  |  t k oO | d t j k } t | |  \ } } } | r | t j t j t j g k r | | | f S| t j	 B| | f S| t j
 k r t | |  \ } } } t j | B| | f S| t j k r	t j d  d  f S| t j k ry | j |  } WnD t j k
 rq} | j t j t j g k rkt j d  d  f S  n X| j   }	 |	 j }
 |
 t j k r|	 j } t | |  S|
 t j t j g k rt j d  d  f S|
 t j k r| j   d } | j d  } t j | | f S|
 t j t j g k rY| j   d } | j d  } t j | | f S|
 t j k rxt j d  d  f St  d   qn  t! j" |  |   d  d  f S(   Ni    is*   Can not resolve alias or user-defined type(#   R
   RK   R   t   VT_PTRt   VT_USERDEFINEDRH   R   R   t	   VT_RECORDt   VT_BYREFt   VT_SAFEARRAYt   VT_ARRAYt	   VT_CARRAYR   t   GetRefTypeInfot	   com_errort   hresultt   winerrort   TYPE_E_CANTLOADLIBRARYt   TYPE_E_LIBNOTREGISTEREDt   GetTypeAttrt   typekindt   TKIND_ALIASt
   tdescAliast
   TKIND_ENUMt   TKIND_MODULEt   VT_I4t   TKIND_DISPATCHRE   t   TKIND_INTERFACEt   TKIND_COCLASSt   TKIND_RECORDR   t   typeSubstMapRP   (   RX   t	   itypeinfot   indir_vtt   subreprt   was_usert	   sub_clsidt   sub_doct   resultTypeInfot   detailst
   resultAttrt   typeKindt   tdescR'   t   retdoc(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyRH     sP    %$			c         C   s   t  |  d t |  d   } t |  } x0 d
 | k r[ | j d
  } d | f | | <q, Wt t t | d | d !  } d } x0 t |  | k  r | j d t |  f  q Wx2 t d t |  d  D] } | | d | | <q Wd d	 j	 |  S(   s4   Builds list of args to the underlying Invoke method.i   i   s   arg%di   i    i   s   
			t   ,s   , N(
   t   maxRy   Ro   R   t   indexR`   R"   RJ   Rl   t   join(   RT   R   t   numArgst   it   name_num(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR     s     t   _c         C   sT   d } x |  | d k r& | d 7} q	 W| d k s< t  d  |  | d |  | d  S(   Ni    R   i   i   s1   Should only be here with names starting with '__'(   R   (   t	   classNameR   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   demunge_leading_underscores  s
    c         C   s   |  d  d k r t  |   S|  d k r/ d }  nw t |   rf |  j   } | |  k rb | j   } n  | S| r t t |   r |  j   } | |  k r | j   } n  | Sd j g  |  D] } | t k r | ^ q  S(   Ni   t   __R   t   NONER@   (   R   R    t
   capitalizet   upperRg   t   __builtins__R   t   valid_identifier_chars(   R   t	   is_globalR   t   char(    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR"     s    
	c   
      C   s   y |  d } Wn t  k
 r* t j } n X| t j @r |  d } t | t j  rj t t | j     St	 |  t
 k r | j } | j } | j } | j } | j } | j } | j }	 d t   St |  Sd  S(   Ni   i   s`   pywintypes.Time((%(year)d, %(month)d, %(day)d, %(hour)d, %(minute)d, %(second)d,0,0,0,%(msec)d))(   t
   IndexErrorR   Rr   t   PARAMFLAG_FHASDEFAULTt
   isinstancet   datetimeR   RK   t   utctimetupleR
   R   t   yeart   montht   dayt   hourt   minutet   secondt   msect   localsR   (
   t	   defArgValRx   t   valR   R   R   R   R   R   R   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   MakeDefaultArgRepr,  s&    
	 	 	 	 	 	 	
c         C   s  t  |  d  } |  d } d }	 | d k r? | }
 | d } n
 | | }
 xKt |  D]=} y | | d } | d k	 } Wn t k
 r d } n X| s d | } n  |  d | } t |  } | d k r$| d t j t j B@t j k r | } q$| r| |
 k r| } q!| } q$| } n  t |  } | d d d k rn|	 d	 }	 | ra|	 d
 }	 n  |	 d }	 n  |	 d | }	 | rV |	 d | }	 qV qV W| d k r|	 d | d }	 n  |	 S(   s)   Builds a Python declaration for a method.i   i   R@   ii   i    s   arg%di   s   
t   #s   			s   , t   =s   , *N(	   Ry   t   xrangeR   R   R   R   Rt   Rr   R"   (   RT   R   R   R   R   R   t
   is_commentR   t
   numOptArgst   strvalt   firstOptArgt   argt   argNamet   namedArgt   thisdescR   (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyR   A  sJ    


 !				
t   __main__sF   Use 'makepy.py' to generate Python code - this module is just a helper(<   R    R   t   stringt   keywordR    R   t
   pywintypesR   R   R   R   t   errort	   ExceptionR   R   t   VT_BOOLt   VT_CLSIDt   VT_CYt   VT_DATEt
   VT_DECIMALt   VT_EMPTYt   VT_ERRORt   VT_FILETIMEt
   VT_HRESULTt   VT_I1t   VT_I2R   t   VT_I8t   VT_INTt   VT_NULLt   VT_R4t   VT_R8t	   VT_STREAMt   VT_UI1t   VT_UI2t   VT_UI4t   VT_UI8t   VT_UINTt   VT_VOIDt   NoTranslateTypesR   t   vR   R	   R!   R*   R   R   R   RH   R   t   ascii_letterst   digitsR   R   t   FalseR"   R   R   R   (    (    (    s8   C:\RCS\Python\lib\site-packages\win32com\client\build.pyt   <module>   sT   	 "	?			%	7