???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................σ
ΏφYc           @@  sϋ   d  Z  d d l m Z d d l m Z m Z d d l Z d d l Z d d l m	 Z	 y d d l
 Z
 Wn e k
 r} d Z
 n Xd d l Z e j d  Z d   Z d d d  Z i  Z d	   Z d d
  Z d d  Z d e f d     YZ d   Z d S(   s   
raven.utils
~~~~~~~~~~~~~~~~~~~

:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
i    (   t   absolute_import(   t	   iteritemst   string_typesN(   t   update_wrappers   raven.errorsc          G@  sN   i  } xA |  D]9 } | s q n  x$ t  |  D] \ } } | | | <q, Wq W| S(   N(   R   (   t   dictst   outt   dt   kt   v(    (    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyt   merge_dicts   s    c         @  sΥ     d k r i    n  t |  } |   k r:  | d  Sd   | <t | t  r{ t    f d   t |  D  } nO t | t t f  r» g  | D] } t  |   |  ^ q } n  | |  }   | =| S(   sx   
    Executes ``func(key_name, value)`` on all values
    recurisively discovering dict and list scoped
    values.
    s   <...>i   c         3@  s0   |  ]& \ } } | t   |   |  f Vq d  S(   N(   t   varmap(   t   .0R   R   (   t   contextt   func(    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pys	   <genexpr>/   s   N(   t   Nonet   idt
   isinstancet   dictR   t   listt   tupleR
   (   R   t   varR   t   namet   objidt   rett   f(    (   R   R   sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyR
   "   s    	
+c         C@  s,  d  } t d  k	 r= y t j |   j SWq= t k
 r9 q= Xn  t | d  rX | j } nQ t | d  rs | j } n6 t | d  r | j } n t | d  r© | j } n  t	 |  rΑ |   } n  t
 | t t t f  sβ d  } n  | d  k rς d  St
 | t t f  r"d j t t |   } n  t |  S(   Nt   get_versiont   __version__t   VERSIONt   versiont   .(   R   t   pkg_resourcest   get_distributionR   t	   Exceptiont   hasattrR   R   R   t   callableR   R   R   R   t   joint   mapt   str(   t   module_namet   appR   (    (    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyt   get_version_from_app>   s.    	c         @  sF  |  s
 i  St    } xM |  D]E } | j d    | j   f d   t d t    d  D  q Wi  } xΦ | D]Ξ } | t k ry t |  Wn t k
 r¦ qp n Xy t j	 | } Wn t
 k
 rΞ qp n Xy t | |  } Wn& t k
 r
} t j |  d  } n X| t | <n
 t | } | d  k r4qp n  | | | <qp W| S(   NR   c         3@  s"   |  ] } d  j    |   Vq d S(   R   N(   R#   (   R   t   idx(   t   parts(    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pys	   <genexpr>i   s   i   (   t   sett   splitt   updatet   ranget   lent   _VERSION_CACHEt
   __import__t   ImportErrort   syst   modulest   KeyErrorR(   R    t   loggert	   exceptionR   (   t   module_listt   ext_module_listt   mt   versionsR&   R'   R   t   e(    (   R*   sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyt   get_versionsb   s:    	"

c         K@  sa   d | f d | f d |  f d | f g } | rF | j  d | f  n  d d j d   | D  S(	   Nt   sentry_timestampt   sentry_clientt   sentry_versiont
   sentry_keyt   sentry_secrets	   Sentry %ss   , c         s@  s%   |  ] \ } } d  | | f Vq d S(   s   %s=%sN(    (   R   R   R   (    (    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pys	   <genexpr>   s    (   t   appendR#   (   t   protocolt	   timestampt   clientt   api_keyt
   api_secrett   kwargst   header(    (    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyt   get_auth_header   s    			t   memoizec           B@  s#   e  Z d  Z d   Z d d  Z RS(   s   
    Memoize the result of a property call.

    >>> class A(object):
    >>>     @memoize
    >>>     def func(self):
    >>>         return 'foo'
    c         C@  s1   | j  |  _  | j |  _ | j |  _ | |  _ d  S(   N(   t   __name__t
   __module__t   __doc__R   (   t   selfR   (    (    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyt   __init__    s    c         C@  sP   | d  k r |  St |  |  j } } | | k rH |  j |  | | <n  | | S(   N(   R   t   varsRM   R   (   RP   t   objt   typeR   t   n(    (    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyt   __get__¦   s    N(   RM   RN   RO   RQ   R   RV   (    (    (    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyRL      s   	c         @  s=   t  j        f d    t      t  _  S(   s    Runs a thing once and once only.c          @  sG    j  r d  S .  j  r! d  S  |  |   } t  _  | SWd  QXd  S(   N(   t   calledt   True(   t   argsRI   t   rv(   R   t   lockt   new_func(    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyR\   ³   s    			(   t	   threadingt   LockR   t   FalseRW   (   R   (    (   R   R[   R\   sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyt   once―   s
    
	(   RO   t
   __future__R    t   raven.utils.compatR   R   t   loggingR]   t	   functoolsR   R   R2   R   R3   t	   getLoggerR6   R	   R
   R0   R(   R=   RK   t   objectRL   R`   (    (    (    sE   /opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyt   <module>   s&   
		$'