Skip to main content

High-performance Python client for wynd data ingest.

Project description

wynd-dataingest

High-performance Python client for wynd data ingest.

It is built for services that want:

  • HTTP connection reuse through httpx
  • one send() method with NDJSON as the default mode
  • retries with exponential backoff and jitter
  • optional gzip compression based on raw payload size
  • publish-ready packaging for pip install

Install

pip install wynd-dataingest

Quick Start

from wynd_dataingest import CompressionOptions, WyndDataIngestClient

client = WyndDataIngestClient(
    url="http://127.0.0.1:8686/events",
    connections=16,
    table_name="orders",
    table_operation="insert",
    compression=CompressionOptions(gzip=True),
    headers={
        "authorization": "Basic my-token",
    },
)

result = client.send(
    [
        {"service": "api", "level": "info", "message": "order accepted"},
        {"service": "api", "message": "batch item 1"},
        {"service": "api", "message": "batch item 2"},
    ]
)

print(result.status_code)
client.close()

ndjson is the default mode, so send() expects a sequence and emits newline-delimited JSON unless you set mode="json" or mode="text".

API

WyndDataIngestClient(...)

Supported constructor options:

  • url: full endpoint URL
  • mode: "json" | "ndjson" | "text"; defaults to "ndjson"
  • connections: max pooled HTTP connections; defaults to 16
  • table_name: base table name for the table-name header
  • table_operation: "insert" | "new" | "update" | "delete"; defaults to "insert" when table_name is set
  • headers: default request headers
  • timeout_ms: per-request timeout; defaults to 30000
  • user_agent: override the default user agent
  • retry: RetryOptions
  • compression: CompressionOptions

Sending data

The client exposes:

  • send(payload, options=None)
  • close()

send() behaves by mode:

  • mode="ndjson": payload must be a sequence and is serialized as newline-delimited JSON
  • mode="json": payload is serialized with json.dumps
  • mode="text": payload must be a string or sequence of strings
  • bytes or bytearray payloads are sent as-is and can override content type with SendOptions(content_type=...)

Table Routing Header

When table_name is configured, the client automatically adds a table-name header:

  • table_operation="insert" or "new" -> table-name: <table_name>
  • table_operation="update" -> table-name: <table_name>-updates
  • table_operation="delete" -> table-name: <table_name>-deletes

Compression

Enable gzip with built-in defaults:

from wynd_dataingest import CompressionOptions, WyndDataIngestClient

client = WyndDataIngestClient(
    url="http://127.0.0.1:8686/events",
    compression=CompressionOptions(gzip=True),
)

That uses the default gzip threshold of 100KB raw bytes.

Or customize it:

from wynd_dataingest import CompressionOptions, GzipCompressionOptions, WyndDataIngestClient

client = WyndDataIngestClient(
    url="http://127.0.0.1:8686/events",
    compression=CompressionOptions(
        gzip=GzipCompressionOptions(min_bytes=4096, level=6)
    ),
)

Publish To PyPI

Build locally:

python3 -m pip install --upgrade build
python3 -m build

Upload to PyPI:

python3 -m pip install --upgrade twine
python3 -m twine upload dist/*

Then users can install it with:

pip install wynd-dataingest

Project details


Download files

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

Source Distribution

wynd_dataingest-1.0.0.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

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

wynd_dataingest-1.0.0-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file wynd_dataingest-1.0.0.tar.gz.

File metadata

  • Download URL: wynd_dataingest-1.0.0.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for wynd_dataingest-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b2a21f7cb96c719b65b23434aa3c31da38a93786dd48ce7d1acac763da528d3e
MD5 8952fc84ca836bd34b28115d24424843
BLAKE2b-256 edeb20d8697b041f286d1b5b688d0bbb2f2cabb189d94c9a7fa626665ca76669

See more details on using hashes here.

File details

Details for the file wynd_dataingest-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for wynd_dataingest-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4b2b08609291d256d23e8cf21a846adf7d834f3bce4b3bdeab2bedd5833c5f00
MD5 3dac519bee8d444c2f5c8078e16eec9d
BLAKE2b-256 ff78e9356ca02724ccd3cd8da076b2cfabb0941f11364430cc2ad914591f7343

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