B Y@sdZddlmZddlmZmZddlZddlZddlm Z y ddl Z Wne k r`dZ YnXddl Z e dZddZdd d ZiZd d Zdd dZdddZGdddeZddZdS)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.errorscGs:i}x0|D](}|sq xt|D]\}}|||<qWq W|S)N)r)Zdictsoutdkvr E/opt/alt/python37/lib/python3.7/site-packages/raven/utils/__init__.py merge_dictss r csdkr it|}|kr&dSd|<t|trVtfddt|D}n0t|ttfr|fdd|D}n |}|=|S)zx Executes ``func(key_name, value)`` on all values recurisively discovering dict and list scoped values. Nz<...>c3s$|]\}}|t||fVqdS)N)varmap).0rr )contextfuncr r /szvarmap..csg|]}t|qSr )r)rf)rrnamer r 2szvarmap..)id isinstancedictrlisttuple)rvarrrobjidretr )rrrr r"s   rcCsd}tdk r.y t|jStk r,YnXt|dr@|j}n4t|drR|j}n"t|drd|j}nt|drt|j}t|r|}t |t t t fsd}|dkrdSt |t t frd tt|}t|S)N get_version __version__VERSIONversion.) pkg_resourcesget_distributionr! Exceptionhasattrrrr callablerrrrjoinmapstr) module_nameappr!r r r get_version_from_app>s.     r-c s|siSt}x<|D]4}|d|fddtdtdDqWi}x|D]}|tkry t|Wntk rwVYnXytj |}Wnt k rwVYnXyt ||}Wn0t k r}zt |d}Wdd}~XYnX|t|<nt|}|dkr qV|||<qVW|S)Nr"c3s |]}dd|VqdS)r"N)r()ridx)partsr r riszget_versions..r )setsplitupdaterangelen_VERSION_CACHE __import__ ImportErrorsysmodulesKeyErrorr-r%logger exception)Z module_listZext_module_listmZversionsr+r,r!er )r/r get_versionsbs:        r?cKsFd|fd|fd|fd|fg}|r.|d|fdddd |DS) NZsentry_timestampZ sentry_clientZsentry_versionZ sentry_keyZ sentry_secretz Sentry %sz, css|]\}}d||fVqdS)z%s=%sNr )rrr r r r rsz"get_auth_header..)appendr()protocol timestampZclientZapi_keyZ api_secretkwargsheaderr r r get_auth_headers rEc@s"eZdZdZddZdddZdS)memoizez Memoize the result of a property call. >>> class A(object): >>> @memoize >>> def func(self): >>> return 'foo' cCs"|j|_|j|_|j|_||_dS)N)__name__ __module____doc__r)selfrr r r __init__szmemoize.__init__NcCs:|dkr |St||j}}||kr2||||<||S)N)varsrGr)rJobjtypernr r r __get__s zmemoize.__get__)N)rGrH __qualname__rIrKrPr r r r rFsrFcs,tfddtd_S)z Runs a thing once and once only.c s8jr dS jrdS||}d_|SQRXdS)NT)called)argsrCrv)rlocknew_funcr r rVs zonce..new_funcF) threadingLockrrR)rr )rrUrVr onces  rY)NN)N)N)rI __future__rZraven.utils.compatrrloggingrW functoolsrr#r7r8 getLoggerr;r rr5r-r?rEobjectrFrYr r r r s&      $ '