ó
ÐH/\c           @   s•  d  Z  d d l Z d „  Z d a d d l Z d d l m Z d d l m Z y d d l	 m
 Z
 Wn e k
 rz d Z
 n Xd Z d Z e j d	 d
 k Z e j d ƒ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z d a  a! e" a# d „  Z$ e d „  ƒ Z% e d „  ƒ Z& d S(    sc   
Taken verbatim from Jinja2.

https://github.com/mitsuhiko/jinja2/blob/master/jinja2/debug.py#L267
iÿÿÿÿNc             sg  d d l  ‰ d d l m ‰  t ˆ j d ƒ r: ˆ j }  n	 ˆ j }  d ˆ j f d „  ƒ  Y} d |  f d ˆ j | ƒ f g | _	 t t
 d	 ƒ ró d ˆ j f d
 „  ƒ  Y} d ˆ j | ƒ f d ˆ j | ƒ f d |  f d ˆ j | ƒ f g | _	 n  d | f d „  ƒ  Y‰ d ˆ j ˆ ƒ f d ˆ j | ƒ f d ˆ j f d ˆ j f g ˆ _	 ‡  ‡ ‡ f d †  } | S(   sñ   This function implements a few ugly things so that we can patch the
    traceback objects.  The function returned allows resetting `tb_next` on
    any python traceback object.  Do not attempt to use this on non cpython
    interpreters
    iÿÿÿÿN(   t   TracebackTypet   Py_InitModule4_64t	   _PyObjectc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR   6   s   t	   ob_refcntt   ob_typet
   getobjectsc           B   s   e  Z RS(    (   R   R   (    (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR   @   s   t   _ob_nextt   _ob_prevt
   _Tracebackc           B   s   e  Z RS(    (   R   R   (    (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR
   J   s   t   tb_nextt   tb_framet   tb_lastit	   tb_linenoc            så   t  |  ˆ  ƒ o' | d k p' t  | ˆ  ƒ s9 t d ƒ ‚ n  ˆ j t |  ƒ ƒ } |  j d k	 r‡ ˆ j t |  j ƒ ƒ } | j d 8_ n  | d k r« ˆ j ˆ ƒ ƒ  | _ n6 ˆ j t | ƒ ƒ } | j d 7_ ˆ j | ƒ | _ d S(   s0   Set the tb_next attribute of a traceback object.s/   tb_set_next arguments must be traceback objectsi   N(	   t
   isinstancet   Nonet	   TypeErrort   from_addresst   idR   R   t   POINTERt   pointer(   t   tbt   nextt   objt   old(   R    R
   t   ctypes(    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   tb_set_nextT   s    *(   R   t   typesR    t   hasattrt	   pythonapit   c_int64t   c_intt	   StructureR   t   _fields_t   sys(   t   _Py_ssize_tR   R   (    (   R    R
   R   s,   lib/python2.7/site-packages/gevent/_tblib.pyt   _init_ugly_crap&   s*    			(   t   CodeType(   R    (   t   tproxys   1.3.0t	   Tracebacki    i   sO   ^\s*File "(?P<co_filename>.+)", line (?P<tb_lineno>\d+)(, in (?P<co_name>.+))?$t	   _AttrDictc           B   s   e  Z d  Z e j Z RS(   (    (   R   R   t	   __slots__t   dictt   __getitem__t   __getattr__(    (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR)      s   t   __traceback_makerc           B   s   e  Z RS(    (   R   R   (    (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR.   …   s   t   TracebackParseErrorc           B   s   e  Z RS(    (   R   R   (    (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR/   ‰   s   t   Codec           B   s   e  Z d  „  Z RS(   c         C   sL   | j  |  _  | j |  _ | j |  _ | j |  _ | j |  _ | j |  _ d  S(   N(   t   co_filenamet   co_namet
   co_nlocalst   co_stacksizet   co_flagst   co_firstlineno(   t   selft   code(    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   __init__Ž   s    (   R   R   R9   (    (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR0      s   t   Framec           B   s   e  Z d  „  Z d „  Z RS(   c         C   sY   t  g  | j j ƒ  D]$ \ } } | d k r | | f ^ q ƒ |  _ t | j ƒ |  _ d  S(   Nt   __file__R   (   R;   R   (   R+   t	   f_globalst   itemsR0   t   f_code(   R7   t   framet   kt   v(    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR9   ™   s
    $c         C   s   d  S(   N(    (   R7   (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   clear¡   s    (   R   R   R9   RB   (    (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR:   ˜   s   	c           B   sS   e  Z d Z d  „  Z d „  Z d „  Z d „  Z e d „  ƒ Z	 e e
 d „ ƒ Z RS(   c         C   s¡   t  | j ƒ |  _ t | j ƒ |  _ | j } |  } t |  ƒ } x[ | d  k	 rœ t j | ƒ } t  | j ƒ | _ t | j ƒ | _ | | _ | } | j } qB Wd  S(   N(	   R:   R   t   intR   R   t   typeR   t   objectt   __new__(   R7   R   t   prev_tracebackt   clst	   traceback(    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR9   ¬   s    		c         B   sÍ  e  r e  e |  j ƒ Se s+ e d ƒ ‚ n  |  } d  } d  } xw| r¶| j j } e d | j	 d d | j j j
 d ƒ } e rß e d | j | j | j | j | j | j | j | j | j
 | j | j | j d d	 ƒ } n` e d | j | j | j | j | j | j | j | j
 j ƒ  | j j ƒ  | j | j d
 d ƒ } y | | j j i  UWnT e j ƒ  d j } | d  k r| } n  | d  k	 re | | ƒ n  | } ~ n X| j } q@ Wz | SWd  ~ ~ Xd  S(   Ns   Cannot re-create traceback !s   
i   s   raise __traceback_makert   execi    i   (    (    (    (    (   R'   R    t   _Traceback__tproxy_handlerR   t   RuntimeErrorR   R   R>   t   compileR   R1   t   PY3R&   t   co_kwonlyargcountR3   R4   R5   t   co_codet	   co_constst   co_namest   co_varnamesR2   R6   t	   co_lnotabt   encodeR<   R#   t   exc_infoR   (   R7   t   currentt   top_tbR   R>   R8   t   next_tb(    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   as_traceback½   sL    	*		c         O   s`   | d k rF | d d k r2 |  j  o1 |  j  j ƒ  St |  | d ƒ Sn t |  | ƒ | | Ž  Sd  S(   Nt   __getattribute__R-   i    R   (   R[   R-   (   R   RZ   t   getattr(   R7   t	   operationt   argst   kwargs(    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   __tproxy_handlerï   s
    c         C   sƒ   |  j  d k r d } n |  j  j ƒ  } i |  j j j d 6|  j j j d 6} i |  j j d 6| d 6} i | d 6|  j d 6| d 6S(	   s4   Convert a Traceback into a dictionary representationR1   R2   R<   R>   R   R   R   N(	   R   R   t   to_dictR   R>   R1   R2   R<   R   (   R7   R   R8   R?   (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyRa   ø   s    	

c         C   s™   | d r  |  j  | d ƒ } n d  } t d | d d d d | d d d ƒ } t d | d d d | ƒ } t d | d | d d | ƒ } |  | ƒ S(   NR   R1   R   R>   R2   R<   R   (   t	   from_dictR   R)   (   RH   t   dctR   R8   R?   R   (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyRb     s    
	
	c   	      C   s  g  } | } xˆ | j  ƒ  D]z } | j ƒ  } | rL | d k r t } q q n  t j | ƒ } | rw | j | j ƒ  ƒ q | j d ƒ r‰ q | r Pq q W| rd  } xW t	 | ƒ D]I } t
 | d t
 | d t
 d | d d d ƒ d	 t
 | ƒ ƒd
 | ƒ} q° W|  | ƒ St d | ƒ ‚ d  S(   Ns"   Traceback (most recent call last):s     R   R<   R;   R1   R   t   ?R>   R   s    Could not find any frames in %r.(   t
   splitlinest   rstript   Falset   FRAME_REt   matcht   appendt	   groupdictt
   startswithR   t   reversedR)   R/   (	   RH   t   stringt   strictt   framest   headert   linet   frame_matcht   previousR?   (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   from_string#  s:    	
	
N(   R   R   R   R   R9   RZ   RK   Ra   t   classmethodRb   t   TrueRu   (    (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyR(   ¨   s   		2			c         C   s4   t  j t ƒ } |  | _ | | _ | | _ | j ƒ  S(   N(   RE   RF   R(   R   R   R   RZ   (   R   R   R   t   ret(    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   unpickle_tracebackL  s
    			c         C   s1   t  t |  j ƒ |  j |  j o* t |  j ƒ f f S(   N(   Ry   R:   R   R   R   R(   (   R   (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   pickle_tracebackT  s    c          C   sD   y d d  l  }  Wn t k
 r/ d d  l }  n X|  j t t ƒ d  S(   Niÿÿÿÿ(   t   copy_regt   ImportErrort   copyregt   pickleR    Rz   (   R{   (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   installX  s
    c            s+   ‡  f d †  } ˆ  j  | _  ˆ  j | _ | S(   Nc            sn   t  d  k r d  Sd  } d t  j k r? t  j d } | j ƒ  n  z ˆ  |  ƒ SWd  | d  k	 ri | j ƒ  n  Xd  S(   Ns   gevent.builtins(   R#   R   t   modulest   _unlock_importst   _lock_imports(   t   at   gb(   t   f(    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   gi  s    (   R   R   (   R…   R†   (    (   R…   s,   lib/python2.7/site-packages/gevent/_tblib.pyt   _unlocked_importsh  s    c          C   sF   y d d  l  }  Wn t k
 r/ d d  l }  n X|  j a |  j a d  S(   Niÿÿÿÿ(   t   cPickleR|   R~   t   dumpst   loads(   R~   (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   _import_dump_load|  s    	c          C   sÊ   t  r
 d  St a  d d  l }  y" |  j ƒ  d k r= t ƒ  a n  Wn, t k
 rl } t j j	 d j
 | ƒ ƒ n Xy d d l m } Wn t k
 rš d  } n Xt r¸ | r¸ t d ƒ ‚ n  t ƒ  t ƒ  d  S(   Niÿÿÿÿt   CPythons*   Failed to initialize cpython support: {!r}(   R'   s(   Cannot use tblib. Runtime not supported.(   t
   _installedRw   t   platformt   python_implementationR%   R   t	   ExceptionR#   t   stderrt   writet   formatt   __pypy__R'   R|   R   R‹   R   (   RŽ   t   excR'   (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   _init‹  s"    
c         C   s   t  ƒ  t |  ƒ S(   N(   R–   R‰   (   R   (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   dump_traceback¤  s    c         C   s   t  ƒ  t |  ƒ S(   N(   R–   RŠ   (   t   s(    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   load_traceback­  s    (   R(   ('   t   __doc__R#   R%   R   R   t   reR   R&   R    R”   R'   R|   t   __version__t   __all__t   version_infoRN   RM   Rh   R+   R)   R   R.   R/   RE   R0   R:   R(   Ry   Rz   R   R‡   R‹   R‰   RŠ   Rg   R   R–   R—   R™   (    (    (    s,   lib/python2.7/site-packages/gevent/_tblib.pyt   <module>    s<   	@	
¤					

		