Shared utilities for Investify services
Project description
investify-utils
Shared utilities for Investify services.
Installation
# Sync PostgreSQL client (psycopg3 + SQLAlchemy + pangres)
pip install investify-utils[postgres]
# Async PostgreSQL client (asyncpg + SQLAlchemy)
pip install investify-utils[postgres-async]
PostgreSQL Clients
Sync Client (PostgresClient)
Uses psycopg3 + SQLAlchemy for connection pooling, pangres for upsert.
from investify_utils.postgres import PostgresClient
client = PostgresClient(
host="localhost",
port=5432,
username="user",
password="pass",
database="db",
# SQLAlchemy pool options
pool_size=5,
pool_recycle=3600,
)
# Read
df = client.read("SELECT * FROM table")
# Insert (uses COPY protocol)
client.insert(df, table="my_table", schema="public")
# Upsert (DataFrame index = primary keys)
df = df.set_index(["id"])
client.upsert(df, table="my_table", schema="public")
# Execute DDL/DML
client.execute("DELETE FROM table WHERE id = 1")
# Close (important for Celery workers)
client.close()
Async Client (AsyncPostgresClient)
Uses asyncpg + SQLAlchemy async engine. Read-only.
from investify_utils.postgres import AsyncPostgresClient
client = AsyncPostgresClient(
host="localhost",
port=5432,
username="user",
password="pass",
database="db",
# SQLAlchemy pool options
pool_size=5,
pool_recycle=3600,
)
# In async context
df = await client.read("SELECT * FROM table")
await client.close()
# Or as context manager
async with AsyncPostgresClient(...) as client:
df = await client.read("SELECT * FROM table")
Celery Integration
Both clients use lazy initialization, safe for Celery prefork workers.
# instances/postgres_core.py
from investify_utils.postgres import PostgresClient
from config import settings
postgres_core = PostgresClient(**settings.postgres.model_dump())
# celery_app.py
from celery.signals import worker_process_init
@worker_process_init.connect
def init_worker(**_kwargs):
# Reset engine for each worker (optional with lazy init)
from instances.postgres_core import postgres_core
postgres_core.close()
Development
uv sync
uv run ruff check investify_utils/
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
investify_utils-2.0.0a12.tar.gz
(13.9 kB
view details)
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 investify_utils-2.0.0a12.tar.gz.
File metadata
- Download URL: investify_utils-2.0.0a12.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
371e3678132e749e6d1b5ae8cae1cd1200d11e7954a0625e46232327844d6910
|
|
| MD5 |
587cd56fbf25cd0dd7f01956e071941a
|
|
| BLAKE2b-256 |
6686301775bbcc3273abced4fcad355b6385428bd81cc690cd5dc09fe870feb6
|
File details
Details for the file investify_utils-2.0.0a12-py3-none-any.whl.
File metadata
- Download URL: investify_utils-2.0.0a12-py3-none-any.whl
- Upload date:
- Size: 22.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6a61d5b649e3a6f8c427aa5b1bb2e36c6f60eba08526fedd988bcbf90012155
|
|
| MD5 |
d1ec980f98e7720394034772b166181c
|
|
| BLAKE2b-256 |
6063dbfce92c598b3036464d69742f24fb4d564c3a805ce731eefcb5e598a9fe
|