Skip to main content

snapline-core

Declarative test orchestration for Snapline — configure auth, API calls, and cross-system comparisons as data.

Install

pip install snapline-core

Quick start

import asyncio
from snapline.core import auth, test_suite

async def main():
    result = await test_suite("My API test", {
        "baseUrl": "https://api.example.com",
        "auth": auth.oauth2({
            "tokenUrl": "https://api.example.com/oauth/token",
            "clientId": "client-id",
            "clientSecret": "client-secret",
        }),
        "api": {
            "endpoint": "/users/me",
            "method": "GET",
            "expectedFile": "fixtures/expected.json",
            "ignoreFields": ["traceId"],
        },
    })
    print(result)

asyncio.run(main())

Fixture-case runners

import asyncio
from snapline.core import fixtures_dir, run_api_fixture_cases, resolve_report_config, write_test_report

async def main():
    result = await run_api_fixture_cases({
        "suiteName": "Customer account — GraphQL fixture cases",
        "fixturesRoot": str(fixtures_dir(__file__, {"relativePath": "fixtures"})),
        "baseUrl": "https://api.example.com",
        "defaults": {
            "endpoint": "/graphql",
            "protocol": "graphql",
            "dataPath": "customerAccount",
            "ignoreFields": ["metadata.traceId"],
        },
    })

    report_config = resolve_report_config({"defaultOutputPath": "./reports/run.json"})
    if report_config:
        write_test_report([result], report_config)

asyncio.run(main())

Database connections (DbConnectionLike)

Published snapline-core does not ship SQL drivers (runtime dependency: httpx only). Implement DbConnectionLike with your Postgres/MySQL client, or copy examples/in_memory_db.py for a minimal in-memory stub.

from snapline.core.types import DbConnectionLike

class AppDb(DbConnectionLike):
    async def query(self, sql: str, params: dict | None = None) -> list[dict]:
        # your driver here
        return rows

Demos use snapline.demo_shared for SQLite and stub postgres/mysql (create_sqlite_connection, seed_db).

Queue → poll (publishAndPoll)

Install snapline-messaging-adapters for queue publishers. Publish a message, then poll SQL or the filesystem for async results:

from snapline.messaging_adapters import messaging
from snapline.core import run_publish_and_poll

queue = messaging.memory()

result = await run_publish_and_poll({
    "publish": {"publisher": queue["publisher"], "topic": "orders.request", "payload": {"orderId": "ORD-1"}},
    "poll": {"db": {"db": app_db, "query": "SELECT * FROM orders WHERE correlationId = :correlationId"}},
    "expected": {"orderId": "ORD-1", "status": "PROCESSED"},
})

See examples/publish_and_poll_file.py and the Node.js docs for Kafka setup.

Warehouse comparison (run_warehouse_comparison)

Chunked SQL → document-store consistency for data-warehouse ETL (26–30 tables in production). Streams a JSONL report so large datasets never load fully into memory.

import asyncio
from snapline.core import nosql, run_warehouse_comparison

async def main():
    # source_db: your Postgres/MySQL client implementing DbConnectionLike
    class SourceDb:
        async def query(self, sql, params=None):
            return [{"customerId": "1", "email": "alice@example.com", "status": "ACTIVE"}]

    result = await run_warehouse_comparison({
        "suiteName": "Warehouse sync",
        "sourceDb": SourceDb(),
        "targetDb": nosql.memory(),  # production: MongoDB DocumentStoreLike adapter
        "tables": [{
            "id": "wh_customers",
            "sourceQuery": "SELECT customer_id AS customerId, email, status FROM wh_customers",
            "targetCollection": "customers",
            "linkKeys": {"customerId": "customerId"},
            "dataMapping": {"status": {"ACTIVE": "ACTV"}},
        }],
        "chunkSize": 100,
        "maxRowsPerTable": 10_000,
        "maxTotalRows": 50_000,
        "report": {"outputPath": "./reports/warehouse.jsonl", "format": "jsonl"},
    })

asyncio.run(main())

See demo project-db for a full SQLite → in-memory example via snapline.demo_shared.

Snapline Hub (optional reporting UI)

Push test results to Snapline Hub for a centralized dashboard. Hub is optional — Snapline works fully without it.

from snapline.core import build_report, push_test_report_to_hub, resolve_hub_config

report = build_report([result], {"durationMs": 1200})
push_test_report_to_hub(report, hub_url="http://localhost:3847")

# Or via env / CLI:
# SNAPLINE_HUB_URL=http://localhost:3847 uv run demo
hub_config = resolve_hub_config()
if hub_config:
    push_test_report_to_hub(report, config=hub_config)

See also: Node.js edition · Snapline Hub README

Documentation

https://vaagatech.github.io/snapline-python/

Repository: https://github.com/vaagatech/snapline-python

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

snapline_core-0.2.4.tar.gz (22.8 kB view details)

Uploaded Source

Built Distribution

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

snapline_core-0.2.4-py3-none-any.whl (34.9 kB view details)

Uploaded Python 3

File details

Details for the file snapline_core-0.2.4.tar.gz.

File metadata

  • Download URL: snapline_core-0.2.4.tar.gz
  • Upload date:
  • Size: 22.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for snapline_core-0.2.4.tar.gz
Algorithm Hash digest
SHA256 4fc22c88dd55060b27c053672c8af38783b516ac72ac3383936a33e1e9796ae6
MD5 aa5e2d98e2d3b84e88d1031a7ac75e9a
BLAKE2b-256 90fa871f405752529c945b33537b88ceaaab0ec35aab0110f4b59d84157c3c82

See more details on using hashes here.

File details

Details for the file snapline_core-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: snapline_core-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 34.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for snapline_core-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 64ced2f7e26a35527d976e8337dd6d8d46780fcb64ab6cb7877643a51ba33137
MD5 91099e45a5961ba0f77b2add090b0884
BLAKE2b-256 3f07f56c337db4441b7701abdfb1b718348c483ad3faf3fa6540244a91e5e2d5

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.5

2 files

This release

0.2.4 This release

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.10

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page