ó
¢¿[Mc           @   sÌ   d  Z  d d l Z d d l Z d d l Z d d l m Z d d d d „ Z d „  Z d d d „  ƒ  YZ	 d e	 f d	 „  ƒ  YZ
 e	 e j d d d
 „ Z d d d „  ƒ  YZ e d „ Z d d d „  ƒ  YZ d S(   s     General Server side utilities 
iÿÿÿÿN(   t   COMExceptionc         C   s©   | d k r t j } n  | d k rB d d l } | j j j } n  | d k sZ | d k ri | |  ƒ }  n | | |  ƒ }  t j |  ƒ }  | d k	 r¥ |  j	 | ƒ }  n  |  S(   sÐ   Wraps an object in a PyGDispatch gateway.

     Returns a client side PyI{iid} interface.

     Interface and gateway support must exist for the specified IID, as
     the QueryInterface() method is used.

  i   iÿÿÿÿNi    (
   t   Nonet   policyt   DefaultPolicyt   win32com.server.dispatchert   servert
   dispatchert   DefaultDebugDispatchert	   pythoncomt
   WrapObjectt   QueryInterface(   t   obt   iidt	   usePolicyt   useDispatchert   win32com(    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyt   wrap   s    	c         C   s1   t  j |  ƒ }  t |  d ƒ r* |  j }  n  |  j S(   sp   Unwraps an interface.

  Given an interface which wraps up a Gateway, return the object behind
  the gateway.
  R   (   R   t   UnwrapObjectt   hasattrR   t   _obj_(   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyt   unwrap!   s    t   ListEnumeratorc           B   sh   e  Z d  Z d d d d g Z d e j d „ Z d „  Z d „  Z d	 „  Z	 d
 „  Z
 d „  Z d „  Z RS(   sq  A class to expose a Python sequence as an EnumVARIANT.

     Create an instance of this class passing a sequence (list, tuple, or
     any sequence protocol supporting object) and it will automatically
     support the EnumVARIANT interface for the object.

     See also the @NewEnum@ function, which can be used to turn the
     instance into an actual COM server.
  t   Nextt   Skipt   Resett   Clonei    c         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   _list_t   indext   _iid_(   t   selft   dataR   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyt   __init__:   s    		c         C   s   | |  j  k r d Sd  S(   Ni   (   R   (   R   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyt   _query_interface_?   s    c         C   s+   |  j  |  j |  j | !} |  j | ƒ | S(   N(   R   R   R   (   R   t   countt   result(    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR   B   s    c         C   sA   |  j  | } | t |  j ƒ k r4 t |  j ƒ } n  | |  _  d  S(   N(   R   t   lenR   (   R   R!   t   end(    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR   G   s    c         C   s   d |  _  d  S(   Ni    (   R   (   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR   M   s    c         C   s   |  j  |  j |  j |  j ƒ ƒ S(   N(   t   _wrapt	   __class__R   R   (   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR   P   s    c         C   s
   t  | ƒ S(   N(   R   (   R   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR%   S   s    (   t   __name__t
   __module__t   __doc__t   _public_methods_R   t   IID_IEnumVARIANTR   R    R   R   R   R   R%   (    (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR   .   s   						t   ListEnumeratorGatewayc           B   s   e  Z d  Z d „  Z RS(   s\  A List Enumerator which wraps a sequence's items in gateways.

  If a sequence contains items (objects) that have not been wrapped for
  return through the COM layers, then a ListEnumeratorGateway can be
  used to wrap those items before returning them (from the Next() method).

  See also the @ListEnumerator@ class and the @NewEnum@ function.
  c         C   s7   |  j  |  j |  j | !} |  j | ƒ t |  j | ƒ S(   N(   R   R   R   t   mapR%   (   R   R!   R"   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR   a   s    (   R'   R(   R)   R   (    (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR,   W   s   c         C   s+   | |  d | ƒ} t  | | d | d | ƒS(   s¡  Creates a new enumerator COM server.

  This function creates a new COM Server that implements the 
  IID_IEnumVARIANT interface.

  A COM server that can enumerate the passed in sequence will be
  created, then wrapped up for return through the COM framework.
  Optionally, a custom COM server for enumeration can be passed
  (the default is @ListEnumerator@), and the specific IEnum
  interface can be specified.
  R   R   R   (   R   (   t   seqt   clsR   R   R   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyt   NewEnumg   s    t
   Collectionc           B   sn   e  Z d  Z d d d d d g Z d d d „ Z d „  Z e Z d	 „  Z d
 „  Z	 d „  Z
 d „  Z d „  Z RS(   s   A collection of VARIANT values.t   Itemt   Countt   Addt   Removet   Inserti    c         C   s:   | d  k r g  } n  | |  _ | r6 d d g |  _ n  d  S(   NR2   R3   (   R   R   R*   (   R   R   t   readOnly(    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR   €   s
    		c         G   sr   t  | ƒ d k r' t d t j ƒ ‚ n  y |  j | d SWn1 t k
 rm } t d t j d t | ƒ ƒ ‚ n Xd  S(   Ni   t   scodei    t   desc(   R#   R    t   winerrort   DISP_E_BADPARAMCOUNTR   t
   IndexErrort   DISP_E_BADINDEXt   str(   R   t   argsR9   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR2   Ž   s    c         C   s   t  |  j ƒ S(   N(   R#   R   (   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR3   š   s    c         C   s   |  j  j | ƒ d  S(   N(   R   t   append(   R   t   value(    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR4      s    c         C   sF   y |  j  | =Wn1 t k
 rA } t d t j d t | ƒ ƒ ‚ n Xd  S(   NR8   R9   (   R   R<   R    R:   R=   R>   (   R   R   R9   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR5       s    c         C   sS   y t  | ƒ } Wn) t t f k
 r; t d t j ƒ ‚ n X|  j j | | ƒ d  S(   NR8   (   t   intt
   ValueErrort	   TypeErrorR    R:   t   DISP_E_TYPEMISMATCHR   t   insert(   R   R   RA   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR6   ¦   s
    c         C   s   t  |  j ƒ S(   N(   R0   R   (   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyt   _NewEnum­   s    N(   R'   R(   R)   R*   R   R   R2   t   _value_R3   R4   R5   R6   RG   (    (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR1   {   s   	
				c         C   s(   t  j t j | |  ƒ ƒ t  j t  j ƒ S(   sŠ  Creates a new COM collection object

  This function creates a new COM Server that implements the 
  common collection protocols, including enumeration. (_NewEnum)

  A COM server that can enumerate the passed in sequence will be
  created, then wrapped up for return through the COM framework.
  Optionally, a custom COM server for enumeration can be passed
  (the default is @Collection@).
  (   R   R	   R   R   t   IID_IDispatch(   R.   R/   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyt   NewCollection°   s    t
   FileStreamc           B   sh   e  Z d  d d d d g Z e j g Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z RS(   t   Readt   WriteR   t   CopyTot   Seekc         C   s   | |  _  d  S(   N(   t   file(   R   RP   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR   Ã   s    c         C   s   |  j  j | ƒ S(   N(   RP   t   read(   R   t   amount(    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyRL   Æ   s    c         C   s   |  j  j | ƒ t | ƒ S(   N(   RP   t   writeR#   (   R   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyRM   É   s    c         C   s   |  j  |  j |  j ƒ ƒ S(   N(   R%   R&   RP   (   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR   Í   s    c         C   s5   |  j  j | ƒ } t | ƒ } | j | ƒ | | f S(   N(   RP   RQ   R#   RM   (   R   t   destt   cbR   t   cbread(    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyRN   Ð   s    c         C   s    |  j  j | | ƒ |  j  j ƒ  S(   N(   RP   t   seekt   tell(   R   t   offsett   origin(    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyRO   Ö   s    c         C   s
   t  | ƒ S(   N(   R   (   R   R   (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyR%   Û   s    (   R'   R(   R*   R   t   IID_IStreamt   _com_interfaces_R   RL   RM   R   RN   RO   R%   (    (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyRK   ¿   s   						(    (    (    (   R)   R   R   R:   t	   exceptionR    R   R   R   R   R,   R+   R0   R1   RJ   RK   (    (    (    s7   K:\RCS\Python\Lib\site-packages\win32com\server\util.pyt   <module>   s   	)5