Add your description here
Project description
pg-task-tracker
A simple Python library for tracking multi-step task progress in PostgreSQL.
Installation
pip install pg-task-tracker
Setup
from sqlmodel import create_engine
import pg_task_tracker
from pg_task_tracker import ensure_schema
engine = create_engine("postgresql+psycopg2://user:pass@localhost/mydb")
ensure_schema(engine)
pg_task_tracker.init(engine)
ensure_schema(engine) creates the tables if they don't exist. pg_task_tracker.init(engine) stores the engine so you don't have to pass it to every call. Both are one-time setup.
Decorator
The simplest way to track a function:
from pg_task_tracker import track
@track()
def run_pipeline():
extract_data()
transform_data()
load_data()
run_pipeline()
This creates a task named "run_pipeline" and sets its status to "completed" or "failed" based on whether the function raises an exception. The exception is always re-raised.
Override the task name:
@track(name="nightly-etl")
def run_pipeline():
...
Manual Tracking
For more control, create tasks and steps explicitly:
from pg_task_tracker import create_task, get_task
task = create_task("etl-pipeline")
task.add_step("extract", status="running")
task.update_step("extract", status="completed", metadata={"rows": 5000})
task.add_step("transform", status="running")
task.update_step("transform", status="completed", metadata={"duration_s": 12.3})
task.add_step("load", status="running")
task.update_step("load", status="failed", metadata={"error": "connection timeout"})
task.update_status("failed")
Resume an existing task by ID:
task = get_task(task_id)
for step in task.get_steps():
print(f"{step.name}: {step.status}")
Both create_task and get_task accept an optional engine= parameter to override the initialized engine.
Step Statuses
Steps and tasks use the same set of statuses: pending, running, completed, failed.
Timestamps are managed automatically:
started_atis set when a step moves torunningcompleted_atis set when a step moves tocompletedorfailed
Database Strategy
Every method that mutates state commits immediately — there is no batching or deferred writes. Each call is a separate database round-trip.
| Method | DB Operations | Round-trips |
|---|---|---|
ensure_schema(engine) |
CREATE TABLE IF NOT EXISTS for each table |
1 |
create_task(name) |
INSERT into ptt_task |
1 |
get_task(task_id) |
SELECT from ptt_task to verify existence |
1 |
task.add_step(...) |
INSERT into ptt_task_step |
1 |
task.update_step(...) |
SELECT + UPDATE on ptt_task_step |
2 |
task.update_status(...) |
SELECT + UPDATE on ptt_task |
2 |
task.get_steps() |
SELECT from ptt_task_step ordered by created_at |
1 |
@track() |
INSERT + SELECT + UPDATE (create task + update status) |
3 |
get_migration_sql() |
None (reads bundled .sql file from package) |
0 |
For manual tracking with N steps where each transitions through running -> completed, expect roughly 2N + 2 round-trips.
Schema Management
Create tables automatically:
ensure_schema(engine)
Or apply the bundled SQL migration manually:
from pg_task_tracker import get_migration_sql
print(get_migration_sql())
# Apply with psql or your preferred migration tool
Table Names
All tables are prefixed with ptt_ to avoid conflicts:
ptt_taskptt_task_step
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
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 pg_task_tracker-0.5.0.tar.gz.
File metadata
- Download URL: pg_task_tracker-0.5.0.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a2196c58f555609d93b9f9b2c118bbde193b1cb2775cb88625190dda6224ffe
|
|
| MD5 |
7a0653403818d3b7b2457027461e515f
|
|
| BLAKE2b-256 |
f1ebb6cb9e0bf8b67cb1f605a317016474b2f3f349e7f630070595053ca43db5
|
File details
Details for the file pg_task_tracker-0.5.0-py3-none-any.whl.
File metadata
- Download URL: pg_task_tracker-0.5.0-py3-none-any.whl
- Upload date:
- Size: 7.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1516dc638ff130b680515a4cfb22451e326a3f61b67f6c712cf9146b73b75da
|
|
| MD5 |
890d5ff059eedf4ab119c130fe503b02
|
|
| BLAKE2b-256 |
64252142435816bdc7ad1f44886b2e58b2df836672f47220d61e8cc9bf9b2d83
|