Eduardo Schettino wrote:

 I find the doit syntax a bit cumbersome, especially as you can avoid
 'args' by just returning a lamda in 'action'.


My idea was to: do *not* add any new syntax (to avoid being
cumbersome). It is just python, you dont have to import or subclass

Yeah, decorators get around this.

I though about using decorators in the beginning... but returning a
dictionary looked easier to implement and more flexible. one important
feature is how easy to define a group of task with the same action.
Take a look at the example below on running pychecker in all python
files from a folder. I couldnt figure out an easy way of doing it with
decorators.

import glob;
pyFiles = glob.glob('*.py')

def task_checker():
    for f in pyFiles:
        yield {'action': "pychecker %s"% f,
               'name':f,
               'dependencies':(f,)}

Perhaps you could do:

for f in pyFiles:
  @task("checker")
  @depend(f)
  def check():
    c("pychecker %s" % f)

Never underestimate the magic that is nested scopes and name-agnostic function object creation...


Another advantage of using just a dictionary to define a task is that
it will be easy to read tasks from a text file (if it is very simple
and you dont need to write any python script). but not implemented
yet.

It is easy with the above syntax as well.


I though about using decorator for simple python-tasks but in a different way:

@task
def create_folder(path):
    """Create folder given by "path" if it doesnt exist"""
    if not os.path.exists(path):
        os.mkdir(path)
   return True

so if your python function is a task and you will use it only once you
dont need to define a function for the 'action' and another function
to create the task. but not implement yet also.

Yeah, this is what I consider much friendlier syntax (the aim is to not be much more verbose than make).

apart from one .py file installation (easy_install is not enough?)
thats what i am trying to do.

easy_install is not really enough - it introduces a dependency that you can't get around by just shipping a short .py file with your project.

This problem domain seems simple enough that it should be covered by a very short and simple module (Paul, the Waf you suggested was ~ 300k, no doubt caused by all the c compiler stuff that I don't need).

'Paver' seems to have the right idea:

http://www.blueskyonmars.com/projects/paver/index.html

But it's still *slightly* too big:

http://bazaar.launchpad.net/~dangoor/paver/main/files
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to