Skip to main content

Ensure a function runs only once, regardless of how many times it's called

Project description

philiprehberger-once

Tests PyPI version License

Ensure a function runs only once, regardless of how many times it's called.

Install

pip install philiprehberger-once

Usage

from philiprehberger_once import once

@once
def load_config():
    print("Loading...")
    return {"debug": True}

load_config()  # prints "Loading...", returns {"debug": True}
load_config()  # returns {"debug": True} without printing

Async support

import asyncio
from philiprehberger_once import once

@once
async def fetch_token():
    print("Fetching...")
    return "abc-123"

asyncio.run(fetch_token())  # prints "Fetching...", returns "abc-123"
asyncio.run(fetch_token())  # returns "abc-123" without fetching

Once per key

from philiprehberger_once import once_per_key

@once_per_key
def connect(host, port=5432):
    print(f"Connecting to {host}...")
    return f"conn:{host}"

connect("db-1")  # prints "Connecting to db-1...", returns "conn:db-1"
connect("db-1")  # returns cached "conn:db-1"
connect("db-2")  # prints "Connecting to db-2...", returns "conn:db-2"

Reset and inspect

from philiprehberger_once import once

@once
def init():
    return 42

init()
init.called   # True
init.reset()
init.called   # False
init()        # runs again

API

Function / Property Description
once(fn) Decorator. Runs fn once, caches and returns the result on subsequent calls. Thread-safe. Supports async.
once_per_key(fn) Decorator. Runs fn once per unique first argument. Thread-safe.
.called bool for once, dict[key, bool] for once_per_key. Whether the function has been called.
.reset() Clear cached result so the function can run again. once_per_key accepts an optional key argument.

License

MIT

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

philiprehberger_once-0.1.3.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

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

philiprehberger_once-0.1.3-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file philiprehberger_once-0.1.3.tar.gz.

File metadata

  • Download URL: philiprehberger_once-0.1.3.tar.gz
  • Upload date:
  • Size: 3.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for philiprehberger_once-0.1.3.tar.gz
Algorithm Hash digest
SHA256 ee9d5e10163f104d0c16a4112c10e0f428f2c3e17e11207f4a9bd4bc3c646c76
MD5 cb7aed5ea70c5eccdfd13e1c843a5f05
BLAKE2b-256 11b7201474fd83d6c7c5aa8c298e6eadfb2df8feb9ded807e123f4c15f01ab00

See more details on using hashes here.

File details

Details for the file philiprehberger_once-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for philiprehberger_once-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 37a43399146eaf126ec31bc84438f188fe0d1555f3ada3542986e6cd13b56e7c
MD5 37eaa8b35c924b29665be5b11bb30dc2
BLAKE2b-256 566b7ca373393ab75efe302674b340bbf9b0c4b840f936c9beef489340cc6d6f

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