
    	h|n                     :   S r SSKrSSKJr  SSKJr  SSKrSSKrSSK	r	SSK
Jr  SSKJr  SrSrSr\	R"                  \	R$                  \	R&                  \	R(                  \	R*                  /r\R.                  \R0                  \R2                  \R4                  /rS rS	 r\R<                  \R>                     r \R<                  \RB                     r"\#\4r$\RJ                  4S
 jr&S r'S r(SSS\RJ                  4S jr)S r*SS\RJ                  4S jr+ " S S5      r,g)a8  Support for dynamic COM client support.

Introduction
 Dynamic COM client support is the ability to use a COM server without
 prior knowledge of the server.  This can be used to talk to almost all
 COM servers, including much of MS Office.

 In general, you should not use this module directly - see below.

Example
 >>> import win32com.client
 >>> xl = win32com.client.Dispatch("Excel.Application")
 # The line above invokes the functionality of this class.
 # xl is now an object we can use to talk to Excel.
 >>> xl.Visible = 1 # The Excel window becomes visible.

    N)chain)
MethodType)IIDType   )buildc                  V    [         (       a  U  H  n[        USS9  M     [        5         g g N )end)	debuggingprintargsargs     jC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\win32com/client/dynamic.pydebug_printr   6   s%    yC#3      c                  V    [         (       a  U  H  n[        USS9  M     [        5         g g r	   )debugging_attrr   r   s     r   debug_attr_printr   =   s%    ~C#3  r   c                 .   [        U [        5      (       a  U $ [        U [        5      (       a   [        R                  " U 5      n U $ [        U SU 5      n U $ ! [        R
                   a+    [        R                  " U S U[        R                  5      n  U $ f = fN_oleobj_)	
isinstancePyIDispatchType_GoodDispatchTypes	pythoncomconnect	ole_errorCoCreateInstanceIID_IDispatchgetattr)	IDispatchclsctxs     r   _GetGoodDispatchr%   K   s    )_--)/00	!)))4I  Iz9=	 "" 	!224)@)@I 	s   A ;BBc                 h    Uc  [        U [        5      (       a  U nO[        U5      n[        X5      U4$ N)r   strr%   )r#   userNamer$   s      r   _GetGoodDispatchAndUserNamer*   \   s8     i%% H x=Y/::r   c                     U (       a  U R                   (       d  U$ U R                   R                  [        R                  :X  a  U$ U R                   R                  $ r'   )descdesckindr   DESCKIND_VARDESCinvkind)entryinvoke_types     r   _GetDescInvokeTyper2   h   sC     

zzi888 ::r   c                     [        XU5      u  pUc  [        nS n Uc  U R                  5       nUb   UR                  5       nX64nO [        XU5      nU" XXS9$ ! [        R
                   a     N)f = f! [        R
                   a    S n NEf = f)N)lazydata)r*   	CDispatchGetTypeInfoGetTypeCompr   	com_errorMakeOleRepr)r#   r)   createClasstypeinfor$   r4   typecompolereprs           r   Dispatchr>   x   s     6i6RIH ,,.H#//1#-	   )x8Gy8GG &&  s.   A4 A A1.A4 0A11A4 4BBc                    S nUb   UR                  5       nUS   [        R                  :X  aM  US   [        R                  -  (       a2  UR	                  S5      nUR                  U5      nUR                  5       nUc  [        R                  " XS S5      nO[        R                  " US 5      n Uc  [        R                  " 5       nU$ ! [        R                   a     N0f = f)N      r   )
GetTypeAttrr   TKIND_INTERFACETYPEFLAG_FDUALGetRefTypeOfImplTypeGetRefTypeInfor   DispatchItemLazyDispatchItemr   )r#   r;   r<   r=   attrhrefs         r   r9   r9      s    G	'')D Q9444Hy777  44R8#2248++-,,XT1E00t< $$&N	 "" 		s   BC	 C	 	C C c                 j    [        XU5      u  pUc  [        nU" U [        R                  " 5       U5      $ )zDispatch with no type info)r*   r5   r   rH   )r#   r)   r:   r$   s       r   DumbDispatchrM      s6     6i6RIy%"4"4"6AAr   c                       \ rS rSrS"S jrS rS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS r  S"S jrS"S jrS"S jrS rS rS rS rS rS rS rS rS r S  r!S!r"g)#r5      Nc                     Uc  SnXR                   S'   X0R                   S'   X R                   S'   0 U R                   S'   0 U R                   S'   S U R                   S'   S U R                   S'   X@R                   S	'   g )
Nz	<unknown>r   
_username_	_olerepr__mapCachedItems__builtMethods__enum__unicode_to_string_
_lazydata_)__dict__)selfr#   r=   r)   r4   s        r   __init__CDispatch.__init__   sx    "H$-j!&.l#%,k",.()*,&'"&h/3+,&.l#r   c                    U R                   R                  (       a(  U R                  U R                   R                  5      u  p#O0[        R                  [        R
                  -  [        R                  p2UbK  U[        US4U-   nU R                  U R                  R                  " U6 U R                   R                  S5      $ [        S5      e)zJProvide 'default dispatch' COM functionality - allow instance to be calledNr   5This dispatch object does not define a default method)rR   defaultDispatchName_find_dispatch_type_r   DISPATCH_METHODDISPATCH_PROPERTYGETDISPID_VALUELCID_get_good_object_r   Invoke	TypeError)rY   r   r/   dispidallArgss        r   __call__CDispatch.__call__   s    >>--"7722OGV
 ))I,J,JJ&&  tWa047G))$$g.0R0RTX  OPPr   c                     g)NT rY   s    r   __bool__CDispatch.__bool__   s    r   c                      SU R                   -  $ )N<COMObject %s>)rQ   rm   s    r   __repr__CDispatch.__repr__   s    4??33r   c                      [        U R                  5       5      $ ! [        R                   a/  nUR                  [
        ;  a  e U R                  5       s S nA$ S nAff = fr'   )r(   ri   r   r8   hresultERRORS_BAD_CONTEXTrr   )rY   detailss     r   __str__CDispatch.__str__   sJ    	#t}}''"" 	#&88==?"	#s    A$AAAc                 $   [        U R                  [        U R                  5      U R	                  5       5      n [        XR
                   Vs/ s H  o"R                  PM     sn5      n[        [        U5      5      $ s  snf ! [         a     N%f = fr'   )
r   rX   dir	__class__	_dir_ole_Properties_NameAttributeErrorlistset)rY   
attributesps      r   __dir__CDispatch.__dir__   su    4==#dnn*=t~~?OP
	z<L<L+M<LqFF<L+MNJ C
O$$ ,N 		s#   B A=
"B =B 
BBc                     0 n[        SU R                  R                  5       5       H/  nU R                  R                  U5      nU R	                  X5        M1     [        U5      $ Nr   )ranger   GetTypeInfoCountr6   _UpdateWithITypeInfo_r   )rY   
items_dictiTItypeInfos       r   r}   CDispatch._dir_ole_   sT    
DMM::<=C}}005H&&z< > Jr   c                 :   U/n[         R                  S 0n[        U5      S:  a  UR                  5       nUR	                  5       nUR
                  U;  a  S XER
                  '   [        SUR                  5       H=  nUR                  U5      nUR                  UR                  5      S   nX;  d  M9  S X'   M?     [        SUR                  5       H6  n	UR                  U	5      n
UR                  U
5      nUR                  U5        M8     [        U5      S:  a  M  g g r   )r   r!   lenpoprC   iidr   cFuncsGetFuncDescGetNamesmemid
cImplTypesrF   rG   append)rY   r   r   	typeInfosinspectedIIDstypeAttriFunfunDescfunName	iImplTypeiRefTyperefTypeInfos               r   r   CDispatch._UpdateWithITypeInfo_   s    J	"00$7)nq  }}H++-H||=0.2ll+!!X__5D&2248G&//>qAG0.2
+	 6 "'q(*=*=!>I'<<YGH"*"9"9("CK$$[1 "? )nq r   c                 :    [        USU5      nU R                  U:H  $ r   r"   r   rY   others     r   __eq__CDispatch.__eq__      z51}}%%r   c                 :    [        USU5      nU R                  U:g  $ r   r   r   s     r   __ne__CDispatch.__ne__  r   r   c                 4    [        U R                  5       5      $ r'   )intri   rm   s    r   __int__CDispatch.__int__  s    4==?##r   c                     U R                  S5      u  pU(       a"  U R                  R                  U[        US5      $ [	        S5      e)NCountr   z3This dispatch object does not define a Count method)r_   r   re   rc   rf   )rY   r/   rg   s      r   __len__CDispatch.__len__  s>    33G<==''gqAAMNNr   c                     [         R                  [         R                  -  nU R                  R	                  [         R
                  [        USS5      nSSKJ	n  UR                  US 5      $ ! [         R                   a     g f = f)N   
   rl   r   )util)r   r`   ra   r   InvokeTypesDISPID_NEWENUMrc   r8    r   WrapEnum)rY   r/   enumr   s       r   _NewEnumCDispatch._NewEnum%  sr    	//)2P2PPG==,,(($2D
 	}}T4((	 "" 		s   AA, ,BBc           	         [        U[        5      (       ag  U R                  S   c  U R                  5       U R                  S'   U R                  S   b*  U R	                  U R
                  R                  U5      5      $ U R                  S5      u  p#Ub2  U R	                  U R                  R                  U[        USU5      5      $ [        S5      e)NrU   Itemr   z(This object does not support enumeration)r   r   rX   r   rd   rU   __getitem__r_   r   re   rc   rf   )rY   indexr/   rg   s       r   r   CDispatch.__getitem__1  s     eS!!}}X&.*.--/h'}}X&2--dkk.E.Ee.LMM33F;))$$VT7AuE  BCCr   c                    U R                   R                  (       a(  U R                  U R                   R                  5      u  p4O0[        R                  [        R
                  -  [        R                  pCUbL  U[        USU4U-   nU R                  U R                  R                  " U6 U R                   R                  S 5      $ [        S5      e)Nr   r]   )rR   r^   r_   r   DISPATCH_PROPERTYPUTDISPATCH_PROPERTYPUTREFrb   rc   rd   r   re   rf   )rY   r   r   r/   rg   rh   s         r   __setitem__CDispatch.__setitem__A  s     >>--"7722OGV
 ..1R1RR&&  tWa7$>G))$$g.0R0RTX  OPPr   c                    XR                   R                  ;   a4  U R                   R                  U   nUR                  S   UR                  4$ XR                   R                  ;   a4  U R                   R                  U   nUR                  S   UR                  4$  U R
                  R                  SU5      n[        R                  [        R                  -  U4$ !    g= f)N   r   NN)
rR   mapFuncsr,   rg   
propMapGetr   GetIDsOfNamesr   r`   ra   )rY   
methodNameitemrg   s       r   r_   CDispatch._find_dispatch_type_T  s    000>>**:6D99Q<,,222>>,,Z8D99Q<,,	]]00J?F ((9+I+II6QQ	s   C Cc                 n    U R                   R                  " U[        X#U4U-   6 nU R                  XU5      $ r'   )r   r   rc   rd   )	rY   rg   wFlagsretTypeargTypesuserresultCLSIDr   results	            r   _ApplyTypes_CDispatch._ApplyTypes_c  s<    **dFX6=
 %%fK@@r   c                     [        X5      $ r'   )r>   )rY   obr)   returnCLSIDs       r   _wrap_dispatch_CDispatch._wrap_dispatch_i  s     %%r   c                    [        U[        5      (       a  U R                  XU5      $ [        U[        5      (       a2   UR	                  [
        R                  5      nU R                  XU5      $ U$ ! [
        R                   a    Us $ f = fr'   )r   r   r   PyIUnknownTypeQueryInterfacer   r!   r8   rY   r   r)   ReturnCLSIDs       r   _get_good_single_object_"CDispatch._get_good_single_object_r  s    b/**''kBBb.))&&y'>'>? ''kBB		 && 	s   A1 1B
	B
c                     Uc  g[        U[        5      (       a  [        [        U UU4S jU5      5      $ U R                  U5      $ )zGiven an object (usually the retval from a method), make it a good object to return.
Basically checks if it is a COM object, and wraps it up.
Also handles the fact that a retval may be a tuple of retvalsNc                 &    UR                  XU5      $ r'   )r   )osounrcs       r   <lambda>-CDispatch._get_good_object_.<locals>.<lambda>  s     %&$>$>qr$Jr   )r   tuplemapr   r   s       r   rd   CDispatch._get_good_object_  sU     :E"" "K   0044r   c                    [         R                  " U5      nU R                  R                  U R                  R                  U   US5      nSR                  U5      n [        USU R                  -  S5      n0 n[        5       R                  5       n[        R                  R                  US'   [        XWU5        UnXa   =oR                  U'   [        X5      $ !   [!        SU5        ["        R$                  " 5          g= f)z1Make a method object - Assumes in olerepr funcmapr   
rq   execr>   z'Error building OLE definition for code N)r   MakePublicAttributeNamerR   MakeFuncMethodr   joincompilerQ   globalscopywin32comclientr>   r   rT   r   r   	traceback	print_exc)	rY   namer   methodCodeList
methodCode
codeObjecttempNameSpaceglobNameSpacefns	            r   _make_method_CDispatch._make_method_  s    2248
66NN##D):q
 YY~.
	" !-=-OQWXJM#INN,M(0(@(@M*%= D-:-@@B$$T*b''	"A:N!s   A;C #C>c                 6   U R                   R                  5        H  nUR                  5         M     0 U l         U R                  (       a)  U R                  R	                  5         SU R
                  S'   U R                  (       a  SU R
                  S'   SU l        g)zlCleanup object - like a close - to force cleanup when you don't
want to rely on Python's reference counting.Nr   rR   )rS   values	_Release_r   ReleaserX   rR   rU   )rY   	childConts     r   r  CDispatch._Release_  sr     ..557I! 8 "==MM!!#(,DMM*%>>)-DMM+&r   c                      U R                   R                  U   nUR                  nU R                  U R                  R
                  " U[        UR                  S   S4U-   6 5      $ ! [         a    [        U5      ef = f)zwCall the named method as a procedure, rather than function.
Mainly used by Word.Basic, which whinges about such things.r   r   )
rR   r   rg   rd   r   re   rc   r,   KeyErrorr   )rY   r  r   r   dispIds        r   _proc_CDispatch._proc_  s{    	'>>**40D[[F))$$vtTYYq\1&E&NO   	' &&	's   A$A' 'A=c           	         [        SU R                  5         [        S5        U R                  R                   H  n[        SU5        M     [        S5        U R                  R                  R                  5        H%  u  p#[        SU SUR                  S SU< 35        M'     [        S5        U R                  R                  R                  5        H%  u  p#[        SU SUR                  S SU< 35        M'     [        S	5        U R                  R                  R                  5        H%  u  p#[        SU SUR                  S SU< 35        M'     g
!   [        R                  " 5          g
= f)z4Debug routine - dumps what it knows about an object.zAxDispatch containerzMethods:	zProps:z = 0xxz - z
Get Props:z
Put Props:N)r   rQ   rR   r   propMapitemsrg   r   
propMapPutr   r  )rY   methodpropr0   s       r   _print_details_CDispatch._print_details_  s+   $doo6	"*..11dF# 2(O#~~55;;=4&ell1%5S	BC  >,#~~88>>@4&ell1%5S	BC  A,#~~88>>@4&ell1%5S	BC  A	"!s   D<E E.c                      U R                  U5      (       a  [        U R                   SU S35        gg ! [         a     gf = f)Nz.__LazyMap__(z) added somethingr   r   )_LazyAddAttr_r   rQ   r   rY   rJ   s     r   __LazyMap__CDispatch.__LazyMap__  sT    	!!$'' '}TF:KL 	 (
  		s   15 
AAc                 B   U R                   c  gSnU R                   u  p4U R                  n[         H  n UR                  X5      u  pxUS:X  a   US S S;   a  UR                  USS  U5      u  pxU[        R
                  :X  a  UR                  X8S5      n	O)U[        R                  :X  a  UR                  X8S5      n	OS n	U	bR  U	S   U	S   pX   nXR                  :X  a  UR                  X5        O XR                  :X  a  UR                  X5        SnM  M     U$ !    M  = f)Nr      )SetGetr   )rW   rR   ALL_INVOKE_TYPESBindr   DESCKIND_FUNCDESC	_AddFunc_r.   _AddVar_r  _propMapPutCheck_r   _propMapGetCheck_)rY   rJ   resr;   r<   r=   ir  trkeyr   r   s                r   r!  CDispatch._LazyAddAttr_  s'   ??"!__..
 "A}}T- 6d2Ah.8#==ab15DA	333))(q9A)444((a8AAy tQqT8D00011#< 2 2211#<C ! ". 
s   CDDc                     U HB  n[         R                  " U R                  U5      U45      nX0R                  R                  U'   MD     g)a  Flag these attribute names as being methods.
Some objects do not correctly differentiate methods and
properties, leading to problems when calling these methods.

Specifically, trying to say: ob.SomeFunc()
may yield an exception "None object is not callable"
In this case, an attempt to fetch the *property* has worked
and returned None, rather than indicating it is really a method.
Calling: ob._FlagAsMethod("SomeFunc")
should then allow this to work.
N)r   MapEntry__AttrToID__rR   r   )rY   methodNamesr  rw   s       r   _FlagAsMethodCDispatch._FlagAsMethod  s=      DnnT%6%6t%<tgFG,3NN##D)  r   c                     [        SR                  XR                  5      5        U R                  R	                  SU5      $ )Nz>Calling GetIDsOfNames for property {} in Dispatch container {}r   )r   formatrQ   r   r   r"  s     r   r8  CDispatch.__AttrToID__  s8    LSSoo	

 }}**1d33r   c                 N   US:X  ae   [         R                  [         R                  -  nU R                  R	                  [         R
                  [        USS5      n " S S5      nU" U5      $ UR                  S5      (       a!  UR                  S5      (       a  [        U5      e [        U R                  U   U 5      $ ! [         R                   a    [        S5      ef = f! [         a     Of = fXR                  R                  ;   a  U R!                  U5      $ S nU R                  (       Ga5  U R                  (       Ga#  U R                  R"                  R%                  U5      nUc%  U R                  R&                  R%                  U5      nUc   U R)                  U5      (       aw  XR                  R                  ;   a  U R!                  U5      $ U R                  R"                  R%                  U5      nUc%  U R                  R&                  R%                  U5      nUc'  [*        R,                  " U R/                  U5      U45      nO! [         R0                   a     Of = fUbL   U R2                  UR4                     n[7        SU5        U$ ! [        [        4 a    [7        S	U-  5         Of = fUb  [9        U[         R:                  5      n[7        S
UR4                  -  5         U R                  R=                  UR4                  SUS5      nO_! [         R                   aH  nUR>                  [@        ;   a.  XPR                  R                  U'   U R!                  U5      s S nA$ e S nAff = f[7        SU5        U RC                  U5      $ [        U RD                   SU 35      e)N__iter__r   rl   z+This object can not function as an iteratorc                        \ rS rSrS rS rSrg)&CDispatch.__getattr__.<locals>.Factoryi-  c                     Xl         g r'   r   )rY   r   s     r   rZ   /CDispatch.__getattr__.<locals>.Factory.__init__.  s     Gr   c                 h    SS K nUR                  R                  R                  U R                  5      $ r   )win32com.client.utilr   r   Iteratorr   )rY   r   s     r   ri   /CDispatch.__getattr__.<locals>.Factory.__call__1  s$    /#??//88AAr   rD  N)__name__
__module____qualname____firstlineno__rZ   ri   __static_attributes__rl   r   r   FactoryrB  -  s    !Br   rO  _zCached items has attribute!zAttribute %s not in cachez(Getting property Id 0x%x from OLE objectr   r   zOLE returned .)#r   r`   ra   r   r   r   rc   r8   r   
startswithendswithr   rT   r  rR   r   r	  r  getr   r#  r   r7  r8  r   rS   rg   r   r2   INVOKE_PROPERTYGETre   ru   rv   rd   rQ   )	rY   rJ   r/   r   rO  retEntryretr1   rw   s	            r   __getattr__CDispatch.__getattr__   s1   :T#33i6T6TT}}00,,dGXrB B 4= ??3DMM#$6$6 &&	d11$7>>' && T$%RSST(  		 >>***%%d++ >>>dmmm~~--11$7H>>4488>
''-->>#:#::#'#5#5d#;;#'>>#9#9#=#=d#C#+'+~~'@'@'D'DT'JH'#(>>$2C2CD2ID7#S **  E++HOO< !>D
n- E !<t!CDE ,Xy7S7STK:X__Lmm**8??A{AN&& ??&884<NN++D1--d33 _c2))#.. 0$899sm   AB= $C  = C 
C-,C-?I	 A7I	 	I I '&J J/.J/((L M-%<M(!M-'M((M-c           	         XR                   ;   a  X R                   U'   g [        SU R                   SU SU< S35        U R                  (       a  XR                  R                  ;   a]  U R                  R                  U   n[        U[        R                  5      nU R                  R                  UR                  SUSU5        g XR                  R                  ;   a]  U R                  R                  U   n[        U[        R                  5      nU R                  R                  UR                  SUSU5        g U R                  (       Ga  U R                  U5      (       a  XR                  R                  ;   a]  U R                  R                  U   n[        U[        R                  5      nU R                  R                  UR                  SUSU5        g XR                  R                  ;   a]  U R                  R                  U   n[        U[        R                  5      nU R                  R                  UR                  SUSU5        g  [        R                  " U R                  U5      U45      nUb   [        U[        R                  5      nU R                  R                  UR                  SUSU5        X0R                  R                  U'   [        SR#                  XR                  U R                  5      5        g [%        SU R                   SU S35      e! [        R                    a    S n Nf = f! [        R                    a     NNf = f)	NzSetAttr called for rQ  =z on DispatchContainerr   z<__setattr__ property {} (id=0x{:x}) in Dispatch container {}z
Property 'z' can not be set.)rX   r   rQ   rR   r  r2   r   INVOKE_PROPERTYPUTr   re   rg   r  r#  r   r7  r8  r8   r=  r   )rY   rJ   valuer0   r1   s        r   __setattr__CDispatch.__setattr__y  s   MM! #(MM$!$//!2!D65)CXY	
 >>~~---..t40	8T8TU$$U\\1k1eL~~00011$70	8T8TU$$U\\1k1eL ===%%>>111 NN2248E"4y;;#K MM((q+q%P>>444 NN55d;E"4y;;#K MM((q+q%Pt'8'8'>H  "4y;;#K MM((q+q%P38NN**40$V]] ,,
  z$//):!D6ARSTT% &&   !** s%   'L# <B
L? #L<;L<?MM)rU   rS   r   )#rJ  rK  rL  rM  rZ   ri   rn   rr   rx   r   r}   r   r   r   r   r   r   r   r   r_   r   r   r   rd   r	  r  r  r  r#  r!  r:  r8  rX  r^  rN  rl   r   r   r5   r5      s    
/Q$
4#% 22&&$O
)D Q&RA 	&5&8
'"&!F4 4W:rBUr   r5   )-__doc__r   	itertoolsr   typesr   r   win32com.clientr   winerror
pywintypesr   r   r   r   r   rc   DISP_E_MEMBERNOTFOUNDDISP_E_BADPARAMCOUNTDISP_E_PARAMNOTOPTIONALDISP_E_TYPEMISMATCHE_INVALIDARGrv   rU  r\  INVOKE_PROPERTYPUTREFINVOKE_FUNCr)  r   r   TypeIIDsr!   r   IID_IUnknownr   r(   r   CLSCTX_SERVERr%   r*   r2   r>   r9   rM   r5   rl   r   r   <module>rp     s8  $        	
 ""!!$$        ##	  $$Y%<%<=##I$:$:;7^  (1'>'> "	;$ ""H6: ""	
B@U @Ur   