ó
¢¿[Mc           @   s  d  Z  d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l m	 Z	 d d l
 Z
 d d d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ y d d l Z e Z Wn e k
 r e Z n Xd S(   sN   Dispatcher

Please see policy.py for a discussion on dispatchers and policies
iÿÿÿÿN(   t   exc_info(   t   IsCOMServerException(   t   IIDToInterfaceNamet   DispatcherBasec           B   s§   e  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 „  Z d „  Z RS(   s   The base class for all Dispatchers.  

      This dispatcher supports wrapping all operations in exception handlers, 
      and all the necessary delegation to the policy.

      This base class supports the printing of "unexpected" exceptions.  Note, however,
      that exactly where the output of print goes may not be useful!  A derived class may
      provide additional semantics for this.
  c         C   s(   | | ƒ |  _  t t d d  ƒ |  _ d  S(   Nt   logger(   t   policyt   getattrt   win32comt   NoneR   (   t   selft   policyClasst   object(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyt   __init__   s    c         C   s<   y' |  j  j | | ƒ t j |  | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _CreateInstance_t	   pythoncomt
   WrapObjectt   _HandleException_(   R	   t   clsidt   reqIID(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR       s
    c         C   s)   y |  j  j | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _QueryInterface_R   (   R	   t   iid(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   '   s    c         C   s2   y |  j  j | | | | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _Invoke_R   (   R	   t   dispidt   lcidt   wFlagst   args(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   -   s    c         C   s,   y |  j  j | | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _GetIDsOfNames_R   (   R	   t   namesR   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   3   s    c         C   s,   y |  j  j | | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _GetTypeInfo_R   (   R	   t   indexR   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   9   s    c         C   s&   y |  j  j ƒ  SWn |  j ƒ  SXd  S(   N(   R   t   _GetTypeInfoCount_R   (   R	   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   ?   s    c         C   s,   y |  j  j | | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _GetDispID_R   (   R	   t   namet   fdex(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   E   s    c         C   s8   y# |  j  j | | | | | | ƒ SWn |  j ƒ  SXd  S(   N(   R   t
   _InvokeEx_R   (   R	   R   R   R   R   t   kwargst   serviceProvider(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR"   K   s    #c         C   s,   y |  j  j | | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _DeleteMemberByName_R   (   R	   R    R!   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR%   Q   s    c         C   s)   y |  j  j | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _DeleteMemberByDispID_R   (   R	   t   id(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR&   W   s    c         C   s,   y |  j  j | | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _GetMemberProperties_R   (   R	   R'   R!   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR(   ]   s    c         C   s)   y |  j  j | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _GetMemberName_R   (   R	   R   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR)   c   s    c         C   s,   y |  j  j | | ƒ SWn |  j ƒ  SXd  S(   N(   R   t   _GetNextDispID_R   (   R	   R!   t   flags(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR*   i   s    c         C   s&   y |  j  j ƒ  SWn |  j ƒ  SXd  S(   N(   R   t   _GetNameSpaceParent_R   (   R	   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR,   o   s    c         C   s?   t  ƒ  s8 |  j d k	 r+ |  j j d ƒ q8 t j ƒ  n  ‚  d S(   sb   Called whenever an exception is raised.
 
       Default behaviour is to print the exception.
    s   pythoncom server errorN(   R   R   R   t	   exceptiont	   tracebackt	   print_exc(   R	   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   u   s
    	c         G   s`   |  j  d  k	 r: d j t t | ƒ ƒ } |  j  j | ƒ n" x | d  D]
 } | GqE W| d GHd  S(   Nt    iÿÿÿÿ(   R   R   t   joint   mapt   strt   debug(   R	   R   t   recordt   arg(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyt   _trace_ƒ   s    (   t   __name__t
   __module__t   __doc__R   R   R   R   R   R   R   R   R"   R%   R&   R(   R)   R*   R,   R   R7   (    (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR      s$   																		t   DispatcherTracec           B   sƒ   e  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 RS(   sJ   A dispatcher, which causes a 'print' line for each COM function called.
  c         C   sK   t  j |  | ƒ } | sG |  j d t |  j j ƒ t | ƒ | f ƒ n  | S(   Ns3   in %s._QueryInterface_ with unsupported IID %s (%s)(   R   R   R7   t   reprR   t   _obj_R   (   R	   R   t   rc(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR      s    /c         C   s*   |  j  d | | f ƒ t j |  | | ƒ S(   Ns&   in _GetIDsOfNames_ with '%s' and '%d'
(   R7   R   R   (   R	   R   R   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   •   s    c         C   s*   |  j  d | | f ƒ t j |  | | ƒ S(   Ns(   in _GetTypeInfo_ with index=%d, lcid=%d
(   R7   R   R   (   R	   R   R   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   ™   s    c         C   s   |  j  d ƒ t j |  ƒ S(   Ns   in _GetTypeInfoCount_
(   R7   R   R   (   R	   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR      s    c         C   s2   |  j  d | | | | ƒ t j |  | | | | ƒ S(   Ns   in _Invoke_ with(   R7   R   R   (   R	   R   R   R   R   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   ¡   s    c         C   s&   |  j  d | | ƒ t j |  | | ƒ S(   Ns   in _GetDispID_ with(   R7   R   R   (   R	   R    R!   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   ¥   s    c         C   sH   |  j  d |  j j | | | | | f ƒ t j |  | | | | | | ƒ S(   Ns    in %r._InvokeEx_-%s%r [%x,%s,%r](   R7   R   R=   R   R"   (   R	   R   R   R   R   R#   R$   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR"   ©   s    )c         C   s&   |  j  d | | ƒ t j |  | | ƒ S(   Ns   in _DeleteMemberByName_ with(   R7   R   R%   (   R	   R    R!   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR%   ­   s    c         C   s    |  j  d | ƒ t j |  | ƒ S(   Ns   in _DeleteMemberByDispID_ with(   R7   R   R&   (   R	   R'   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR&   ±   s    c         C   s&   |  j  d | | ƒ t j |  | | ƒ S(   Ns   in _GetMemberProperties_ with(   R7   R   R(   (   R	   R'   R!   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR(   µ   s    c         C   s    |  j  d | ƒ t j |  | ƒ S(   Ns   in _GetMemberName_ with(   R7   R   R)   (   R	   R   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR)   ¹   s    c         C   s&   |  j  d | | ƒ t j |  | | ƒ S(   Ns   in _GetNextDispID_ with(   R7   R   R*   (   R	   R!   R+   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR*   ½   s    c         C   s   |  j  d ƒ t j |  ƒ S(   Ns   in _GetNameSpaceParent_(   R7   R   R,   (   R	   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR,   Á   s    (   R8   R9   R:   R   R   R   R   R   R   R"   R%   R&   R(   R)   R*   R,   (    (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR;   Œ   s   												t   DispatcherWin32tracec           B   s   e  Z d  Z d „  Z RS(   sT   A tracing dispatcher that sends its output to the win32trace remote collector.
  
  c         C   sL   t  j |  | | ƒ |  j d  k r1 d d  l } n  |  j d t | ƒ ƒ d  S(   Niÿÿÿÿs5   Object with win32trace dispatcher created (object=%s)(   R;   R   R   R   t   win32traceutilR7   R<   (   R	   R
   R   R@   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   Ê   s    (   R8   R9   R:   R   (    (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR?   Æ   s   t   DispatcherOutputDebugStringc           B   s   e  Z d  Z d „  Z RS(   sN   A tracing dispatcher that sends its output to win32api.OutputDebugString
  
  c         G   sK   x) | d  D] } t  j t | ƒ d ƒ q Wt  j t | d ƒ d ƒ d  S(   NiÿÿÿÿR0   s   
(   t   win32apit   OutputDebugStringR3   (   R	   R   R6   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR7   Ö   s    (   R8   R9   R:   R7   (    (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyRA   Ò   s   t   DispatcherWin32dbgc           B   s    e  Z d  Z d „  Z d „  Z RS(   s°   A source-level debugger dispatcher

  A dispatcher which invokes the debugger as an object is instantiated, or 
  when an unexpected exception occurs.

  Requires Pythonwin.
  c         C   s3   t  j j ƒ  d GHd GHd GHt j |  | | ƒ d  S(   Ns0   The DispatcherWin32dbg dispatcher is deprecated!s(   Please let me know if this is a problem.s:   Uncomment the relevant lines in dispatcher.py to re-enable(   t   pywint   debuggert   brkR   R   (   R	   R
   t   ob(    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   ä   s
    c         C   sª   t  ƒ  \ } } } d } y | | ƒ ‚ Wn> t k
 r\ t j j ƒ  j t j j j ƒ } n d } n X| r  y t j j | | | ƒ Wq  t	 j
 ƒ  q  Xn  ~ ‚  d S(   s,    Invoke the debugger post mortem capability i    i   N(   R    t	   ExceptionRE   RF   t   GetDebuggert
   get_optiont   dbgcont   OPT_STOP_EXCEPTIONSt   post_mortemR.   R/   (   R	   t   typt   valt   tbR4   (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyR   ò   s    $
(   R8   R9   R:   R   R   (    (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyRD   Ü   s   	(    (   R:   R   R.   RB   t   sysR    t   win32com.server.exceptionR   t   win32com.utilR   R   R   R;   R?   RA   RD   t
   win32tracet   DefaultDebugDispatchert   ImportError(    (    (    s=   K:\RCS\Python\Lib\site-packages\win32com\server\dispatcher.pyt   <module>   s   $:
.
