Railengine Ingestion SDK
Python SDK for ingesting data into Railtown AI Railengine - handles embeddings, storage, indexing, and webhook publishing.
Overview
The rail-engine-ingest package provides a Pythonic interface for publishing data to Railengine. It supports async/await patterns, Pydantic model validation, and familiar configuration patterns.
Installation
uv pip install rail-engine-ingest
Quick Start
# Copy your ENGINE_TOKEN from https://cndr.railtown.ai Project Settings
import asyncio
import os
from railtown.engine.ingest import RailengineIngest
import base64
import json
engine_token = os.getenv("ENGINE_TOKEN")
async def main():
# Initialize client
async with RailengineIngest(engine_token=engine_token) as client:
# Ingest data
data = {
"name": "Chicken Shawarma",
"meal": "lunch",
"calories": 95
}
response = await client.upsert(data)
print(f"Status: {response.status_code}")
asyncio.run(main())
Configuration
Environment Variable
ENGINE_TOKEN- Base64-encoded JSON string containing ingestion credentials
Constructor Parameters
engine_token(optional) - ENGINE_TOKEN string (if not provided, reads from env)model(optional) - Pydantic model type for validating ingested datatimeout(optional) - Request timeout in seconds orhttpx.Timeout(default30)verify(optional) - TLS verification. Defaults toTrue. Pass a CA bundle path orssl.SSLContextfor custom trust.Falsedisables verification and must be set explicitly.http_client(optional) - Caller-ownedhttpx.AsyncClientfor proxies, custom transports, or tests. The SDK does not close this client.logging_policy(optional) -LoggingPolicyfor SDK logs. Default INFO logs include engine id, status, duration, and payload size. The request body is not logged unlesslog_content=True.
Earlier SDK versions disabled TLS verification. 0.4.0 verifies certificates by default. Use verify= with your CA bundle if the ingestion host uses a private certificate.
SDK loggers are named (railtown.engine.*). Default INFO logging does not write the upsert body. Pass logging_policy=LoggingPolicy(log_content=True) only when you explicitly want redacted, truncated payload logs.
Features
- Single
upsert()method - Unified interface for ingesting data - Multiple data formats - Accepts Pydantic models, dictionaries, or JSON strings
- Model validation - Optional Pydantic model validation
- Direct JSON payload - Sends data directly as JSON to the ingestion endpoint
- Webhook handler -
get_webhook_handler()returns a payload parser when the client is constructed withmodel= - Async/await support - Built for modern async Python applications
Error Handling
The SDK provides custom exception classes:
RailtownError- Base exceptionRailtownBadRequestError- 400 Bad RequestRailtownUnauthorizedError- 401 UnauthorizedRailtownNotFoundError- 404 Not FoundRailtownConflictError- 409 ConflictRailtownServerError- 5xx Server errors
Exceptions are raised on errors.
Requirements
- uv
- Python 3.11+
- httpx >= 0.24.0
- pydantic >= 1.10.0
Related package
For retrieving and searching data from Railengine, install and use rail-engine.
License
MIT
Metadata
Release files for rail-engine-ingest 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| rail_engine_ingest-0.4.1.tar.gz | 30.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rail_engine_ingest-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 63.5 kB
Release files / rail_engine_ingest-0.4.1.tar.gz
| Download URL | rail_engine_ingest-0.4.1.tar.gz |
|---|---|
| Size | 30.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b70e0cea2b0019a5b5ee757ff24e3357661ed04cd25100f9bf37d6b0793acb73
|
|
BLAKE2b-256 checksum How to use checksums |
9916f78f56be860786d270bb5d8256c8db7d7c05698790fb418efea59820c7b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rail_engine_ingest-0.4.1-py3-none-any.whl
| Download URL | rail_engine_ingest-0.4.1-py3-none-any.whl |
|---|---|
| Size | 33.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b40d8d81b0e494b33b1d5deef5e27acf5fc2cd2ab2fef58e25dec0569f53f830
|
|
BLAKE2b-256 checksum How to use checksums |
20b52afb079905a66823462e9bc8b41107eee3157e0dbe2ffb8ce74f2258dfec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for rail-engine-ingest 0.4.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.