
    %
i|n                        d Z ddlZddlmZ ddlmZ ddlZddlZddl	Z	ddl
mZ ddlmZ dZdZdZe	j        e	j        e	j        e	j        e	j        gZej        ej        ej        ej        gZd Zd	 Zej        ej                 Z ej        ej!                 Z"e#efZ$ej%        fd
Z&d Z'd Z(dddej%        fdZ)d Z*ddej%        fdZ+ G d d          Z,dS )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                  `    t           r&| D ]}t          |d           t                       d S d S N )end)	debuggingprintargsargs     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\win32com/client/dynamic.pydebug_printr   6   sF      	  	 C#3     c                  `    t           r&| D ]}t          |d           t                       d S d S r	   )debugging_attrr   r   s     r   debug_attr_printr   =   sF      	  	 C#3 r   c                    t          | t                    r| S t          | t                    rL	 t          j        |           } nG# t          j        $ r$ t          j        | d |t          j                  } Y nw xY wt          | d|           } | S N_oleobj_)	
isinstancePyIDispatchType_GoodDispatchTypes	pythoncomconnect	ole_errorCoCreateInstanceIID_IDispatchgetattr)	IDispatchclsctxs     r   _GetGoodDispatchr%   K   s    )_-- )/00 	>	!))44II" 	 	 	!24)@ III	 Iz9==	s   A 0A65A6c                 x    |t          | t                    r| }nt          |          }t          | |          |fS N)r   strr%   )r#   userNamer$   s      r   _GetGoodDispatchAndUserNamer*   \   sD     i%% 	! H x==Y//::r   c                 h    | r| j         s|S | j         j        t          j        k    r|S | j         j        S r'   )descdesckindr   DESCKIND_VARDESCinvkind)entryinvoke_types     r   _GetDescInvokeTyper2   h   sA      
 zi888 :r   c                 @   t          | ||          \  } }|t          }d }	 ||                                 }|/	 |                                }||f}n# t          j        $ r Y nw xY wn# t          j        $ r d }Y nw xY wt          | ||          } || |||          S )N)lazydata)r*   	CDispatchGetTypeInfoGetTypeCompr   	com_errorMakeOleRepr)r#   r)   createClasstypeinfor$   r4   typecompolereprs           r   Dispatchr>   x   s     6i6RRIxH ,,..H#//11#X-&      )Xx88G;y'8hGGGGs4   A) A A) A%"A) $A%%A) )A=<A=c                    d }|	 |                                 }|d         t          j        k    rS|d         t          j        z  r>|                    d          }|                    |          }|                                 }|t          j        ||d d          }nt          j        |d           }n# t          j	        $ r Y nw xY w|t          j                    }|S )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 5
  44R88#22488++--,XtT1EE0t<<" 	 	 	D	$&&Ns   B,B3 3CCc                 x    t          | ||          \  } }|t          } || t          j                    |          S )zDispatch with no type info)r*   r5   r   rH   )r#   r)   r:   r$   s       r   DumbDispatchrM      sB     6i6RRIx;y%"4"6"6AAAr   c                       e Zd Zd dZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Z	 	 d dZd dZd dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z dS )!r5   Nc                     |d}|| j         d<   || j         d<   || j         d<   i | j         d<   i | j         d<   d | j         d<   d | j         d<   || j         d	<   d S )
