ó
¢¿[Mc           @   s÷   d  Z  d d l Z d d l Z d d l m Z d d l Z d d l Z d d l m	 Z	 d d l
 Z
 d d l m Z d Z e
 j e
 j Z d „  Z d d d	 „  ƒ  YZ d
 e j j j f d „  ƒ  YZ d „  Z d „  Z e rä e Z n e Z d „  Z d S(   sÍ   dynamic dispatch objects for AX Script.

 This is an IDispatch object that a scripting host may use to
 query and invoke methods on the main script.  Not may hosts use
 this yet, so it is not well tested!
iÿÿÿÿN(   t   COMException(   t   Dispatch(   t   axscripti    c         C   s   t  |  ƒ t j t j g k S(   N(   t   typet   typest   FunctionTypet
   MethodType(   t   obj(    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyt   _is_callable   s    t   ScriptDispatchc           B   s    e  Z g  Z d  „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t   enginet   scriptNamespace(   t   selfR
   R   (    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyt   __init__   s    	c         C   sÊ  |  j  j ƒ  |  j  j ƒ  | t j @r"yÂ t |  j | ƒ } t | ƒ sW t | ƒ ‚ n  g  } xC | D]; } t	 | ƒ t
 k r’ | j t | ƒ ƒ qd | j | ƒ qd Wy  |  j  j d  | t | ƒ ƒ SWn" t k
 rç \ } }	 }
 } ‚  n XWq"t k
 r| t j @st d t j ƒ ‚ qq"Xn  | t j @r´y1 t |  j | ƒ } t | ƒ r_t | ƒ ‚ n  WnM t k
 r…t d t j ƒ ‚ n+ t k
 rš} ‚  n |  j  j ƒ  } n X| St d t j ƒ ‚ d  S(   Nt   scode(   R
   t   RegisterNewNamedItemst   ProcessNewNamedItemsConnectionst	   pythoncomt   INVOKE_FUNCt   getattrR   R   t   AttributeErrorR   t   PyIDispatchTypet   appendR   t   ApplyInScriptedSectiont   Nonet   tupleR    t   DISPATCH_PROPERTYGETt   winerrort   DISP_E_MEMBERNOTFOUNDt   HandleException(   R   t   namet   lcidt   wFlagst   argst   funct   realArgst   argt   hrt   msgt   exct   rett   instance(    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyt	   _dynamic_   s@     (   t   __name__t
   __module__t   _public_methods_R   R*   (    (    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyR	      s   	t   StrictDynamicPolicyc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   sh   t  j j j j |  | ƒ t |  j d ƒ rd x6 t |  j j ƒ D] } | |  j	 |  j
 | d ƒ <q> Wn  d  S(   NR   i    (   t   win32comt   servert   policyt   DynamicPolicyt   _wrap_t   hasattrt   _obj_t   dirR   t   _dyn_dispid_to_name_t   _getdispid_(   R   t   objectR   (    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyR3   I   s    c         C   sE   y t  |  j | ƒ SWn) t k
 r@ t d t j d d ƒ ‚ n Xd  S(   NR   t   descs   Name not found(   t   strR7   t   KeyErrorR    R   t   DISP_E_UNKNOWNNAME(   R   t   dispid(    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyt   _getmembername_O   s    c         C   sa   y t  |  j j t | ƒ ƒ } Wn# t k
 rD t d t j ƒ ‚ n Xt j	 j
 j j |  | | ƒ S(   NR   (   R   R5   R   R;   R   R    R   R   R/   R0   R1   R2   R8   (   R   R   t   fdexR"   (    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyR8   U   s
    (   R+   R,   R3   R?   R8   (    (    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyR.   H   s   		c         C   s(   t  j j j |  d t d t  j j j ƒS(   Nt	   usePolicyt   useDispatcher(   R/   R0   t   utilt   wrapR.   R1   t   DispatcherWin32trace(   R   (    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyt   _wrap_debug]   s    c         C   s   t  j j j |  d t ƒS(   NRA   (   R/   R0   RC   RD   R.   (   R   (    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyt   _wrap_nodebug_   s    c         C   s   t  t |  | ƒ ƒ S(   N(   t   _wrapR	   (   R
   t	   namespace(    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyt   MakeScriptDispatchg   s    (    (   t   __doc__R   R   t   win32com.server.exceptionR    t   win32com.server.policyR/   t   win32com.server.utilt   win32com.clientR   R   t   win32com.axscriptR   t	   debuggingt   TypeIIDst   IID_IDispatchR   R   R	   R0   R1   R2   R.   RF   RG   RH   RJ   (    (    (    sM   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\scriptdispatch.pyt   <module>   s&   	/			