Carroll, Barry wrote:
> Greetings:
> 
> Andreas and Kent helped me solve my problem.  We are writing a keyword
> driven framework for embedded SW testing.  The framework supports scores
> of keywords, built-in and user-defined.  We are still writing the
> framework, so none of the functions for manipulating the target device
> has been written, although the keywords are defined.  As a result, he
> framework's output log is full of "keyword not found" errors, which mask
> real errors in framework operation.  
> 
> To get rid of these 'pseudo errors' I wanted a stub handler that would
> output an information message, with the name of the function and its
> arguments.  Using the sys._getframe method and the inspect.getargvalues
> methods, I was able to write a single routine that will handle any
> function signature.  Here is the result:

You could also do this very simply and cleanly with a decorator, 
assuming Python >= 2.4. This example is pretty much what you want:
http://wiki.python.org/moin/PythonDecoratorLibrary#head-d4ce77c6d6e75aad25baf982f6fec0ff4b3653f4

In your approach, you can call _getframe() in handlestub, see for example
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66062

Kent

> 
> A sample keyword triggered function:
> ##########
> import sys
> from actioncommon import handlestub
> 
> def doaction_dbopen(ctrl, proc, schemafile, configfile,
> dataset="default"):
>     '''A, Config, DB, Open, schemafile, configfile, dataset="default"
>     
>     Open the testbench data base. 
>     Where:
>         schemafile (str) - the xml schema file for the product to be
> tested; 
>         configfile (str) - the configuration file for the product to be 
>                            tested; 
>         dataset    (str) - optional configuration data set to activate.
> 
>                            defaults to "default"
>     Example:
>         A, Config, DB, Open, "master.xml", "test.tex", "current"
>     '''
>     # TODO: replace stub handler with action logic.
>     handlestub(ctrl, proc, sys._getframe())
>     return True
> ##########
> 
> The stub handler:
> ##########
> from inspect import getargvalues
> 
> def handlestub(ctrl, proc, thestubframe):
>     """Identifies actions that are defined but not yet implemented."""
>     
>     themsg = "Execuiting %s (implementation pending) with arguments: " %
> \
>              thestubframe.f_code.co_name
>     (theargnames, trash1, trash2,
> thelocalsdict)=getargvalues(thestubframe)
>     # The first two arguments are internal to the application: do not 
>       display.
>     if len(theargnames) <= 2:
>         themsg += "None"
>     else:
>         for theargname in theargnames[2:]:
>             themsg += "%s=%s  " % (theargname,
> thelocalsdict[theargname])    ctrl.log.logaction(ctrl.log.INFO, themsg)
> ##########
> 
> The resulting log output:
> ##########
> INFO     Execuiting doaction_dbopen (implementation pending) with
> arguments: schemafile=USBIBM.XML  configfile=USBIBM.TEX
> dataset=usbimbstart
> ##########
> 
> Thanks to Andreas and Kent for their help
>  
> Regards,
>  
> Barry
> [EMAIL PROTECTED]
> 541-302-1107
> ________________________
> We who cut mere stones must always be envisioning cathedrals.
> 
> -Quarry worker's creed
> 
> 
>> -----Original Message-----
>> From: Kent Johnson [mailto:[EMAIL PROTECTED]
>> Sent: Wednesday, December 13, 2006 2:55 AM
>> To: Carroll, Barry
>> Cc: tutor@python.org
>> Subject: Re: [Tutor] Accessing the name of a Function
>>
>> Carroll, Barry wrote:
>>> Andreas:
>>>
>>> You're right, that is kind of messy and somewhat limited.  In the
>>> present case, however, it is the function's defined name that I
> want, so
>>> this would work okay.
>>>
>>> I'm guessing that there is a way to determine the number and names
> of
>>> the arguments to the function as well.  I'll go look at the sys
> module
>>> and see what I can find.
>> Look at the inspect module, specifically getargspec() and
> getargvalues().
>> Kent
>>
> 
> 
> 


_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to