Skip to main content

Python/SQLAlchemy async implementation of Prisma Web3 database models

Project description

Prisma Web3 Python

Async PostgreSQL ORM layer for HawkFi and downstream bots, built on SQLAlchemy 2.x async. Models mirror the Prisma schema (managed in the JS project) and expose repositories plus 2.x-style session helpers.

Contents

Tables & Repositories

Model (table) Repository Purpose / notable fields
Token ("Token") TokenRepository Chain-normalized token catalog; search/fuzzy/alias; batch upsert (chain, token_address, symbol, aliases, platforms).
Signal ("Signal") SignalRepository Token alerts; source, signal_type, occurrence_count, last_occurrence.
PreSignal ("PreSignal") PreSignalRepository Early signals; heat scores (channel_calls, multi_signals, kol_discussions).
CryptoNews ("CryptoNews") CryptoNewsRepository News ingestion with unique source_link; JSONB fields matched_currencies, entity_list.
AIAnalysisResult ("AIAnalysisResult") AIAnalysisRepository Unified analysis (Twitter/News/etc.); JSONB heavy (tokens, key_points, final_signal, trading_recommendation, event_struct); JSONB search/stats helpers.
EventImpacts ("EventImpacts") EventImpactRepository Post-event pricing snapshots (price_t0/5m/15m/1h/4h, deltas, meta).
EventLabels ("EventLabels") EventLabelsRepository Label catalog for events.

Utilities: ChainConfig (chain normalization), datetime helpers, TokenImporter.

Session & Config

  • URL: DATABASE_URL (or TEST_DATABASE_URL in tests). postgres:///postgresql:// auto-normalized to postgresql+asyncpg://.
  • Pools: DB_POOL_SIZE, DB_POOL_OVERFLOW, DB_POOL_TIMEOUT.
  • Engine/Session helpers (SQLAlchemy 2.x async):
from prisma_web3_py import session_scope, configure_engine, dispose_engine

# Optionally override URL (e.g., tests)
configure_engine("postgresql+asyncpg://user:pass@localhost:5432/prisma_web3")

async def main():
    async with session_scope() as session:  # commits on success, rollback on error
        ...
    async with session_scope(readonly=True) as session:  # read-only, no commit
        ...

Install

# editable dev install
pip install -e python[dev]

# or published package
pip install prisma-web3-py

Usage

from prisma_web3_py import session_scope, TokenRepository

repo = TokenRepository()

async def create_token():
    async with session_scope() as session:
        await repo.upsert_token(session, {"chain": "eth", "token_address": "0x...", "symbol": "UNI"})

async def search():
    async with session_scope(readonly=True) as session:
        tokens = await repo.search_by_symbol(session, "UNI")

Testing

  • Unit-only (no DB required):
cd python
pytest -q tests/test_ai_analysis_utils.py tests/test_config_and_datetime.py tests/test_base_repository_unit.py
  • Full + integration (requires Postgres, runs against the GH Actions Postgres service by default):
export DATABASE_URL=postgresql+asyncpg://user:pass@localhost:5432/prisma_web3_test
export RUN_DB_TESTS=1
cd python
pytest        # integration tests will run
  • Schema setup: call python - <<'PY' to run init_db() (fallback create_all) if Prisma migrations aren’t applied yet. The CI workflow auto-runs init_db() against the Postgres service when PRISMA_DATABASE_URL is not provided.
  • Cleanup after local/integration runs: python scripts/cleanup_test_data.py removes fake-llm / e2e analysis rows, test tokens/signals, and dangling EventImpacts/Labels.

CI / GitHub Actions

prisma-web3/.github/workflows/publish.yml runs unit + integration tests before publish.

  • Default: uses the built-in Postgres service (postgresql+asyncpg://prisma:prisma@localhost:5432/prisma_web3_test) with RUN_DB_TESTS=1.
  • Override with secrets (recommended for staging/prod-like DBs): set PRISMA_DATABASE_URL (asyncpg URL) and optionally PRISMA_RUN_DB_TESTS=1 under Settings → Secrets and variables → Actions.
  • Schema bootstrap: when running against the service, the workflow calls configure_engine(...); init_db() to create tables; when pointing at an external DB it assumes Prisma migrations are pre-applied.

Cleanup

python/scripts/cleanup_test_data.py deletes test tokens/signals/pre-signals plus fake-llm/e2e AIAnalysisResult rows and dangling EventImpacts/Labels using session_scope.

Best Practices

  • Use session_scope/get_db (alias) for unit-of-work; avoid manual commits in callers.
  • Keep repositories thin; heavy normalization belongs in services. AIAnalysis repo currently mixes normalization with persistence—plan to extract to service layer.
  • JSONB/pg_trgm features are Postgres-specific; document for consumers.
  • Prefer ORM select().scalars(), insert().on_conflict_do_update(); avoid relying on rowcount to detect changes.
  • Production deployments should run Prisma migrations; init_db() is a fallback for tests/local only.

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

prisma_web3_py-1.0.42.tar.gz (488.2 kB view details)

Uploaded Source

Built Distribution

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

prisma_web3_py-1.0.42-py3-none-any.whl (81.9 kB view details)

Uploaded Python 3

File details

Details for the file prisma_web3_py-1.0.42.tar.gz.

File metadata

  • Download URL: prisma_web3_py-1.0.42.tar.gz
  • Upload date:
  • Size: 488.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for prisma_web3_py-1.0.42.tar.gz
Algorithm Hash digest
SHA256 0162da163a69fc21ce058000347e7609eb9f6b6421b2db7f6dc9d27d09ad9b07
MD5 9e9e52c0b89b1ff23de52e1f6bc9d772
BLAKE2b-256 24b1e70a21db31021fc9dda93ca228e800ebf2fc143b5413a70b2a4668ab0b6d

See more details on using hashes here.

File details

Details for the file prisma_web3_py-1.0.42-py3-none-any.whl.

File metadata

File hashes

Hashes for prisma_web3_py-1.0.42-py3-none-any.whl
Algorithm Hash digest
SHA256 3ff98674fe1627af10328450ad33c902d2488ee1bfe2779d0efe03e8b3623eb3
MD5 1f25b5c35c192d611c32533d504b4180
BLAKE2b-256 087f95de4c5ed5f14a6778d0f95472a6c1dfa131dfa0bf587b7770e1955213a2

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