omniload 0.3.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.3.0 → omniload-0.4.0}/PKG-INFO +2 -2
- {omniload-0.3.0 → omniload-0.4.0}/omniload/__init__.py +2 -2
- {omniload-0.3.0 → omniload-0.4.0}/omniload/api.py +12 -11
- omniload-0.3.0/omniload/src/filters.py → omniload-0.4.0/omniload/codec/filter.py +1 -1
- omniload-0.3.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.3.0 → omniload-0.4.0}/omniload/main.py +1 -1
- omniload-0.3.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.3.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.3.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.3.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.3.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.3.0/omniload/src → omniload-0.4.0/omniload/source}/appsflyer/client.py +1 -1
- omniload-0.3.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.3.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.3.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.3.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.3.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.3.0/omniload/src → omniload-0.4.0/omniload/source}/docebo/client.py +2 -2
- omniload-0.3.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.3.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.3.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.3.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.3.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.3.0/omniload/src/frankfurter/__init__.py → omniload-0.4.0/omniload/source/frankfurter/adapter.py +1 -1
- omniload-0.4.0/omniload/source/frankfurter/api.py +55 -0
- omniload-0.3.0/omniload/src/freshdesk/__init__.py → omniload-0.4.0/omniload/source/freshdesk/adapter.py +1 -1
- omniload-0.4.0/omniload/source/freshdesk/api.py +72 -0
- omniload-0.3.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.3.0/omniload/src → omniload-0.4.0/omniload/source}/fundraiseup/client.py +1 -1
- omniload-0.3.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.3.0/omniload/src → omniload-0.4.0/omniload/source}/gorgias/helpers.py +1 -1
- omniload-0.3.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.3.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.3.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.3.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.3.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.3.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.3.0/omniload/src → omniload-0.4.0/omniload/source}/linkedin_ads/helpers.py +1 -1
- omniload-0.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.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.3.0/omniload/src/blob.py → omniload-0.4.0/omniload/util/endpoint.py +1 -1
- omniload-0.3.0/omniload/src/http_client.py → omniload-0.4.0/omniload/util/http.py +2 -1
- {omniload-0.3.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.3.0 → omniload-0.4.0}/omniload.egg-info/PKG-INFO +2 -2
- omniload-0.4.0/omniload.egg-info/SOURCES.txt +309 -0
- {omniload-0.3.0 → omniload-0.4.0}/omniload.egg-info/requires.txt +1 -1
- {omniload-0.3.0 → omniload-0.4.0}/pyproject.toml +7 -2
- omniload-0.3.0/NOTICE +0 -35
- omniload-0.3.0/omniload/src/destinations.py +0 -988
- omniload-0.3.0/omniload/src/factory.py +0 -305
- omniload-0.3.0/omniload/src/sources.py +0 -5437
- omniload-0.3.0/omniload/src/table_definition.py +0 -16
- omniload-0.3.0/omniload/src/time.py +0 -11
- omniload-0.3.0/omniload.egg-info/SOURCES.txt +0 -213
- {omniload-0.3.0 → omniload-0.4.0}/LICENSE +0 -0
- {omniload-0.3.0 → omniload-0.4.0}/LICENSE.Apache-2.0 +0 -0
- {omniload-0.3.0 → omniload-0.4.0}/MANIFEST.in +0 -0
- {omniload-0.3.0 → omniload-0.4.0}/README.md +0 -0
- {omniload-0.3.0 → omniload-0.4.0}/docs/conf.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/codec}/masking.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/core}/resource.py +0 -0
- /omniload-0.3.0/omniload/src/errors.py → /omniload-0.4.0/omniload/error.py +0 -0
- {omniload-0.3.0 → omniload-0.4.0}/omniload/py.typed +0 -0
- /omniload-0.3.0/omniload/src/adjust/adjust_helpers.py → /omniload-0.4.0/omniload/source/adjust/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/airtable/__init__.py → /omniload-0.4.0/omniload/source/airtable/adapter.py +0 -0
- /omniload-0.3.0/omniload/src/anthropic/__init__.py → /omniload-0.4.0/omniload/source/anthropic/adapter.py +0 -0
- /omniload-0.3.0/omniload/src/applovin/__init__.py → /omniload-0.4.0/omniload/source/applovin/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/appstore/client.py +0 -0
- /omniload-0.3.0/omniload/src/appstore/errors.py → /omniload-0.4.0/omniload/source/appstore/exceptions.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/appstore/models.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/appstore/resources.py +0 -0
- /omniload-0.3.0/omniload/src/arrow/__init__.py → /omniload-0.4.0/omniload/source/arrow/adapter.py +0 -0
- /omniload-0.3.0/omniload/src/asana_source/__init__.py → /omniload-0.4.0/omniload/source/asana/adapter.py +0 -0
- {omniload-0.3.0/omniload/src/asana_source → omniload-0.4.0/omniload/source/asana}/helpers.py +0 -0
- {omniload-0.3.0/omniload/src/asana_source → omniload-0.4.0/omniload/source/asana}/settings.py +0 -0
- /omniload-0.3.0/omniload/src/attio/__init__.py → /omniload-0.4.0/omniload/source/attio/adapter.py +0 -0
- /omniload-0.3.0/omniload/src/bruin/__init__.py → /omniload-0.4.0/omniload/source/bruin/adapter.py +0 -0
- /omniload-0.3.0/omniload/src/chess/__init__.py → /omniload-0.4.0/omniload/source/chess/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/chess/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/chess/settings.py +0 -0
- /omniload-0.3.0/omniload/src/couchbase_source/__init__.py → /omniload-0.4.0/omniload/source/couchbase/adapter.py +0 -0
- {omniload-0.3.0/omniload/src/couchbase_source → omniload-0.4.0/omniload/source/couchbase}/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/cursor/__init__.py → /omniload-0.4.0/omniload/source/cursor/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/cursor/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/customer_io/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/docebo/__init__.py → /omniload-0.4.0/omniload/source/docebo/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/docebo/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/dune/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/dynamodb/__init__.py → /omniload-0.4.0/omniload/source/dynamodb/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/exceptions.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/settings.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/utils.py +0 -0
- /omniload-0.3.0/omniload/src/filesystem/__init__.py → /omniload-0.4.0/omniload/source/filesystem/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/filesystem/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/filesystem/readers.py +0 -0
- /omniload-0.3.0/omniload/src/fireflies/__init__.py → /omniload-0.4.0/omniload/source/fireflies/adapter.py +0 -0
- /omniload-0.3.0/omniload/src/fluxx/__init__.py → /omniload-0.4.0/omniload/source/fluxx/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/fluxx/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/frankfurter/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/freshdesk/settings.py +0 -0
- /omniload-0.3.0/omniload/src/fundraiseup/__init__.py → /omniload-0.4.0/omniload/source/fundraiseup/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/github/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/github/queries.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/github/settings.py +0 -0
- /omniload-0.3.0/omniload/src/google_ads/__init__.py → /omniload-0.4.0/omniload/source/google_ads/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/field.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/metrics.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/predicates.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/reports.py +0 -0
- /omniload-0.3.0/omniload/src/google_analytics/__init__.py → /omniload-0.4.0/omniload/source/google_analytics/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/google_analytics/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/google_sheets/__init__.py → /omniload-0.4.0/omniload/source/google_sheets/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/google_sheets/helpers/__init__.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/google_sheets/helpers/api_calls.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/google_sheets/helpers/data_processing.py +0 -0
- /omniload-0.3.0/omniload/src/gorgias/__init__.py → /omniload-0.4.0/omniload/source/gorgias/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/hostaway/client.py +0 -0
- /omniload-0.3.0/omniload/src/http/__init__.py → /omniload-0.4.0/omniload/source/http/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/http/readers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/hubspot/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/hubspot/settings.py +0 -0
- /omniload-0.3.0/omniload/src/indeed/__init__.py → /omniload-0.4.0/omniload/source/indeed/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/indeed/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/influxdb/__init__.py → /omniload-0.4.0/omniload/source/influxdb/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/influxdb/client.py +0 -0
- /omniload-0.3.0/omniload/src/intercom/__init__.py → /omniload-0.4.0/omniload/source/intercom/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/intercom/settings.py +0 -0
- /omniload-0.3.0/omniload/src/isoc_pulse/__init__.py → /omniload-0.4.0/omniload/source/isoc_pulse/adapter.py +0 -0
- /omniload-0.3.0/omniload/src/jira_source/__init__.py → /omniload-0.4.0/omniload/source/jira/adapter.py +0 -0
- {omniload-0.3.0/omniload/src/jira_source → omniload-0.4.0/omniload/source/jira}/helpers.py +0 -0
- {omniload-0.3.0/omniload/src/jira_source → omniload-0.4.0/omniload/source/jira}/settings.py +0 -0
- /omniload-0.3.0/omniload/src/kafka/__init__.py → /omniload-0.4.0/omniload/source/kafka/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/kafka/model.py +0 -0
- /omniload-0.3.0/omniload/src/kinesis/__init__.py → /omniload-0.4.0/omniload/source/kinesis/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/kinesis/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/klaviyo/client.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/klaviyo/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/linear/__init__.py → /omniload-0.4.0/omniload/source/linear/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/linear/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/linkedin_ads/dimension_time_enum.py → /omniload-0.4.0/omniload/source/linkedin_ads/model.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/mailchimp/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/mailchimp/settings.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/mixpanel/client.py +0 -0
- /omniload-0.3.0/omniload/src/monday/__init__.py → /omniload-0.4.0/omniload/source/monday/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/monday/settings.py +0 -0
- /omniload-0.3.0/omniload/src/mongodb/__init__.py → /omniload-0.4.0/omniload/source/mongodb/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/mongodb/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/notion/__init__.py → /omniload-0.4.0/omniload/source/notion/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/notion/helpers/__init__.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/notion/helpers/client.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/notion/helpers/database.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/notion/settings.py +0 -0
- /omniload-0.3.0/omniload/src/personio/__init__.py → /omniload-0.4.0/omniload/source/personio/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/personio/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/phantombuster/client.py +0 -0
- /omniload-0.3.0/omniload/src/pipedrive/__init__.py → /omniload-0.4.0/omniload/source/pipedrive/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/helpers/__init__.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/helpers/custom_fields_munger.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/settings.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/typing.py +0 -0
- /omniload-0.3.0/omniload/src/plusvibeai/__init__.py → /omniload-0.4.0/omniload/source/plusvibeai/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/plusvibeai/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/plusvibeai/settings.py +0 -0
- /omniload-0.3.0/omniload/src/primer/__init__.py → /omniload-0.4.0/omniload/source/primer/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/primer/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/reddit_ads/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/revenuecat/__init__.py → /omniload-0.4.0/omniload/source/revenuecat/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/revenuecat/helpers.py +0 -0
- /omniload-0.3.0/omniload/src/salesforce/__init__.py → /omniload-0.4.0/omniload/source/salesforce/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/salesforce/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/shopify/exceptions.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/shopify/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/shopify/settings.py +0 -0
- /omniload-0.3.0/omniload/src/slack/__init__.py → /omniload-0.4.0/omniload/source/slack/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/slack/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/slack/settings.py +0 -0
- /omniload-0.3.0/omniload/src/snapchat_ads/__init__.py → /omniload-0.4.0/omniload/source/snapchat_ads/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/snapchat_ads/client.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/snapchat_ads/settings.py +0 -0
- /omniload-0.3.0/omniload/src/socrata_source/__init__.py → /omniload-0.4.0/omniload/source/socrata/adapter.py +0 -0
- {omniload-0.3.0/omniload/src/socrata_source → omniload-0.4.0/omniload/source/socrata}/helpers.py +0 -0
- {omniload-0.3.0/omniload/src/socrata_source → omniload-0.4.0/omniload/source/socrata}/settings.py +0 -0
- /omniload-0.3.0/omniload/src/solidgate/__init__.py → /omniload-0.4.0/omniload/source/solidgate/adapter.py +0 -0
- /omniload-0.3.0/omniload/src/sql_database/__init__.py → /omniload-0.4.0/omniload/source/sql_database/adapter.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/sql_database/callbacks.py +0 -0
- /omniload-0.3.0/omniload/src/stripe_analytics/__init__.py → /omniload-0.4.0/omniload/source/stripe/adapter.py +0 -0
- {omniload-0.3.0/omniload/src/stripe_analytics → omniload-0.4.0/omniload/source/stripe}/helpers.py +0 -0
- {omniload-0.3.0/omniload/src/stripe_analytics → omniload-0.4.0/omniload/source/stripe}/settings.py +0 -0
- /omniload-0.3.0/omniload/src/tiktok_ads/tiktok_helpers.py → /omniload-0.4.0/omniload/source/tiktok_ads/helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/trustpilot/client.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/wise/client.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/__init__.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/api_helpers.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/credentials.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/talk_api.py +0 -0
- {omniload-0.3.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/settings.py +0 -0
- /omniload-0.3.0/omniload/src/zoom/__init__.py → /omniload-0.4.0/omniload/source/zoom/adapter.py +0 -0
- {omniload-0.3.0/omniload/src/collector → omniload-0.4.0/omniload/util}/spinner.py +0 -0
- {omniload-0.3.0 → omniload-0.4.0}/omniload.egg-info/dependency_links.txt +0 -0
- {omniload-0.3.0 → omniload-0.4.0}/omniload.egg-info/entry_points.txt +0 -0
- {omniload-0.3.0 → omniload-0.4.0}/omniload.egg-info/top_level.txt +0 -0
- {omniload-0.3.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>
|
|
@@ -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"
|
|
@@ -10,7 +10,7 @@ from omniload.api import (
|
|
|
10
10
|
SqlReflectionLevel,
|
|
11
11
|
run_ingest,
|
|
12
12
|
)
|
|
13
|
-
from omniload.
|
|
13
|
+
from omniload.error import IngestJobError, ValidationError
|
|
14
14
|
|
|
15
15
|
__appname__ = "omniload"
|
|
16
16
|
|
|
@@ -21,7 +21,7 @@ except PackageNotFoundError: # pragma: no cover
|
|
|
21
21
|
__version__ = "0.0.0-dev"
|
|
22
22
|
|
|
23
23
|
# Turn off dlt's telemetry to tame three more requests per invocation.
|
|
24
|
-
mock.patch("dlt.common.runtime.telemetry._TELEMETRY_STARTED", True)
|
|
24
|
+
mock.patch("dlt.common.runtime.telemetry._TELEMETRY_STARTED", True).start()
|
|
25
25
|
|
|
26
26
|
__all__ = [
|
|
27
27
|
"IncrementalStrategy",
|
|
@@ -16,7 +16,7 @@ from datetime import datetime
|
|
|
16
16
|
from enum import Enum
|
|
17
17
|
from typing import TYPE_CHECKING
|
|
18
18
|
|
|
19
|
-
from omniload.
|
|
19
|
+
from omniload.error import IngestJobError, ValidationError
|
|
20
20
|
|
|
21
21
|
if TYPE_CHECKING:
|
|
22
22
|
from dlt.common.pipeline import LoadInfo
|
|
@@ -145,18 +145,19 @@ def run_ingest(
|
|
|
145
145
|
from dlt.common.schema.typing import TColumnSchema
|
|
146
146
|
from dlt.pipeline.exceptions import PipelineStepFailed
|
|
147
147
|
|
|
148
|
-
import omniload.
|
|
149
|
-
|
|
150
|
-
from omniload.
|
|
151
|
-
from omniload.src.destinations import AthenaDestination, ClickhouseDestination
|
|
152
|
-
from omniload.src.factory import SourceDestinationFactory
|
|
153
|
-
from omniload.src.filters import (
|
|
148
|
+
import omniload.core.resource as resource
|
|
149
|
+
from omniload.codec import hint
|
|
150
|
+
from omniload.codec.filter import (
|
|
154
151
|
cast_set_to_list,
|
|
155
152
|
cast_spanner_types,
|
|
156
153
|
create_masking_filter,
|
|
157
154
|
handle_mysql_empty_dates,
|
|
158
155
|
)
|
|
159
|
-
from omniload.
|
|
156
|
+
from omniload.core.factory import SourceDestinationFactory
|
|
157
|
+
from omniload.source.mongodb.api import MongoDbSource
|
|
158
|
+
from omniload.target.athena import AthenaDestination
|
|
159
|
+
from omniload.target.clickhouse import ClickhouseDestination
|
|
160
|
+
from omniload.util.spinner import SpinnerCollector
|
|
160
161
|
|
|
161
162
|
incremental_strategy = _coerce(incremental_strategy, IncrementalStrategy)
|
|
162
163
|
progress = _coerce(progress, Progress)
|
|
@@ -428,7 +429,7 @@ def run_ingest(
|
|
|
428
429
|
# https://github.com/dlt-hub/dlt/issues/2248
|
|
429
430
|
# TODO(turtledev): only apply for write dispositions that actually cause an exception.
|
|
430
431
|
# TODO(turtledev): make batch size configurable
|
|
431
|
-
import omniload.
|
|
432
|
+
import omniload.source.arrow.adapter as arrow
|
|
432
433
|
|
|
433
434
|
resource.for_each(dlt_source, lambda x: x.add_map(arrow.as_list))
|
|
434
435
|
|
|
@@ -440,7 +441,7 @@ def run_ingest(
|
|
|
440
441
|
resource.for_each(dlt_source, lambda x: x.add_limit(yield_limit))
|
|
441
442
|
|
|
442
443
|
if isinstance(source, MongoDbSource):
|
|
443
|
-
from omniload.
|
|
444
|
+
from omniload.core.resource import TypeHintMap
|
|
444
445
|
|
|
445
446
|
resource.for_each(dlt_source, lambda x: x.add_map(TypeHintMap().type_hint_map))
|
|
446
447
|
|
|
@@ -451,7 +452,7 @@ def run_ingest(
|
|
|
451
452
|
resource.for_each(dlt_source, col_h)
|
|
452
453
|
|
|
453
454
|
if isinstance(destination, AthenaDestination) and partition_by:
|
|
454
|
-
|
|
455
|
+
hint.apply_athena_hints(dlt_source, partition_by, column_hints)
|
|
455
456
|
|
|
456
457
|
if isinstance(destination, ClickhouseDestination):
|
|
457
458
|
from dlt.destinations.adapters import clickhouse_adapter
|
|
@@ -54,7 +54,7 @@ def table_adapter_exclude_columns(cols: list[str]):
|
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
def create_masking_filter(mask_configs: list[str]):
|
|
57
|
-
from omniload.
|
|
57
|
+
from omniload.codec.masking import create_masking_mapper
|
|
58
58
|
|
|
59
59
|
if not mask_configs:
|
|
60
60
|
return lambda x: x
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from urllib.parse import urlparse
|
|
2
|
+
|
|
3
|
+
from omniload.core.model import DestinationProtocol, LazyRegistry, SourceProtocol
|
|
4
|
+
from omniload.core.registry import (
|
|
5
|
+
SQL_SOURCE_SCHEMES,
|
|
6
|
+
destinations,
|
|
7
|
+
sources,
|
|
8
|
+
)
|
|
9
|
+
from omniload.core.router import SqlSourceRouter
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def parse_scheme_from_uri(uri: str) -> str:
|
|
13
|
+
parsed = urlparse(uri)
|
|
14
|
+
if parsed.scheme != "":
|
|
15
|
+
return parsed.scheme
|
|
16
|
+
|
|
17
|
+
uri_parts = uri.split("://")
|
|
18
|
+
if len(uri_parts) > 1:
|
|
19
|
+
return uri_parts[0]
|
|
20
|
+
|
|
21
|
+
raise ValueError(f"Could not parse scheme from uri: {uri}")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class SourceDestinationFactory:
|
|
25
|
+
source_scheme: str
|
|
26
|
+
destination_scheme: str
|
|
27
|
+
sources: LazyRegistry = sources
|
|
28
|
+
destinations: LazyRegistry = destinations
|
|
29
|
+
|
|
30
|
+
def __init__(self, source_uri: str, destination_uri: str):
|
|
31
|
+
self.source_uri = source_uri
|
|
32
|
+
self.source_scheme = parse_scheme_from_uri(source_uri)
|
|
33
|
+
|
|
34
|
+
self.destination_uri = destination_uri
|
|
35
|
+
self.destination_scheme = parse_scheme_from_uri(destination_uri)
|
|
36
|
+
|
|
37
|
+
def get_source(self) -> SourceProtocol:
|
|
38
|
+
if self.source_scheme in SQL_SOURCE_SCHEMES:
|
|
39
|
+
return SqlSourceRouter()
|
|
40
|
+
elif self.source_scheme in self.sources:
|
|
41
|
+
return self.sources[self.source_scheme]()
|
|
42
|
+
else:
|
|
43
|
+
raise ValueError(f"Unsupported source scheme: {self.source_scheme}")
|
|
44
|
+
|
|
45
|
+
def get_destination(self) -> DestinationProtocol:
|
|
46
|
+
if self.destination_scheme in self.destinations:
|
|
47
|
+
return self.destinations[self.destination_scheme]()
|
|
48
|
+
else:
|
|
49
|
+
raise ValueError(
|
|
50
|
+
f"Unsupported destination scheme: {self.destination_scheme}"
|
|
51
|
+
)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import importlib
|
|
2
|
+
import typing
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Any, Iterator, Mapping, Protocol
|
|
5
|
+
|
|
6
|
+
if typing.TYPE_CHECKING:
|
|
7
|
+
from dlt.common.destination import Destination
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class SourceProtocol(Protocol):
|
|
11
|
+
def dlt_source(self, uri: str, table: str, **kwargs):
|
|
12
|
+
pass
|
|
13
|
+
|
|
14
|
+
def handles_incrementality(self) -> bool:
|
|
15
|
+
pass
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class DestinationProtocol(Protocol):
|
|
19
|
+
def dlt_dest(self, uri: str, **kwargs) -> "Destination":
|
|
20
|
+
pass
|
|
21
|
+
|
|
22
|
+
def dlt_run_params(self, uri: str, table: str, **kwargs):
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
def post_load(self) -> None:
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class TableDefinition:
|
|
31
|
+
dataset: str
|
|
32
|
+
table: str
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def table_string_to_dataclass(table: str) -> TableDefinition:
|
|
36
|
+
table_fields = table.split(".", 1)
|
|
37
|
+
if len(table_fields) != 2:
|
|
38
|
+
raise ValueError("Table name must be in the format <schema>.<table>")
|
|
39
|
+
|
|
40
|
+
return TableDefinition(dataset=table_fields[0], table=table_fields[1])
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class LazyRegistry(Mapping):
|
|
44
|
+
"""Mapping that imports a connector class only when its scheme is first accessed."""
|
|
45
|
+
|
|
46
|
+
def __init__(self, paths: dict[str, str]) -> None:
|
|
47
|
+
self._paths = paths
|
|
48
|
+
self._cache: dict[str, Any] = {}
|
|
49
|
+
|
|
50
|
+
def _load(self, dotted_path: str) -> Any:
|
|
51
|
+
module_path, cls_name = dotted_path.rsplit(":", 1)
|
|
52
|
+
return getattr(importlib.import_module(module_path), cls_name)
|
|
53
|
+
|
|
54
|
+
def __getitem__(self, key: str) -> Any:
|
|
55
|
+
if key not in self._cache:
|
|
56
|
+
if key not in self._paths:
|
|
57
|
+
raise KeyError(key)
|
|
58
|
+
self._cache[key] = self._load(self._paths[key])
|
|
59
|
+
return self._cache[key]
|
|
60
|
+
|
|
61
|
+
def __iter__(self) -> Iterator[str]:
|
|
62
|
+
return iter(self._paths)
|
|
63
|
+
|
|
64
|
+
def __len__(self) -> int:
|
|
65
|
+
return len(self._paths)
|
|
66
|
+
|
|
67
|
+
def __contains__(self, key: object) -> bool: # O(1), no import triggered
|
|
68
|
+
return key in self._paths
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
from omniload.core.model import LazyRegistry
|
|
2
|
+
|
|
3
|
+
SQL_SOURCE_SCHEMES = [
|
|
4
|
+
"bigquery",
|
|
5
|
+
"crate",
|
|
6
|
+
"cratedb",
|
|
7
|
+
"duckdb",
|
|
8
|
+
"mssql",
|
|
9
|
+
"mssql+pyodbc",
|
|
10
|
+
"mysql",
|
|
11
|
+
"mysql+pymysql",
|
|
12
|
+
"mysql+mysqlconnector",
|
|
13
|
+
"md",
|
|
14
|
+
"motherduck",
|
|
15
|
+
"postgres",
|
|
16
|
+
"postgresql",
|
|
17
|
+
"postgresql+psycopg2",
|
|
18
|
+
"redshift",
|
|
19
|
+
"redshift+psycopg2",
|
|
20
|
+
"snowflake",
|
|
21
|
+
"sqlite",
|
|
22
|
+
"oracle",
|
|
23
|
+
"oracle+cx_oracle",
|
|
24
|
+
"oracle+oracledb",
|
|
25
|
+
"hana",
|
|
26
|
+
"clickhouse",
|
|
27
|
+
"databricks",
|
|
28
|
+
"db2",
|
|
29
|
+
"spanner",
|
|
30
|
+
"trino",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
sources: LazyRegistry = LazyRegistry(
|
|
34
|
+
{
|
|
35
|
+
"adjust": "omniload.source.adjust.api:AdjustSource",
|
|
36
|
+
"airtable": "omniload.source.airtable.api:AirtableSource",
|
|
37
|
+
"allium": "omniload.source.allium.api:AlliumSource",
|
|
38
|
+
"anthropic": "omniload.source.anthropic.api:AnthropicSource",
|
|
39
|
+
"applovin": "omniload.source.applovin.api:AppLovinSource",
|
|
40
|
+
"applovinmax": "omniload.source.applovin_max.api:ApplovinMaxSource",
|
|
41
|
+
"appsflyer": "omniload.source.appsflyer.api:AppsflyerSource",
|
|
42
|
+
"appstore": "omniload.source.appstore.api:AppleAppStoreSource",
|
|
43
|
+
"asana": "omniload.source.asana.api:AsanaSource",
|
|
44
|
+
"attio": "omniload.source.attio.api:AttioSource",
|
|
45
|
+
"bruin": "omniload.source.bruin.api:BruinSource",
|
|
46
|
+
"chess": "omniload.source.chess.api:ChessSource",
|
|
47
|
+
"clickup": "omniload.source.clickup.api:ClickupSource",
|
|
48
|
+
"couchbase": "omniload.source.couchbase.api:CouchbaseSource",
|
|
49
|
+
"csv": "omniload.source.csv.api:LocalCsvSource",
|
|
50
|
+
"cursor": "omniload.source.cursor.api:CursorSource",
|
|
51
|
+
"customerio": "omniload.source.customer_io.api:CustomerIoSource",
|
|
52
|
+
"docebo": "omniload.source.docebo.api:DoceboSource",
|
|
53
|
+
"dune": "omniload.source.dune.api:DuneSource",
|
|
54
|
+
"dynamodb": "omniload.source.dynamodb.api:DynamoDBSource",
|
|
55
|
+
"elasticsearch": "omniload.source.elasticsearch.api:ElasticsearchSource",
|
|
56
|
+
"facebookads": "omniload.source.facebook_ads.api:FacebookAdsSource",
|
|
57
|
+
"fireflies": "omniload.source.fireflies.api:FirefliesSource",
|
|
58
|
+
"fluxx": "omniload.source.fluxx.api:FluxxSource",
|
|
59
|
+
"frankfurter": "omniload.source.frankfurter.api:FrankfurterSource",
|
|
60
|
+
"freshdesk": "omniload.source.freshdesk.api:FreshdeskSource",
|
|
61
|
+
"fundraiseup": "omniload.source.fundraiseup.api:FundraiseupSource",
|
|
62
|
+
"github": "omniload.source.github.api:GitHubSource",
|
|
63
|
+
"googleads": "omniload.source.google_ads.api:GoogleAdsSource",
|
|
64
|
+
"googleanalytics": "omniload.source.google_analytics.api:GoogleAnalyticsSource",
|
|
65
|
+
"gorgias": "omniload.source.gorgias.api:GorgiasSource",
|
|
66
|
+
"gs": "omniload.source.blobstorage.api:GCSSource",
|
|
67
|
+
"gsheets": "omniload.source.google_sheets.api:GoogleSheetsSource",
|
|
68
|
+
"hostaway": "omniload.source.hostaway.api:HostawaySource",
|
|
69
|
+
"http": "omniload.source.http.api:HttpSource",
|
|
70
|
+
"https": "omniload.source.http.api:HttpSource",
|
|
71
|
+
"hubspot": "omniload.source.hubspot.api:HubspotSource",
|
|
72
|
+
"indeed": "omniload.source.indeed.api:IndeedSource",
|
|
73
|
+
"influxdb": "omniload.source.influxdb.api:InfluxDBSource",
|
|
74
|
+
"intercom": "omniload.source.intercom.api:IntercomSource",
|
|
75
|
+
"isoc-pulse": "omniload.source.isoc_pulse.api:IsocPulseSource",
|
|
76
|
+
"jira": "omniload.source.jira.api:JiraSource",
|
|
77
|
+
"kafka": "omniload.source.kafka.api:KafkaSource",
|
|
78
|
+
"kinesis": "omniload.source.kinesis.api:KinesisSource",
|
|
79
|
+
"klaviyo": "omniload.source.klaviyo.api:KlaviyoSource",
|
|
80
|
+
"linear": "omniload.source.linear.api:LinearSource",
|
|
81
|
+
"linkedinads": "omniload.source.linkedin_ads.api:LinkedInAdsSource",
|
|
82
|
+
"mailchimp": "omniload.source.mailchimp.api:MailchimpSource",
|
|
83
|
+
"mixpanel": "omniload.source.mixpanel.api:MixpanelSource",
|
|
84
|
+
"mmap": "omniload.source.arrow.api:ArrowMemoryMappedSource",
|
|
85
|
+
"monday": "omniload.source.monday.api:MondaySource",
|
|
86
|
+
"mongodb": "omniload.source.mongodb.api:MongoDbSource",
|
|
87
|
+
"mongodb+srv": "omniload.source.mongodb.api:MongoDbSource",
|
|
88
|
+
"notion": "omniload.source.notion.api:NotionSource",
|
|
89
|
+
"personio": "omniload.source.personio.api:PersonioSource",
|
|
90
|
+
"phantombuster": "omniload.source.phantombuster.api:PhantombusterSource",
|
|
91
|
+
"pinterest": "omniload.source.pinterest.api:PinterestSource",
|
|
92
|
+
"pipedrive": "omniload.source.pipedrive.api:PipedriveSource",
|
|
93
|
+
"plusvibeai": "omniload.source.plusvibeai.api:PlusVibeAISource",
|
|
94
|
+
"primer": "omniload.source.primer.api:PrimerSource",
|
|
95
|
+
"quickbooks": "omniload.source.quickbooks.api:QuickBooksSource",
|
|
96
|
+
"redditads": "omniload.source.reddit_ads.api:RedditAdsSource",
|
|
97
|
+
"revenuecat": "omniload.source.revenuecat.api:RevenueCatSource",
|
|
98
|
+
"s3": "omniload.source.blobstorage.api:S3Source",
|
|
99
|
+
"salesforce": "omniload.source.salesforce.api:SalesforceSource",
|
|
100
|
+
"sftp": "omniload.source.sftp.api:SFTPSource",
|
|
101
|
+
"shopify": "omniload.source.shopify.api:ShopifySource",
|
|
102
|
+
"slack": "omniload.source.slack.api:SlackSource",
|
|
103
|
+
"smartsheet": "omniload.source.smartsheets.api:SmartsheetSource",
|
|
104
|
+
"snapchatads": "omniload.source.snapchat_ads.api:SnapchatAdsSource",
|
|
105
|
+
"socrata": "omniload.source.socrata.api:SocrataSource",
|
|
106
|
+
"solidgate": "omniload.source.solidgate.api:SolidgateSource",
|
|
107
|
+
"stripe": "omniload.source.stripe.api:StripeAnalyticsSource",
|
|
108
|
+
"tiktok": "omniload.source.tiktok_ads.api:TikTokSource",
|
|
109
|
+
"trustpilot": "omniload.source.trustpilot.api:TrustpilotSource",
|
|
110
|
+
"wise": "omniload.source.wise.api:WiseSource",
|
|
111
|
+
"zendesk": "omniload.source.zendesk.api:ZendeskSource",
|
|
112
|
+
"zoom": "omniload.source.zoom.api:ZoomSource",
|
|
113
|
+
}
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
destinations: LazyRegistry = LazyRegistry(
|
|
117
|
+
{
|
|
118
|
+
"athena": "omniload.target.athena:AthenaDestination",
|
|
119
|
+
"bigquery": "omniload.target.bigquery:BigQueryDestination",
|
|
120
|
+
"clickhouse": "omniload.target.clickhouse:ClickhouseDestination",
|
|
121
|
+
"clickhouse+native": "omniload.target.clickhouse:ClickhouseDestination",
|
|
122
|
+
"cratedb": "omniload.target.cratedb:CrateDBDestination",
|
|
123
|
+
"csv": "omniload.target.csv:CsvDestination",
|
|
124
|
+
"databricks": "omniload.target.databricks:DatabricksDestination",
|
|
125
|
+
"duckdb": "omniload.target.duckdb:DuckDBDestination",
|
|
126
|
+
"elasticsearch": "omniload.target.elasticsearch.api:ElasticsearchDestination",
|
|
127
|
+
"gs": "omniload.target.blobstorage:GCSDestination",
|
|
128
|
+
"md": "omniload.target.motherduck:MotherduckDestination",
|
|
129
|
+
"mongodb": "omniload.target.mongodb:MongoDBDestination",
|
|
130
|
+
"mongodb+srv": "omniload.target.mongodb:MongoDBDestination",
|
|
131
|
+
"motherduck": "omniload.target.motherduck:MotherduckDestination",
|
|
132
|
+
"mssql": "omniload.target.mssql:MsSQLDestination",
|
|
133
|
+
"mysql": "omniload.target.mysql:MySqlDestination",
|
|
134
|
+
"mysql+pymysql": "omniload.target.mysql:MySqlDestination",
|
|
135
|
+
"postgres": "omniload.target.postgresql:PostgresDestination",
|
|
136
|
+
"postgresql": "omniload.target.postgresql:PostgresDestination",
|
|
137
|
+
"postgresql+psycopg2": "omniload.target.postgresql:PostgresDestination",
|
|
138
|
+
"redshift": "omniload.target.redshift:RedshiftDestination",
|
|
139
|
+
"redshift+psycopg2": "omniload.target.redshift:RedshiftDestination",
|
|
140
|
+
"redshift+redshift_connector": "omniload.target.redshift:RedshiftDestination",
|
|
141
|
+
"s3": "omniload.target.blobstorage:S3Destination",
|
|
142
|
+
"snowflake": "omniload.target.snowflake:SnowflakeDestination",
|
|
143
|
+
"sqlite": "omniload.target.sqlite:SqliteDestination",
|
|
144
|
+
"synapse": "omniload.target.synapse:SynapseDestination",
|
|
145
|
+
"trino": "omniload.target.trino:TrinoDestination",
|
|
146
|
+
}
|
|
147
|
+
)
|