Skip to main content

alkymi - Pythonic task automation

Project description

alkymi ⚗️

build docs coverage pypi versions

Alkymi is a pure Python (3.5+) library for describing and executing tasks and pipelines with built-in caching and conditional evaluation based on checksums.

Alkymi is easy to install, simple to use, and has no dependencies outside of Python's standard library. The code is cross-platform, and allows you to write your pipelines once and deploy to multiple operating systems (tested on Linux, Windows and Mac).

Documentation, including a quickstart guide, is provided here.

Features

  • Easily define complex data pipelines as decorated Python functions
    • This allows you to run linting, type checking, etc. on your data pipelines
  • Return values are automatically cached to disk, regardless of type
  • Efficiently checks if pipeline is up-to-date
    • Checks if external files have changed, bound functions have changed or if pipeline dependencies have changed
  • No domain specific language (DSL) or CLI tool, just regular Python
    • Supports caching and conditional evaluation in Jupyter Notebooks
  • Cross-platform - works on Linux, Windows and Mac
  • Expose recipes as a command-line interface (CLI) using alkymi's Lab type

Sample Usage

For examples of how to use alkymi, see the quickstart guide.

Example code:

import numpy as np
import alkymi as alk

@alk.recipe()
def long_running_task() -> np.ndarray:
    # Perform expensive computation here ...
    hard_to_compute_result = np.array([42])
    # Return value will be automatically cached to disk
    return hard_to_compute_result

result = long_running_task.brew()  # == np.ndarray([42])

Or one of the examples, e.g. MNIST.

Upcoming Features

The following features are being considered for future implementation:

  • Arguments to recipes when calling brew in Lab CLI
  • Type annotations propagated from bound functions to recipes
  • Support for call/type checking all recipes (e.g. by adding a check command to Lab)
  • Cache maintenance functionality
  • Parallel execution of pipeline

Known Issues

  • alkymi currently doesn't check custom objects for altered external files when computing cleanliness (e.g. MyClass has a self._some_path that points to a file somewhere outside alkymi's internal cache)
  • alk.foreach() currently only supports enumerable inputs of type List or Dict
  • Recipes marked transient will always be dirty, and thus always require reevaluation. This functionality should be replaced by a proper means of creating recipes that don't cache outputs, but only run when needed to provide inputs for downstream recipes

Installation

Install via pip:

pip install --user alkymi

Or see the Installation page.

Testing

After installing, you can run the test suite (use the lint, coverage and type_check recipes to perform those actions):

python3 labfile.py brew test

License

alkymi is licensed under The MIT License as found in the LICENSE.md file

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

alkymi-0.0.5.tar.gz (23.3 kB view details)

Uploaded Source

Built Distribution

alkymi-0.0.5-py3-none-any.whl (27.3 kB view details)

Uploaded Python 3

File details

Details for the file alkymi-0.0.5.tar.gz.

File metadata

  • Download URL: alkymi-0.0.5.tar.gz
  • Upload date:
  • Size: 23.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.2

File hashes

Hashes for alkymi-0.0.5.tar.gz
Algorithm Hash digest
SHA256 d19d8882e64339cb268f6592982125a83476782d69433a76508912e4a7b7151d
MD5 c07409e09369441143b1302bc1e3dba4
BLAKE2b-256 9605c8be6e74de27da05f56365c45627714bf10b8b29d88f4dd849ccbcc9cfc9

See more details on using hashes here.

File details

Details for the file alkymi-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: alkymi-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 27.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.2

File hashes

Hashes for alkymi-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c5c34004019ca80c0556e4ea65d8c6975507c7732e1ccbcbe063b5986301f928
MD5 e24f54a0de40fe2cb0f68bb679fc6417
BLAKE2b-256 040618dfe7655ce71b304f333f25ba2a8bbfd445102c3bd2e9335d528f022328

See more details on using hashes here.

Supported by

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