???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................ó
¿œ^c           @   s©   d  Z  d d l Z d d l Z d d d „  ƒ  YZ d d d „  ƒ  YZ d d d „  ƒ  YZ d	 e f d
 „  ƒ  YZ e d d i d d 6ƒ Z d „  Z	 e
 d k r¥ e	 ƒ  n  d S(   s?   Tracing metaclass.

XXX This is very much a work in progress.

iÿÿÿÿNt   TraceMetaClassc           B   s>   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d Z	 RS(   sU  Metaclass for tracing.

    Classes defined using this metaclass have an automatic tracing
    feature -- by setting the __trace_output__ instance (or class)
    variable to a file object, trace messages about all calls are
    written to the file.  The trace formatting can be changed by
    defining a suitable __trace_call__ method.

    i    c         C   s(   | |  _  | |  _ | |  _ d |  _ d  S(   Ni   (   t   __name__t	   __bases__t   _TraceMetaClass__dictt   _TraceMetaClass__inited(   t   selft   namet   basest   dict(    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyt   __init__   s    			c         C   si   y |  j  | SWnS t k
 rd x6 |  j D]+ } y | j | ƒ SWq) t k
 rS q) Xq) Wt | ‚ n Xd  S(   N(   R   t   KeyErrorR   t   __getattr__t   AttributeError(   R   R   t   base(    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR      s    c         C   s*   |  j  s | |  j | <n | |  j | <d  S(   N(   R   t   __dict__R   (   R   R   t   value(    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyt   __setattr__(   s    	c         O   sZ   t  ƒ  } | j |  ƒ y | j d ƒ } Wn t k
 rE d „  } n Xt | | | ƒ | S(   NR	   c           S   s   d  S(   N(   t   None(    (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyt   <lambda>4   t    (   t   TracingInstancet   __meta_init__R   R   t   apply(   R   t   argst   kwt   instt   init(    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyt   __call__.   s    	N(
   R   t
   __module__t   __doc__R   R	   R   R   R   R   t   __trace_output__(    (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR    	   s   					
R   c           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s9   Helper class to represent an instance of a tracing class.c         G   s   | j  | d | ƒ d  S(   Ns   
(   t   write(   R   t   fpt   fmtR   (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyt   __trace_call__=   s    c         C   s   | |  _  d  S(   N(   t   _TracingInstance__class(   R   t   klass(    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR   @   s    c         C   sš   y |  j  j | ƒ } Wn t k
 r2 t | ‚ n Xt | ƒ t j k rL | S|  j  j d | } |  j sv | d k r† t | | |  ƒ St	 | | |  ƒ Sd  S(   Nt   .R"   (
   R#   R   R   t   typet   typest   FunctionTypeR   R   t   NotTracingWrappert   TracingWrapper(   R   R   t   rawt   fullname(    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR   C   s    (   R   R   R   R"   R   R   (    (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR   :   s   		R)   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   t   funcR   (   R   R   R-   R   (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR	   S   s    		c         O   s   t  |  j |  j f | | ƒ S(   N(   R   R-   R   (   R   R   R   (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR   W   s    (   R   R   R	   R   (    (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR)   R   s   	R*   c           B   s   e  Z d  „  Z RS(   c         O   sÈ   |  j  j |  j  j d |  j |  j  | | ƒ y# t |  j |  j  f | | ƒ } WnM t j ƒ  \ } } } |  j  j |  j  j d |  j | | ƒ | | | ‚ n' X|  j  j |  j  j d |  j | ƒ | Sd  S(   Ns#   calling %s, inst=%s, args=%s, kw=%ss'   returning from %s with exception %s: %ss   returning from %s with value %s(   R   R"   R   R   R   R-   t   syst   exc_info(   R   R   R   t   rvt   tt   vt   tb(    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR   [   s    #(   R   R   R   (    (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR*   Z   s   t   TracedR   c          C   sé   d t  f d „  ƒ  Ya d t f d „  ƒ  Ya t d ƒ }  |  GH|  j GH|  j d ƒ GH|  j d ƒ GH|  j d ƒ GH|  j d	 ƒ GH|  j d
 ƒ GH|  j GHt j GHt j GHt j GHt j GHt ƒ  } | GH| j d ƒ GH| j d ƒ GH| j GHd  S(   Nt   Cc           B   s/   e  Z d  d „ Z d „  Z d „  Z e j Z RS(   i    c         S   s   | |  _  d  S(   N(   t   x(   R   R6   (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR	   s   R   c         S   s   | |  _  d  S(   N(   R6   (   R   R6   (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyt   m1t   R   c         S   s   |  j  | S(   N(   R6   (   R   t   y(    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyt   m2u   R   (   R   R   R	   R7   R9   R.   t   stdoutR   (    (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR5   r   s   		t   Dc           B   s   e  Z d  „  Z d Z RS(   c         S   s   d | f GHt  j |  | ƒ S(   Ns   D.m2(%r)(   R5   R9   (   R   R8   (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR9   x   s    N(   R   R   R9   R   R   (    (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyR;   w   s   	iá  id   i
   i!   i   i   (   R4   R5   R;   R6   R7   R9   R	   (   R6   R8   (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyt   _testp   s(    	t   __main__(    (    (    (    (   R   R'   R.   R    R   R)   R*   R   R4   R<   R   (    (    (    s.   /usr/lib64/python2.7/Demo/metaclasses/Trace.pyt   <module>   s   1	