
[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 Z d d l	 Z	 d d l
 Z
 d Z d   Z d   Z d   Z d d d	     YZ d
 e j j j f d     YZ d   Z d S(   s   Exception and error handling.

 This contains the core exceptions that the implementations should raise
 as well as the IActiveScriptError interface code.
 
iN(   t   axscripti    c         C   s   t  t |    S(   s)   Format a string suitable for an AX Host
	(   t
   ExpandTabst   AddCR(   t   text(    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyt   FormatForAX   s    c         C   s   t  j d d |   S(   Ns   	s       (   t   ret   sub(   R   (    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyR      s    c         C   s   t  j d d |   S(   Ns   
s   
(   R   R   (   R   (    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyR      s    t   IActiveScriptErrorc           B   sV   e  Z d  Z e j g Z d d d g Z d   Z d   Z d   Z	 d   Z
 d   Z RS(	   s   An implementation of IActiveScriptError
	
	The ActiveX Scripting host calls this client whenever we report
	an exception to it.  This interface provides the exception details
	for the host to report to the user.
	t   GetSourceLineTextt   GetSourcePositiont   GetExceptionInfoc         C   s   d G| GHd S(   Ns#   IActiveScriptError QI - unknown IIDi    (    (   t   selft   iid(    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyt   _query_interface_'   s    	c         C   s   | |  _  d  S(   N(   t	   exception(   R   t   exc(    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyt   _SetExceptionInfo*   s    c         C   s
   |  j  j S(   N(   R   t   linetext(   R   (    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyR   ,   s    c         C   s3   |  j  j } | |  j  j |  j  j d |  j  j f S(   Ni   (   R   t   sourceContextt   linenot   startLineNot   colno(   R   t   ctx(    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyR	   .   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyR
   2   s    (   t   __name__t
   __module__t   __doc__R    t   IID_IActiveScriptErrort   _com_interfaces_t   _public_methods_R   R   R   R	   R
   (    (    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyR      s   				t   AXScriptExceptionc           B   sD   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   s   A class used as a COM exception.
	
	Note this has attributes which conform to the standard attributes 
	for COM exceptions, plus a few others specific to our IActiveScriptError
	object.
	c         C   s   t  j j j j |  d d d t j d d | d  k rL d |  _ d |  _	 n | j
 |  _ | j |  _	 d |  _ |  j | | | |  d  S(   Nt   descriptions   Unknown Exceptiont   scodet   sources   Python ActiveX Scripting Enginei    t    (   t   win32comt   serverR   t   COMExceptiont   __init__t   winerrort   DISP_E_EXCEPTIONt   NoneR   R   t   sourceContextCookiet   startLineNumberR   t&   _AXScriptException__BuildFromException(   R   t   sitet	   codeBlockt   exc_typet	   exc_valuet   exc_traceback(    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyR%   <   s    			c         C   sy   t  r d d  l } | j   n  y? t | t  rG |  j | | |  n |  j | | | |  Wn t j     n Xd  S(   Ni(	   t	   debuggingt	   linecachet
   clearcachet
   issubclasst   SyntaxErrort   _BuildFromSyntaxErrort   _BuildFromOthert	   tracebackt	   print_exc(   R   R,   t   typet   valuet   tbR2   (    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyt   __BuildFromExceptionO   s    
c   
      C   s   | j  } y | d } Wn d | f } n XyD | d \ } } } }	 | d  k r\ d } n  |	 d  k rq d }	 n  Wn d } d } d } d }	 n Xt |  |  _ | |  _ | d |  _ t |	 j    |  _ d  S(   Ni    s   Unknown Error (%s)i   R!   t   Unknown(	   t   argsR(   R   R   R   R   R   t   rstripR   (
   R   R,   R   R<   R;   t   msgt   filenameR   t   offsett   line(    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyR6   ]   s(    		
	c         C   s  d |  _  d |  _ t rI t j | | |  } t d j |   |  _ d  Sd d d g } d  } | } xE | r |  j	 | |  \ }	 }
 } } |	 d  d k r Pn  | j
 } qg Wg  } | rRd } | } x | rN|  j	 | |  \ }	 }
 } } | | k r Pn  |	 j d  r|
 |  _ | |  _ n  | j |	 |
 | | f  | d	 } | j
 } q Wn d  } | } d
 g } | j t j |   | t j k rd | d	 | d f } | d t j k r| d r| d d r| d d } n  | j d |  n | j t j | |   t j d k  rlxM t t |   D]6 } t | |  t k r/| | j d  | | <q/q/Wn  t d j |   |  _ d  } } } d  S(   Nii    R!   t   r_importt   r_reloadt   r_openi   s   <Scripti   s#   Traceback (most recent call last):
s	   %s (0x%x)i   s   COM Error: i   t   utf8u    (   i   (   R   R   R1   R8   t   format_exceptionR   t   joinR   R(   t   ExtractTracebackInfot   tb_nextt
   startswithR   t   appendt   extendt   format_listt	   pythoncomt	   com_errorR&   R'   t   format_exception_onlyt   syst   version_infot   xranget   lenR:   t   strt   decode(   R   R,   R.   R;   R<   t   listt
   hide_namest   deptht   tb_topRB   R   t   nameRD   t   format_itemst   tb_lookt   bitst   desct   i(    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyR7   u   sX    					
	+!c         C   s   d d  l  } | j } | j } | j } | j } | j } | j | |  }	 |	 s y | j | }
 Wn t k
 r{ d  }
 n X|
 r |
 j
 |  }	 q n  |	 r |	 j   }	 n d  }	 | | | |	 f S(   Ni(   R2   t   tb_framet	   tb_linenot   f_codet   co_filenamet   co_namet   getlinet   scriptCodeBlockst   KeyErrorR(   t	   GetLineNot   strip(   R   R<   R,   R2   t   fR   t   coRB   R^   RD   R-   (    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyRK      s$    					
c         C   s   d |  j  S(   Ns*   AXScriptException Object with description:(   R   (   R   (    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyt   __repr__   s    (	   R   R   R   R%   R+   R6   R7   RK   Rp   (    (    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyR   5   s   				E	c   	      C   s   t    } | j |  t j j j | t j  } | rP | j   } | sP d Sn  y |  j
 |  } WnL t j k
 r } d G| GHd t | j  GHd t | j  GHt j } n X| t j k r t j j j d t j  } | S| Sd S(   sM  General function to handle any exception in AX code
	
	This function creates an instance of our IActiveScriptError interface, and
	gives it to the host, along with out exception class.  The host will
	likely call back on the IActiveScriptError interface to get the source text
	and other information not normally in COM exceptions.
	s   **OnScriptError failed:s   Exception description:'%s's   Exception text:'%s'R   N(   R   R   R"   R#   t   utilt   wrapR    R   t   HandleRuntimeErrorR(   t   OnScriptErrorRQ   RR   t   reprR   R   R&   t   S_FALSEt   S_OKR   R$   t   SCRIPT_E_REPORTED(	   t   scriptingSitet   debugManagert   exceptionInstancet   instancet   gatewayt   fCallOnErrort   resultt   detailst   ret(    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyt   ProcessAXScriptException   s$    			(    (   R   RT   R8   t   win32com.axscriptR    R&   t   win32com.server.exceptionR"   t   win32com.server.utilRQ   R   R1   R   R   R   R   R#   R   R$   R   R   (    (    (    sD   K:\RCS\Python\Lib\site-packages\win32comext\axscript\client\error.pyt   <module>   s   			