oiu dZddlZddlmZejejZd dZGddZGddeZ Gd d Z dS) zGeneral client side utilities. This module contains utility functions, used primarily by advanced COM programmers, or other COM modules. N)_get_good_object_ct|tjtjs|tj}t ||S)zWrap an object in a VARIANT enumerator. All VT_DISPATCHs returned by the enumerator are converted to wrapper objects (which may be either a class instance, or a dynamic.Dispatch type object). ) isinstance pythoncomTypeIIDsIID_IEnumVARIANTQueryInterface EnumVARIANT)ob resultCLSIDs DC:\PYTHON\Scheduler\python\Lib\site-packages\win32com/client/util.pyWrapEnumr sG b),Y-GH I I;   y9 : : r; ' ''cDeZdZdZdZdZdZdZd dZdZ d Z d Z d S) EnumeratoraA class that provides indexed access into an Enumerator By wrapping a PyIEnum* object in this class, you can perform natural looping and indexing into the Enumerator. Looping is very efficient, but it should be noted that although random access is supported, the underlying object is still an enumerator, so this will force many reset-and-seek operations to find the requested index. c"||_d|_dS)N)_oleobj_index)selfenums r __init__zEnumerator.__init__%s  rc,||SN_Enumerator__GetIndexrrs r __getitem__zEnumerator.__getitem__)u%%%rc,||Srrrs r __call__zEnumerator.__call__,rrct|tstd||jdzkr5|j|r|j|||_|jd}t|r| |dStd)Nz2Only integer indexes are supported for enumeratorsrzlist index out of range) rint TypeErrorrrResetSkipNextlen _make_retval_ IndexError)rrresults r __GetIndexzEnumerator.__GetIndex/s%%% RPQQ Q DJN " " M   ! ! !  "" ##A&& v;; 1%%fQi00 02333rr#c|j|}g}|D]*}|||+t |Sr)rr(appendr*tuple)rcountretrealRetsrs r r(zEnumerator.NextDsZm  '' 3 3A OOD..q11 2 2 2 2Xrc4|jSr)rr&rs r r&zEnumerator.ResetKs}""$$$rcf||j|jSr) __class__rCloner r6s r r9zEnumerator.CloneNs'~~dm1133T5EFFFrc|Srrr,s r r*zEnumerator._make_retval_Qs rN)r#) __name__ __module__ __qualname____doc__rrr!rr(r&r9r*r;rr rrs  &&&&&&444*%%%GGGrrceZdZddZdZdS)r NcJ||_t||dSr)r rrrrr s r rzEnumVARIANT.__init__Vs&&D$'''''rc.t||jSN)r )rr r<s r r*zEnumVARIANT._make_retval_Zs T5EFFFFrr)r=r>r?rr*r;rr r r Us<((((GGGGGrr c"eZdZddZdZdZdS)IteratorNcv||_t|tj|_dSr)r iterr rr_iter_rCs r rzIterator.__init___s.&4..y/IJJKK rc|Srr;r6s r __iter__zIterator.__iter__cs rcRtt|j|jSrE)rnextrJr r6s r __next__zIterator.__next__fs" dk!2!2@PQQQQrr)r=r>r?rrLrOr;rr rGrG^sOLLLLRRRRRrrGr) r@rwin32com.clientrr IID_IDispatchPyIDispatchTyperrr rGr;rr rSs ------$Y%<= ( ( ( (99999999xGGGGG*GGG R R R R R R R R R Rr