Ensure a function runs only once, regardless of how many times it's called
Project description
philiprehberger-once
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee9d5e10163f104d0c16a4112c10e0f428f2c3e17e11207f4a9bd4bc3c646c76
|
|
| MD5 |
cb7aed5ea70c5eccdfd13e1c843a5f05
|
|
| BLAKE2b-256 |
11b7201474fd83d6c7c5aa8c298e6eadfb2df8feb9ded807e123f4c15f01ab00
|
File details
Details for the file philiprehberger_once-0.1.3-py3-none-any.whl.
File metadata
- Download URL: philiprehberger_once-0.1.3-py3-none-any.whl
- Upload date:
- Size: 4.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37a43399146eaf126ec31bc84438f188fe0d1555f3ada3542986e6cd13b56e7c
|
|
| MD5 |
37eaa8b35c924b29665be5b11bb30dc2
|
|
| BLAKE2b-256 |
566b7ca373393ab75efe302674b340bbf9b0c4b840f936c9beef489340cc6d6f
|