Skip to main content

Add your description here

Project description

stepit

Yet another python decorator for persistent caching. stepit caches function results based on their source code and arguments, automatically invalidating the cache when either changes.

Key Features

  • Smart Cache Invalidation: Cache is updated when function source code changes
  • Recursive Awareness: Tracks changes in nested function calls
  • Informative Logging: Color-coded progress and status messages
  • Zero Configuration: Works out of the box with sensible defaults
  • Customizable: Supports custom cache keys, directories, and serialization

Installation

pip install stepit

Quick Start

from stepit import stepit

@stepit
def expensive_calculation(x):
    # ... complex computation ...
    return result

# First call: computes and caches
result = expensive_calculation(42)
# Second call: uses cache
result = expensive_calculation(42)

Advanced Usage

Recursive Functions with Automatic Cache Invalidation

@stepit
def fibonacci(n):
    if n <= 1: return n
    return fibonacci(n-1) + fibonacci(n-2)

# First run: calculates and caches all intermediate results
fibonacci(100)

# Change the function
@stepit
def fibonacci(n):  # Different implementation
    if n <= 0: return 0
    if n == 1: return 1
    return fibonacci(n-1) + fibonacci(n-2)

# Cache is automatically invalidated due to source code change
fibonacci(100)

Custom Cache Configuration

@stepit(
    key="my_special_function",
    cache_dir="custom_cache"
)
def process_data(x):
    return x * 2

Informative Logging

import logging
logging.getLogger("stepit").setLevel(logging.DEBUG)

@stepit
def add(a, b):
    return a + b

add(1, 2)  # Outputs:
# ⏩ stepit 'add': Starting execution of `__main__.add()`
# ✅ stepit 'add': Successfully completed and cached [exec time 0 seconds, size 37 bytes]
# ♻️  stepit 'add': is up-to-date. Using cached result

Use Cases

  • Data processing pipelines
  • Scientific computations
  • Machine learning model training
  • Any expensive computations that may be repeated

How It Works

  1. Creates a unique key based on:
    • Function's source code
    • Arguments
    • Any nested @stepit-decorated function calls
  2. Checks if result exists in cache
  3. Executes function if:
    • No cached result exists
    • Source code has changed
    • Arguments are different
  4. Stores result in cache for future use

License

MIT License

Contributing

Contributions welcome! Please check our GitHub repository for guidelines.

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

stepit-0.5.1.tar.gz (6.6 kB view details)

Uploaded Source

Built Distribution

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

stepit-0.5.1-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file stepit-0.5.1.tar.gz.

File metadata

  • Download URL: stepit-0.5.1.tar.gz
  • Upload date:
  • Size: 6.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for stepit-0.5.1.tar.gz
Algorithm Hash digest
SHA256 ee1fdb27b6826a60b4a6bee2662830c0b4cbc6b8e4c7fb4d4bd75b4cead97eaf
MD5 4a6b3db3f75cb0f70977cad54ea5e197
BLAKE2b-256 e3d6d5a9bc5c44537cef92bc10136ed2e1a1c9decbfc3f2eb5bf5ad434880cef

See more details on using hashes here.

Provenance

The following attestation bundles were made for stepit-0.5.1.tar.gz:

Publisher: release.yml on edalfon/stepit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file stepit-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: stepit-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for stepit-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f1eeb3a3b92c5c42616228028ceabcfe1cfd5894e7d2d8ba5739bf795499bd04
MD5 b9a5931cacfabcf8aca0fcab11eac6d3
BLAKE2b-256 62361b844d6b33d3c94ff99df5fc84cd80dd1c73479d4467db19e50e601c17c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for stepit-0.5.1-py3-none-any.whl:

Publisher: release.yml on edalfon/stepit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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