Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib/python3.5/site-packages/raven/utils/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib/python3.5/site-packages/raven/utils/__pycache__/__init__.cpython-35.pyc



��Y��@sdZddlmZddlmZmZddlZddlZddlm	Z	yddl
Z
Wnek
r~dZ
YnXddlZej
d�Zdd�Zddd	d
�ZiZdd�Zdd
d�Zddd�ZGdd�de�Zdd�ZdS)z�
raven.utils
~~~~~~~~~~~~~~~~~~~

:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
�)�absolute_import)�	iteritems�string_typesN)�update_wrapperzraven.errorscGsKi}x>|D]6}|sq
x$t|�D]\}}|||<q)Wq
W|S)N)r)Zdicts�out�d�k�v�r
�E/opt/alt/python35/lib/python3.5/site-packages/raven/utils/__init__.py�merge_dictss
rcs��dkri�t|�}|�kr7��d�Sd�|<t|t�r{t��fdd�t|�D��}nFt|ttf�r����fdd�|D�}n��|�}�|=|S)zx
    Executes ``func(key_name, value)`` on all values
    recurisively discovering dict and list scoped
    values.
    Nz<...>�c3s0|]&\}}|t�|�|�fVqdS)N)�varmap)�.0rr	)�context�funcr
r�	<genexpr>/szvarmap.<locals>.<genexpr>cs%g|]}t�|����qSr
)r)r�f)rr�namer
r�
<listcomp>2s	zvarmap.<locals>.<listcomp>)�id�
isinstance�dictr�list�tuple)r�varrr�objid�retr
)rrrrr"s

"rc
Csd}tdk	r;ytj|�jSWntk
r:YnXt|d�rV|j}nNt|d�rq|j}n3t|d�r�|j}nt|d�r�|j}t|�r�|�}t	|t
ttf�s�d}|dkr�dSt	|ttf�rdj
tt|��}t|�S)N�get_version�__version__�VERSION�version�.)�
pkg_resources�get_distributionr!�	Exception�hasattrrrr �callablerrrr�join�map�str)�module_name�appr!r
r
r�get_version_from_app>s.
		r-c"sZ|s
iSt�}xP|D]H}|jd��|j�fdd�tdt��d�D��qWi}x�|D]�}|tkr/yt|�Wntk
r�wsYnXytj	|}Wnt
k
r�wsYnXyt||�}Wn8tk
r!}zt
j|�d}WYdd}~XnX|t|<n
t|}|dkrHqs|||<qsW|S)Nr"c3s(|]}dj�d|��VqdS)r"N)r()r�idx)�partsr
rriszget_versions.<locals>.<genexpr>r
)�set�split�update�range�len�_VERSION_CACHE�
__import__�ImportError�sys�modules�KeyErrorr-r%�logger�	exception)Zmodule_listZext_module_list�mZversionsr+r,r!�er
)r/r�get_versionsbs:	
"





r?cKsad|fd|fd|fd|fg}|rC|jd|f�ddjdd	�|D��S)
NZsentry_timestampZ
sentry_clientZsentry_versionZ
sentry_keyZ
sentry_secretz	Sentry %sz, css%|]\}}d||fVqdS)z%s=%sNr
)rrr	r
r
rr�sz"get_auth_header.<locals>.<genexpr>)�appendr()Zprotocol�	timestampZclientZapi_keyZ
api_secret�kwargs�headerr
r
r�get_auth_header�s			rDc@s1eZdZdZdd�Zddd�ZdS)�memoizez�
    Memoize the result of a property call.

    >>> class A(object):
    >>>     @memoize
    >>>     def func(self):
    >>>         return 'foo'
    cCs1|j|_|j|_|j|_||_dS)N)�__name__�
__module__�__doc__r)�selfrr
r
r�__init__�szmemoize.__init__NcCsM|dkr|St|�|j}}||krE|j|�||<||S)N)�varsrFr)rI�obj�typer�nr
r
r�__get__�szmemoize.__get__)rFrG�__qualname__rHrJrOr
r
r
rrE�srEcs@tj�����fdd��t����d�_�S)z Runs a thing once and once only.c
sH�jr
dS��.�jr!dS�||�}d�_|SWdQRXdS)NT)�called)�argsrB�rv)r�lock�new_funcr
rrU�s			zonce.<locals>.new_funcF)�	threading�LockrrQ)rr
)rrTrUr�once�s

	rX)rH�
__future__rZraven.utils.compatrr�loggingrV�	functoolsrr#r7r8�	getLoggerr;rrr5r-r?rD�objectrErXr
r
r
r�<module>s&
$'