or even more succinctly:
        for a in args.keys():
            setattr( t, a, args[a] )
which turns your wrapper calls into:

twrapper('echo', message='hello world')
twrapper('delete', quiet=1, dir=File('todir'))
twrapper('mkdir', dir=File("todir"))
twrapper('copy', file=File("fromfile"), todir=File("todir"))

> -----Original Message-----
> From: peter reilly [mailto:[EMAIL PROTECTED]
> Sent: Friday, June 13, 2003 4:59 AM
> To: Ant Developers List
> Subject: Re: Ant scripting from Jython.
> 
> 
> jython does support named parameters, one
> can do some bizarre stuff:
> 
>   <script language="jython">
> from java.io import File
> def twrapper(taskname, **args):
>   t = project.createTask(taskname)
>   for a in args.keys():
>     exec("t.%s = %s" % (a, args[a]))
>   t.execute()
> 
> twrapper('echo', message="'hello world'")
> twrapper('delete', quiet="1", dir="File('todir')")
> twrapper('mkdir', dir='File("todir")')
> twrapper('copy', file='File("fromfile")', todir='File("todir")')
>   </script>
> 
> output:
> hello world
> Deleting directory /home/preilly/proj/learning/outofdate/todir
> Created dir: /home/preilly/proj/learning/outofdate/todir
> Copying 1 file to /home/preilly/proj/learning/outofdate/todir
> 
> Peter.
> 
> On Friday 13 June 2003 06:23, Conor MacNeill wrote:
> > Hi Duncan,
> >
> > You all might like to look at two recent threads in ant-dev 
> and ant-user
> > that are somewhat related to this topic.
> >
> > http://marc.theaimsgroup.com/?l=ant-dev&m=105516662409107&w=2
> >
> > and
> >
> > http://marc.theaimsgroup.com/?l=ant-user&m=105491111510585&w=2
> >
> > Instead of the "script driving Ant tasks" approach, 
> <scriptdef> is more
> > like a script within a task. As such, the scripts would 
> potentially be more
> > focussed on the things that need to be scripty rather than 
> doing the whole
> > build in the script. After all, IMHO,
> >
> > copyWrapper("C:\\java\\jython_ant\\src\HelloJython.java",
> > "C:\\java\\jython_ant\\temp", project)
> >
> > doesn't end up any "better" than
> >
> > <copy file="C:\java\jython_ant\src\HelloJython.java"
> >       todir="C:\java\jython_ant\temp"/>
> >
> > In fact because the attributes are named, the XML is easier 
> to understand
> > as it does not rely on implicit position-dependent 
> parameters. IT's more
> > redable which is probably counter-intuitive.
> >
> > In terms of Jonathan's original need for wrappers, there is some
> > possibility that they could be auto-generated using the Ant 
> introspection
> > facilities. One problem is that most Ant tasks support a 
> multitude of
> > attributes. As I said above, XML is quite nice there as it allows
> > attributes to be named. You only provide the attributes you 
> want and mostly
> > everything else takes sensible defaults. In the copy 
> example, think about
> > what the wrapper would look like that exposes all the 
> capabilities of
> > <copy>
> > (http://ant.apache.org/manual/CoreTasks/copy.html). I think 
> it could be
> > quite ugly unless your scripting language also supports 
> named attributes -
> > I have limited experience with Jython, so I can't say.
> >
> > BTW, I once experimented with converting build files to 
> scripts (code
> > actually). I  wrote an XSL template to turn a simple Ant 
> build into a Java
> > program. It was effectively a build compiler (part of 
> Mutant's botostrap
> > process).
> >
> > Here's the XSL
> > 
http://cvs.apache.org/viewcvs.cgi/*checkout*/ant/proposal/mutant/build/Atti
>c/bootstrap.xsl?rev=1.3&content-type=text/plain
>
> You can see the result here.
>
http://cvs.apache.org/viewcvs.cgi/ant/proposal/mutant/src/java/bootstrap/or
>g/apache/ant/builder/Attic/MutantBuilder.java?rev=1.7&content-type=text/vnd
.
>viewcvs-markup
>
> Not that useful but a bit more grist for this mill. It certainly showed me
> that it is hard to cram the expressiveness of the XML approach into method
> calls. I had to limit myself to a very narrow subset of tasks and their
> usage patterns.
>
> Conor
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to