[Python-Dev] A Testing language Construct that could also be a Distributed programming construct (original) (raw)
Saravanan Shanmugham (sarvi) sarvi at cisco.com
Sun Aug 17 12:52:22 CEST 2008
- Previous message: [Python-Dev] Where are universal newlines handled in the parser/compiler?
- Next message: [Python-Dev] A Testing language Construct that could also be a Distributed programming construct - How can this be done in Python
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I am using Python as a test language and wondering how best to represent what is shown below in TTCN-3 TTCN-3, a testing domain specific language has a construct that looks like below Its trying to send a request and define 3 alternative outcomes/events.
web_port.send("http://www.googe.com/") resonseTimer.start(300) alt { [] web_port.receive("something") { responseTimer.stop; setverdict(pass); } [] web_port.receive("somethingelse") { responseTimer.stop; setverdict(fail); } [] responseTimer.timeout { setverdict(fail); } }
I am trying to do something similar with python and find myself in a fix as to how to code it clean.
I can't do it with if ...elseif ... elseif .... else unless I wrap it in an event loop. Since otherwise it means that each condition function will be executed once. While what we are looking for is way to define potential events that can happen and a particular segment of code to executed for a specific event match
The closest thing that I can do is something like this, assuming I implement the doalternatives method to take a list of function, code pairs. It would take the list of function-name, parameters list and run it in an event loop or in separate threads as the need may be to match one of them. When one of them matches it would be expected to run the code block associated with it. Which would get me the same behaviour.
doalternatives( [web_port.receive,"something"], "responseTimer.stop; setverdict(pass);" [web_port.receive,"somethingelse"], "responseTimer.stop; setverdict(fail);" [responseTimer.timeout], "responseTimer.stop; setverdict(pass);" }
The above looks pretty ok. Except that I have to define the python code block as a string. It would be nice if there was a python language construct that would allow me to define a block of python code that can be passed as a code object into a function.
That would serve the above purpose as well as cases for distributed or parallel programming as well.
A construct like invoke doalternatives with: param [web_port.receive,"something"] param: responseTimer.stop() setverdict(pass) param [web_port.receive,"something else"] param: responseTimer.stop() setverdict(fail) param [responseTimer.timeout] param: responseTimer.stop() setverdict(pass)
I am sure we can do better than what I have proposed above. But the general idea is to be able to define and pass code segments as code objects around a function invocation and and pass the code objects as parameters into the invoked function.
What do people think? Is there any existing construct that I might be missing to achieve the above?
Sarvi -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20080817/6d5d7e07/attachment.htm>
- Previous message: [Python-Dev] Where are universal newlines handled in the parser/compiler?
- Next message: [Python-Dev] A Testing language Construct that could also be a Distributed programming construct - How can this be done in Python
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]