Skip to main content

A lightweight Python interface for extracting and loading using the Singer.io spec.

Project description

ELX

🚧 Under construction

A lightweight Python interface for extracting and loading using the Singer.io spec.

⚡ Lazy install of Singer.io taps and targets
⚡ Stream parallelism for high performance
⚡ Remote state management
⚡ Tap catalog is available in Python for metadata purposes

🔗 Native integration with Dagster
🔗 Native integration with Airflow (todo)
🔗 Native integration with Prefect (todo)

Installation

pip install elx --pre

Usage

The most basic usage is as follows. Simply define the Tap and the Target and elx will take care of the rest.

from elx import Runner, Tap, Target

runner = Runner(
  Tap("git+https://gitlab.com/meltano/tap-carbon-intensity.git"),
  Target("target-jsonl")
)

runner.run()

Configuration

You can configure the tap and target by passing a config dictionary to the Tap and Target constructors. The config will be injected into the tap and target at runtime.

from elx import Tap, Target

tap = Tap(
  "tap-foo",
  config={
    "api_key": "1234567890",
    "start_date": "2020-01-01"
  }
)

target = Target(
  "target-bar",
  config={
    "file_path": "/tmp"
  }
)

State

By default, elx will store the state in the same directory as the script that is running. You can override this by passing a StateManager to the Runner constructor. Behind the scenes, elx uses smart-open to be able to store the state in a variety of locations.

from elx import Runner, StateManager

runner = Runner(
  tap,
  target,
  state_manager=StateManager("s3://my-bucket/my-folder")
)

Supported paths include:

Path Required Environment Variables Elx Extra
s3://my-bucket/my-folder AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY elx[s3]
gs://my-bucket/my-folder GOOGLE_APPLICATION_CREDENTIALS or GOOGLE_API_TOKEN elx[gs]
azure://my-bucket/my-folder AZURE_STORAGE_CONNECTION_STRING elx[azure]
~/my-folder None None
/tmp/my-folder None None
(ssh|scp|sftp)://username@host//my-folder None None
(ssh|scp|sftp)://username:password@host//my-folder None None

Config injection

There are certain variables that are available to inject in the tap or target config. One common use case is to place the tap data in a schema with the tap name.

target = Target(
  "target-bar",
  config={
    "default_target_schema": "{TAP_NAME}"
  }
)

Supported variables:

Variable Example
NOW 2023-08-17T11:06:54.233086
YESTERDAY 2023-08-16T11:06:54.233086
LAST_WEEK 2023-08-10T11:06:54.233086
TAP_EXECUTABLE tap-smoke-test
TAP_NAME tap_smoke_test
TARGET_EXECUTABLE target-postgres
TARGET_NAME target_postgres

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

elx-0.1.0a6.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

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

elx-0.1.0a6-py3-none-any.whl (15.5 kB view details)

Uploaded Python 3

File details

Details for the file elx-0.1.0a6.tar.gz.

File metadata

  • Download URL: elx-0.1.0a6.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.10.12 Linux/6.2.0-1015-azure

File hashes

Hashes for elx-0.1.0a6.tar.gz
Algorithm Hash digest
SHA256 400faef6c4325cac9b2d05c30a920d1ecbfce97001c26f6dd3780c4f3d92c7e8
MD5 455c54a77381c10ce843dbe3c2eec2e5
BLAKE2b-256 c2efd7a4d3b4eae725a5c69e041897b6b695af98f18086d8cf87f0d6165b777b

See more details on using hashes here.

File details

Details for the file elx-0.1.0a6-py3-none-any.whl.

File metadata

  • Download URL: elx-0.1.0a6-py3-none-any.whl
  • Upload date:
  • Size: 15.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.10.12 Linux/6.2.0-1015-azure

File hashes

Hashes for elx-0.1.0a6-py3-none-any.whl
Algorithm Hash digest
SHA256 3ab08ae1839ef574ecb9e08d9390996ec3339d0f78c7f24c99406ce1abeb7b24
MD5 fcc4c0326147f36c427fc7a2543546c1
BLAKE2b-256 ee9020faf2f1cfe32cd016d809d52ccfd26849ea75d9f15634d1e8252000d3d3

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