ingestr 0.14.1__tar.gz → 0.14.2__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.
Potentially problematic release.
This version of ingestr might be problematic. Click here for more details.
- ingestr-0.14.2/.github/workflows/release.yml +151 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/PKG-INFO +1 -1
- ingestr-0.14.2/ingestr/src/buildinfo.py +1 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/factory.py +2 -0
- ingestr-0.14.2/ingestr/src/intercom/__init__.py +142 -0
- ingestr-0.14.2/ingestr/src/intercom/helpers.py +674 -0
- ingestr-0.14.2/ingestr/src/intercom/settings.py +277 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/sources.py +73 -0
- ingestr-0.14.1/.github/workflows/release.yml +0 -81
- ingestr-0.14.1/ingestr/src/buildinfo.py +0 -1
- {ingestr-0.14.1 → ingestr-0.14.2}/.dlt/config.toml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/.dockerignore +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/.githooks/pre-commit-hook.sh +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/.github/workflows/deploy-docs.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/.github/workflows/secrets-scan.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/.github/workflows/tests.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/.gitignore +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/.gitleaksignore +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/.python-version +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/.vale.ini +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/Dockerfile +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/LICENSE.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/Makefile +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/README.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/.vitepress/config.mjs +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/.vitepress/theme/custom.css +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/.vitepress/theme/index.js +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/commands/example-uris.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/commands/ingest.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/getting-started/core-concepts.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/getting-started/data-masking.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/getting-started/incremental-loading.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/getting-started/quickstart.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/getting-started/telemetry.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/index.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/applovin_max.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/athena.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/clickhouse_img.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/clickup_ingestion.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/cratedb-destination.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/cratedb-source.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/freshdesk_ingestion.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/gcp_spanner_ingestion.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/github.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/google_analytics_realtime_report.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/googleanalytics.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/ingestion_elasticsearch_img.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/kinesis.bigquery.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/linear.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/linkedin_ads.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/mixpanel_ingestion.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/personio.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/personio_duckdb.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/phantombuster.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/pipedrive.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/quickbook_ingestion.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/sftp.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/stripe_postgres.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/tiktok.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/wise_ingestion.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/zoom_ingestion.png +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/adjust.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/airtable.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/anthropic.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/applovin.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/applovin_max.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/appsflyer.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/appstore.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/asana.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/athena.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/attio.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/bigquery.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/chess.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/clickhouse.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/clickup.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/cratedb.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/csv.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/custom_queries.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/databricks.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/db2.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/docebo.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/duckdb.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/dynamodb.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/elasticsearch.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/facebook-ads.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/fluxx.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/frankfurter.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/freshdesk.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/fundraiseup.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/gcs.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/github.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/google-ads.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/google_analytics.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/gorgias.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/gsheets.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/hubspot.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/influxdb.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/isoc-pulse.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/kafka.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/kinesis.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/klaviyo.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/linear.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/linkedin_ads.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/mixpanel.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/mongodb.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/motherduck.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/mssql.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/mysql.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/notion.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/oracle.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/personio.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/phantombuster.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/pinterest.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/pipedrive.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/postgres.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/quickbooks.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/redshift.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/revenuecat.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/s3.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/salesforce.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/sap-hana.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/sftp.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/shopify.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/slack.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/smartsheets.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/snowflake.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/solidgate.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/spanner.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/sqlite.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/stripe.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/tiktok-ads.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/trino.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/trustpilot.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/wise.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/zendesk.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/zoom.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/tutorials/load-kinesis-bigquery.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/tutorials/load-personio-duckdb.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/docs/tutorials/load-stripe-postgres.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/conftest.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/main.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/.gitignore +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/adjust/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/adjust/adjust_helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/airtable/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/anthropic/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/anthropic/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/applovin/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/applovin_max/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appsflyer/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appsflyer/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appstore/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appstore/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appstore/errors.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appstore/models.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appstore/resources.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/arrow/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/asana_source/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/asana_source/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/asana_source/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/attio/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/attio/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/blob.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/chess/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/chess/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/chess/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/clickup/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/clickup/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/collector/spinner.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/destinations.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/docebo/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/docebo/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/docebo/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/dynamodb/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/elasticsearch/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/elasticsearch/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/errors.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/facebook_ads/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/facebook_ads/exceptions.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/facebook_ads/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/facebook_ads/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/facebook_ads/utils.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/filesystem/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/filesystem/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/filesystem/readers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/filters.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/fluxx/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/fluxx/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/frankfurter/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/frankfurter/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/freshdesk/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/freshdesk/freshdesk_client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/freshdesk/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/fundraiseup/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/fundraiseup/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/github/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/github/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/github/queries.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/github/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_ads/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_ads/field.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_ads/metrics.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_ads/predicates.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_ads/reports.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_analytics/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_analytics/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_sheets/README.md +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_sheets/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/gorgias/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/gorgias/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/http_client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/hubspot/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/hubspot/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/hubspot/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/influxdb/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/influxdb/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/isoc_pulse/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/kafka/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/kafka/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/kinesis/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/kinesis/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/klaviyo/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/klaviyo/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/klaviyo/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/linear/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/linear/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/linkedin_ads/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/linkedin_ads/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/loader.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/masking.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/mixpanel/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/mixpanel/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/mongodb/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/mongodb/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/notion/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/notion/helpers/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/notion/helpers/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/notion/helpers/database.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/notion/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/partition.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/personio/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/personio/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/phantombuster/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/phantombuster/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pinterest/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/helpers/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/helpers/custom_fields_munger.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/helpers/pages.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/typing.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/quickbooks/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/resource.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/revenuecat/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/revenuecat/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/salesforce/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/salesforce/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/shopify/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/shopify/exceptions.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/shopify/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/shopify/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/slack/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/slack/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/slack/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/smartsheets/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/solidgate/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/solidgate/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/sql_database/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/sql_database/callbacks.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/stripe_analytics/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/stripe_analytics/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/stripe_analytics/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/table_definition.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/telemetry/event.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/testdata/fakebqcredentials.json +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/tiktok_ads/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/time.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/trustpilot/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/trustpilot/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/version.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/wise/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/wise/client.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/helpers/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/helpers/credentials.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/settings.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zoom/__init__.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zoom/helpers.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/.gitignore +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/create_replace.csv +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/delete_insert_expected.csv +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/delete_insert_part1.csv +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/delete_insert_part2.csv +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/merge_expected.csv +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/merge_part1.csv +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/merge_part2.csv +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/tests/unit/test_smartsheets.py +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/package-lock.json +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/package.json +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/pyproject.toml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/requirements-dev.txt +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/requirements.in +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/requirements.txt +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/requirements_arm64.txt +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/resources/demo.gif +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/resources/demo.tape +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/resources/ingestr.svg +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/AMPM.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Acronyms.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Colons.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Contractions.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/DateFormat.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Ellipses.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/EmDash.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Exclamation.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/FirstPerson.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Gender.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/GenderBias.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/HeadingPunctuation.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Headings.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Latin.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/LyHyphens.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/OptionalPlurals.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Ordinal.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/OxfordComma.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Parens.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Passive.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Periods.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Quotes.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Ranges.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Semicolons.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Slang.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Spacing.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Spelling.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Units.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/We.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Will.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/WordList.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/meta.json +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/vocab.txt +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/bruin/Ingestr.yml +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/styles/config/vocabularies/bruin/accept.txt +0 -0
- {ingestr-0.14.1 → ingestr-0.14.2}/test.env.template +0 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# WARN: this is used as a notification filter in our slack.
|
|
2
|
+
# When updating this, make sure to update the workflow subscription as well.
|
|
3
|
+
name: "Release ingestr on pip and ghcr.io"
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
tags:
|
|
8
|
+
- "v*.*.*"
|
|
9
|
+
|
|
10
|
+
env:
|
|
11
|
+
REGISTRY: ghcr.io
|
|
12
|
+
IMAGE: ghcr.io/${{ github.repository }}
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
tests:
|
|
16
|
+
uses: ./.github/workflows/tests.yml
|
|
17
|
+
pip-release:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
needs: tests
|
|
20
|
+
env:
|
|
21
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_INGESTR_TOKEN }}
|
|
22
|
+
steps:
|
|
23
|
+
- name: checkout
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
with:
|
|
26
|
+
fetch-depth: 0
|
|
27
|
+
- name: setup python
|
|
28
|
+
uses: actions/setup-python@v5
|
|
29
|
+
with:
|
|
30
|
+
python-version: '3.11'
|
|
31
|
+
|
|
32
|
+
# github actions invoke a fresh shell
|
|
33
|
+
# for each step. This causes us to lose our
|
|
34
|
+
# venv context. So we run all our build commands
|
|
35
|
+
# in a single step to simplify our pipeline.
|
|
36
|
+
- name: build and release
|
|
37
|
+
run: |
|
|
38
|
+
pip install uv
|
|
39
|
+
uv venv
|
|
40
|
+
source .venv/bin/activate
|
|
41
|
+
uv pip install -r requirements-dev.txt
|
|
42
|
+
make build
|
|
43
|
+
make upload-release
|
|
44
|
+
|
|
45
|
+
docker-build:
|
|
46
|
+
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')
|
|
47
|
+
runs-on: ubuntu-24.04-arm
|
|
48
|
+
strategy:
|
|
49
|
+
fail-fast: false
|
|
50
|
+
matrix:
|
|
51
|
+
platform:
|
|
52
|
+
- linux/amd64
|
|
53
|
+
- linux/arm64
|
|
54
|
+
|
|
55
|
+
permissions:
|
|
56
|
+
contents: read
|
|
57
|
+
packages: write
|
|
58
|
+
|
|
59
|
+
steps:
|
|
60
|
+
- name: Prepare
|
|
61
|
+
run: |
|
|
62
|
+
platform=${{ matrix.platform }}
|
|
63
|
+
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
|
64
|
+
|
|
65
|
+
- name: Checkout repository
|
|
66
|
+
uses: actions/checkout@v4
|
|
67
|
+
|
|
68
|
+
- name: Log in to the Container registry
|
|
69
|
+
uses: docker/login-action@v3
|
|
70
|
+
with:
|
|
71
|
+
registry: ${{ env.REGISTRY }}
|
|
72
|
+
username: ${{ github.actor }}
|
|
73
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
74
|
+
|
|
75
|
+
- name: Extract metadata (tags, labels) for Docker
|
|
76
|
+
id: meta
|
|
77
|
+
uses: docker/metadata-action@v5
|
|
78
|
+
with:
|
|
79
|
+
images: ${{ env.IMAGE }}
|
|
80
|
+
|
|
81
|
+
- name: Set up Docker Buildx
|
|
82
|
+
uses: docker/setup-buildx-action@v3
|
|
83
|
+
|
|
84
|
+
- name: Build and push Docker image
|
|
85
|
+
uses: docker/build-push-action@v5
|
|
86
|
+
id: build
|
|
87
|
+
with:
|
|
88
|
+
context: .
|
|
89
|
+
platforms: ${{ matrix.platform }}
|
|
90
|
+
tags: ${{ env.IMAGE }}
|
|
91
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
92
|
+
outputs: type=image,push-by-digest=true,name-canonical=true,push=true
|
|
93
|
+
|
|
94
|
+
- name: Export digest
|
|
95
|
+
run: |
|
|
96
|
+
mkdir -p ${{ runner.temp }}/digests
|
|
97
|
+
digest="${{ steps.build.outputs.digest }}"
|
|
98
|
+
# The following strips the 'sha256:' prefix from the digest using bash parameter expansion.
|
|
99
|
+
touch "${{ runner.temp }}/digests/${digest#sha256:}"
|
|
100
|
+
|
|
101
|
+
- name: Upload digest
|
|
102
|
+
uses: actions/upload-artifact@v4
|
|
103
|
+
with:
|
|
104
|
+
name: digests-${{ env.PLATFORM_PAIR }}
|
|
105
|
+
path: ${{ runner.temp }}/digests/*
|
|
106
|
+
if-no-files-found: error
|
|
107
|
+
retention-days: 1
|
|
108
|
+
|
|
109
|
+
docker-publish:
|
|
110
|
+
permissions:
|
|
111
|
+
contents: read
|
|
112
|
+
packages: write
|
|
113
|
+
|
|
114
|
+
runs-on: ubuntu-latest
|
|
115
|
+
needs:
|
|
116
|
+
- docker-build
|
|
117
|
+
- tests
|
|
118
|
+
steps:
|
|
119
|
+
- name: Download digests
|
|
120
|
+
uses: actions/download-artifact@v4
|
|
121
|
+
with:
|
|
122
|
+
path: ${{ runner.temp }}/digests
|
|
123
|
+
pattern: digests-*
|
|
124
|
+
merge-multiple: true
|
|
125
|
+
|
|
126
|
+
- name: Log in to the Container registry
|
|
127
|
+
uses: docker/login-action@v3
|
|
128
|
+
with:
|
|
129
|
+
registry: ${{ env.REGISTRY }}
|
|
130
|
+
username: ${{ github.actor }}
|
|
131
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
132
|
+
|
|
133
|
+
- name: Set up Docker Buildx
|
|
134
|
+
uses: docker/setup-buildx-action@v3
|
|
135
|
+
|
|
136
|
+
- name: Docker meta
|
|
137
|
+
id: meta
|
|
138
|
+
uses: docker/metadata-action@v5
|
|
139
|
+
with:
|
|
140
|
+
images: ${{ env.IMAGE }}
|
|
141
|
+
tags: |
|
|
142
|
+
type=ref,event=tag
|
|
143
|
+
type=semver,pattern={{raw}}
|
|
144
|
+
|
|
145
|
+
- name: Create manifest list and push
|
|
146
|
+
working-directory: ${{ runner.temp }}/digests
|
|
147
|
+
run: |
|
|
148
|
+
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
|
|
149
|
+
$(printf '${{ env.IMAGE }}@sha256:%s ' *)
|
|
150
|
+
|
|
151
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ingestr
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.2
|
|
4
4
|
Summary: ingestr is a command-line application that ingests data from various sources and stores them in any database.
|
|
5
5
|
Project-URL: Homepage, https://github.com/bruin-data/ingestr
|
|
6
6
|
Project-URL: Issues, https://github.com/bruin-data/ingestr/issues
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
version = "v0.14.2"
|
|
@@ -54,6 +54,7 @@ from ingestr.src.sources import (
|
|
|
54
54
|
GorgiasSource,
|
|
55
55
|
HubspotSource,
|
|
56
56
|
InfluxDBSource,
|
|
57
|
+
IntercomSource,
|
|
57
58
|
IsocPulseSource,
|
|
58
59
|
KafkaSource,
|
|
59
60
|
KinesisSource,
|
|
@@ -166,6 +167,7 @@ class SourceDestinationFactory:
|
|
|
166
167
|
"fluxx": FluxxSource,
|
|
167
168
|
"slack": SlackSource,
|
|
168
169
|
"hubspot": HubspotSource,
|
|
170
|
+
"intercom": IntercomSource,
|
|
169
171
|
"airtable": AirtableSource,
|
|
170
172
|
"klaviyo": KlaviyoSource,
|
|
171
173
|
"mixpanel": MixpanelSource,
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Intercom source implementation for data ingestion.
|
|
3
|
+
|
|
4
|
+
This module provides DLT sources for retrieving data from Intercom API endpoints
|
|
5
|
+
including contacts, companies, conversations, tickets, and more.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Optional, Sequence
|
|
9
|
+
|
|
10
|
+
import dlt
|
|
11
|
+
from dlt.common.time import ensure_pendulum_datetime
|
|
12
|
+
from dlt.common.typing import TAnyDateTime
|
|
13
|
+
from dlt.sources import DltResource, DltSource
|
|
14
|
+
|
|
15
|
+
from .helpers import (
|
|
16
|
+
IntercomAPIClient,
|
|
17
|
+
IntercomCredentialsAccessToken,
|
|
18
|
+
TIntercomCredentials,
|
|
19
|
+
convert_datetime_to_timestamp,
|
|
20
|
+
create_resource_from_config,
|
|
21
|
+
transform_company,
|
|
22
|
+
transform_contact,
|
|
23
|
+
transform_conversation,
|
|
24
|
+
)
|
|
25
|
+
from .helpers import (
|
|
26
|
+
IntercomCredentialsOAuth as IntercomCredentialsOAuth,
|
|
27
|
+
)
|
|
28
|
+
from .settings import (
|
|
29
|
+
DEFAULT_START_DATE,
|
|
30
|
+
RESOURCE_CONFIGS,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dlt.source(name="intercom", max_table_nesting=0)
|
|
35
|
+
def intercom_source(
|
|
36
|
+
credentials: TIntercomCredentials = dlt.secrets.value,
|
|
37
|
+
start_date: Optional[TAnyDateTime] = DEFAULT_START_DATE,
|
|
38
|
+
end_date: Optional[TAnyDateTime] = None,
|
|
39
|
+
) -> Sequence[DltResource]:
|
|
40
|
+
"""
|
|
41
|
+
A DLT source that retrieves data from Intercom API.
|
|
42
|
+
|
|
43
|
+
This source provides access to various Intercom resources including contacts,
|
|
44
|
+
companies, conversations, tickets, and more. It supports incremental loading
|
|
45
|
+
for resources that track updated timestamps.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
credentials: Intercom API credentials (AccessToken or OAuth).
|
|
49
|
+
Defaults to dlt.secrets.value.
|
|
50
|
+
start_date: The start date for incremental loading.
|
|
51
|
+
Defaults to January 1, 2020.
|
|
52
|
+
end_date: Optional end date for incremental loading.
|
|
53
|
+
If not provided, loads all data from start_date to present.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Sequence of DLT resources for different Intercom endpoints.
|
|
57
|
+
|
|
58
|
+
Example:
|
|
59
|
+
>>> source = intercom_source(
|
|
60
|
+
... credentials=IntercomCredentialsAccessToken(
|
|
61
|
+
... access_token="your_token",
|
|
62
|
+
... region="us"
|
|
63
|
+
... ),
|
|
64
|
+
... start_date=datetime(2024, 1, 1)
|
|
65
|
+
... )
|
|
66
|
+
"""
|
|
67
|
+
# Initialize API client
|
|
68
|
+
api_client = IntercomAPIClient(credentials)
|
|
69
|
+
|
|
70
|
+
# Convert dates to pendulum and then to unix timestamps for Intercom API
|
|
71
|
+
start_date_obj = ensure_pendulum_datetime(start_date) if start_date else None
|
|
72
|
+
end_date_obj = ensure_pendulum_datetime(end_date) if end_date else None
|
|
73
|
+
|
|
74
|
+
# Convert to unix timestamps for API compatibility
|
|
75
|
+
# Use default start date if none provided
|
|
76
|
+
if not start_date_obj:
|
|
77
|
+
from .settings import DEFAULT_START_DATE
|
|
78
|
+
|
|
79
|
+
start_date_obj = ensure_pendulum_datetime(DEFAULT_START_DATE)
|
|
80
|
+
|
|
81
|
+
start_timestamp = convert_datetime_to_timestamp(start_date_obj)
|
|
82
|
+
end_timestamp = (
|
|
83
|
+
convert_datetime_to_timestamp(end_date_obj) if end_date_obj else None
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# Transform function mapping
|
|
87
|
+
transform_functions = {
|
|
88
|
+
"transform_contact": transform_contact,
|
|
89
|
+
"transform_company": transform_company,
|
|
90
|
+
"transform_conversation": transform_conversation,
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
# Generate all resources from configuration
|
|
94
|
+
resources = []
|
|
95
|
+
for resource_name, config in RESOURCE_CONFIGS.items():
|
|
96
|
+
resource_func = create_resource_from_config(
|
|
97
|
+
resource_name,
|
|
98
|
+
config,
|
|
99
|
+
api_client,
|
|
100
|
+
start_timestamp,
|
|
101
|
+
end_timestamp,
|
|
102
|
+
transform_functions,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
# Call the resource function to get the actual resource
|
|
106
|
+
resources.append(resource_func())
|
|
107
|
+
|
|
108
|
+
return resources
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def intercom(
|
|
112
|
+
api_key: str,
|
|
113
|
+
region: str = "us",
|
|
114
|
+
start_date: Optional[TAnyDateTime] = DEFAULT_START_DATE,
|
|
115
|
+
end_date: Optional[TAnyDateTime] = None,
|
|
116
|
+
) -> DltSource:
|
|
117
|
+
"""
|
|
118
|
+
Convenience function to create Intercom source with access token.
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
api_key: Intercom API access token.
|
|
122
|
+
region: Data region (us, eu, or au). Defaults to "us".
|
|
123
|
+
start_date: Start date for incremental loading.
|
|
124
|
+
end_date: Optional end date for incremental loading.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
Sequence of DLT resources.
|
|
128
|
+
|
|
129
|
+
Example:
|
|
130
|
+
>>> source = intercom(
|
|
131
|
+
... api_key="your_access_token",
|
|
132
|
+
... region="us",
|
|
133
|
+
... start_date=datetime(2024, 1, 1)
|
|
134
|
+
... )
|
|
135
|
+
"""
|
|
136
|
+
credentials = IntercomCredentialsAccessToken(access_token=api_key, region=region)
|
|
137
|
+
|
|
138
|
+
return intercom_source(
|
|
139
|
+
credentials=credentials,
|
|
140
|
+
start_date=start_date,
|
|
141
|
+
end_date=end_date,
|
|
142
|
+
)
|