pydoit / doit

CLI task management & automation tool
http://pydoit.org
MIT License
1.84k stars 175 forks source link

Add type annotations to doit #420

Open mathbunnyru opened 2 years ago

mathbunnyru commented 2 years ago

Right now every task looks more-or-less like this:

def task_hello():
    def python_hello(targets):
        with open(targets[0], "a") as output:
            output.write("Python says Hello World!!!\n")

    return {
        'actions': [python_hello],
        'targets': ["hello.txt"],
    }

It would be so nice if we actually had a type-annotated class Task with actions and targets fields. Right now, every Task is basically dict. I think, it was a great decision back in the days, but right now we have dataclass, typing module and they work so great for modern code.

Having type annotations in python makes programming much easier:

Unfortunately, adding type annotations to an existing project is not the easiest and the most funny thing to do, but it has lots of benefits.

Fund with Polar

schettino72 commented 2 years ago

yes. I plan to add mypy annotations.

I was thinking about adding a dataclass to be used as an alternative to plain metadata in dictionary for IDE folks. Could you submit a patch for this?

There are other alternatives for task definition: see #35. I am also working on one alternative with integration with click...

schettino72 commented 2 years ago

By the way, you know you can get quick documentation on command line with

$ doit help task
mathbunnyru commented 2 years ago

yes. I plan to add mypy annotations.

I was thinking about adding a dataclass to be used as an alternative to plain metadata in dictionary for IDE folks. Could you submit a patch for this?

There are other alternatives for task definition: see #35. I am also working on one alternative with integration with click...

Yes, dataclasses are great 👍 I think I will be a bit busy for the next couple of months :( But, if I have some time, I will try to take a closer look at this project (I've only started using it yesterday).

weakish commented 1 year ago

An alternative to dataclass is TypedDict.