[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r9761 - trunk/gnue-common/src/base
From: |
reinhard |
Subject: |
[gnue] r9761 - trunk/gnue-common/src/base |
Date: |
Tue, 17 Jul 2007 03:50:20 -0500 (CDT) |
Author: reinhard
Date: 2007-07-17 03:50:19 -0500 (Tue, 17 Jul 2007)
New Revision: 9761
Modified:
trunk/gnue-common/src/base/log.py
Log:
Improved output of function logging.
issue123 in-progress
Modified: trunk/gnue-common/src/base/log.py
===================================================================
--- trunk/gnue-common/src/base/log.py 2007-07-16 21:48:40 UTC (rev 9760)
+++ trunk/gnue-common/src/base/log.py 2007-07-17 08:50:19 UTC (rev 9761)
@@ -40,6 +40,7 @@
'deprecated_n', 'error_n', 'critical_n', 'exception_n']
# TODO:
+# - allow for logger name to be passed to logged_f
# - function to declare function as deprecated, maybe as decorator?
# - Exception hook
# - allow for __gnue_logger__ module global variable to use as a logger name
@@ -68,13 +69,13 @@
:
myfunction=logged_f(myfunction)
"""
- def new_f(*args, **kwargs):
+ def __new_f(*args, **kwargs):
name = func.func_globals['__name__']
__enter(name, func)
result = func(*args, **kwargs)
__leave(name, func, result)
return result
- return new_f
+ return __new_f
# -----------------------------------------------------------------------------
@@ -82,19 +83,38 @@
# Get the caller's frame
frame = inspect.currentframe().f_back
- while not frame.f_code.co_name == 'new_f':
+ while not frame.f_code.co_name == '__new_f':
frame = frame.f_back
try:
fname = __func_name(func, frame)
+ # Note that the frame contains the __new_f function call, not the
+ # actual function call. So there are only 2 parameters, *args and
+ # **kwargs. We match them with the parameter list of the actual
+ # function.
args = frame.f_locals['args']
- kwargs = frame.f_locals['kwargs']
+ kwargs = frame.f_locals['kwargs'].copy()
params = []
- # Arguments
- params.extend([repr(item) for item in args])
- # Keyword arguments
+
+ # Fixed arguments.
+ code = func.func_code
+ for (k, v) in zip(code.co_varnames[:code.co_argcount], args):
+ params.append("%s=%r" % (k, v))
+
+ # Variable arguments.
+ params.extend([repr(item) for item in args[code.co_argcount:]])
+
+ # Variable keyword arguments.
+ # Try to sort keyword arguments according to function definition.
+ for k in code.co_varnames[:code.co_argcount]:
+ if kwargs.has_key(k):
+ params.append("%s=%r" % (k, kwargs[k]))
+ del kwargs[k]
+
+ # List the keyword arguments not given in the function definition at
+ # the very end.
params.extend(["%s=%r" % (k, v) for (k, v) in kwargs.items()])
msg = "Calling function %s(%s)" % (fname, ", ".join(params))
@@ -112,7 +132,7 @@
# Get the caller's frame
frame = inspect.currentframe().f_back
- while not frame.f_code.co_name == 'new_f':
+ while not frame.f_code.co_name == '__new_f':
frame = frame.f_back
try:
@@ -133,7 +153,7 @@
# inspect the 'self' parameter.
fname = func.__name__
code = func.func_code
- if code.co_argcount > 0 and code.co_names[0] == 'self':
+ if code.co_argcount > 0 and code.co_varnames[0] == 'self':
klass = frame.f_locals['args'][0].__class__
if isinstance(klass, str):
# Old stle class
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r9761 - trunk/gnue-common/src/base,
reinhard <=