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

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):
# *args is a tuple
argslist = list(args)
for index in hide_args:
if index < len(argslist):
argslist[index] = 'X' * len( argslist[index] )
for keyname in hide_kwargs:
if keyname in kwargs:
kwargs[keyname] = 'X' * len( kwargs[keyname] )
logger.debug( "-> entering %s(%s, %s)" % (func.__name__, str(argslist), str(kwargs)) )
return 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") "secretpassword")
# -> entering machin(['truc', 'dad'], {'passwd': 'XXXXXX'})
machin("truc", "user", "secretpassword") passwd="secretpassword")
# -> entering machin(['truc', 'dad', 'XXXXXX'], {})
</code></pre>

Retour