Projet

Général

Profil

Evolution #4324

Mis à jour par Daniel Dehennin il y a plus de 11 ans

Voici une version modifié du décorateur @trace@ d’arv (arv:source:arv/lib/util.py?rev=e5bad5b#L16)

<pre><code class="python">
#!/usr/bin/python

import logging

def trace(hide_args=[], hide_kwargs=[]):
"""This is a decorator which can be used to trace functions calls

It can replace some positional and/or keyword arguments with some
'X' if they are present.

@param hide_args: List of positional argument indexes to replace if present
@type hide_args: C{list}
@param hide_kwargs: List of keyword argument names to replace if present
@type hide_kwargs: C{list}
"""
def tracedec(func):
def newFunc(*args, **kwargs):
# Do nothing if debug *args is not enabled a tuple
if logger.isEnabledFor(logging.DEBUG):
# Copy arguments
args_list
argslist = list(args)
args_dict = kwargs.copy()

for index in hide_args:

if index < len(args_list):
args_list[index]
len(argslist):
argslist[index]
= 'X' * len( args_list[index] argslist[index] )

for keyname in hide_kwargs:

if keyname in args_dict:
args_dict[keyname]
kwargs:
kwargs[keyname]
= 'X' * len( args_dict[keyname] kwargs[keyname] )

logger.debug( "-> entering %s(%s, %s)" % (func.__name__, str(args_list), str(args_dict)) str(argslist), str(kwargs)) )
return func(*args, func(argslist, **kwargs)
newFunc.__name__ = func.__name__
newFunc.__doc__ = func.__doc__
newFunc.__dict__.update(func.__dict__)
return newFunc
return tracedec

@trace(hide_args=[2], hide_kwargs=['passwd'])
def machin(msg, name=None, passwd=None):
print "Bidule: %s" % msg

machin("truc", "user", passwd="secretpassword")
# -> entering machin(['truc', 'dad'], {'passwd': 'XXXXXX'})
machin("truc", "user", "secretpassword")
# -> entering machin(['truc', 'dad', 'XXXXXX'], {})
</code></pre>

Retour