Skip to main content

A collection of python decorators I wish existed before

Project description

utde

A collection of utility decorators to simplify my life.

Persist

Instead of recomputing an expensive function annotate it with a generic_persist decorator. This decorator allows you to specify:

- key_or_fn: Either a string or a function
that generates a string from the wrapped_fn args
- load_fn: A function that is used to retrieve
stored data from key
- store_fn: A function that is used to store
the results of the "expensive" function call so that
it can be loaded next time instead

Example:

from utde import generic_persist

cache = dict()

def key_fn(day_str):
    year, month, day = day_str.split("-")
    return f"{year}/{month}/{day}"

def load_fn(key):
    if key in cache:
        return cache[key]

def store_fn(x, key):
    cache[key] = x

@generic_persist(key_fn, load_fn, store_fn)
def wrapped_fn(x, day_str):
    print("Imagine an expensive operation")
    return x * 2

Pandas (optional)

pip install utde[pandas]

There is a overloaded version for pandas that will load/store using the pickle format. Then you only have to provide where to load/store the file from/to.

WARNING: Only provide a key to a location you trust in, as unpickling a pickle file may execute arbitrary code.

import pandas as pd
from utde import persist_pd

@persist_pd(lambda year: f"yearly_report_{year}.pkl")
def yearly_report(year: str) -> pd.DataFrame:
    return pd.DataFrame(data={"year": [year], "profit": [42]})

Timer

Although its a simple function to write I often reinvented the wheel and wrote a function/decorator to track the execution time of a function of interest.

from utde import timer
import time

@timer
def slow_fn():
    time.sleep(2)

slow_fn()

Output:

INFO: `slow_fn` ellapsed time: 2.000s

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

utde-0.1.4.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

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

utde-0.1.4-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file utde-0.1.4.tar.gz.

File metadata

  • Download URL: utde-0.1.4.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for utde-0.1.4.tar.gz
Algorithm Hash digest
SHA256 1a37aa771deb82ebd21d27c56b152ffc586cdbbd3b3531bf7900c497e5b0b931
MD5 c3f02914f8200921bf14193a717e4c7f
BLAKE2b-256 78d7f72846c94fd244ba3918945d42450ccebd53f6bb1651ba6a5b7660b16e80

See more details on using hashes here.

File details

Details for the file utde-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: utde-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for utde-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 3edc0ea0e681aa8a424b7ee2502cd957e2917df8ea71134619072c4aa6828785
MD5 791fe4060be2c84b694ce5ef46a44f07
BLAKE2b-256 e57e9a59272a5ac3c0b4bd255e523d82055880c2db0774606c0f4b6a4b549d7c

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