parslet


Nameparslet JSON
Version 0.5.0 PyPI version JSON
download
home_pageNone
SummarySimplify Python workflows with a minimal DAG engine.
upload_time2025-08-04 03:05:03
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseNone
keywords workflow dag automation
VCS
bugtrack_url
requirements networkx pillow psutil pydot rich flake8 pytest black transformers
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Parslet: Your Pocket-Sized Workflow Assistant
**A tiny tool for running automated to-do lists (we call them workflows) on your Python projects. It's built to work anywhere, especially on your phone.**

![Parsl-compatible](https://img.shields.io/badge/parsl-compatible-purple.svg)
![Termux-Ready](https://img.shields.io/badge/termux-ready-purple.svg)
![License](https://img.shields.io/github/license/Kanegraffiti/Parslet)

### So, What is Parslet?

Parslet is a tiny workflow engine built in Python. That means it's a tool that helps you automate a bunch of tasks in a specific order, especially on phones and devices that can’t run heavy-duty software. Think of it like a smart to-do list for your computer or phone, but instead of reminding you to do things, **it actually does them for you in the right order, automatically.**

Imagine this real-world example:

You run a small juice business with your besty. Every morning you:

1.  Wash the fruits
2.  Peel them
3.  Blend them
4.  Pour into bottles
5.  Label and store

Now imagine you could automate this entire process using a small robot. You just tell it the steps once, and it does them every morning, in order. You get to spend quality time with your besty.

**That’s what Parslet does, but for software tasks.**

---

### What Kinds of Tasks Can It Handle?

In a real-world tech setting, you could use Parslet to:

1.  Run a script to **collect data** from a website.
2.  Then, **clean up** that messy data.
3.  Then, **save** the clean data to a file.
4.  Then, **back up** that file to a server.
5.  Finally, **send you an email** confirming the job is done.

All of this, in the right order, without you needing to babysit it.

---

### Why is Parslet Special?

Most tools like this are built for powerful servers in a data center. Parslet is different. It’s designed from the ground up to:

-   **Be Super Lightweight:** It works on a Raspberry Pi or even an Android phone.
-   **Run in Termux:** It’s built and tested to work perfectly inside [Termux](https://termux.dev/en/), the command-line tool for Android.
-   **Work Offline:** No internet? No problem. Your workflows will still run.
-   **Empower Everyone:** It’s for students, creators, and developers in Africa and beyond who might not have a laptop but have a brilliant idea.

---

### How Does It Work?

It uses something called a **DAG** (Directed Acyclic Graph), which is just a fancy way of saying:

> “Step B only runs after Step A is done.”

You define these steps (we call them **Tasks**) in a simple Python file. Parslet reads your file, understands the order, and handles the rest. It manages failures and runs everything as efficiently as possible.

---

## Get Started

Ready to try it? You can be up and running in less than a minute.

1.  **Get the Code:**

    First, you'll need to copy the project files to your device using a CLI.

    ```bash
    git clone https://github.com/Kanegraffiti/Parslet.git
    cd Parslet
    ```

2.  **Install It:**

    Now, have Python install Parslet so you can use it from anywhere.

    ```bash
    pip install .
    ```

3.  **Create Your First "Recipe"**

    Create a new file called `my_first_workflow.py` and paste this in. This is your recipe, telling Parslet what to do.

    ```python
    from parslet import parslet_task, ParsletFuture
    from typing import List

    # This is a "task." It's just a normal Python function
    # with a special @parslet_task note for Parslet.
    @parslet_task
    def say_hello(name: str) -> str:
        print(f"Task 1: Saying hello to {name}")
        return f"Hello, {name}!"

    # Here's a second task.
    @parslet_task
    def make_it_loud(text: str) -> str:
        print("Task 2: Making the text loud!")
        return f"{text.upper()}!"

    # This is the main "recipe" function.
    # Parslet looks for this to know how your tasks connect.
    def main() -> List[ParsletFuture]:
        # First, we tell Parslet to run the say_hello task.
        # It doesn't run yet! It just gives us an "IOU" for the result.
        greeting_iou = say_hello("Parslet")
        
        # Next, we give the "IOU" from the first task to the second task.
        # This tells Parslet: "Wait for task 1 to finish before starting task 2."
        loud_greeting_iou = make_it_loud(greeting_iou)

        # We return the very last IOU. This tells Parslet, "We're done when this is done."
        return [loud_greeting_iou]
    ```

4.  **Run It**

    Now for the fun part. Tell Parslet to run your new recipe.

    ```bash
    parslet run my_first_workflow.py
    ```

You'll see the `print` statements from your tasks as they run, in the correct order!

---

## What Else Can It Do? 

Parslet is small, but it's packed with neat features for real-world use.

-   **Works Offline:** Your automated recipes run even without an internet connection.
-   **Saves Battery:** Use the special `--battery-mode` to tell Parslet to take it easy and conserve power.
-   **Smart About Resources:** It automatically checks your device's CPU and memory to run smoothly without crashing.
-   **DEFCON:** A multi-layered defense system in Parslet that proactively blocks zero-day exploits and malicious DAG behavior using offline rules.
-   **Plays Well with Others:** If you ever move to a big server, Parslet has tools to convert your recipes to run on powerful systems like Parsl or Dask.
-   **Made for Termux:** We use it and test it on Android phones, so you know it'll work.

Want to see more? Check out the `use_cases/` and `examples/` folders for more advanced recipes!

---

## Visualizing Your Workflows

Parslet can generate a picture of your workflow (a "DAG") to help you see how your tasks are connected. This is great for debugging and documentation.

To use this feature, you need to have **Graphviz** installed on your system.

-   **On Linux (Debian/Ubuntu):** `sudo apt install graphviz`
-   **On Linux (Fedora):** `sudo dnf install graphviz`
-   **On Android (Termux):** `pkg install graphviz`
-   **On Windows:** Download and run the installer from the [official Graphviz website](https://graphviz.org/download/) and make sure to add it to your system's PATH.

You will also need the `pydot` Python package, which is included in `requirements.txt`.

Once Graphviz is installed, you can use the `--export-png` flag with the `run` command:

```bash
parslet run my_first_workflow.py --export-png my_workflow.png
```

This will create an image file named `my_workflow.png` showing your workflow.

---

## Want to Learn More? (Documentation)

We've written down everything you need to know in a simple, friendly way.

-   [**See All Features (Full Documentation)**](https://parslet.readthedocs.io/en/latest/)
-   [**How It Really Works (Architecture)**](https://parslet.readthedocs.io/en/latest/architecture.html)
-   [**The Remote Control (CLI Commands)**](https://parslet.readthedocs.io/en/latest/usage.html)

---

## Contributing

We'd love your help making Parslet even better. It's easy to get started. Check out our [Contributing Guide](./CONTRIBUTING.md).

---

## License

This project is licensed under the MIT License. See [LICENSE](./LICENSE) for the full text.

## Acknowledgements

Built by [Kelechi Nwankwo](https://github.com/Kanegraffiti) for the **Africa Deep Tech Challenge 2025**.  
Inspired by the powerful [Parsl](https://github.com/Parsl/parsl) project.  
A big thank you to the Outreachy community and the Parsl maintainers.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "parslet",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "workflow, dag, automation",
    "author": null,
    "author_email": "Parslet Team <team@example.com>",
    "download_url": "https://files.pythonhosted.org/packages/f5/93/e7072b413db5426e8e4710e099879a8833286e41c8b1397e4373c65d3200/parslet-0.5.0.tar.gz",
    "platform": null,
    "description": "# Parslet: Your Pocket-Sized Workflow Assistant\n**A tiny tool for running automated to-do lists (we call them workflows) on your Python projects. It's built to work anywhere, especially on your phone.**\n\n![Parsl-compatible](https://img.shields.io/badge/parsl-compatible-purple.svg)\n![Termux-Ready](https://img.shields.io/badge/termux-ready-purple.svg)\n![License](https://img.shields.io/github/license/Kanegraffiti/Parslet)\n\n### So, What is Parslet?\n\nParslet is a tiny workflow engine built in Python. That means it's a tool that helps you automate a bunch of tasks in a specific order, especially on phones and devices that can\u2019t run heavy-duty software. Think of it like a smart to-do list for your computer or phone, but instead of reminding you to do things, **it actually does them for you in the right order, automatically.**\n\nImagine this real-world example:\n\nYou run a small juice business with your besty. Every morning you:\n\n1.  Wash the fruits\n2.  Peel them\n3.  Blend them\n4.  Pour into bottles\n5.  Label and store\n\nNow imagine you could automate this entire process using a small robot. You just tell it the steps once, and it does them every morning, in order. You get to spend quality time with your besty.\n\n**That\u2019s what Parslet does, but for software tasks.**\n\n---\n\n### What Kinds of Tasks Can It Handle?\n\nIn a real-world tech setting, you could use Parslet to:\n\n1.  Run a script to **collect data** from a website.\n2.  Then, **clean up** that messy data.\n3.  Then, **save** the clean data to a file.\n4.  Then, **back up** that file to a server.\n5.  Finally, **send you an email** confirming the job is done.\n\nAll of this, in the right order, without you needing to babysit it.\n\n---\n\n### Why is Parslet Special?\n\nMost tools like this are built for powerful servers in a data center. Parslet is different. It\u2019s designed from the ground up to:\n\n-   **Be Super Lightweight:** It works on a Raspberry Pi or even an Android phone.\n-   **Run in Termux:** It\u2019s built and tested to work perfectly inside [Termux](https://termux.dev/en/), the command-line tool for Android.\n-   **Work Offline:** No internet? No problem. Your workflows will still run.\n-   **Empower Everyone:** It\u2019s for students, creators, and developers in Africa and beyond who might not have a laptop but have a brilliant idea.\n\n---\n\n### How Does It Work?\n\nIt uses something called a **DAG** (Directed Acyclic Graph), which is just a fancy way of saying:\n\n> \u201cStep B only runs after Step A is done.\u201d\n\nYou define these steps (we call them **Tasks**) in a simple Python file. Parslet reads your file, understands the order, and handles the rest. It manages failures and runs everything as efficiently as possible.\n\n---\n\n## Get Started\n\nReady to try it? You can be up and running in less than a minute.\n\n1.  **Get the Code:**\n\n    First, you'll need to copy the project files to your device using a CLI.\n\n    ```bash\n    git clone https://github.com/Kanegraffiti/Parslet.git\n    cd Parslet\n    ```\n\n2.  **Install It:**\n\n    Now, have Python install Parslet so you can use it from anywhere.\n\n    ```bash\n    pip install .\n    ```\n\n3.  **Create Your First \"Recipe\"**\n\n    Create a new file called `my_first_workflow.py` and paste this in. This is your recipe, telling Parslet what to do.\n\n    ```python\n    from parslet import parslet_task, ParsletFuture\n    from typing import List\n\n    # This is a \"task.\" It's just a normal Python function\n    # with a special @parslet_task note for Parslet.\n    @parslet_task\n    def say_hello(name: str) -> str:\n        print(f\"Task 1: Saying hello to {name}\")\n        return f\"Hello, {name}!\"\n\n    # Here's a second task.\n    @parslet_task\n    def make_it_loud(text: str) -> str:\n        print(\"Task 2: Making the text loud!\")\n        return f\"{text.upper()}!\"\n\n    # This is the main \"recipe\" function.\n    # Parslet looks for this to know how your tasks connect.\n    def main() -> List[ParsletFuture]:\n        # First, we tell Parslet to run the say_hello task.\n        # It doesn't run yet! It just gives us an \"IOU\" for the result.\n        greeting_iou = say_hello(\"Parslet\")\n        \n        # Next, we give the \"IOU\" from the first task to the second task.\n        # This tells Parslet: \"Wait for task 1 to finish before starting task 2.\"\n        loud_greeting_iou = make_it_loud(greeting_iou)\n\n        # We return the very last IOU. This tells Parslet, \"We're done when this is done.\"\n        return [loud_greeting_iou]\n    ```\n\n4.  **Run It**\n\n    Now for the fun part. Tell Parslet to run your new recipe.\n\n    ```bash\n    parslet run my_first_workflow.py\n    ```\n\nYou'll see the `print` statements from your tasks as they run, in the correct order!\n\n---\n\n## What Else Can It Do? \n\nParslet is small, but it's packed with neat features for real-world use.\n\n-   **Works Offline:** Your automated recipes run even without an internet connection.\n-   **Saves Battery:** Use the special `--battery-mode` to tell Parslet to take it easy and conserve power.\n-   **Smart About Resources:** It automatically checks your device's CPU and memory to run smoothly without crashing.\n-   **DEFCON:** A multi-layered defense system in Parslet that proactively blocks zero-day exploits and malicious DAG behavior using offline rules.\n-   **Plays Well with Others:** If you ever move to a big server, Parslet has tools to convert your recipes to run on powerful systems like Parsl or Dask.\n-   **Made for Termux:** We use it and test it on Android phones, so you know it'll work.\n\nWant to see more? Check out the `use_cases/` and `examples/` folders for more advanced recipes!\n\n---\n\n## Visualizing Your Workflows\n\nParslet can generate a picture of your workflow (a \"DAG\") to help you see how your tasks are connected. This is great for debugging and documentation.\n\nTo use this feature, you need to have **Graphviz** installed on your system.\n\n-   **On Linux (Debian/Ubuntu):** `sudo apt install graphviz`\n-   **On Linux (Fedora):** `sudo dnf install graphviz`\n-   **On Android (Termux):** `pkg install graphviz`\n-   **On Windows:** Download and run the installer from the [official Graphviz website](https://graphviz.org/download/) and make sure to add it to your system's PATH.\n\nYou will also need the `pydot` Python package, which is included in `requirements.txt`.\n\nOnce Graphviz is installed, you can use the `--export-png` flag with the `run` command:\n\n```bash\nparslet run my_first_workflow.py --export-png my_workflow.png\n```\n\nThis will create an image file named `my_workflow.png` showing your workflow.\n\n---\n\n## Want to Learn More? (Documentation)\n\nWe've written down everything you need to know in a simple, friendly way.\n\n-   [**See All Features (Full Documentation)**](https://parslet.readthedocs.io/en/latest/)\n-   [**How It Really Works (Architecture)**](https://parslet.readthedocs.io/en/latest/architecture.html)\n-   [**The Remote Control (CLI Commands)**](https://parslet.readthedocs.io/en/latest/usage.html)\n\n---\n\n## Contributing\n\nWe'd love your help making Parslet even better. It's easy to get started. Check out our [Contributing Guide](./CONTRIBUTING.md).\n\n---\n\n## License\n\nThis project is licensed under the MIT License. See [LICENSE](./LICENSE) for the full text.\n\n## Acknowledgements\n\nBuilt by [Kelechi Nwankwo](https://github.com/Kanegraffiti) for the **Africa Deep Tech Challenge 2025**.  \nInspired by the powerful [Parsl](https://github.com/Parsl/parsl) project.  \nA big thank you to the Outreachy community and the Parsl maintainers.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Simplify Python workflows with a minimal DAG engine.",
    "version": "0.5.0",
    "project_urls": {
        "Documentation": "https://github.com/Kanegraffiti/Parslet/tree/main/docs",
        "Homepage": "https://github.com/Kanegraffiti/Parslet",
        "Source": "https://github.com/Kanegraffiti/Parslet"
    },
    "split_keywords": [
        "workflow",
        " dag",
        " automation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e6e84c386a1106a6a925a08d7076e6da2c75b7a95d142c2786b7cda43f2e7c5e",
                "md5": "9cd2d8b54b7790f5d07b7caf362e4973",
                "sha256": "79a17977a7a47416e4381fe02836c57d7b7ed59fa35ad73e21ef243d40d033e8"
            },
            "downloads": -1,
            "filename": "parslet-0.5.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9cd2d8b54b7790f5d07b7caf362e4973",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 48433,
            "upload_time": "2025-08-04T03:05:00",
            "upload_time_iso_8601": "2025-08-04T03:05:00.571499Z",
            "url": "https://files.pythonhosted.org/packages/e6/e8/4c386a1106a6a925a08d7076e6da2c75b7a95d142c2786b7cda43f2e7c5e/parslet-0.5.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f593e7072b413db5426e8e4710e099879a8833286e41c8b1397e4373c65d3200",
                "md5": "d41eeb92e24ba188a0a1de09c4e2c3d3",
                "sha256": "9f130385756bcde180bedf1a44818f8b4d512b97f4a2512d1164541df4876624"
            },
            "downloads": -1,
            "filename": "parslet-0.5.0.tar.gz",
            "has_sig": false,
            "md5_digest": "d41eeb92e24ba188a0a1de09c4e2c3d3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 57452,
            "upload_time": "2025-08-04T03:05:03",
            "upload_time_iso_8601": "2025-08-04T03:05:03.036748Z",
            "url": "https://files.pythonhosted.org/packages/f5/93/e7072b413db5426e8e4710e099879a8833286e41c8b1397e4373c65d3200/parslet-0.5.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-04 03:05:03",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Kanegraffiti",
    "github_project": "Parslet",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "networkx",
            "specs": []
        },
        {
            "name": "pillow",
            "specs": []
        },
        {
            "name": "psutil",
            "specs": []
        },
        {
            "name": "pydot",
            "specs": []
        },
        {
            "name": "rich",
            "specs": []
        },
        {
            "name": "flake8",
            "specs": []
        },
        {
            "name": "pytest",
            "specs": []
        },
        {
            "name": "black",
            "specs": []
        },
        {
            "name": "transformers",
            "specs": []
        }
    ],
    "lcname": "parslet"
}
        
Elapsed time: 0.61211s