Architecture
Python Snapline is a uv workspace monorepo mirroring the Node.js package split. Consumers install snapline-core; config keys stay camelCase for cross-language parity.
Package layers
┌─────────────────────────────────────────────────────────────┐
│ snapline-core (entry point) │
│ test_suite · fixture runners · DB/NoSQL · publishAndPoll │
└───────┬─────────────────┬───────────────────┬───────────────┘
│ │ │
┌───────▼────────┐ ┌──────▼──────────┐ ┌──────▼────────────────┐
│ snapline-engine│ │ api-adapters │ │ messaging-adapters │
│ compare pipeline│ │ REST·GraphQL·SOAP│ │ in-memory queues │
└────────────────┘ └────────┬────────┘ └─────────────────────────┘
│
┌─────────▼──────────┐
│ auth-adapters │
│ OAuth2·OpenID·Basic│
└────────────────────┘
| Pip package | Import | Node equivalent |
|---|---|---|
snapline-core | snapline.core | @vaagatech/snapline-core |
snapline-engine | snapline.engine | @vaagatech/snapline-engine |
snapline-api-adapters | snapline.api_adapters | @vaagatech/snapline-api-adapters |
snapline-auth-adapters | snapline.auth_adapters | @vaagatech/snapline-auth-adapters |
snapline-messaging-adapters | snapline.messaging_adapters | @vaagatech/snapline-messaging-adapters |
snapline-demo-shared | snapline.demo_shared | @vaagatech/snapline-demo-shared |
Naming conventions
| Node | Python |
|---|---|
testSuite() | test_suite() (async) |
runApiFixtureCases() | run_api_fixture_cases() |
writeTestReport() | write_test_report() |
pushTestReportToHub() | push_test_report_to_hub() |
ignoreFields in config | ignoreFields (camelCase preserved) |
Snapline Hub (optional)
Snapline Hub is a separate, optional reporting UI for TestRunReport data. Not required for Snapline — use when you want a centralized dashboard. Push via push_test_report_to_hub() or SNAPLINE_HUB_URL. The Node.js edition has equivalent pushTestReportToHub().
Runtime flow
await test_suite(name, config)
│
├─ auth.initialize() optional OAuth2 / OpenID / Basic
├─ api execute_api → snapline vs expectedFile
├─ dbComparison fetch rows → snapline
├─ apiToDb execute_api → DB row → snapline
├─ dbToApi DB row → execute_api → snapline
└─ publishAndPoll publish queue → poll DB / file / topic → snapline
Repository layout
snapline-python/
├── packages/
│ ├── snapline_engine/
│ ├── snapline_api_adapters/
│ ├── snapline_auth_adapters/
│ ├── snapline_messaging_adapters/
│ └── snapline_core/
├── demo/
│ ├── shared/ snapline.demo_shared (mock server + SQLite)
│ ├── scenarios/ 21 scenarios (scenario.py each)
│ └── run_all/run_all.py
└── tests/ pytest unit tests
Published package dependencies
snapline-core depends only on httpx. It exports DbConnectionLike for SQL — you bring your own Postgres/MySQL driver. SQLite and stub DB helpers live in snapline.demo_shared (demo only).
Differences from Node
- No build step — run demos directly with
uv run demo - Async test_suite — use
asyncio.run()orawaitin async test runners - httpx — HTTP client with 30s default timeout (Node uses fetch + AbortSignal)
- Same scenario IDs — all 21 demo ids match the Node repo