StatefulPy
StatefulPy provides transparent, persistent state management for regular Python functions.
MIGHT NOT BE FULLY FUNCTIONAL YET, STILL BEING WORKED ON
Features
- Simple Decorator API: Add persistent state to any function with a decorator.
- Multiple Backends: Store state in SQLite (embedded) or Redis (distributed).
- Automatic State Management: State is automatically loaded, saved, and synchronized.
- Concurrency Safe: Locks ensure state consistency across threads and processes.
- Flexible Serialization: Supports Pickle, JSON, and custom serializers.
- CLI Tools: Manage, migrate, and monitor your function state easily.
Installation
pip install statefulpy
For Redis support:
pip install statefulpy[redis]
Security Warning ⚠️
The default serializer used by StatefulPy is Pickle for performance reasons.
However, Pickle is insecure if processing untrusted input.
For public-facing or untrusted data applications, use the JSON serializer instead:
@stateful(backend="sqlite", db_path="state.db", serializer="json")
def my_function():
# Your function code...
Quickstart Example
from statefulpy import stateful
@stateful(backend="sqlite", db_path="counter.db")
def counter():
# Initialize state if needed
if "count" not in counter.state:
counter.state["count"] = 0
# Update state
counter.state["count"] += 1
return counter.state["count"]
# The counter value persists across runs
print(counter()) # 1 (first run)
print(counter()) # 2
# Restart your program...
print(counter()) # 3 (value loaded from storage)
Backend Options
SQLite (Default)
@stateful(backend="sqlite", db_path="state.db", serializer="pickle")
def my_function():
# Your function code...
Redis
@stateful(backend="redis", redis_url="redis://localhost:6379/0")
def my_function():
# Your function code...
Global Configuration
from statefulpy import set_backend
# Set default backend for all @stateful functions
set_backend("redis", redis_url="redis://localhost:6379/0")
Serialization Formats
StatefulPy supports multiple serialization formats depending on your needs:
-
Using JSON serializer (Recommended for security):
@stateful(backend="sqlite", db_path="state.db", serializer="json") def my_function(): # Your function code...
-
Using Pickle serializer (Faster, but only for trusted data):
⚠️ Warning: Only use Pickle when you fully trust your data sources.
@stateful(backend="sqlite", db_path="state.db", serializer="pickle") def my_function(): # Your function code...
Command-Line Interface (CLI)
StatefulPy includes CLI utilities for managing backends:
-
Initialize storage:
statefulpy init --backend sqlite --path state.db
-
Migrate between backends:
statefulpy migrate --from sqlite --to redis --from-path state.db --to-path redis://localhost:6379/0
-
Check backend health:
statefulpy healthcheck --backend redis --path redis://localhost:6379/0
License
This project is licensed under the MIT License.
See the LICENSE file for full details.
Metadata
Release files for statefulpy 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| statefulpy-0.1.3.tar.gz | 19.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| statefulpy-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.8 kB
Release files / statefulpy-0.1.3.tar.gz
| Download URL | statefulpy-0.1.3.tar.gz |
|---|---|
| Size | 19.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
71adc89751337dc3a867792355cebf8ae7b512badc9511328c80924046048fe2
|
|
BLAKE2b-256 checksum How to use checksums |
744cace44b20177726241fd8fd86f6512010ab3eb45fd2ea1e73cf837a511a0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.10
|
Release files / statefulpy-0.1.3-py3-none-any.whl
| Download URL | statefulpy-0.1.3-py3-none-any.whl |
|---|---|
| Size | 19.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f834a02d02ff34e858ccd57f095adcf7303df617c87fb79bf2a50639541d247
|
|
BLAKE2b-256 checksum How to use checksums |
adf0e259e56ef8423a2437cff0073e787a019670a63889a34f128063c680b69c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.10
|