σ ΏφYc@@sϋdZddlmZddlmZmZddlZddlZddlm Z yddl Z Wne k r}dZ nXddl Z ejdƒZd„Zddd„ZiZd „Zdd „Zdd „Zd efd „ƒYZd„ZdS(s› raven.utils ~~~~~~~~~~~~~~~~~~~ :copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details. :license: BSD, see LICENSE for more details. i(tabsolute_import(t iteritemst string_typesN(tupdate_wrappers raven.errorscG@sNi}xA|D]9}|sq nx$t|ƒD]\}}|||ic3@s0|]&\}}|tˆ|ˆ|ƒfVqdS(N(tvarmap(t.0RR(tcontexttfunc(sE/opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pys /sN(tNonetidt isinstancetdictRtlistttupleR (R tvarR tnametobjidtrettf((R R sE/opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyR "s      +cC@s,d}tdk r=ytj|ƒjSWq=tk r9q=Xnt|dƒrX|j}nQt|dƒrs|j}n6t|dƒrŽ|j}nt|dƒr©|j}nt |ƒrΑ|ƒ}nt |t t t fƒsβd}n|dkrςdSt |t t fƒr"djtt|ƒƒ}nt|ƒS(Nt get_versiont __version__tVERSIONtversiont.(Rt pkg_resourcestget_distributionRt ExceptionthasattrRRRtcallableRRRRtjointmaptstr(t module_nametappR((sE/opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pytget_version_from_app>s.          c@sF|s iStƒ}xM|D]E}|jdƒ‰|j‡fd†tdtˆƒdƒDƒƒqWi}xΦ|D]Ξ}|tkryt|ƒWntk r¦qpnXytj |}Wnt k rΞqpnXyt ||ƒ}Wn&t k r }t j|ƒd}nX|t|isi(tsettsplittupdatetrangetlent_VERSION_CACHEt __import__t ImportErrortsystmodulestKeyErrorR(R tloggert exceptionR(t module_listtext_module_listtmtversionsR&R'Rte((R*sE/opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyt get_versionsbs:  "         cK@sad|fd|fd|fd|fg}|rF|jd|fƒnddjd„|DƒƒS( Ntsentry_timestampt sentry_clienttsentry_versiont sentry_keyt sentry_secrets Sentry %ss, cs@s%|]\}}d||fVqdS(s%s=%sN((R RR((sE/opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pys “s(tappendR#(tprotocolt timestamptclienttapi_keyt api_secrettkwargstheader((sE/opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pytget_auth_headerˆs   tmemoizecB@s#eZdZd„Zdd„ZRS(s˜ Memoize the result of a property call. >>> class A(object): >>> @memoize >>> def func(self): >>> return 'foo' cC@s1|j|_|j|_|j|_||_dS(N(t__name__t __module__t__doc__R (tselfR ((sE/opt/alt/python27/lib/python2.7/site-packages/raven/utils/__init__.pyt__init__ s   cC@sP|dkr|St|ƒ|j}}||krH|j|ƒ||s&       $ '