ingestr 0.13.51__tar.gz → 0.13.53__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.13.51 → ingestr-0.13.53}/.gitignore +1 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/PKG-INFO +51 -4
- {ingestr-0.13.51 → ingestr-0.13.53}/README.md +42 -2
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/.vitepress/config.mjs +2 -1
- ingestr-0.13.53/docs/media/cratedb-source.png +0 -0
- ingestr-0.13.53/docs/media/sftp.png +0 -0
- ingestr-0.13.53/docs/supported-sources/cratedb.md +80 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/mysql.md +3 -3
- ingestr-0.13.53/docs/supported-sources/sftp.md +43 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/solidgate.md +3 -2
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/sqlite.md +1 -1
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/main.py +19 -2
- ingestr-0.13.53/ingestr/src/buildinfo.py +1 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/destinations.py +30 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/factory.py +9 -1
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/filters.py +14 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/solidgate/__init__.py +3 -3
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/sources.py +55 -25
- {ingestr-0.13.51 → ingestr-0.13.53}/requirements.in +2 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/requirements.txt +24 -2
- {ingestr-0.13.51 → ingestr-0.13.53}/requirements_arm64.txt +23 -1
- ingestr-0.13.51/ingestr/src/buildinfo.py +0 -1
- {ingestr-0.13.51 → ingestr-0.13.53}/.dockerignore +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/.githooks/pre-commit-hook.sh +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/.github/workflows/deploy-docs.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/.github/workflows/release.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/.github/workflows/secrets-scan.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/.github/workflows/tests.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/.gitleaksignore +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/.python-version +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/.vale.ini +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/Dockerfile +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/LICENSE.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/Makefile +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/.vitepress/theme/custom.css +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/.vitepress/theme/index.js +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/commands/example-uris.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/commands/ingest.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/getting-started/core-concepts.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/getting-started/incremental-loading.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/getting-started/quickstart.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/getting-started/telemetry.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/index.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/applovin_max.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/athena.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/clickhouse_img.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/freshdesk_ingestion.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/gcp_spanner_ingestion.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/github.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/google_analytics_realtime_report.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/googleanalytics.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/ingestion_elasticsearch_img.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/kinesis.bigquery.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/linkedin_ads.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/personio.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/personio_duckdb.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/phantombuster.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/pipedrive.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/stripe_postgres.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/media/tiktok.png +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/adjust.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/airtable.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/applovin.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/applovin_max.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/appsflyer.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/appstore.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/asana.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/athena.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/attio.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/bigquery.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/chess.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/clickhouse.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/csv.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/custom_queries.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/databricks.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/db2.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/duckdb.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/dynamodb.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/elasticsearch.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/facebook-ads.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/frankfurter.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/freshdesk.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/gcs.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/github.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/google-ads.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/google_analytics.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/gorgias.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/gsheets.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/hubspot.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/kafka.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/kinesis.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/klaviyo.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/linkedin_ads.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/mongodb.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/mssql.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/notion.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/oracle.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/personio.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/phantombuster.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/pipedrive.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/postgres.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/redshift.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/s3.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/salesforce.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/sap-hana.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/shopify.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/slack.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/smartsheets.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/snowflake.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/spanner.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/stripe.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/tiktok-ads.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/supported-sources/zendesk.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/tutorials/load-kinesis-bigquery.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/tutorials/load-personio-duckdb.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/docs/tutorials/load-stripe-postgres.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/conftest.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/.gitignore +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/adjust/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/adjust/adjust_helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/airtable/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/applovin/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/applovin_max/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/appsflyer/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/appsflyer/client.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/appstore/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/appstore/client.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/appstore/errors.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/appstore/models.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/appstore/resources.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/arrow/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/asana_source/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/asana_source/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/asana_source/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/attio/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/attio/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/blob.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/chess/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/chess/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/chess/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/collector/spinner.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/dynamodb/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/elasticsearch/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/errors.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/facebook_ads/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/facebook_ads/exceptions.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/facebook_ads/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/facebook_ads/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/filesystem/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/filesystem/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/filesystem/readers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/frankfurter/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/frankfurter/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/freshdesk/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/freshdesk/freshdesk_client.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/freshdesk/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/github/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/github/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/github/queries.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/github/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_ads/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_ads/field.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_ads/metrics.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_ads/predicates.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_ads/reports.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_analytics/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_analytics/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_sheets/README.md +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_sheets/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/gorgias/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/gorgias/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/http_client.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/hubspot/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/hubspot/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/hubspot/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/kafka/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/kafka/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/kinesis/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/kinesis/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/klaviyo/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/klaviyo/client.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/klaviyo/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/linkedin_ads/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/linkedin_ads/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/loader.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/mongodb/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/mongodb/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/notion/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/notion/helpers/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/notion/helpers/client.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/notion/helpers/database.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/notion/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/partition.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/personio/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/personio/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/phantombuster/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/phantombuster/client.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/pipedrive/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/pipedrive/helpers/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/pipedrive/helpers/custom_fields_munger.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/pipedrive/helpers/pages.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/pipedrive/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/pipedrive/typing.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/resource.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/salesforce/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/salesforce/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/shopify/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/shopify/exceptions.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/shopify/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/shopify/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/slack/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/slack/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/slack/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/smartsheets/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/solidgate/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/sql_database/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/sql_database/callbacks.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/stripe_analytics/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/stripe_analytics/helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/stripe_analytics/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/table_definition.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/telemetry/event.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/testdata/fakebqcredentials.json +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/tiktok_ads/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/time.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/version.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/zendesk/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/zendesk/helpers/__init__.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/zendesk/helpers/credentials.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/src/zendesk/settings.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/testdata/.gitignore +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/testdata/create_replace.csv +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/testdata/delete_insert_expected.csv +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/testdata/delete_insert_part1.csv +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/testdata/delete_insert_part2.csv +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/testdata/merge_expected.csv +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/testdata/merge_part1.csv +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/testdata/merge_part2.csv +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/ingestr/tests/unit/test_smartsheets.py +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/package-lock.json +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/package.json +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/pyproject.toml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/requirements-dev.txt +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/resources/demo.gif +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/resources/demo.tape +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/resources/ingestr.svg +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/AMPM.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Acronyms.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Colons.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Contractions.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/DateFormat.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Ellipses.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/EmDash.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Exclamation.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/FirstPerson.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Gender.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/GenderBias.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/HeadingPunctuation.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Headings.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Latin.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/LyHyphens.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/OptionalPlurals.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Ordinal.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/OxfordComma.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Parens.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Passive.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Periods.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Quotes.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Ranges.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Semicolons.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Slang.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Spacing.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Spelling.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Units.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/We.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/Will.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/WordList.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/meta.json +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/Google/vocab.txt +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/bruin/Ingestr.yml +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/styles/config/vocabularies/bruin/accept.txt +0 -0
- {ingestr-0.13.51 → ingestr-0.13.53}/test.env.template +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ingestr
|
|
3
|
-
Version: 0.13.
|
|
3
|
+
Version: 0.13.53
|
|
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
|
|
@@ -26,6 +26,7 @@ Requires-Dist: asn1crypto==1.5.1
|
|
|
26
26
|
Requires-Dist: asynch==0.2.4
|
|
27
27
|
Requires-Dist: attrs==25.1.0
|
|
28
28
|
Requires-Dist: backoff==2.2.1
|
|
29
|
+
Requires-Dist: bcrypt==4.3.0
|
|
29
30
|
Requires-Dist: beautifulsoup4==4.13.3
|
|
30
31
|
Requires-Dist: boto3==1.37.1
|
|
31
32
|
Requires-Dist: botocore==1.37.1
|
|
@@ -39,6 +40,7 @@ Requires-Dist: clickhouse-connect==0.8.14
|
|
|
39
40
|
Requires-Dist: clickhouse-driver==0.2.9
|
|
40
41
|
Requires-Dist: clickhouse-sqlalchemy==0.2.7
|
|
41
42
|
Requires-Dist: confluent-kafka==2.8.0
|
|
43
|
+
Requires-Dist: crate==2.0.0
|
|
42
44
|
Requires-Dist: cryptography==44.0.2
|
|
43
45
|
Requires-Dist: curlify==2.2.1
|
|
44
46
|
Requires-Dist: databricks-sql-connector==2.9.3
|
|
@@ -59,6 +61,7 @@ Requires-Dist: flatten-json==0.1.14
|
|
|
59
61
|
Requires-Dist: frozenlist==1.5.0
|
|
60
62
|
Requires-Dist: fsspec==2025.3.2
|
|
61
63
|
Requires-Dist: gcsfs==2025.3.2
|
|
64
|
+
Requires-Dist: geojson==3.2.0
|
|
62
65
|
Requires-Dist: gitdb==4.0.12
|
|
63
66
|
Requires-Dist: gitpython==3.1.44
|
|
64
67
|
Requires-Dist: giturlparse==0.12.0
|
|
@@ -77,7 +80,7 @@ Requires-Dist: google-cloud-storage==3.1.0
|
|
|
77
80
|
Requires-Dist: google-crc32c==1.6.0
|
|
78
81
|
Requires-Dist: google-resumable-media==2.7.2
|
|
79
82
|
Requires-Dist: googleapis-common-protos==1.69.0
|
|
80
|
-
Requires-Dist: greenlet==3.2.
|
|
83
|
+
Requires-Dist: greenlet==3.2.3
|
|
81
84
|
Requires-Dist: grpc-google-iam-v1==0.14.2
|
|
82
85
|
Requires-Dist: grpc-interceptor==0.15.4
|
|
83
86
|
Requires-Dist: grpcio-status==1.62.3
|
|
@@ -113,6 +116,7 @@ Requires-Dist: openpyxl==3.1.5
|
|
|
113
116
|
Requires-Dist: orjson==3.10.15
|
|
114
117
|
Requires-Dist: packaging==24.2
|
|
115
118
|
Requires-Dist: pandas==2.2.3
|
|
119
|
+
Requires-Dist: paramiko==3.5.1
|
|
116
120
|
Requires-Dist: pathvalidate==3.2.3
|
|
117
121
|
Requires-Dist: pendulum==3.0.0
|
|
118
122
|
Requires-Dist: platformdirs==4.3.6
|
|
@@ -137,6 +141,7 @@ Requires-Dist: pygments==2.19.1
|
|
|
137
141
|
Requires-Dist: pyjwt==2.10.1
|
|
138
142
|
Requires-Dist: pymongo==4.11.1
|
|
139
143
|
Requires-Dist: pymysql==1.1.1
|
|
144
|
+
Requires-Dist: pynacl==1.5.0
|
|
140
145
|
Requires-Dist: pyopenssl==25.0.0
|
|
141
146
|
Requires-Dist: pyparsing==3.2.1
|
|
142
147
|
Requires-Dist: pyrate-limiter==3.7.0
|
|
@@ -170,6 +175,7 @@ Requires-Dist: snowflake-sqlalchemy==1.6.1
|
|
|
170
175
|
Requires-Dist: sortedcontainers==2.4.0
|
|
171
176
|
Requires-Dist: soupsieve==2.6
|
|
172
177
|
Requires-Dist: sqlalchemy-bigquery==1.12.1
|
|
178
|
+
Requires-Dist: sqlalchemy-cratedb==0.42.0.dev2
|
|
173
179
|
Requires-Dist: sqlalchemy-hana==2.0.0
|
|
174
180
|
Requires-Dist: sqlalchemy-redshift==0.8.14
|
|
175
181
|
Requires-Dist: sqlalchemy-spanner==1.11.0
|
|
@@ -192,6 +198,7 @@ Requires-Dist: tzdata==2025.1
|
|
|
192
198
|
Requires-Dist: tzlocal==5.3
|
|
193
199
|
Requires-Dist: uritemplate==4.1.1
|
|
194
200
|
Requires-Dist: urllib3==2.3.0
|
|
201
|
+
Requires-Dist: verlib2==0.3.1
|
|
195
202
|
Requires-Dist: wrapt==1.17.2
|
|
196
203
|
Requires-Dist: yarl==1.18.3
|
|
197
204
|
Requires-Dist: zeep==4.3.1
|
|
@@ -292,11 +299,21 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
292
299
|
<td>✅</td>
|
|
293
300
|
<td>✅</td>
|
|
294
301
|
</tr>
|
|
302
|
+
<tr>
|
|
303
|
+
<td>CrateDB</td>
|
|
304
|
+
<td>✅</td>
|
|
305
|
+
<td>❌</td>
|
|
306
|
+
</tr>
|
|
295
307
|
<tr>
|
|
296
308
|
<td>Databricks</td>
|
|
297
309
|
<td>✅</td>
|
|
298
310
|
<td>✅</td>
|
|
299
311
|
</tr>
|
|
312
|
+
<tr>
|
|
313
|
+
<td>IBM Db2</td>
|
|
314
|
+
<td>✅</td>
|
|
315
|
+
<td>-</td>
|
|
316
|
+
</tr>
|
|
300
317
|
<tr>
|
|
301
318
|
<td>DuckDB</td>
|
|
302
319
|
<td>✅</td>
|
|
@@ -307,6 +324,16 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
307
324
|
<td>✅</td>
|
|
308
325
|
<td>-</td>
|
|
309
326
|
</tr>
|
|
327
|
+
<tr>
|
|
328
|
+
<td>Elasticsearch</td>
|
|
329
|
+
<td>✅</td>
|
|
330
|
+
<td>-</td>
|
|
331
|
+
</tr>
|
|
332
|
+
<tr>
|
|
333
|
+
<td>GCP Spanner</td>
|
|
334
|
+
<td>✅</td>
|
|
335
|
+
<td>-</td>
|
|
336
|
+
</tr>
|
|
310
337
|
<tr>
|
|
311
338
|
<td>Local CSV file</td>
|
|
312
339
|
<td>✅</td>
|
|
@@ -393,6 +420,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
393
420
|
<td>✅</td>
|
|
394
421
|
<td>-</td>
|
|
395
422
|
</tr>
|
|
423
|
+
<tr>
|
|
424
|
+
<td>Attio</td>
|
|
425
|
+
<td>✅</td>
|
|
426
|
+
<td>-</td>
|
|
427
|
+
</tr>
|
|
396
428
|
<tr>
|
|
397
429
|
<td>Chess.com</td>
|
|
398
430
|
<td>✅</td>
|
|
@@ -404,7 +436,7 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
404
436
|
<td>-</td>
|
|
405
437
|
</tr>
|
|
406
438
|
<tr>
|
|
407
|
-
<td>
|
|
439
|
+
<td>GitHub</td>
|
|
408
440
|
<td>✅</td>
|
|
409
441
|
<td>-</td>
|
|
410
442
|
</tr>
|
|
@@ -447,6 +479,16 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
447
479
|
<td>Personio</td>
|
|
448
480
|
<td>✅</td>
|
|
449
481
|
<td>-</td>
|
|
482
|
+
</tr>
|
|
483
|
+
<tr>
|
|
484
|
+
<td>Phantombuster</td>
|
|
485
|
+
<td>✅</td>
|
|
486
|
+
<td>-</td>
|
|
487
|
+
</tr>
|
|
488
|
+
<tr>
|
|
489
|
+
<td>Pipedrive</td>
|
|
490
|
+
<td>✅</td>
|
|
491
|
+
<td>-</td>
|
|
450
492
|
</tr>
|
|
451
493
|
<tr>
|
|
452
494
|
<td>S3</td>
|
|
@@ -469,7 +511,12 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
469
511
|
<td>-</td>
|
|
470
512
|
</tr>
|
|
471
513
|
<tr>
|
|
472
|
-
<td>
|
|
514
|
+
<td>Smartsheets</td>
|
|
515
|
+
<td>✅</td>
|
|
516
|
+
<td>-</td>
|
|
517
|
+
</tr>
|
|
518
|
+
<tr>
|
|
519
|
+
<td>Solidgate</td>
|
|
473
520
|
<td>✅</td>
|
|
474
521
|
<td>-</td>
|
|
475
522
|
</tr>
|
|
@@ -87,11 +87,21 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
87
87
|
<td>✅</td>
|
|
88
88
|
<td>✅</td>
|
|
89
89
|
</tr>
|
|
90
|
+
<tr>
|
|
91
|
+
<td>CrateDB</td>
|
|
92
|
+
<td>✅</td>
|
|
93
|
+
<td>❌</td>
|
|
94
|
+
</tr>
|
|
90
95
|
<tr>
|
|
91
96
|
<td>Databricks</td>
|
|
92
97
|
<td>✅</td>
|
|
93
98
|
<td>✅</td>
|
|
94
99
|
</tr>
|
|
100
|
+
<tr>
|
|
101
|
+
<td>IBM Db2</td>
|
|
102
|
+
<td>✅</td>
|
|
103
|
+
<td>-</td>
|
|
104
|
+
</tr>
|
|
95
105
|
<tr>
|
|
96
106
|
<td>DuckDB</td>
|
|
97
107
|
<td>✅</td>
|
|
@@ -102,6 +112,16 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
102
112
|
<td>✅</td>
|
|
103
113
|
<td>-</td>
|
|
104
114
|
</tr>
|
|
115
|
+
<tr>
|
|
116
|
+
<td>Elasticsearch</td>
|
|
117
|
+
<td>✅</td>
|
|
118
|
+
<td>-</td>
|
|
119
|
+
</tr>
|
|
120
|
+
<tr>
|
|
121
|
+
<td>GCP Spanner</td>
|
|
122
|
+
<td>✅</td>
|
|
123
|
+
<td>-</td>
|
|
124
|
+
</tr>
|
|
105
125
|
<tr>
|
|
106
126
|
<td>Local CSV file</td>
|
|
107
127
|
<td>✅</td>
|
|
@@ -188,6 +208,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
188
208
|
<td>✅</td>
|
|
189
209
|
<td>-</td>
|
|
190
210
|
</tr>
|
|
211
|
+
<tr>
|
|
212
|
+
<td>Attio</td>
|
|
213
|
+
<td>✅</td>
|
|
214
|
+
<td>-</td>
|
|
215
|
+
</tr>
|
|
191
216
|
<tr>
|
|
192
217
|
<td>Chess.com</td>
|
|
193
218
|
<td>✅</td>
|
|
@@ -199,7 +224,7 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
199
224
|
<td>-</td>
|
|
200
225
|
</tr>
|
|
201
226
|
<tr>
|
|
202
|
-
<td>
|
|
227
|
+
<td>GitHub</td>
|
|
203
228
|
<td>✅</td>
|
|
204
229
|
<td>-</td>
|
|
205
230
|
</tr>
|
|
@@ -242,6 +267,16 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
242
267
|
<td>Personio</td>
|
|
243
268
|
<td>✅</td>
|
|
244
269
|
<td>-</td>
|
|
270
|
+
</tr>
|
|
271
|
+
<tr>
|
|
272
|
+
<td>Phantombuster</td>
|
|
273
|
+
<td>✅</td>
|
|
274
|
+
<td>-</td>
|
|
275
|
+
</tr>
|
|
276
|
+
<tr>
|
|
277
|
+
<td>Pipedrive</td>
|
|
278
|
+
<td>✅</td>
|
|
279
|
+
<td>-</td>
|
|
245
280
|
</tr>
|
|
246
281
|
<tr>
|
|
247
282
|
<td>S3</td>
|
|
@@ -264,7 +299,12 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
264
299
|
<td>-</td>
|
|
265
300
|
</tr>
|
|
266
301
|
<tr>
|
|
267
|
-
<td>
|
|
302
|
+
<td>Smartsheets</td>
|
|
303
|
+
<td>✅</td>
|
|
304
|
+
<td>-</td>
|
|
305
|
+
</tr>
|
|
306
|
+
<tr>
|
|
307
|
+
<td>Solidgate</td>
|
|
268
308
|
<td>✅</td>
|
|
269
309
|
<td>-</td>
|
|
270
310
|
</tr>
|
|
@@ -136,8 +136,9 @@ export default defineConfig({
|
|
|
136
136
|
{ text: "Personio", link: "/supported-sources/personio.md" },
|
|
137
137
|
{ text: "PhantomBuster", link: "/supported-sources/phantombuster.md" },
|
|
138
138
|
{ text: "Pipedrive", link: "/supported-sources/pipedrive.md" },
|
|
139
|
-
{ text: "S3", link: "/supported-sources/s3.md"
|
|
139
|
+
{ text: "S3", link: "/supported-sources/s3.md"},
|
|
140
140
|
{ text: "Salesforce", link: "/supported-sources/salesforce.md" },
|
|
141
|
+
{ text: "SFTP", link: "/supported-sources/sftp.md"},
|
|
141
142
|
{ text: "Shopify", link: "/supported-sources/shopify.md" },
|
|
142
143
|
{ text: "Slack", link: "/supported-sources/slack.md" },
|
|
143
144
|
{ text: "Smartsheet", link: "/supported-sources/smartsheets.md" },
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# CrateDB
|
|
2
|
+
|
|
3
|
+
[CrateDB] is a distributed and scalable SQL database for storing and analyzing
|
|
4
|
+
massive amounts of data in near real-time, even with complex queries. It is
|
|
5
|
+
PostgreSQL-compatible, and based on Lucene.
|
|
6
|
+
|
|
7
|
+
ingestr supports CrateDB as a source database.
|
|
8
|
+
|
|
9
|
+
## Source
|
|
10
|
+
|
|
11
|
+
For connecting to CrateDB as a database source, ingestr uses its SQLAlchemy
|
|
12
|
+
dialect package [sqlalchemy-cratedb].
|
|
13
|
+
|
|
14
|
+
### URI format
|
|
15
|
+
|
|
16
|
+
The URI format for CrateDB as a source is as follows:
|
|
17
|
+
```plaintext
|
|
18
|
+
crate://<username>:<password>@<host>:<port>?ssl=<ssl>
|
|
19
|
+
```
|
|
20
|
+
> [!INFO]
|
|
21
|
+
> The driver does not require any option, and will default to
|
|
22
|
+
> `crate://crate@localhost:4200?ssl=false` when just using `crate://`.
|
|
23
|
+
>
|
|
24
|
+
> When connecting to CrateDB on localhost, use:
|
|
25
|
+
> ```plaintext
|
|
26
|
+
> crate://crate@localhost:4200?ssl=false
|
|
27
|
+
> ```
|
|
28
|
+
>
|
|
29
|
+
> When connecting to [CrateDB Cloud], the URI looks like this:
|
|
30
|
+
> ```plaintext
|
|
31
|
+
> crate://admin:<PASSWORD>@<CLUSTERNAME>.eks1.eu-west-1.aws.cratedb.net:4200?ssl=true
|
|
32
|
+
> ```
|
|
33
|
+
|
|
34
|
+
### URI parameters
|
|
35
|
+
- `username` (required): The username is required to authenticate with the CrateDB server.
|
|
36
|
+
- `password` (required): The password is required to authenticate the provided username.
|
|
37
|
+
- `host` (required): The hostname or IP address of the CrateDB server where the database is hosted.
|
|
38
|
+
- `port` (required): The TCP port number used by the CrateDB server. Mostly `4200`.
|
|
39
|
+
- `ssl` (optional): Set to `true` for a secure HTTPS connection. By default, SSL is disabled (`false`).
|
|
40
|
+
|
|
41
|
+
### Example
|
|
42
|
+
|
|
43
|
+
This is an example command that will copy the `sys.summits` table from CrateDB
|
|
44
|
+
to DuckDB, then display the content from DuckDB.
|
|
45
|
+
|
|
46
|
+
```shell
|
|
47
|
+
ingestr ingest \
|
|
48
|
+
--source-uri 'crate://crate@localhost:4200/' \
|
|
49
|
+
--source-table 'sys.summits' \
|
|
50
|
+
--dest-uri 'duckdb:///cratedb.duckdb' \
|
|
51
|
+
--dest-table 'dest.summits'
|
|
52
|
+
```
|
|
53
|
+
```shell
|
|
54
|
+
duckdb cratedb.duckdb 'SELECT * FROM dest.summits LIMIT 5'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
<img alt="CrateDB_img" src="../media/cratedb-source.png" />
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
## Appendix
|
|
61
|
+
|
|
62
|
+
To start a single-node instance of CrateDB for evaluation purposes,
|
|
63
|
+
use Docker or Podman.
|
|
64
|
+
```shell
|
|
65
|
+
docker run --rm -it --name=cratedb \
|
|
66
|
+
--publish=4200:4200 --publish=5432:5432 \
|
|
67
|
+
--env=CRATE_HEAP_SIZE=2g crate/crate:nightly \
|
|
68
|
+
-Cdiscovery.type=single-node
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
We are tracking development progress and incompatibilities at
|
|
72
|
+
[Support for ingestr/CrateDB] and ["tool: dlt/ingestr"]. Please join the discussion
|
|
73
|
+
or share relevant issue reports that help us improve interoperability. Thanks!
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
[CrateDB]: https://github.com/crate/crate
|
|
77
|
+
[CrateDB Cloud]: https://console.cratedb.cloud/
|
|
78
|
+
[sqlalchemy-cratedb]: https://pypi.org/project/sqlalchemy-cratedb/
|
|
79
|
+
[Support for ingestr/CrateDB]: https://github.com/crate/crate-clients-tools/issues/86
|
|
80
|
+
["tool: dlt/ingestr"]: https://github.com/crate/crate/issues?q=state%3Aopen%20label%3A%22tool%3A%20dlt%2Fingestr%22
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# MySQL
|
|
2
2
|
MySQL is an open source relational database management system, known for its speed and reliability.
|
|
3
3
|
|
|
4
|
-
ingestr supports MySQL as a source.
|
|
4
|
+
ingestr supports MySQL as a source and a destination.
|
|
5
5
|
|
|
6
6
|
## URI format
|
|
7
7
|
The URI format for MySQL is as follows:
|
|
8
8
|
|
|
9
9
|
```plaintext
|
|
10
|
-
mysql://user:password@host:port/dbname
|
|
10
|
+
mysql://user:password@host:port/dbname
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
URI parameters:
|
|
@@ -17,4 +17,4 @@ URI parameters:
|
|
|
17
17
|
- `port`: the port number the database server is listening on, the default is 3306
|
|
18
18
|
- `dbname`: the name of the database to connect to
|
|
19
19
|
|
|
20
|
-
The same URI structure can be used both for sources and destinations. You can read more about SQLAlchemy's MySQL dialect [here](https://docs.sqlalchemy.org/en/20/core/engines.html#mysql).
|
|
20
|
+
The same URI structure and table can be used both for sources and destinations. You can read more about SQLAlchemy's MySQL dialect [here](https://docs.sqlalchemy.org/en/20/core/engines.html#mysql).
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# SFTP
|
|
2
|
+
|
|
3
|
+
SFTP (SSH File Transfer Protocol) is a secure file transfer protocol that runs over the SSH protocol. It provides a secure way to transfer files between a local and a remote computer.
|
|
4
|
+
|
|
5
|
+
`ingestr` supports SFTP as a data source.
|
|
6
|
+
|
|
7
|
+
## URI Format
|
|
8
|
+
|
|
9
|
+
The URI for connecting to an SFTP server is structured as follows:
|
|
10
|
+
|
|
11
|
+
```plaintext
|
|
12
|
+
sftp://<username>:<password>@<host>:<port>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## URI Components:
|
|
16
|
+
- `username`: The username for the SFTP server.
|
|
17
|
+
- `password`: The password for the SFTP server.
|
|
18
|
+
- `host`: The hostname or IP address of the SFTP server.
|
|
19
|
+
- `port`: The port number of the SFTP server (defaults to 22 if not specified).
|
|
20
|
+
|
|
21
|
+
## Setting up an SFTP Integration
|
|
22
|
+
|
|
23
|
+
To integrate `ingestr` with an SFTP server, you need the server's hostname, port, a valid username, and a password.
|
|
24
|
+
|
|
25
|
+
Once you have your credentials, you can load data to desired destaination.
|
|
26
|
+
|
|
27
|
+
### Example: Loading data from SFTP TO DUCKDB
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
ingestr ingest \
|
|
31
|
+
--source-uri 'sftp://myuser:MySecretPassword123@sftp.example.com' \
|
|
32
|
+
--source-table 'user.csv' \
|
|
33
|
+
--dest-uri duckdb:///sftp_data.duckdb \
|
|
34
|
+
--dest-table 'dest.users_deatils'
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
<img alt="sftp" src="../media/sftp.png"/>
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
The `--source-table` specifies `/path/to/directory` The base directory on the server where `ingestr` should start looking for files.
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
@@ -39,8 +39,9 @@ The result of this command will be a table in the `Solidgate.duckdb` database wi
|
|
|
39
39
|
|
|
40
40
|
Solidgate source allows ingesting the following sources into separate tables:
|
|
41
41
|
- `subscriptions`: Provides a comprehensive view of customer subscriptions, including subscription IDs, statuses, and key timestamps such as creation, update, and expiration dates.
|
|
42
|
-
- `
|
|
43
|
-
- `
|
|
42
|
+
- `apm_orders`: Provides essential information for anti-fraud purposes, including order IDs, transaction statuses, amounts, currencies, and payment methods, along with crucial customer details such as email addresses.
|
|
43
|
+
- `card_orders`: Provides detailed information on orders processed via card payments, including transaction data, payment status, and customer details.
|
|
44
|
+
- `financial_entries`: Provides a detailed transaction-level breakdown of financial records.
|
|
44
45
|
|
|
45
46
|
Use these as `--source-table` parameter in the `ingestr ingest` command.
|
|
46
47
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# SQLite
|
|
2
2
|
SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine.
|
|
3
3
|
|
|
4
|
-
ingestr supports SQLite as a source.
|
|
4
|
+
ingestr supports SQLite as a source and a destination.
|
|
5
5
|
|
|
6
6
|
## URI format
|
|
7
7
|
The URI format for SQLite is as follows:
|
|
@@ -58,6 +58,7 @@ class LoaderFileFormat(str, Enum):
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
class SqlBackend(str, Enum):
|
|
61
|
+
default = "default"
|
|
61
62
|
sqlalchemy = "sqlalchemy"
|
|
62
63
|
pyarrow = "pyarrow"
|
|
63
64
|
connectorx = "connectorx"
|
|
@@ -187,7 +188,7 @@ def ingest(
|
|
|
187
188
|
help="The SQL backend to use",
|
|
188
189
|
envvar=["SQL_BACKEND", "INGESTR_SQL_BACKEND"],
|
|
189
190
|
),
|
|
190
|
-
] = SqlBackend.
|
|
191
|
+
] = SqlBackend.default, # type: ignore
|
|
191
192
|
loader_file_format: Annotated[
|
|
192
193
|
Optional[LoaderFileFormat],
|
|
193
194
|
typer.Option(
|
|
@@ -289,7 +290,11 @@ def ingest(
|
|
|
289
290
|
from ingestr.src.collector.spinner import SpinnerCollector
|
|
290
291
|
from ingestr.src.destinations import AthenaDestination
|
|
291
292
|
from ingestr.src.factory import SourceDestinationFactory
|
|
292
|
-
from ingestr.src.filters import
|
|
293
|
+
from ingestr.src.filters import (
|
|
294
|
+
cast_set_to_list,
|
|
295
|
+
cast_spanner_types,
|
|
296
|
+
handle_mysql_empty_dates,
|
|
297
|
+
)
|
|
293
298
|
from ingestr.src.sources import MongoDbSource
|
|
294
299
|
|
|
295
300
|
def report_errors(run_info: LoadInfo):
|
|
@@ -517,6 +522,15 @@ def ingest(
|
|
|
517
522
|
if interval_end:
|
|
518
523
|
interval_end = interval_end.date() # type: ignore
|
|
519
524
|
|
|
525
|
+
if factory.source_scheme.startswith("spanner"):
|
|
526
|
+
# we tend to use the 'pyarrow' backend in general, however, it has issues with JSON objects, so we override it to 'sqlalchemy' for Spanner.
|
|
527
|
+
if sql_backend.value == SqlBackend.default:
|
|
528
|
+
sql_backend = SqlBackend.sqlalchemy
|
|
529
|
+
|
|
530
|
+
# this allows us to identify the cases where the user does not have a preference, so that for some sources we can override it.
|
|
531
|
+
if sql_backend == SqlBackend.default:
|
|
532
|
+
sql_backend = SqlBackend.pyarrow
|
|
533
|
+
|
|
520
534
|
dlt_source = source.dlt_source(
|
|
521
535
|
uri=source_uri,
|
|
522
536
|
table=source_table,
|
|
@@ -535,6 +549,9 @@ def ingest(
|
|
|
535
549
|
if factory.source_scheme.startswith("mysql"):
|
|
536
550
|
resource.for_each(dlt_source, lambda x: x.add_map(handle_mysql_empty_dates))
|
|
537
551
|
|
|
552
|
+
if factory.source_scheme.startswith("spanner"):
|
|
553
|
+
resource.for_each(dlt_source, lambda x: x.add_map(cast_spanner_types))
|
|
554
|
+
|
|
538
555
|
if yield_limit:
|
|
539
556
|
resource.for_each(dlt_source, lambda x: x.add_limit(yield_limit))
|
|
540
557
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
version = "v0.13.53"
|
|
@@ -468,3 +468,33 @@ class S3Destination:
|
|
|
468
468
|
|
|
469
469
|
def post_load(self) -> None:
|
|
470
470
|
pass
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
class SqliteDestination(GenericSqlDestination):
|
|
474
|
+
def dlt_dest(self, uri: str, **kwargs):
|
|
475
|
+
return dlt.destinations.sqlalchemy(credentials=uri)
|
|
476
|
+
|
|
477
|
+
def dlt_run_params(self, uri: str, table: str, **kwargs):
|
|
478
|
+
return {
|
|
479
|
+
#https://dlthub.com/docs/dlt-ecosystem/destinations/sqlalchemy#dataset-files
|
|
480
|
+
"dataset_name": "main",
|
|
481
|
+
"table_name": table,
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
class MySqlDestination(GenericSqlDestination):
|
|
486
|
+
def dlt_dest(self, uri: str, **kwargs):
|
|
487
|
+
return dlt.destinations.sqlalchemy(credentials=uri)
|
|
488
|
+
|
|
489
|
+
def dlt_run_params(self, uri: str, table: str, **kwargs):
|
|
490
|
+
parsed = urlparse(uri)
|
|
491
|
+
database = parsed.path.lstrip("/")
|
|
492
|
+
if not database:
|
|
493
|
+
raise ValueError("You need to specify a database")
|
|
494
|
+
return {
|
|
495
|
+
"dataset_name": database,
|
|
496
|
+
"table_name": table,
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
|
|
@@ -11,10 +11,12 @@ from ingestr.src.destinations import (
|
|
|
11
11
|
DatabricksDestination,
|
|
12
12
|
DuckDBDestination,
|
|
13
13
|
MsSQLDestination,
|
|
14
|
+
MySqlDestination,
|
|
14
15
|
PostgresDestination,
|
|
15
16
|
RedshiftDestination,
|
|
16
17
|
S3Destination,
|
|
17
18
|
SnowflakeDestination,
|
|
19
|
+
SqliteDestination,
|
|
18
20
|
SynapseDestination,
|
|
19
21
|
)
|
|
20
22
|
from ingestr.src.sources import (
|
|
@@ -52,18 +54,20 @@ from ingestr.src.sources import (
|
|
|
52
54
|
PipedriveSource,
|
|
53
55
|
S3Source,
|
|
54
56
|
SalesforceSource,
|
|
57
|
+
SFTPSource,
|
|
55
58
|
ShopifySource,
|
|
56
59
|
SlackSource,
|
|
60
|
+
SmartsheetSource,
|
|
57
61
|
SolidgateSource,
|
|
58
62
|
SqlSource,
|
|
59
63
|
StripeAnalyticsSource,
|
|
60
64
|
TikTokSource,
|
|
61
65
|
ZendeskSource,
|
|
62
|
-
SmartsheetSource,
|
|
63
66
|
)
|
|
64
67
|
|
|
65
68
|
SQL_SOURCE_SCHEMES = [
|
|
66
69
|
"bigquery",
|
|
70
|
+
"crate",
|
|
67
71
|
"duckdb",
|
|
68
72
|
"mssql",
|
|
69
73
|
"mysql",
|
|
@@ -163,6 +167,7 @@ class SourceDestinationFactory:
|
|
|
163
167
|
"attio": AttioSource,
|
|
164
168
|
"solidgate": SolidgateSource,
|
|
165
169
|
"smartsheet": SmartsheetSource,
|
|
170
|
+
"sftp": SFTPSource,
|
|
166
171
|
}
|
|
167
172
|
destinations: Dict[str, Type[DestinationProtocol]] = {
|
|
168
173
|
"bigquery": BigQueryDestination,
|
|
@@ -182,6 +187,9 @@ class SourceDestinationFactory:
|
|
|
182
187
|
"clickhouse+native": ClickhouseDestination,
|
|
183
188
|
"clickhouse": ClickhouseDestination,
|
|
184
189
|
"s3": S3Destination,
|
|
190
|
+
"sqlite": SqliteDestination,
|
|
191
|
+
"mysql": MySqlDestination,
|
|
192
|
+
"mysql+pymysql": MySqlDestination,
|
|
185
193
|
}
|
|
186
194
|
|
|
187
195
|
def __init__(self, source_uri: str, destination_uri: str):
|
|
@@ -7,6 +7,20 @@ def cast_set_to_list(row):
|
|
|
7
7
|
return row
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
def cast_spanner_types(row):
|
|
11
|
+
if not isinstance(row, dict):
|
|
12
|
+
return row
|
|
13
|
+
|
|
14
|
+
from google.cloud.spanner_v1.data_types import JsonObject
|
|
15
|
+
|
|
16
|
+
for key in row.keys():
|
|
17
|
+
if isinstance(row[key], JsonObject):
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
row[key] = json.loads(row[key].serialize())
|
|
21
|
+
return row
|
|
22
|
+
|
|
23
|
+
|
|
10
24
|
def handle_mysql_empty_dates(row):
|
|
11
25
|
# MySQL returns empty dates as 0000-00-00, which is not a valid date, we handle them here.
|
|
12
26
|
if not isinstance(row, dict):
|
|
@@ -43,7 +43,7 @@ def solidgate_source(
|
|
|
43
43
|
yield solidgate_client.fetch_data(path, date_from=start_dt, date_to=end_dt)
|
|
44
44
|
|
|
45
45
|
@dlt.resource(
|
|
46
|
-
name="
|
|
46
|
+
name="apm_orders",
|
|
47
47
|
write_disposition="merge",
|
|
48
48
|
primary_key="order_id",
|
|
49
49
|
columns={
|
|
@@ -69,7 +69,7 @@ def solidgate_source(
|
|
|
69
69
|
yield solidgate_client.fetch_data(path, date_from=start_dt, date_to=end_dt)
|
|
70
70
|
|
|
71
71
|
@dlt.resource(
|
|
72
|
-
name="
|
|
72
|
+
name="card_orders",
|
|
73
73
|
write_disposition="merge",
|
|
74
74
|
primary_key="order_id",
|
|
75
75
|
columns={
|
|
@@ -95,7 +95,7 @@ def solidgate_source(
|
|
|
95
95
|
yield solidgate_client.fetch_data(path, date_from=start_dt, date_to=end_dt)
|
|
96
96
|
|
|
97
97
|
@dlt.resource(
|
|
98
|
-
name="
|
|
98
|
+
name="financial_entries",
|
|
99
99
|
write_disposition="merge",
|
|
100
100
|
primary_key="id",
|
|
101
101
|
columns={
|