Simple execution orchestrator.
Project description
Molot
Simple execution orchestrator.
Requirements
Molot requires Python 3.8 or above.
For development, you will need uv installed.
Usage
Create a new orchestration file, e.g. build.py
for a build orchestration. Make it executable chmod +x build.py
to make it easier to run.
#!/usr/bin/env python3
from molot import *
# Your targets and environment arguments here
evaluate()
Now you're ready to run the build script to see the help message:
./build.py
To only see a list of targets and environment arguments, call the built-in list
target:
./build.py list
Not very exciting so far, let's learn how to add your own targets and environment arguments.
Targets
Any piece of work that your build needs to perform is defined as a target. Here's a trivial example of a target that executes ls
.
@target(
name="ls",
description="lists current directory items",
group="greetings",
depends=["target1", "target2"]
)
def ls():
shell("ls")
Parameters explained:
name
- unique name to reference the target (optional; function name is used by default)description
- short description of what the target does displayed in the help message (optional)group
- grouping to list target under (optional; listed under "ungrouped" by default)depends
- list of other targets that must be executed first (optional)
Since all the parameters are optional, the shortest definition of the same target can be as follows:
@target()
def ls():
shell("ls")
Here's how you run your new target:
./build.py ls
Dependency Resolution
Now we can define another target hello
that depends on ls
:
@target(description="say hello", depends=["ls"])
def hello():
print("hello")
There is basic dependency resolution that checks for circular dependencies and finds all transitive dependency targets to execute before running the one that you called. When you call:
./build.py hello
What actually happens is equivalent to calling:
./build.py ls hello
Environment Arguments
Environment arguments ar a cross between environment variables and arguments. Values can be passed as the former and then overriden as the latter.
Here's how you define one:
ENV = envarg("ENV", default="dev", description="build environment")
Parameters explained:
name
- unique name for the argumentdefault
- default value if none is supplied (optional;None
by default)description
- short description of what the argument is displayed in the help message (optional)sensitive
- indicates the value is sensitive and should be masked (optional)
The argument is evaluated right there (not inside of targets), so you can use that variable straightaway.
It can be set as a regular environment variable:
ENV=dev ./build.py sometarget
Alternatively, it can be passed as an argument:
./build.py sometarget --arg ENV=prod
Finally, you can pass .env file to load:
./build.py sometarget --dotenv /path/to/.env
If both are passed simultaneously, then argument takes precedence over the environment variable.
Examples
See examples for use cases that demonstrate the main features.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file molot-1.0.3.tar.gz
.
File metadata
- Download URL: molot-1.0.3.tar.gz
- Upload date:
- Size: 46.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29286c5f6cb5c7ae3bfdcc5a7de4e8b443b2cd0ea474fbf30e0dd3d8e4099be4 |
|
MD5 | 3432b3a9c6daf61ed3de2733100eded3 |
|
BLAKE2b-256 | 3e09092d30c756fdc1efdbfb755b9991d5ca924213b2f689f462fd2885bc7536 |
File details
Details for the file molot-1.0.3-py3-none-any.whl
.
File metadata
- Download URL: molot-1.0.3-py3-none-any.whl
- Upload date:
- Size: 10.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e8ef88916272f153aebadc297fc323a3ea21d3ed8a6ea43cf4ab246a1e259c5 |
|
MD5 | 27d0b08c953c0da5c3769e037fc493c5 |
|
BLAKE2b-256 | cd7408a14484568449cba0312cce34eba63d77abed201b260272e5a29caed81c |