PageRenderTime 14ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/apiary/tools/debug.py

https://bitbucket.org/lindenlab/apiary/
Python | 60 lines | 27 code | 9 blank | 24 comment | 3 complexity | 78affea31f8e850aaa55b50eca5c1d04 MD5 | raw file
  1. #
  2. # $LicenseInfo:firstyear=2010&license=mit$
  3. #
  4. # Copyright (c) 2010, Linden Research, Inc.
  5. #
  6. # Permission is hereby granted, free of charge, to any person obtaining a copy
  7. # of this software and associated documentation files (the "Software"), to deal
  8. # in the Software without restriction, including without limitation the rights
  9. # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10. # copies of the Software, and to permit persons to whom the Software is
  11. # furnished to do so, subject to the following conditions:
  12. #
  13. # The above copyright notice and this permission notice shall be included in
  14. # all copies or substantial portions of the Software.
  15. #
  16. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19. # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20. # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21. # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22. # THE SOFTWARE.
  23. # $/LicenseInfo$
  24. #
  25. _DEBUG = False
  26. def enable_debug():
  27. global _DEBUG
  28. _DEBUG = True
  29. debug('Debug enabled.')
  30. def debug(tmpl, *args):
  31. if _DEBUG:
  32. print '[DEBUG] ' + (tmpl % args)
  33. def traced_func(f):
  34. name = f.__name__
  35. def wrapped(*a, **kw):
  36. return trace_call(name, f, *a, **kw)
  37. return wrapped
  38. def traced_method(m):
  39. def wrapped(self, *a, **kw):
  40. name = self.__class__.__name__ + '.' + m.__name__
  41. return trace_call(name, m, self, *a, **kw)
  42. return wrapped
  43. def trace_call(name, f, *a, **kw):
  44. debug('Call: %s%r %r', name, a, kw)
  45. try:
  46. r = f(*a, **kw)
  47. except Exception, e:
  48. debug('Raise: %s !-> %r %r', name, e, e.args)
  49. raise
  50. debug('Return: %s -> %r', name, r)
  51. return r