Building a Task Runner In Python
In this article, I will talk about my most recent project, "Yasta".
Yasta is a modern task runner written in Python. ๐
Yasta makes running and managing your tasks a breeze! ๐ฌ๏ธ
Even though it's written in Python, you can use it for any kind of project, or no projects at all!
I use it to automate some non-programming-related tasks on my machine.
For this project, I used Typer to build the CLI.
Yasta has 5 commands:
- init
- Initializes the projects by creating a toml file, named pyproject.toml by default, and adds an empty test command.
- show
- Shows the list of tasks and their commands
- add
- Adds a task to the task list.
- run
- Runs the specified task.
- delete
- deletes the specified task.
run
"run" is probably the most interesting command.
path
The path option specifies the path for the tasks file. This is useful if your file is not named "pyproject.toml" or is in another directory.
The capture-output specifies whether you want to wait for the task to finish or not. For example, if one of your tasks is running takes a bit of time, and logs some information, then capturing output will wait for the process to end to show, which might not be what you want, in that case, you shouldn't use this option. However, if your tasks are short, you should use this option, which will capture the output, print its status in pretty colors, and show a table of the commands and the corresponding errors (if any!).
You can see the difference in the following image.
force
The force option is useful when you're running a list of tasks and you don't want a failing task to stop the rest of the tasks from running.
parallel
The parallel option runs a task that consists of several tasks, in parallel.
This is useful if you're running a task that runs 2 web servers, if you don't use the option, in this case, the second web server will be waiting until the first one ends.
That's it! The code base is quite small actually, but it serves all my needs pretty well.
Source code: https://github.com/adhamsalama/yasta
It was a delight using Typer to create this CLI. I would recommend it if you're writing a CLI in Python.
Subscribe to my newsletter
Read articles from Adham Salama directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Adham Salama
Adham Salama
A backend software engineer writing about backend stuff.