Nz	<unknown>r   
_username_	_olerepr__mapCachedItems__builtMethods__enum__unicode_to_string_
_lazydata_)__dict__)selfr#   r=   r)   r4   s        r   __init__zCDispatch.__init__   sv    "H$-j!&.l#%,k",.()*,&'"&h/3+,&.l###r   c                 D   | j         j        r#|                     | j         j                  \  }}n%t          j        t          j        z  t          j        }}|<|t          |df|z   }|                      | j	        j
        | | j         j        d          S t          d          )zJProvide 'default dispatch' COM functionality - allow instance to be calledNr   5This dispatch object does not define a default method)rQ   defaultDispatchName_find_dispatch_type_r   DISPATCH_METHODDISPATCH_PROPERTYGETDISPID_VALUELCID_get_good_object_r   Invoke	TypeError)rX   r   r/   dispidallArgss        r   __call__zCDispatch.__call__   s    >- 	"772 OGVV
 )I,JJ& G tWa047G))$$g.0RTX   OPPPr   c                     dS )NT rX   s    r   __bool__zCDispatch.__bool__   s    tr   c                     d| j         z  S )N<COMObject %s>)rP   rj   s    r   __repr__zCDispatch.__repr__   s    4?33r   c                     	 t          |                                           S # t          j        $ r-}|j        t
          vr |                                 cY d }~S d }~ww xY wr'   )r(   rg   r   r8   hresultERRORS_BAD_CONTEXTrn   )rX   detailss     r   __str__zCDispatch.__str__   sm    	#t}}'''" 	# 	# 	#&888==??""""""	#s    # A"AAAc                    t          | j        t          | j                  |                                           }	 t          |d | j        D                       }n# t          $ r Y nw xY wt          t          |                    S )Nc                     g | ]	}|j         
S ri   )Name).0ps     r   
<listcomp>z%CDispatch.__dir__.<locals>.<listcomp>   s    +M+M+MqAF+M+M+Mr   )	r   rW   dir	__class__	_dir_ole_Properties_AttributeErrorlistset)rX   
attributess     r   __dir__zCDispatch.__dir__   s    4=#dn*=*=t~~?O?OPP
	z+M+MD<L+M+M+MNNJJ 	 	 	D	C
OO$$$s   A 
A)(A)c                     i }t          d| j                                                  D ]2}| j                            |          }|                     ||           3t          |          S Nr   )ranger   GetTypeInfoCountr6   _UpdateWithITypeInfo_r   )rX   
items_dictiTItypeInfos       r   r|   zCDispatch._dir_ole_   sj    
DM::<<== 	= 	=C}0055H&&z8<<<<Jr   c                 H   |g}t           j        d i}t          |          dk    r|                                }|                                }|j        |vrd ||j        <   t          d|j                  D ]@}|                    |          }|	                    |j
                  d         }||vrd ||<   At          d|j                  D ]A}	|                    |	          }
|                    |
          }|                    |           Bt          |          dk    d S d S r   )r   r!   lenpoprC   iidr   cFuncsGetFuncDescGetNamesmemid
cImplTypesrF   rG   append)rX   r   r   	typeInfosinspectedIIDstypeAttriFunfunDescfunName	iImplTypeiRefTyperefTypeInfos               r   r   zCDispatch._UpdateWithITypeInfo_   s6   J	"0$7)nnq   }}H++--H|=00.2hl+!!X_55 3 3D&22488G&//>>qAGj00.2
7+ "'q(*=!>!> 2 2I'<<YGGH"*"9"9("C"CK$$[1111# )nnq      r   c                 :    t          |d|          }| j        |k    S r   r"   r   rX   others     r   __eq__zCDispatch.__eq__       z511}%%r   c                 :    t          |d|          }| j        |k    S r   r   r   s     r   __ne__zCDispatch.__ne__  r   r   c                 D    t          |                                           S r'   )intrg   rj   s    r   __int__zCDispatch.__int__  s    4==??###r   c                     |                      d          \  }}|r"| j                            |t          |d          S t	          d          )NCountr   z3This dispatch object does not define a Count method)r]   r   rc   ra   rd   )rX   r/   re   s      r   __len__zCDispatch.__len__  sM    33G<< 	B=''gqAAAMNNNr   c                     	 t           j        t           j        z  }| j                            t           j        t          |dd          }n# t           j        $ r Y d S w xY wddlm	} |
                    |d           S )N   
   ri   r   )util)r   r^   r_   r   InvokeTypesDISPID_NEWENUMra   r8    r   WrapEnum)rX   r/   enumr   s       r   _NewEnumzCDispatch._NewEnum%  s    	/)2PPG=,,($2 DD " 	 	 	44	}}T4(((s   AA	 	AAc           	         t          |t                    rc| j        d         |                                 | j        d<   | j        d         -|                     | j                            |                    S |                     d          \  }}|6|                     | j        	                    |t          |d|                    S t          d          )NrT   Itemr   z(This object does not support enumeration)r   r   rW   r   rb   rT   __getitem__r]   r   rc   ra   rd   )rX   indexr/   re   s       r   r   zCDispatch.__getitem__1  s     eS!! 	N}X&.*.--//h'}X&2--dk.E.Ee.L.LMMM33F;;))$$VT7AuEE   BCCCr   c                 F   | j         j        r#|                     | j         j                  \  }}n%t          j        t          j        z  t          j        }}|=|t          |d|f|z   }|                      | j	        j
        | | j         j        d           S t          d          )Nr   r[   )rQ   r\   r]   r   DISPATCH_PROPERTYPUTDISPATCH_PROPERTYPUTREFr`   ra   rb   r   rc   rd   )rX   r   r   r/   re   rf   s         r   __setitem__zCDispatch.__setitem__A  s     >- 	"772 OGVV
 .1RR& G tWa7$>G))$$g.0RTX   OPPPr   c                 R   || j         j        v r&| j         j        |         }|j        d         |j        fS || j         j        v r&| j         j        |         }|j        d         |j        fS 	 | j                            d|          }n#  Y dS xY wt          j        t          j	        z  |fS )N   r   NN)
rQ   mapFuncsr,   re   
propMapGetr   GetIDsOfNamesr   r^   r_   )rX   
methodNameitemre   s       r   r]   zCDispatch._find_dispatch_type_T  s    000>*:6D9Q<,,222>,Z8D9Q<,,	]00J??FF	::(9+II6QQs   *B Bc                 h     | j         j        |t          |||f|z    }|                     |||          S r'   )r   r   ra   rb   )	rX   re   wFlagsretTypeargTypesuserresultCLSIDr   results	            r   _ApplyTypes_zCDispatch._ApplyTypes_c  s@    **dFGX6=
 %%fdK@@@r   c                 "    t          ||          S r'   )r>   )rX   obr)   returnCLSIDs       r   _wrap_dispatch_zCDispatch._wrap_dispatch_i  s     H%%%r   c                 &   t          |t                    r|                     |||          S t          |t                    rO	 |                    t
          j                  }n# t
          j        $ r |cY S w xY w|                     |||          S |S r'   )r   r   r   PyIUnknownTypeQueryInterfacer   r!   r8   rX   r   r)   ReturnCLSIDs       r   _get_good_single_object_z"CDispatch._get_good_single_object_r  s    b/** 	C''HkBBBb.)) 	C&&y'>??&   			 ''HkBBB	s   A# #A76A7c                     |dS t          |t                    r"t          t          | ||fd|                    S |                     |          S )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                 0    |                     | ||          S r'   )r   )osounrcs       r   <lambda>z-CDispatch._get_good_object_.<locals>.<lambda>  s     %&$>$>q#r$J$J r   )r   tuplemapr   r   s       r   rb   zCDispatch._get_good_object_  su     :4E"" 	5 "K K K     00444r   c                    t          j        |          }| j                            | j        j        |         |d          }d                    |          }	 t          |d| j        z  d          }i }t                      	                                }t          j        j        |d<   t          |||           |}||         x}| j        |<   t          ||           S #  t!          d|           t#          j                     Y nxY wdS )z1Make a method object - Assumes in olerepr funcmapr   
rm   execr>   z'Error building OLE definition for code N)r   MakePublicAttributeNamerQ   MakeFuncMethodr   joincompilerP   globalscopywin32comclientr>   r   rS   r   r   	traceback	print_exc)	rX   namer   methodCodeList
methodCode
codeObjecttempNameSpaceglobNameSpacefns	            r   _make_method_zCDispatch._make_method_  s   2488
66N#D):q
 
 YY~..
	" !-=-OQWXXJM#IINN,,M(0(@M*%M=   D-:4-@@B$T*b$'''	"A:NNN!!!!!ts   BC %Dc                     | j                                         D ]}|                                 i | _         | j        r#| j                                         d| j        d<   | j        r
d| j        d<   d| _        dS )ztCleanup object - like a close - to force cleanup when you don't
        want to rely on Python's reference counting.Nr   rQ   )rR   values	_Release_r   ReleaserW   rQ   rT   )rX   	childConts     r   r   zCDispatch._Release_  s     .5577 	" 	"I!!!! "= 	-M!!###(,DM*%> 	.)-DM+&r   c                     	 | j         j        |         }|j        }|                      | j        j        |t          |j        d         df|z              S # t          $ r t          |          w xY w)zCall the named method as a procedure, rather than function.
        Mainly used by Word.Basic, which whinges about such things.r   r   )
rQ   r   re   rb   r   rc   ra   r,   KeyErrorr~   )rX   r   r   r   dispIds        r   _proc_zCDispatch._proc_  s    	'>*40D[F))$$vtTYq\1&E&NO    	' 	' 	' &&&	's   AA A.c           	         t          d| j                   	 t          d           | j        j        D ]}t          d|           t          d           | j        j                                        D ]#\  }}t          d| d|j        dd|           $t          d           | j        j                                        D ]#\  }}t          d| d|j        dd|           $t          d	           | j        j                                        D ]#\  }}t          d| d|j        dd|           $d
S #  t          j
                     Y d
S xY w)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   rP   rQ   r   propMapitemsre   r   
propMapPutr   r   )rX   methodpropr0   s       r   _print_details_zCDispatch._print_details_  s   $do666	"*.1 $ $dF####(OOO#~5;;== D DeB4BBelBBBBBCCCC,#~8>>@@ D DeB4BBelBBBBBCCCC,#~8>>@@ D DeB4BBelBBBBBCCCCD D	"!!!!!!s   D!D: :Ec                     	 |                      |          rt          | j         d| d           dS d S # t          $ r Y dS w xY w)Nz.__LazyMap__(z) added somethingr   r   )_LazyAddAttr_r   rP   r~   rX   rJ   s     r   __LazyMap__zCDispatch.__LazyMap__  sz    	!!$''  LLTLLL   q	 
  	 	 	11	s   /5 
AAc                 b   | j         dS d}| j         \  }}| j        }t          D ]	}	 |                    ||          \  }}|dk    r-|d d         dv r!|                    |dd          |          \  }}|t          j        k    r|                    ||d          }	n*|t          j        k    r|                    ||d          }	nd }	|	]|	d         |	d         }}
||
         }||j	        k    r|
                    |
|           n!||j        k    r|                    |
|           d}#  Y xY w|S )Nr      )SetGetr   )rV   rQ   ALL_INVOKE_TYPESBindr   DESCKIND_FUNCDESC	_AddFunc_r.   _AddVar_r  _propMapPutCheck_r   _propMapGetCheck_)rX   rJ   resr;   r<   r=   ir  trkeyr   r   s                r   r
  zCDispatch._LazyAddAttr_  sf   ?"1!_(.
 " 	 	A}}T1--1 66d2A2h.88#==abb155DAq	333))(Aq99AA)444((1a88AAAy tQqTCs8Dg00011#t<<<< 22211#t<<<C
s   C=D''D,c                     |D ]:}t          j        |                     |          |f          }|| j        j        |<   ;dS )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__rQ   r   )rX   methodNamesr   rr   s       r   _FlagAsMethodzCDispatch._FlagAsMethod  sP       	4 	4DnT%6%6t%<%<tgFFG,3DN#D))	4 	4r   c                     t          d                    || j                             | j                            d|          S )Nz>Calling GetIDsOfNames for property {} in Dispatch container {}r   )r   formatrP   r   r   r  s     r   r  zCDispatch.__AttrToID__  sH    LSSdo 	
 	
 	

 }**1d333r   c                    |dk    r	 t           j        t           j        z  }| j                            t           j        t          |dd          }n"# t           j        $ r t          d          w xY w G d d          } ||          S |	                    d          r$|
                    d          rt          |          	 t          | j        |         |           S # t          $ r Y nw xY w|| j        j        v r|                     |          S d }| j        r| j        r| j        j                            |          }|| j        j                            |          }|	 |                     |          rc|| j        j        v r|                     |          S | j        j                            |          }|| j        j                            |          }|)t+          j        |                     |          |f          }n# t           j        $ r Y nw xY w|N	 | j        |j                 }t7          d|           |S # t          t          f$ r t7          d	|z             Y nw xY w|t9          |t           j                  }t7          d
|j        z             	 | j                            |j        d|d          }nO# t           j        $ r=}|j        t@          v r)|| j        j        |<   |                     |          cY d }~S  d }~ww xY wt7          d|           | !                    |          S t          | j"         d|           )N__iter__r   ri   z+This object can not function as an iteratorc                       e Zd Zd Zd ZdS )&CDispatch.__getattr__.<locals>.Factoryc                     || _         d S r'   )r   )rX   r   s     r   rY   z/CDispatch.__getattr__.<locals>.Factory.__init__.  s     DGGGr   c                 R    dd l }|j        j                            | j                  S r   )win32com.client.utilr   r   Iteratorr   )rX   r   s     r   rg   z/CDispatch.__getattr__.<locals>.Factory.__call__1  s)    ////#?/88AAAr   N)__name__
__module____qualname__rY   rg   ri   r   r   Factoryr'  -  s7        ! ! !B B B B Br   r/  _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^   r_   r   r   r   ra   r8   r~   
startswithendswithr   rS   r   rQ   r   r   r  getr   r  r   r  r  r   rR   re   r   r2   INVOKE_PROPERTYGETrc   rp   rq   rb   rP   )	rX   rJ   r/   r   r/  retEntryretr1   rr   s	            r   __getattr__zCDispatch.__getattr__   s   :T#3i6TT}00,dGXr  & T T T$%RSSSTB B B B B B B B 74== ??3 	'DMM#$6$6 	' &&&	d1$7>>> 	 	 	D	 4>***%%d+++ > 	dm 	~-11$77H>488>>
''-- K4>#:::#'#5#5d#;#;;#'>#9#=#=d#C#C#+'+~'@'D'DT'J'JH'#(>$2C2CD2I2ID7#S#S *   D E+HO< !>DDD
n- E E E !<t!CDDDDDE ,Xy7STTK:X_L  m**8?A{ANN&   ?&8884<DN+D1--d33333333 _c222))#... 88$88999sm   AA A.C 
C+*C+%7H	 A+H	 	HH!#I #I+*I+""K L1LLLLc           	         || j         v r|| j         |<   d S t          d| j         d| d|d           | j        r|| j        j        v rQ| j        j        |         }t          |t          j                  }| j        	                    |j
        d|d|           d S || j        j        v rQ| j        j        |         }t          |t          j                  }| j        	                    |j
        d|d|           d S | j        r|                     |          r|| j        j        v rQ| j        j        |         }t          |t          j                  }| j        	                    |j
        d|d|           d S || j        j        v rQ| j        j        |         }t          |t          j                  }| j        	                    |j
        d|d|           d S 	 t          j        |                     |          |f          }n# t          j        $ r d }Y nw xY w|	 t          |t          j                  }| j        	                    |j
        d|d|           || j        j        |<   t          d                    ||j
        | j                             d S # t          j        $ r Y nw xY wt%          d| j         d| d          )	NzSetAttr called for r1  =z on DispatchContainerr   z<__setattr__ property {} (id=0x{:x}) in Dispatch container {}z
Property 'z' can not be set.)rW   r   rP   rQ   r  r2   r   INVOKE_PROPERTYPUTr   rc   re   r  r  r   r  r  r8   r#  r~   )rX   rJ   valuer0   r1   s        r   __setattr__zCDispatch.__setattr__y  s
   DM!! #(DM$FY$/YYDYY5YYY	
 	
 	
 > 	t~---.t40	8TUU$$U\1k1eLLLt~0001$70	8TUU$$U\1k1eLLL = %	%% 4>111 N248E"4y;# #K M((q+q%PPPF4>444 N5d;E"4y;# #K M((q+q%PPPFt'8'8'>'>HH&     "4y;# #K M((q+q%PPP38DN*40$V]] %,   
 F *   DS$/SSDSSSTTTs%   )G? ?HHA:J J'&J'r   )!r,  r-  r.  rY   rg   rk   rn   rs   r   r|   r   r   r   r   r   r   r   r   r]   r   r   r   rb   r   r   r   r  r  r
  r!  r  r8  r=  ri   r   r   r5   r5      s       
/ 
/ 
/ 
/Q Q Q$  
4 4 4# # #% % %     2 2 22& & && & &$ $ $O O O
) 
) 
)D D D Q Q Q&R R RA A A 	& & & &   5 5 5 5&  8  
' 
' 
'" " "&  ! ! !F4 4 4 4 4 4W: W: W:rBU BU BU BU BUr   r5   )-__doc__r   	itertoolsr   typesr   r   win32com.clientr   winerror
pywintypesr   r   r   r   r   ra   DISP_E_MEMBERNOTFOUNDDISP_E_BADPARAMCOUNTDISP_E_PARAMNOTOPTIONALDISP_E_TYPEMISMATCHE_INVALIDARGrq   r5  r;  INVOKE_PROPERTYPUTREFINVOKE_FUNCr  r   r   TypeIIDsr!   r   IID_IUnknownr   r(   r   CLSCTX_SERVERr%   r*   r2   r>   r9   rM   r5   ri   r   r   <module>rN     s   $                                     	
 "!$     #	      $Y%<=#I$:;7^  (1'>    "	; 	; 	;  $ "H H H H6  : "	
B 
B 
B 
B@U @U @U @U @U @U @U @U @U @Ur   