One could also do: <script language="jython"> from java.io import File class _Method: def __init__(self, name): self.name = name def __call__(self, **args): t = project.createTask(self.name) for a in args.keys(): m = "set" + a[0].upper() + a[1:] getattr(t, m)(args[a]) t.execute()
class Ant: def __getattr__(self, name): return _Method(name) ant = Ant() ant.echo(message = "hello world") ant.delete(quiet = 1, dir = File("todir")) ant.mkdir(dir = File("todir")) ant.touch(file=File("fromfile")) ant.copy(file = File("fromfile"), todir=File("todir")) </script> Peter. On Friday 13 June 2003 23:12, Jonathan Simon wrote: > Yep. I have a working example that does that. The remaining problem is that > you have to call the and tasks directly and pass around the project, etc. > The eventual goal is to leverage the infrastructure build in Java for the > XML driven ANT from Jython (or another language...) > > -jonathan > > --- "Albrecht, Matt" <[EMAIL PROTECTED]> wrote: > > 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/At > >ti > > > > >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] > > ===== > Jonathan Simon > Home - 732.777.0377 <----------- New!!! > Work - 646.674.2060 > Cell - 732.718.8844 > Music - www.mp3.com/jonathan_simon > > __________________________________ > Do you Yahoo!? > Yahoo! Calendar - Free online calendar with sync to Outlook(TM). > http://calendar.yahoo.com > > --------------------------------------------------------------------- > 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]