analitiq-cdk
The Connector Development Kit: a vendor-neutral, transport-neutral toolbox of reusable building blocks a connector uses. It is consumed both for bulk streaming (the OSS engine reads/writes Arrow batches) and for a synchronous control-plane (discover schemas / create tables) that needs neither the columnar nor the HTTP weight.
The one rule
The dependency points engine → CDK, never back. No CDK module may import
anything engine-side (src/grpc, src/state, src/models,
src/engine/{engine,orchestrator,pipeline}, server.py, runner.py,
main.py). Anything that must cross from engine to CDK crosses as a plain value
or a CDK-owned type — never an engine object. A connectivity capability whose
implementation is engine- or deployment-specific is expressed as a CDK-owned
seam (Protocol / ABC) the other side implements (SecretsResolver,
CheckpointStore).
What lives here
cdk/types.py— CDK-native value types (AckStatus,Cursor,SchemaSpec,BatchWriteResult,EndpointScope,CheckpointStore).cdk/contract.py— capability Protocols (Readable,Writable,Discoverable,TableCreator,ColumnDef).- transports +
ConnectionRuntime, the ADBC sub-registry, shared DB helpers, the query builder, the rate limiter. - the expression resolver + derived functions.
- the type-map engine (
type_map/). - the secrets seam + local/in-memory resolvers (
secrets/). - the abstract destination base (
base_handler.py). - the connector families, one class each:
sql/(GenericSQLConnector) andapi/(GenericAPIConnector) serve read and write;file/(GenericFileConnector, plus the storage backends) andstdout/(GenericStdoutConnector) write only. - the batch serializers the write-only families share (
formatters/).
Dependency tiers (core + extras)
The CDK ships a small required core and opt-in extras, so a consumer installs
only what its role needs. The split is enforced by lazy imports: cdk.sql
and cdk.type_map resolve the Arrow helpers (and the HTTP transport its
aiohttp session) only on first use, so importing the core control-plane
surface never pulls pyarrow/aiohttp.
| Tier | Pulls | Surface |
|---|---|---|
| core (always) | sqlalchemy, pydantic |
SQL control-plane: cdk.sql discovery + standalone create_table, ConnectionRuntime/transport seam, type-map (string surface), secrets |
[arrow] |
pyarrow |
columnar streaming: schema_contract, sql.adbc_reader, type_map.parse_arrow_type, GenericSQLConnector read/write |
[api] |
aiohttp, aiohttp-retry, orjson, python-dateutil, jsonschema[format-nongpl] |
HTTP transport plus GenericAPIConnector: bounded transport retries, a lossless JSON encoder, the ISO parser a stored replication cursor is read with, and the reference implementation that enforces a declared param's value keywords (format-nongpl, never format: the latter pulls a GPLv3 dependency into an Apache-2.0 package) |
[file] |
aiofiles + pyarrow |
the file / s3 destination family (cdk.file), which writes through the local filesystem backend |
[streaming] |
[arrow] + [api] + [file] |
full connector surface the engine consumes |
[s3] |
boto3 |
s3:// secret refs (SchemeSecretsResolver) |
[conformance] |
pytest + pyarrow + jsonschema[format-nongpl] |
the connector conformance suite a connector repo runs in its own CI; the api tier builds a request through cdk.api.request, so it judges a param's value keywords with the same library the run does |
Plus the per-driver DB package a given connector needs (asyncpg, adbc-driver-*, …).
The thin-surface entry points raise cdk.MissingExtraError (naming the extra,
e.g. analitiq-cdk[arrow]) when the extra is absent, rather than a bare
No module named 'pyarrow': the package-level lazy reexports
(cdk.sql.AdbcReader / open_adbc_reader, cdk.type_map.parse_arrow_type /
resolve_arrow_type) and the HTTP transport (build_http_from_spec). A
genuinely-absent extra is relabelled; an unrelated or broken-install
import failure (a partial build failing on a submodule, a missing transitive
dep) is re-raised untouched so the real cause survives.
Directly importing a streaming module that belongs to an extra
(cdk.schema_contract, cdk.sql.adbc_reader, cdk.type_map.arrow,
cdk.sql.generic, cdk.file.generic, cdk.stdout.generic,
cdk.base_handler) without that extra
raises a plain ImportError naming the missing package on the import line — those modules
are the extra and require it by design; a thin control-plane consumer reaches
the Arrow surface only through the guarded lazy reexports above, never by
importing these modules directly.
Install
Published on PyPI as analitiq-cdk.
Releases are currently pre-releases, so pip needs --pre (or an exact pin).
Control-plane only (discover + create-table, no pyarrow/aiohttp):
pip install --pre analitiq-cdk
Full streaming surface:
pip install --pre "analitiq-cdk[streaming]"
The engine consumes it in-tree (it is on PYTHONPATH alongside src/) and
declares pyarrow/aiohttp itself, so the bundled engine image always has the
full surface regardless of the CDK's own extras.
Metadata
Release files for analitiq-cdk 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| analitiq_cdk-0.4.0.tar.gz | 393.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| analitiq_cdk-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 851.3 kB
Release files / analitiq_cdk-0.4.0.tar.gz
| Download URL | analitiq_cdk-0.4.0.tar.gz |
|---|---|
| Size | 393.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bbb37a9570bf9ab19cb6043c820fc2f44f340624e12473d284c80a96d25ce42a
|
|
BLAKE2b-256 checksum How to use checksums |
81156563ba5d477b2f6a84f899bf486084b4071648d91dddedcb2e883bcd861f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency logRelease files / analitiq_cdk-0.4.0-py3-none-any.whl
| Download URL | analitiq_cdk-0.4.0-py3-none-any.whl |
|---|---|
| Size | 457.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c407b340d2bacd42d656c36285112c35225cb348ded4e2d1fa660a1634a98b2d
|
|
BLAKE2b-256 checksum How to use checksums |
fdee566540b799862e24ea2c6c5e71664664a9384f41df11b857937431d4f0b9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency log