Skip to main content

Simple execution orchestrator.

Project description

Molot

GitHub Actions PyPI License: MIT Ruff uv

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 *  # pylint: disable=wildcard-import,unused-wildcard-import

# Your targets and environment arguments here

evaluate()

Pylint comment silences editor warnings about wildcard imports, you can alternatively import everything individually.

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 argument
  • default - 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

molot-1.0.1.tar.gz (47.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

molot-1.0.1-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file molot-1.0.1.tar.gz.

File metadata

  • Download URL: molot-1.0.1.tar.gz
  • Upload date:
  • Size: 47.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for molot-1.0.1.tar.gz
Algorithm Hash digest
SHA256 71055d18d426910bdd7482430e788102258b56461dec9869d0c6327cdd72c8f6
MD5 7af08ed6119a8fda310de1e91bc2e0bf
BLAKE2b-256 5baa4e6eb6f31ccec5aa5f4c545021f0294d95c27db22b79b18e694c7ae49660

See more details on using hashes here.

File details

Details for the file molot-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: molot-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for molot-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d6a0a2fc09779903d3e3df46b14a90c419f5b8b155039c79864cef3ab8638738
MD5 0efaedb36bd174b482cfc5e2f3c92c17
BLAKE2b-256 bb92c842615c9f11d87e1b2e351745e3e441d773beb1033efb41f688a597d49c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page