
    _eW                     F   d Z ddlZddlZddlmZmZ ej                  Zd Z e	e      ej                  _        ej                  j                  ej                  _        ej                  ej                  _        ej                  ej                  _        ej                  ej                  _        ej                   xej                  _        ej                  _        er! ed      j%                  ej                          G d de      Z G d d	e      Z G d
 de      Zd Zy)zFix missing-API problems in logging module (circa Python 2.3)

Adds constants to the log objects.
Adds getException(err) to log objects to retrieve 
formatted exception or err if traceback not available.
    N)ERROR_LOGGINGFULL_LOGGINGc                 r    	 t        j                  d      S # t        $ r}t        |       cY d}~S d}~ww xY w)z&Get formatted traceback from exception
   )limitN)	traceback
format_exc	Exceptionstr)errorerrs     -/usr/lib/python3/dist-packages/OpenGL/logs.pygetExceptionr      s2    ##2// E|s    	6
166OpenGL.calltracec                   "    e Zd ZdZd Zd Zd Zy)_LoggedFunctionz.Proxy that overrides __call__ to log argumentsc                 @    || j                   d<   || j                   d<   y )N log)__dict__)selfbaser   s      r   __init__z_LoggedFunction.__init__   s     b"e    c                 b    |dk7  rt        | j                  d   ||       y || j                  d<   y Nr   )setattrr   )r   keyvalues      r   __setattr__z_LoggedFunction.__setattr__!   s,    "9T]]2&U4 %DMM"r   c                 \    |dk(  r| j                   d   S t        | j                   d   |      S r   )r   getattr)r   r   s     r   __getattr__z_LoggedFunction.__getattr__&   s.    "9==$$DMM"-s44r   N)__name__
__module____qualname____doc__r   r    r#    r   r   r   r      s    8#&
5r   r   c                   &    e Zd ZdZ ed      Zd Zy)_FullLoggedFunctionzHFully-logged function wrapper (logs all call params to OpenGL.calltrace)r   c                    g }t        | d      }|D ]  }|j                  t        |              |j                         D ]$  \  }}|j                  |dt        |             & dj	                  |      }| j
                  j                  d|j                  |       	  ||i |S # t        $ rF}| j                  j                  d|j                  | j                  j                  |              d }~ww xY w)Nr   z = ,z%s( %s )Failure on %s: %s)r"   appendrepritemsjoin
_callTraceinfor$   r
   r   warningr   )	r   argsnamedargReprfunctionargr   r   r   s	            r   __call__z_FullLoggedFunction.__call__.   s    D"& 	(CNNDI'	( 	;ICNNDK8:	;((G%j(*;*;WF	d-e-- 	HH'):):DHH<Q<QSV<X 		s    B( (	C71AC22C7N)r$   r%   r&   r'   getLogr2   r:   r(   r   r   r*   r*   +   s    R+-Jr   r*   c                       e Zd ZdZd Zy)_ErrorLoggedFunctionz On-error-logged function wrapperc                     t        | d      }	  ||i |S # t        $ rF}| j                  j                  d|j                  | j                  j                  |              d }~ww xY w)Nr   r-   )r"   r
   r   r4   r$   r   )r   r5   r6   r8   r   s        r   r:   z_ErrorLoggedFunction.__call__@   sg    D"&	d-e-- 	HH'):):DHH<Q<QSV<X 		s    	A%AA  A%N)r$   r%   r&   r'   r:   r(   r   r   r=   r=   >   s
    *r   r=   c                 b    t         st        r"t        rt        | |      }|S t        | |      }|S | S )zProduce possible log-wrapped version of function

    function -- callable object to be wrapped
    log -- the log to which to log information
    
    Uses ERROR_LOGGING and FULL_LOGGING
    to determine whether/how to wrap the function.
    )r   r   r*   r=   )r8   r   loggedFunctions      r   	logOnFailrA   K   s9     0(CAN  28SBNr   )r'   r   loggingOpenGL._configflagsr   r   	getLoggerr;   r   staticmethodLoggerr   r   DEBUGWARNINFOERRORERRsetLevelobjectr   r*   r=   rA   r(   r   r   <module>rN      s     ;			 +L: ^^)) }} ll ll ,3MM 9 W^^)
 ))7<<95v 5? &
_ 
r   