Thank you, it helps a lot. I've made a mistake in calling callRemote. <br><br><div class="gmail_quote">On Mon, Mar 29, 2010 at 4:51 PM, Peter Westlake <span dir="ltr"><<a href="mailto:peter.westlake@pobox.com">peter.westlake@pobox.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
<br>
On Mon, 29 Mar 2010 14:54 +0300, "Vlad Shevchenko"<br>
<div class="im"><<a href="mailto:vlad.shevchenko@gmail.com">vlad.shevchenko@gmail.com</a>> wrote:<br>
> No one use AmpList?<br>
><br>
> On Sat, Mar 27, 2010 at 11:45 PM, Vlad Shevchenko<br>
> <<a href="mailto:vlad.shevchenko@gmail.com">vlad.shevchenko@gmail.com</a><br>
> > wrote:<br>
><br>
> > Hi,<br>
> > can't find any reference of how to use AmpList. What should be passed to<br>
> > callRemote? In command: arguments = Amp.List(...) or arguments = [('param',<br>
> > AmpList(...))]? Responder params?<br>
> ><br>
> > Please, advice some refs or examples.<br>
<br>
</div>Here's an example. I've missed out the other arguments for clarity. The<br>
data being passed is a Unix-style environment string. It needs to be<br>
reformatted to make it suitable for passing in an AmpList, but that's<br>
just an implementation detail. It's because the AmpList requires the<br>
dictionary keys to be declared in advance, but I want to be able to pass<br>
environment variables whose names are only known at run-time. Your code<br>
might not need to do any of that.<br>
<br>
First, the command:<br>
<br>
class RunCmd(amp.Command):<br>
arguments = [...,<br>
('env', amp.AmpList([('var', amp.String()), ('val',<br>
amp.String())])),<br>
...]<br>
<br>
<br>
Then the call:<br>
<br>
# env is something like {'PATH': '/bin:/usr/bin', 'HOME':<br>
'/home/peter'}<br>
# It needs to be converted into a form suitable for AmpList,<br>
like this:<br>
# [{'var': 'PATH', 'val': '/bin:/usr/bin'}, {'var': 'HOME',<br>
'val': '/home/peter'}]<br>
#<br>
amp_env = [{'var': var, 'val': val} for (var, val) in<br>
env.items()]<br>
d = self.protocol.callRemote(commands.RunCmd, ...,<br>
env=amp_env, ...)<br>
<br>
<br>
Then the responder:<br>
<br>
def runcmd(..., env, ..):<br>
"""Implementation of the AMP command RunCmd.<br>
...<br>
"""<br>
<br>
# The "env" argument represents the environment of a process.<br>
# Convert it from the AmpList format back to a Python<br>
dictionary.<br>
#<br>
envd = {}<br>
for var in env:<br>
envd[var['var']] = var['val']<br>
...<br>
return {...}<br>
<br>
commands.RunCmd.responder(runcmd)<br>
<br>
<br>
Peter.<br>
<br>
_______________________________________________<br>
Twisted-Python mailing list<br>
<a href="mailto:Twisted-Python@twistedmatrix.com">Twisted-Python@twistedmatrix.com</a><br>
<a href="http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python" target="_blank">http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>WBR, Vlad Shevchenko<br><br>