PageRenderTime 238ms CodeModel.GetById 81ms app.highlight 15ms RepoModel.GetById 136ms app.codeStats 0ms

/apiary/tools/debug.py

https://bitbucket.org/lindenlab/apiary/
Python | 60 lines | 27 code | 9 blank | 24 comment | 1 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
26_DEBUG = False
27
28def enable_debug():
29    global _DEBUG
30    _DEBUG = True
31    debug('Debug enabled.')
32    
33def debug(tmpl, *args):
34    if _DEBUG:
35        print '[DEBUG] ' + (tmpl % args)
36
37
38def traced_func(f):
39    name = f.__name__
40    def wrapped(*a, **kw):
41        return trace_call(name, f, *a, **kw)
42    return wrapped
43    
44
45def traced_method(m):
46    def wrapped(self, *a, **kw):
47        name = self.__class__.__name__ + '.' + m.__name__
48        return trace_call(name, m, self, *a, **kw)
49    return wrapped
50
51
52def trace_call(name, f, *a, **kw):
53    debug('Call: %s%r %r', name, a, kw)
54    try:
55        r = f(*a, **kw)
56    except Exception, e:
57        debug('Raise: %s !-> %r %r', name, e, e.args)
58        raise
59    debug('Return: %s -> %r', name, r)
60    return r