omniload 0.2.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omniload-0.4.0/NOTICE +35 -0
- {omniload-0.2.0 → omniload-0.4.0}/PKG-INFO +55 -17
- {omniload-0.2.0 → omniload-0.4.0}/README.md +50 -13
- {omniload-0.2.0 → omniload-0.4.0}/docs/conf.py +1 -0
- omniload-0.4.0/omniload/__init__.py +37 -0
- omniload-0.4.0/omniload/api.py +565 -0
- omniload-0.2.0/omniload/src/filters.py → omniload-0.4.0/omniload/codec/filter.py +1 -1
- omniload-0.2.0/omniload/src/partition.py → omniload-0.4.0/omniload/codec/hint.py +1 -1
- omniload-0.4.0/omniload/core/factory.py +51 -0
- omniload-0.4.0/omniload/core/model.py +68 -0
- omniload-0.4.0/omniload/core/registry.py +147 -0
- omniload-0.4.0/omniload/core/router.py +423 -0
- omniload-0.2.0/omniload/src/errors.py → omniload-0.4.0/omniload/error.py +23 -1
- omniload-0.4.0/omniload/main.py +372 -0
- omniload-0.2.0/omniload/src/adjust/__init__.py → omniload-0.4.0/omniload/source/adjust/adapter.py +1 -1
- omniload-0.4.0/omniload/source/adjust/api.py +87 -0
- omniload-0.4.0/omniload/source/airtable/api.py +42 -0
- omniload-0.2.0/omniload/src/allium/__init__.py → omniload-0.4.0/omniload/source/allium/adapter.py +1 -1
- omniload-0.4.0/omniload/source/allium/api.py +74 -0
- omniload-0.4.0/omniload/source/anthropic/api.py +55 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/anthropic/helpers.py +1 -1
- omniload-0.4.0/omniload/source/applovin/api.py +50 -0
- omniload-0.2.0/omniload/src/applovin_max/__init__.py → omniload-0.4.0/omniload/source/applovin_max/adapter.py +1 -1
- omniload-0.4.0/omniload/source/applovin_max/api.py +72 -0
- omniload-0.2.0/omniload/src/appsflyer/__init__.py → omniload-0.4.0/omniload/source/appsflyer/adapter.py +1 -1
- omniload-0.4.0/omniload/source/appsflyer/api.py +43 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/appsflyer/client.py +1 -1
- omniload-0.2.0/omniload/src/appstore/__init__.py → omniload-0.4.0/omniload/source/appstore/adapter.py +1 -1
- omniload-0.4.0/omniload/source/appstore/api.py +83 -0
- omniload-0.4.0/omniload/source/arrow/api.py +54 -0
- omniload-0.4.0/omniload/source/asana/api.py +45 -0
- omniload-0.4.0/omniload/source/attio/api.py +31 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/attio/helpers.py +1 -1
- omniload-0.4.0/omniload/source/blobstorage/api.py +189 -0
- omniload-0.4.0/omniload/source/bruin/api.py +24 -0
- omniload-0.4.0/omniload/source/chess/api.py +52 -0
- omniload-0.2.0/omniload/src/clickup/__init__.py → omniload-0.4.0/omniload/source/clickup/adapter.py +2 -1
- omniload-0.4.0/omniload/source/clickup/api.py +46 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/clickup/helpers.py +1 -1
- omniload-0.4.0/omniload/source/couchbase/api.py +171 -0
- omniload-0.4.0/omniload/source/csv/api.py +80 -0
- omniload-0.4.0/omniload/source/cursor/api.py +51 -0
- omniload-0.2.0/omniload/src/customer_io/__init__.py → omniload-0.4.0/omniload/source/customer_io/adapter.py +1 -1
- omniload-0.4.0/omniload/source/customer_io/api.py +104 -0
- omniload-0.4.0/omniload/source/docebo/api.py +67 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/docebo/client.py +2 -2
- omniload-0.2.0/omniload/src/dune/__init__.py → omniload-0.4.0/omniload/source/dune/adapter.py +2 -2
- omniload-0.4.0/omniload/source/dune/api.py +85 -0
- omniload-0.4.0/omniload/source/dynamodb/api.py +73 -0
- omniload-0.2.0/omniload/src/elasticsearch/__init__.py → omniload-0.4.0/omniload/source/elasticsearch/adapter.py +1 -2
- omniload-0.4.0/omniload/source/elasticsearch/api.py +56 -0
- omniload-0.2.0/omniload/src/facebook_ads/__init__.py → omniload-0.4.0/omniload/source/facebook_ads/adapter.py +1 -1
- omniload-0.4.0/omniload/source/facebook_ads/api.py +177 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/helpers.py +1 -1
- omniload-0.4.0/omniload/source/fireflies/api.py +62 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/fireflies/helpers.py +1 -1
- omniload-0.4.0/omniload/source/fluxx/api.py +79 -0
- omniload-0.2.0/omniload/src/frankfurter/__init__.py → omniload-0.4.0/omniload/source/frankfurter/adapter.py +6 -11
- omniload-0.4.0/omniload/source/frankfurter/api.py +55 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/frankfurter/helpers.py +1 -1
- omniload-0.2.0/omniload/src/freshdesk/__init__.py → omniload-0.4.0/omniload/source/freshdesk/adapter.py +6 -12
- omniload-0.4.0/omniload/source/freshdesk/api.py +72 -0
- omniload-0.2.0/omniload/src/freshdesk/freshdesk_client.py → omniload-0.4.0/omniload/source/freshdesk/client.py +1 -1
- omniload-0.4.0/omniload/source/fundraiseup/api.py +23 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/fundraiseup/client.py +1 -1
- omniload-0.2.0/omniload/src/github/__init__.py → omniload-0.4.0/omniload/source/github/adapter.py +2 -1
- omniload-0.4.0/omniload/source/github/api.py +73 -0
- omniload-0.4.0/omniload/source/google_ads/api.py +151 -0
- omniload-0.4.0/omniload/source/google_analytics/api.py +79 -0
- omniload-0.4.0/omniload/source/google_sheets/api.py +52 -0
- omniload-0.4.0/omniload/source/gorgias/api.py +48 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/gorgias/helpers.py +1 -1
- omniload-0.2.0/omniload/src/hostaway/__init__.py → omniload-0.4.0/omniload/source/hostaway/adapter.py +2 -1
- omniload-0.4.0/omniload/source/hostaway/api.py +94 -0
- omniload-0.4.0/omniload/source/http/api.py +61 -0
- omniload-0.2.0/omniload/src/hubspot/__init__.py → omniload-0.4.0/omniload/source/hubspot/adapter.py +2 -1
- omniload-0.4.0/omniload/source/hubspot/api.py +79 -0
- omniload-0.4.0/omniload/source/indeed/api.py +59 -0
- omniload-0.4.0/omniload/source/influxdb/api.py +66 -0
- omniload-0.4.0/omniload/source/intercom/api.py +79 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/intercom/helpers.py +1 -1
- omniload-0.4.0/omniload/source/isoc_pulse/api.py +45 -0
- omniload-0.4.0/omniload/source/jira/api.py +60 -0
- omniload-0.4.0/omniload/source/kafka/api.py +71 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/kafka/helpers.py +1 -1
- omniload-0.4.0/omniload/source/kinesis/api.py +50 -0
- omniload-0.2.0/omniload/src/klaviyo/__init__.py → omniload-0.4.0/omniload/source/klaviyo/adapter.py +2 -2
- omniload-0.4.0/omniload/source/klaviyo/api.py +52 -0
- omniload-0.4.0/omniload/source/linear/api.py +64 -0
- omniload-0.2.0/omniload/src/linkedin_ads/__init__.py → omniload-0.4.0/omniload/source/linkedin_ads/adapter.py +2 -2
- omniload-0.4.0/omniload/source/linkedin_ads/api.py +111 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/linkedin_ads/helpers.py +1 -1
- omniload-0.2.0/omniload/src/mailchimp/__init__.py → omniload-0.4.0/omniload/source/mailchimp/adapter.py +3 -3
- omniload-0.4.0/omniload/source/mailchimp/api.py +31 -0
- omniload-0.2.0/omniload/src/mixpanel/__init__.py → omniload-0.4.0/omniload/source/mixpanel/adapter.py +2 -1
- omniload-0.4.0/omniload/source/mixpanel/api.py +70 -0
- omniload-0.4.0/omniload/source/monday/api.py +42 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/monday/helpers.py +1 -1
- omniload-0.4.0/omniload/source/mongodb/api.py +206 -0
- omniload-0.4.0/omniload/source/notion/api.py +32 -0
- omniload-0.4.0/omniload/source/personio/api.py +57 -0
- omniload-0.2.0/omniload/src/phantombuster/__init__.py → omniload-0.4.0/omniload/source/phantombuster/adapter.py +2 -2
- omniload-0.4.0/omniload/source/phantombuster/api.py +54 -0
- omniload-0.2.0/omniload/src/pinterest/__init__.py → omniload-0.4.0/omniload/source/pinterest/adapter.py +1 -1
- omniload-0.4.0/omniload/source/pinterest/api.py +45 -0
- omniload-0.4.0/omniload/source/pipedrive/api.py +48 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/helpers/pages.py +2 -1
- omniload-0.4.0/omniload/source/plusvibeai/api.py +49 -0
- omniload-0.4.0/omniload/source/primer/api.py +32 -0
- omniload-0.2.0/omniload/src/quickbooks/__init__.py → omniload-0.4.0/omniload/source/quickbooks/adapter.py +0 -1
- omniload-0.4.0/omniload/source/quickbooks/api.py +80 -0
- omniload-0.2.0/omniload/src/reddit_ads/__init__.py → omniload-0.4.0/omniload/source/reddit_ads/adapter.py +1 -1
- omniload-0.4.0/omniload/source/reddit_ads/api.py +81 -0
- omniload-0.4.0/omniload/source/revenuecat/api.py +56 -0
- omniload-0.4.0/omniload/source/salesforce/api.py +43 -0
- omniload-0.4.0/omniload/source/sftp/api.py +57 -0
- omniload-0.2.0/omniload/src/shopify/__init__.py → omniload-0.4.0/omniload/source/shopify/adapter.py +1 -1
- omniload-0.4.0/omniload/source/shopify/api.py +93 -0
- omniload-0.4.0/omniload/source/slack/api.py +49 -0
- omniload-0.2.0/omniload/src/smartsheets/__init__.py → omniload-0.4.0/omniload/source/smartsheets/adapter.py +1 -1
- omniload-0.4.0/omniload/source/smartsheets/api.py +32 -0
- omniload-0.4.0/omniload/source/snapchat_ads/api.py +167 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/snapchat_ads/helpers.py +1 -1
- omniload-0.4.0/omniload/source/socrata/api.py +90 -0
- omniload-0.4.0/omniload/source/solidgate/api.py +54 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/solidgate/helpers.py +2 -2
- omniload-0.4.0/omniload/source/stripe/api.py +88 -0
- omniload-0.2.0/omniload/src/tiktok_ads/__init__.py → omniload-0.4.0/omniload/source/tiktok_ads/adapter.py +1 -1
- omniload-0.4.0/omniload/source/tiktok_ads/api.py +117 -0
- omniload-0.2.0/omniload/src/trustpilot/__init__.py → omniload-0.4.0/omniload/source/trustpilot/adapter.py +2 -1
- omniload-0.4.0/omniload/source/trustpilot/api.py +55 -0
- omniload-0.2.0/omniload/src/wise/__init__.py → omniload-0.4.0/omniload/source/wise/adapter.py +2 -1
- omniload-0.4.0/omniload/source/wise/api.py +44 -0
- omniload-0.2.0/omniload/src/zendesk/__init__.py → omniload-0.4.0/omniload/source/zendesk/adapter.py +2 -1
- omniload-0.4.0/omniload/source/zendesk/api.py +95 -0
- omniload-0.4.0/omniload/source/zoom/api.py +52 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zoom/helpers.py +1 -1
- omniload-0.4.0/omniload/target/athena/__init__.py +93 -0
- omniload-0.4.0/omniload/target/bigquery/__init__.py +83 -0
- omniload-0.4.0/omniload/target/blobstorage/__init__.py +141 -0
- omniload-0.4.0/omniload/target/clickhouse/__init__.py +98 -0
- omniload-0.4.0/omniload/target/cratedb/__init__.py +9 -0
- omniload-0.4.0/omniload/target/csv/__init__.py +128 -0
- omniload-0.4.0/omniload/target/databricks/__init__.py +73 -0
- omniload-0.4.0/omniload/target/duckdb/__init__.py +10 -0
- omniload-0.2.0/omniload/src/elasticsearch/helpers.py → omniload-0.4.0/omniload/target/elasticsearch/adapter.py +0 -1
- omniload-0.4.0/omniload/target/elasticsearch/api.py +33 -0
- omniload-0.4.0/omniload/target/model.py +15 -0
- omniload-0.4.0/omniload/target/mongodb/__init__.py +13 -0
- omniload-0.4.0/omniload/target/motherduck/__init__.py +22 -0
- omniload-0.4.0/omniload/target/mssql/__init__.py +86 -0
- omniload-0.4.0/omniload/target/mysql/__init__.py +20 -0
- omniload-0.4.0/omniload/target/postgresql/__init__.py +8 -0
- omniload-0.4.0/omniload/target/redshift/__init__.py +10 -0
- omniload-0.4.0/omniload/target/snowflake/__init__.py +8 -0
- omniload-0.4.0/omniload/target/sqlite/__init__.py +15 -0
- omniload-0.4.0/omniload/target/synapse/__init__.py +8 -0
- omniload-0.4.0/omniload/target/trino/__init__.py +77 -0
- omniload-0.4.0/omniload/util/auth.py +73 -0
- omniload-0.2.0/omniload/src/blob.py → omniload-0.4.0/omniload/util/endpoint.py +1 -1
- omniload-0.2.0/omniload/src/http_client.py → omniload-0.4.0/omniload/util/http.py +2 -1
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/util}/loader.py +1 -1
- omniload-0.4.0/omniload/util/time.py +29 -0
- {omniload-0.2.0 → omniload-0.4.0}/omniload.egg-info/PKG-INFO +55 -17
- omniload-0.4.0/omniload.egg-info/SOURCES.txt +309 -0
- {omniload-0.2.0 → omniload-0.4.0}/omniload.egg-info/requires.txt +4 -3
- {omniload-0.2.0 → omniload-0.4.0}/omniload.egg-info/top_level.txt +1 -0
- {omniload-0.2.0 → omniload-0.4.0}/pyproject.toml +12 -6
- omniload-0.2.0/NOTICE +0 -35
- omniload-0.2.0/omniload/__init__.py +0 -13
- omniload-0.2.0/omniload/conftest.py +0 -73
- omniload-0.2.0/omniload/main.py +0 -808
- omniload-0.2.0/omniload/main_test.py +0 -6691
- omniload-0.2.0/omniload/src/adjust/adjust_helpers_test.py +0 -15
- omniload-0.2.0/omniload/src/anthropic/helpers_test.py +0 -524
- omniload-0.2.0/omniload/src/appsflyer/client_test.py +0 -58
- omniload-0.2.0/omniload/src/blob_test.py +0 -36
- omniload-0.2.0/omniload/src/couchbase_source/helpers_test.py +0 -170
- omniload-0.2.0/omniload/src/destinations.py +0 -988
- omniload-0.2.0/omniload/src/destinations_test.py +0 -243
- omniload-0.2.0/omniload/src/docebo/helpers_test.py +0 -190
- omniload-0.2.0/omniload/src/facebook_ads/helpers_test.py +0 -208
- omniload-0.2.0/omniload/src/factory.py +0 -305
- omniload-0.2.0/omniload/src/factory_test.py +0 -13
- omniload-0.2.0/omniload/src/fireflies/helpers_test.py +0 -515
- omniload-0.2.0/omniload/src/fluxx/helpers_test.py +0 -287
- omniload-0.2.0/omniload/src/fundraiseup/client_test.py +0 -463
- omniload-0.2.0/omniload/src/google_ads/reports_test.py +0 -212
- omniload-0.2.0/omniload/src/google_ads/test_google_ads.py +0 -184
- omniload-0.2.0/omniload/src/google_analytics/helpers_test.py +0 -78
- omniload-0.2.0/omniload/src/gorgias/helpers_test.py +0 -45
- omniload-0.2.0/omniload/src/intercom/helpers_test.py +0 -249
- omniload-0.2.0/omniload/src/klaviyo/helpers_test.py +0 -36
- omniload-0.2.0/omniload/src/linkedin_ads/helpers_test.py +0 -141
- omniload-0.2.0/omniload/src/loader_test.py +0 -73
- omniload-0.2.0/omniload/src/mailchimp/helpers_test.py +0 -303
- omniload-0.2.0/omniload/src/masking_test.py +0 -386
- omniload-0.2.0/omniload/src/mongodb/helpers_test.py +0 -455
- omniload-0.2.0/omniload/src/primer/helpers_test.py +0 -81
- omniload-0.2.0/omniload/src/reddit_ads/helpers_test.py +0 -181
- omniload-0.2.0/omniload/src/revenuecat/helpers_test.py +0 -158
- omniload-0.2.0/omniload/src/shopify/helpers_test.py +0 -49
- omniload-0.2.0/omniload/src/smartsheets/test_smartsheets.py +0 -134
- omniload-0.2.0/omniload/src/snapchat_ads/helpers_test.py +0 -248
- omniload-0.2.0/omniload/src/sources.py +0 -5434
- omniload-0.2.0/omniload/src/sources_test.py +0 -314
- omniload-0.2.0/omniload/src/stripe_analytics/helpers_test.py +0 -130
- omniload-0.2.0/omniload/src/table_definition.py +0 -15
- omniload-0.2.0/omniload/src/tiktok_ads/tiktok_helpers_test.py +0 -56
- omniload-0.2.0/omniload/src/time.py +0 -11
- omniload-0.2.0/omniload.egg-info/SOURCES.txt +0 -246
- {omniload-0.2.0 → omniload-0.4.0}/LICENSE +0 -0
- {omniload-0.2.0 → omniload-0.4.0}/LICENSE.Apache-2.0 +0 -0
- {omniload-0.2.0 → omniload-0.4.0}/MANIFEST.in +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/codec}/masking.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/core}/resource.py +0 -0
- {omniload-0.2.0 → omniload-0.4.0}/omniload/py.typed +0 -0
- /omniload-0.2.0/omniload/src/adjust/adjust_helpers.py → /omniload-0.4.0/omniload/source/adjust/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/airtable/__init__.py → /omniload-0.4.0/omniload/source/airtable/adapter.py +0 -0
- /omniload-0.2.0/omniload/src/anthropic/__init__.py → /omniload-0.4.0/omniload/source/anthropic/adapter.py +0 -0
- /omniload-0.2.0/omniload/src/applovin/__init__.py → /omniload-0.4.0/omniload/source/applovin/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/appstore/client.py +0 -0
- /omniload-0.2.0/omniload/src/appstore/errors.py → /omniload-0.4.0/omniload/source/appstore/exceptions.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/appstore/models.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/appstore/resources.py +0 -0
- /omniload-0.2.0/omniload/src/arrow/__init__.py → /omniload-0.4.0/omniload/source/arrow/adapter.py +0 -0
- /omniload-0.2.0/omniload/src/asana_source/__init__.py → /omniload-0.4.0/omniload/source/asana/adapter.py +0 -0
- {omniload-0.2.0/omniload/src/asana_source → omniload-0.4.0/omniload/source/asana}/helpers.py +0 -0
- {omniload-0.2.0/omniload/src/asana_source → omniload-0.4.0/omniload/source/asana}/settings.py +0 -0
- /omniload-0.2.0/omniload/src/attio/__init__.py → /omniload-0.4.0/omniload/source/attio/adapter.py +0 -0
- /omniload-0.2.0/omniload/src/bruin/__init__.py → /omniload-0.4.0/omniload/source/bruin/adapter.py +0 -0
- /omniload-0.2.0/omniload/src/chess/__init__.py → /omniload-0.4.0/omniload/source/chess/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/chess/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/chess/settings.py +0 -0
- /omniload-0.2.0/omniload/src/couchbase_source/__init__.py → /omniload-0.4.0/omniload/source/couchbase/adapter.py +0 -0
- {omniload-0.2.0/omniload/src/couchbase_source → omniload-0.4.0/omniload/source/couchbase}/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/cursor/__init__.py → /omniload-0.4.0/omniload/source/cursor/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/cursor/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/customer_io/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/docebo/__init__.py → /omniload-0.4.0/omniload/source/docebo/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/docebo/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/dune/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/dynamodb/__init__.py → /omniload-0.4.0/omniload/source/dynamodb/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/exceptions.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/settings.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/utils.py +0 -0
- /omniload-0.2.0/omniload/src/filesystem/__init__.py → /omniload-0.4.0/omniload/source/filesystem/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/filesystem/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/filesystem/readers.py +0 -0
- /omniload-0.2.0/omniload/src/fireflies/__init__.py → /omniload-0.4.0/omniload/source/fireflies/adapter.py +0 -0
- /omniload-0.2.0/omniload/src/fluxx/__init__.py → /omniload-0.4.0/omniload/source/fluxx/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/fluxx/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/freshdesk/settings.py +0 -0
- /omniload-0.2.0/omniload/src/fundraiseup/__init__.py → /omniload-0.4.0/omniload/source/fundraiseup/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/github/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/github/queries.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/github/settings.py +0 -0
- /omniload-0.2.0/omniload/src/google_ads/__init__.py → /omniload-0.4.0/omniload/source/google_ads/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/field.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/metrics.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/predicates.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/reports.py +0 -0
- /omniload-0.2.0/omniload/src/google_analytics/__init__.py → /omniload-0.4.0/omniload/source/google_analytics/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_analytics/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/google_sheets/__init__.py → /omniload-0.4.0/omniload/source/google_sheets/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_sheets/helpers/__init__.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_sheets/helpers/api_calls.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_sheets/helpers/data_processing.py +0 -0
- /omniload-0.2.0/omniload/src/gorgias/__init__.py → /omniload-0.4.0/omniload/source/gorgias/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/hostaway/client.py +0 -0
- /omniload-0.2.0/omniload/src/http/__init__.py → /omniload-0.4.0/omniload/source/http/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/http/readers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/hubspot/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/hubspot/settings.py +0 -0
- /omniload-0.2.0/omniload/src/indeed/__init__.py → /omniload-0.4.0/omniload/source/indeed/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/indeed/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/influxdb/__init__.py → /omniload-0.4.0/omniload/source/influxdb/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/influxdb/client.py +0 -0
- /omniload-0.2.0/omniload/src/intercom/__init__.py → /omniload-0.4.0/omniload/source/intercom/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/intercom/settings.py +0 -0
- /omniload-0.2.0/omniload/src/isoc_pulse/__init__.py → /omniload-0.4.0/omniload/source/isoc_pulse/adapter.py +0 -0
- /omniload-0.2.0/omniload/src/jira_source/__init__.py → /omniload-0.4.0/omniload/source/jira/adapter.py +0 -0
- {omniload-0.2.0/omniload/src/jira_source → omniload-0.4.0/omniload/source/jira}/helpers.py +0 -0
- {omniload-0.2.0/omniload/src/jira_source → omniload-0.4.0/omniload/source/jira}/settings.py +0 -0
- /omniload-0.2.0/omniload/src/kafka/__init__.py → /omniload-0.4.0/omniload/source/kafka/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/kafka/model.py +0 -0
- /omniload-0.2.0/omniload/src/kinesis/__init__.py → /omniload-0.4.0/omniload/source/kinesis/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/kinesis/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/klaviyo/client.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/klaviyo/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/linear/__init__.py → /omniload-0.4.0/omniload/source/linear/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/linear/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/linkedin_ads/dimension_time_enum.py → /omniload-0.4.0/omniload/source/linkedin_ads/model.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/mailchimp/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/mailchimp/settings.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/mixpanel/client.py +0 -0
- /omniload-0.2.0/omniload/src/monday/__init__.py → /omniload-0.4.0/omniload/source/monday/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/monday/settings.py +0 -0
- /omniload-0.2.0/omniload/src/mongodb/__init__.py → /omniload-0.4.0/omniload/source/mongodb/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/mongodb/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/notion/__init__.py → /omniload-0.4.0/omniload/source/notion/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/notion/helpers/__init__.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/notion/helpers/client.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/notion/helpers/database.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/notion/settings.py +0 -0
- /omniload-0.2.0/omniload/src/personio/__init__.py → /omniload-0.4.0/omniload/source/personio/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/personio/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/phantombuster/client.py +0 -0
- /omniload-0.2.0/omniload/src/pipedrive/__init__.py → /omniload-0.4.0/omniload/source/pipedrive/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/helpers/__init__.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/helpers/custom_fields_munger.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/settings.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/typing.py +0 -0
- /omniload-0.2.0/omniload/src/plusvibeai/__init__.py → /omniload-0.4.0/omniload/source/plusvibeai/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/plusvibeai/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/plusvibeai/settings.py +0 -0
- /omniload-0.2.0/omniload/src/primer/__init__.py → /omniload-0.4.0/omniload/source/primer/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/primer/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/reddit_ads/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/revenuecat/__init__.py → /omniload-0.4.0/omniload/source/revenuecat/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/revenuecat/helpers.py +0 -0
- /omniload-0.2.0/omniload/src/salesforce/__init__.py → /omniload-0.4.0/omniload/source/salesforce/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/salesforce/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/shopify/exceptions.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/shopify/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/shopify/settings.py +0 -0
- /omniload-0.2.0/omniload/src/slack/__init__.py → /omniload-0.4.0/omniload/source/slack/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/slack/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/slack/settings.py +0 -0
- /omniload-0.2.0/omniload/src/snapchat_ads/__init__.py → /omniload-0.4.0/omniload/source/snapchat_ads/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/snapchat_ads/client.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/snapchat_ads/settings.py +0 -0
- /omniload-0.2.0/omniload/src/socrata_source/__init__.py → /omniload-0.4.0/omniload/source/socrata/adapter.py +0 -0
- {omniload-0.2.0/omniload/src/socrata_source → omniload-0.4.0/omniload/source/socrata}/helpers.py +0 -0
- {omniload-0.2.0/omniload/src/socrata_source → omniload-0.4.0/omniload/source/socrata}/settings.py +0 -0
- /omniload-0.2.0/omniload/src/solidgate/__init__.py → /omniload-0.4.0/omniload/source/solidgate/adapter.py +0 -0
- /omniload-0.2.0/omniload/src/sql_database/__init__.py → /omniload-0.4.0/omniload/source/sql_database/adapter.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/sql_database/callbacks.py +0 -0
- /omniload-0.2.0/omniload/src/stripe_analytics/__init__.py → /omniload-0.4.0/omniload/source/stripe/adapter.py +0 -0
- {omniload-0.2.0/omniload/src/stripe_analytics → omniload-0.4.0/omniload/source/stripe}/helpers.py +0 -0
- {omniload-0.2.0/omniload/src/stripe_analytics → omniload-0.4.0/omniload/source/stripe}/settings.py +0 -0
- /omniload-0.2.0/omniload/src/tiktok_ads/tiktok_helpers.py → /omniload-0.4.0/omniload/source/tiktok_ads/helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/trustpilot/client.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/wise/client.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/__init__.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/api_helpers.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/credentials.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/talk_api.py +0 -0
- {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/settings.py +0 -0
- /omniload-0.2.0/omniload/src/zoom/__init__.py → /omniload-0.4.0/omniload/source/zoom/adapter.py +0 -0
- {omniload-0.2.0/omniload/src/collector → omniload-0.4.0/omniload/util}/spinner.py +0 -0
- {omniload-0.2.0 → omniload-0.4.0}/omniload.egg-info/dependency_links.txt +0 -0
- {omniload-0.2.0 → omniload-0.4.0}/omniload.egg-info/entry_points.txt +0 -0
- {omniload-0.2.0 → omniload-0.4.0}/setup.cfg +0 -0
omniload-0.4.0/NOTICE
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
NOTICE
|
|
2
|
+
|
|
3
|
+
This project contains code from the following Apache 2.0 licensed project:
|
|
4
|
+
|
|
5
|
+
dlt-hub/verified-sources
|
|
6
|
+
https://github.com/dlt-hub/verified-sources
|
|
7
|
+
Copyright 2022-2025 ScaleVector
|
|
8
|
+
Licensed under the Apache License, Version 2.0
|
|
9
|
+
|
|
10
|
+
The following directories contain code from dlt-hub:
|
|
11
|
+
- omniload/source/airtable/
|
|
12
|
+
- omniload/source/asana/
|
|
13
|
+
- omniload/source/chess/
|
|
14
|
+
- omniload/source/facebook_ads/
|
|
15
|
+
- omniload/source/filesystem/
|
|
16
|
+
- omniload/source/freshdesk/
|
|
17
|
+
- omniload/source/github/
|
|
18
|
+
- omniload/source/google_ads/
|
|
19
|
+
- omniload/source/google_analytics/
|
|
20
|
+
- omniload/source/google_sheets/
|
|
21
|
+
- omniload/source/hubspot/
|
|
22
|
+
- omniload/source/jira/
|
|
23
|
+
- omniload/source/kafka/
|
|
24
|
+
- omniload/source/kinesis/
|
|
25
|
+
- omniload/source/mongodb/
|
|
26
|
+
- omniload/source/notion/
|
|
27
|
+
- omniload/source/personio/
|
|
28
|
+
- omniload/source/pipedrive/
|
|
29
|
+
- omniload/source/salesforce/
|
|
30
|
+
- omniload/source/shopify/
|
|
31
|
+
- omniload/source/slack/
|
|
32
|
+
- omniload/source/stripe/
|
|
33
|
+
- omniload/source/zendesk/
|
|
34
|
+
|
|
35
|
+
The Apache License 2.0 can be found in the LICENSE.Apache-2.0 file.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omniload
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: omniload is a polyglot data loader based on dlt. Copy data between any source and any destination.
|
|
5
5
|
Author: Mustafa Ersan, Sanju Shah Gupta, Saravjeet 'Aman' Singh
|
|
6
6
|
Author-email: Burak Karakan <burak.karakan@getbruin.com>
|
|
@@ -65,7 +65,7 @@ License-File: NOTICE
|
|
|
65
65
|
Requires-Dist: aiohttp<4
|
|
66
66
|
Requires-Dist: asana<3.3
|
|
67
67
|
Requires-Dist: click<8.5
|
|
68
|
-
Requires-Dist: clickhouse-connect<
|
|
68
|
+
Requires-Dist: clickhouse-connect<2,>=0.8
|
|
69
69
|
Requires-Dist: clickhouse-driver<0.3
|
|
70
70
|
Requires-Dist: clickhouse-sqlalchemy<0.4
|
|
71
71
|
Requires-Dist: confluent-kafka<2.15
|
|
@@ -73,7 +73,7 @@ Requires-Dist: couchbase<5,>=4
|
|
|
73
73
|
Requires-Dist: databricks-sql-connector<5
|
|
74
74
|
Requires-Dist: databricks-sqlalchemy<3
|
|
75
75
|
Requires-Dist: dataclasses-json<0.7
|
|
76
|
-
Requires-Dist: dlt<1.
|
|
76
|
+
Requires-Dist: dlt<1.29
|
|
77
77
|
Requires-Dist: dlt-cratedb<0.2
|
|
78
78
|
Requires-Dist: duckdb<1.6
|
|
79
79
|
Requires-Dist: duckdb-engine<0.18
|
|
@@ -128,7 +128,7 @@ Requires-Dist: poethepoet<1; extra == "develop"
|
|
|
128
128
|
Requires-Dist: pyproject-fmt<3; extra == "develop"
|
|
129
129
|
Requires-Dist: pytest-repeat<1; extra == "develop"
|
|
130
130
|
Requires-Dist: ruff<0.16; extra == "develop"
|
|
131
|
-
Requires-Dist: ty==0.0.
|
|
131
|
+
Requires-Dist: ty==0.0.53; extra == "develop"
|
|
132
132
|
Requires-Dist: validate-pyproject<1; extra == "develop"
|
|
133
133
|
Provides-Extra: full
|
|
134
134
|
Requires-Dist: omniload[ibm-db,odbc,oracle]; extra == "full"
|
|
@@ -143,6 +143,7 @@ Provides-Extra: release
|
|
|
143
143
|
Requires-Dist: build<2; extra == "release"
|
|
144
144
|
Requires-Dist: twine<7; extra == "release"
|
|
145
145
|
Provides-Extra: test
|
|
146
|
+
Requires-Dist: boto3<2; extra == "test"
|
|
146
147
|
Requires-Dist: pendulum[test]<4,>=3; extra == "test"
|
|
147
148
|
Requires-Dist: pytest<10; extra == "test"
|
|
148
149
|
Requires-Dist: pytest-asyncio<2; extra == "test"
|
|
@@ -167,34 +168,49 @@ Dynamic: license-file
|
|
|
167
168
|
|
|
168
169
|
## About
|
|
169
170
|
|
|
170
|
-
omniload is a polyglot data loader framework based on dlt
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
omniload is a polyglot data loader framework based on [dlt], the
|
|
172
|
+
open-source Python library for building data pipelines. dlt does the
|
|
173
|
+
heavy lifting (schema inference, normalization, and incremental load
|
|
174
|
+
state); omniload wraps it behind a single CLI and a URI scheme, so you
|
|
175
|
+
can copy data between any source and any destination without writing
|
|
176
|
+
pipeline code, either from your shell or the Python API.
|
|
174
177
|
|
|
175
178
|
omniload provides the same efficient incremental data loading modes
|
|
176
|
-
inherited by
|
|
179
|
+
inherited by dlt: `append`, `merge`, and `delete+insert`.
|
|
177
180
|
|
|
178
181
|
## Install
|
|
179
|
-
|
|
182
|
+
|
|
183
|
+
### Container
|
|
184
|
+
|
|
185
|
+
For running `omniload` in a container environment, use the provided OCI
|
|
186
|
+
images.
|
|
180
187
|
|
|
181
188
|
```shell
|
|
182
|
-
|
|
189
|
+
docker run --rm ghcr.io/panodata/omniload:latest version
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Package
|
|
193
|
+
|
|
194
|
+
For running or installing the `omniload` Python package,
|
|
195
|
+
we are recommending to use [uv]. [^1][^2]
|
|
196
|
+
```shell
|
|
183
197
|
uvx omniload
|
|
184
198
|
```
|
|
185
199
|
|
|
186
|
-
Alternatively, if you
|
|
200
|
+
Alternatively, if you like to install it account-wide on your system:
|
|
187
201
|
```shell
|
|
188
|
-
uv
|
|
202
|
+
uv tool install omniload
|
|
189
203
|
```
|
|
190
204
|
|
|
191
|
-
|
|
205
|
+
[^1]: You can install `uv` using `pip install uv`, or another method that matches your operating system.
|
|
206
|
+
[^2]: While installing `omniload` with vanilla `pip` is possible, it is an order of magnitude slower.
|
|
192
207
|
|
|
193
208
|
## Synopsis
|
|
194
209
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
210
|
+
### CLI
|
|
211
|
+
|
|
212
|
+
Instruct omniload to read from the PostgreSQL table `public.some_data`,
|
|
213
|
+
and write to the BigQuery warehouse table `omniload.some_data`.
|
|
198
214
|
|
|
199
215
|
```shell
|
|
200
216
|
omniload ingest \
|
|
@@ -204,6 +220,27 @@ omniload ingest \
|
|
|
204
220
|
--dest-table 'omniload.some_data'
|
|
205
221
|
```
|
|
206
222
|
|
|
223
|
+
### Python API
|
|
224
|
+
|
|
225
|
+
Using `omniload.run_ingest`, you can run the same
|
|
226
|
+
ingestion from your own application. The keyword arguments map one-to-one to the
|
|
227
|
+
CLI options, and it returns the dlt `LoadInfo` for the run (or `None` for a dry run).
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
from omniload import run_ingest
|
|
231
|
+
|
|
232
|
+
info = run_ingest(
|
|
233
|
+
source_uri="sqlite:///./source.db",
|
|
234
|
+
dest_uri="duckdb:///./warehouse.duckdb",
|
|
235
|
+
source_table="main.some_table",
|
|
236
|
+
dest_table="public.some_table",
|
|
237
|
+
)
|
|
238
|
+
print(info)
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
See the [Python API documentation] for dry runs, error handling, and passing
|
|
242
|
+
enum options as strings.
|
|
243
|
+
|
|
207
244
|
## Handbook
|
|
208
245
|
|
|
209
246
|
Please visit the [quickstart documentation], or inspect the
|
|
@@ -240,6 +277,7 @@ the way down. Kudos.
|
|
|
240
277
|
|
|
241
278
|
[dlt]: https://github.com/dlt-hub/dlt
|
|
242
279
|
[quickstart documentation]: https://omniload.readthedocs.io/getting-started/quickstart.html
|
|
280
|
+
[Python API documentation]: https://omniload.readthedocs.io/getting-started/python-api.html
|
|
243
281
|
[ingestr]: https://bruin-data.github.io/ingestr/
|
|
244
282
|
[Issues]: https://github.com/panodata/omniload/issues
|
|
245
283
|
[LICENSE]: https://github.com/panodata/omniload/blob/main/LICENSE
|
|
@@ -12,34 +12,49 @@
|
|
|
12
12
|
|
|
13
13
|
## About
|
|
14
14
|
|
|
15
|
-
omniload is a polyglot data loader framework based on dlt
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
omniload is a polyglot data loader framework based on [dlt], the
|
|
16
|
+
open-source Python library for building data pipelines. dlt does the
|
|
17
|
+
heavy lifting (schema inference, normalization, and incremental load
|
|
18
|
+
state); omniload wraps it behind a single CLI and a URI scheme, so you
|
|
19
|
+
can copy data between any source and any destination without writing
|
|
20
|
+
pipeline code, either from your shell or the Python API.
|
|
19
21
|
|
|
20
22
|
omniload provides the same efficient incremental data loading modes
|
|
21
|
-
inherited by
|
|
23
|
+
inherited by dlt: `append`, `merge`, and `delete+insert`.
|
|
22
24
|
|
|
23
25
|
## Install
|
|
24
|
-
|
|
26
|
+
|
|
27
|
+
### Container
|
|
28
|
+
|
|
29
|
+
For running `omniload` in a container environment, use the provided OCI
|
|
30
|
+
images.
|
|
25
31
|
|
|
26
32
|
```shell
|
|
27
|
-
|
|
33
|
+
docker run --rm ghcr.io/panodata/omniload:latest version
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Package
|
|
37
|
+
|
|
38
|
+
For running or installing the `omniload` Python package,
|
|
39
|
+
we are recommending to use [uv]. [^1][^2]
|
|
40
|
+
```shell
|
|
28
41
|
uvx omniload
|
|
29
42
|
```
|
|
30
43
|
|
|
31
|
-
Alternatively, if you
|
|
44
|
+
Alternatively, if you like to install it account-wide on your system:
|
|
32
45
|
```shell
|
|
33
|
-
uv
|
|
46
|
+
uv tool install omniload
|
|
34
47
|
```
|
|
35
48
|
|
|
36
|
-
|
|
49
|
+
[^1]: You can install `uv` using `pip install uv`, or another method that matches your operating system.
|
|
50
|
+
[^2]: While installing `omniload` with vanilla `pip` is possible, it is an order of magnitude slower.
|
|
37
51
|
|
|
38
52
|
## Synopsis
|
|
39
53
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
54
|
+
### CLI
|
|
55
|
+
|
|
56
|
+
Instruct omniload to read from the PostgreSQL table `public.some_data`,
|
|
57
|
+
and write to the BigQuery warehouse table `omniload.some_data`.
|
|
43
58
|
|
|
44
59
|
```shell
|
|
45
60
|
omniload ingest \
|
|
@@ -49,6 +64,27 @@ omniload ingest \
|
|
|
49
64
|
--dest-table 'omniload.some_data'
|
|
50
65
|
```
|
|
51
66
|
|
|
67
|
+
### Python API
|
|
68
|
+
|
|
69
|
+
Using `omniload.run_ingest`, you can run the same
|
|
70
|
+
ingestion from your own application. The keyword arguments map one-to-one to the
|
|
71
|
+
CLI options, and it returns the dlt `LoadInfo` for the run (or `None` for a dry run).
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
from omniload import run_ingest
|
|
75
|
+
|
|
76
|
+
info = run_ingest(
|
|
77
|
+
source_uri="sqlite:///./source.db",
|
|
78
|
+
dest_uri="duckdb:///./warehouse.duckdb",
|
|
79
|
+
source_table="main.some_table",
|
|
80
|
+
dest_table="public.some_table",
|
|
81
|
+
)
|
|
82
|
+
print(info)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
See the [Python API documentation] for dry runs, error handling, and passing
|
|
86
|
+
enum options as strings.
|
|
87
|
+
|
|
52
88
|
## Handbook
|
|
53
89
|
|
|
54
90
|
Please visit the [quickstart documentation], or inspect the
|
|
@@ -85,6 +121,7 @@ the way down. Kudos.
|
|
|
85
121
|
|
|
86
122
|
[dlt]: https://github.com/dlt-hub/dlt
|
|
87
123
|
[quickstart documentation]: https://omniload.readthedocs.io/getting-started/quickstart.html
|
|
124
|
+
[Python API documentation]: https://omniload.readthedocs.io/getting-started/python-api.html
|
|
88
125
|
[ingestr]: https://bruin-data.github.io/ingestr/
|
|
89
126
|
[Issues]: https://github.com/panodata/omniload/issues
|
|
90
127
|
[LICENSE]: https://github.com/panodata/omniload/blob/main/LICENSE
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
2
|
+
from unittest import mock
|
|
3
|
+
|
|
4
|
+
from omniload.api import (
|
|
5
|
+
IncrementalStrategy,
|
|
6
|
+
LoaderFileFormat,
|
|
7
|
+
Progress,
|
|
8
|
+
SchemaNaming,
|
|
9
|
+
SqlBackend,
|
|
10
|
+
SqlReflectionLevel,
|
|
11
|
+
run_ingest,
|
|
12
|
+
)
|
|
13
|
+
from omniload.error import IngestJobError, ValidationError
|
|
14
|
+
|
|
15
|
+
__appname__ = "omniload"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
try:
|
|
19
|
+
__version__ = version(__appname__)
|
|
20
|
+
except PackageNotFoundError: # pragma: no cover
|
|
21
|
+
__version__ = "0.0.0-dev"
|
|
22
|
+
|
|
23
|
+
# Turn off dlt's telemetry to tame three more requests per invocation.
|
|
24
|
+
mock.patch("dlt.common.runtime.telemetry._TELEMETRY_STARTED", True).start()
|
|
25
|
+
|
|
26
|
+
__all__ = [
|
|
27
|
+
"IncrementalStrategy",
|
|
28
|
+
"IngestJobError",
|
|
29
|
+
"LoaderFileFormat",
|
|
30
|
+
"Progress",
|
|
31
|
+
"SchemaNaming",
|
|
32
|
+
"SqlBackend",
|
|
33
|
+
"SqlReflectionLevel",
|
|
34
|
+
"ValidationError",
|
|
35
|
+
"__version__",
|
|
36
|
+
"run_ingest",
|
|
37
|
+
]
|