ingestr 0.13.40__tar.gz → 0.13.42__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.40 → ingestr-0.13.42}/Makefile +1 -1
- {ingestr-0.13.40 → ingestr-0.13.42}/PKG-INFO +6 -1
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/.vitepress/config.mjs +1 -0
- ingestr-0.13.42/docs/media/spanner_ingestion.png +0 -0
- ingestr-0.13.42/docs/supported-sources/spanner.md +41 -0
- ingestr-0.13.42/ingestr/src/buildinfo.py +1 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/factory.py +2 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/mongodb/__init__.py +66 -6
- ingestr-0.13.42/ingestr/src/mongodb/helpers.py +669 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/sources.py +46 -2
- {ingestr-0.13.40 → ingestr-0.13.42}/requirements.in +2 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/requirements.txt +25 -1
- {ingestr-0.13.40 → ingestr-0.13.42}/requirements_arm64.txt +25 -1
- ingestr-0.13.40/ingestr/src/buildinfo.py +0 -1
- ingestr-0.13.40/ingestr/src/mongodb/helpers.py +0 -166
- {ingestr-0.13.40 → ingestr-0.13.42}/.dockerignore +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/.githooks/pre-commit-hook.sh +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/.github/workflows/deploy-docs.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/.github/workflows/release.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/.github/workflows/secrets-scan.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/.github/workflows/tests.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/.gitignore +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/.gitleaksignore +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/.python-version +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/.vale.ini +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/Dockerfile +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/LICENSE.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/README.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/.vitepress/theme/custom.css +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/.vitepress/theme/index.js +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/commands/example-uris.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/commands/ingest.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/getting-started/core-concepts.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/getting-started/incremental-loading.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/getting-started/quickstart.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/getting-started/telemetry.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/index.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/applovin_max.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/athena.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/clickhouse_img.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/freshdesk_ingestion.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/github.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/google_analytics_realtime_report.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/googleanalytics.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/ingestion_elasticsearch_img.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/kinesis.bigquery.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/linkedin_ads.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/personio.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/personio_duckdb.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/phantombuster.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/pipedrive.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/stripe_postgres.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/tiktok.png +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/adjust.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/airtable.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/applovin.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/applovin_max.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/appsflyer.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/appstore.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/asana.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/athena.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/bigquery.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/chess.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/clickhouse.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/csv.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/custom_queries.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/databricks.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/db2.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/duckdb.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/dynamodb.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/elasticsearch.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/facebook-ads.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/frankfurter.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/freshdesk.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/gcs.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/github.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/google-ads.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/google_analytics.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/gorgias.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/gsheets.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/hubspot.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/kafka.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/kinesis.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/klaviyo.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/linkedin_ads.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/mongodb.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/mssql.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/mysql.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/notion.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/oracle.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/personio.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/phantombuster.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/pipedrive.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/postgres.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/redshift.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/s3.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/salesforce.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/sap-hana.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/shopify.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/slack.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/snowflake.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/sqlite.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/stripe.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/tiktok-ads.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/zendesk.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/tutorials/load-kinesis-bigquery.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/tutorials/load-personio-duckdb.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/docs/tutorials/load-stripe-postgres.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/conftest.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/main.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/.gitignore +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/adjust/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/adjust/adjust_helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/airtable/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/applovin/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/applovin_max/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appsflyer/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appsflyer/client.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appstore/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appstore/client.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appstore/errors.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appstore/models.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appstore/resources.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/arrow/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/asana_source/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/asana_source/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/asana_source/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/blob.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/chess/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/chess/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/chess/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/collector/spinner.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/destinations.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/dynamodb/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/elasticsearch/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/errors.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/facebook_ads/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/facebook_ads/exceptions.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/facebook_ads/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/facebook_ads/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/filesystem/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/filesystem/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/filesystem/readers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/filters.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/frankfurter/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/frankfurter/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/freshdesk/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/freshdesk/freshdesk_client.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/freshdesk/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/github/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/github/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/github/queries.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/github/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_ads/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_ads/field.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_ads/metrics.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_ads/predicates.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_ads/reports.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_analytics/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_analytics/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_sheets/README.md +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_sheets/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/gorgias/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/gorgias/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/hubspot/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/hubspot/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/hubspot/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/kafka/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/kafka/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/kinesis/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/kinesis/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/klaviyo/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/klaviyo/client.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/klaviyo/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/linkedin_ads/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/linkedin_ads/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/loader.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/notion/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/notion/helpers/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/notion/helpers/client.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/notion/helpers/database.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/notion/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/partition.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/personio/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/personio/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/phantombuster/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/phantombuster/client.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/helpers/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/helpers/custom_fields_munger.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/helpers/pages.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/typing.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/resource.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/salesforce/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/salesforce/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/shopify/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/shopify/exceptions.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/shopify/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/shopify/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/slack/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/slack/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/slack/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/sql_database/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/sql_database/callbacks.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/stripe_analytics/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/stripe_analytics/helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/stripe_analytics/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/table_definition.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/telemetry/event.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/testdata/fakebqcredentials.json +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/tiktok_ads/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/time.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/version.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/helpers/__init__.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/helpers/credentials.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/settings.py +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/.gitignore +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/create_replace.csv +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/delete_insert_expected.csv +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/delete_insert_part1.csv +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/delete_insert_part2.csv +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/merge_expected.csv +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/merge_part1.csv +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/merge_part2.csv +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/package-lock.json +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/package.json +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/pyproject.toml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/requirements-dev.txt +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/resources/demo.gif +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/resources/demo.tape +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/resources/ingestr.svg +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/AMPM.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Acronyms.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Colons.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Contractions.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/DateFormat.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Ellipses.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/EmDash.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Exclamation.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/FirstPerson.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Gender.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/GenderBias.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/HeadingPunctuation.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Headings.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Latin.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/LyHyphens.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/OptionalPlurals.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Ordinal.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/OxfordComma.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Parens.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Passive.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Periods.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Quotes.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Ranges.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Semicolons.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Slang.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Spacing.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Spelling.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Units.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/We.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Will.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/WordList.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/meta.json +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/vocab.txt +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/bruin/Ingestr.yml +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/styles/config/vocabularies/bruin/accept.txt +0 -0
- {ingestr-0.13.40 → ingestr-0.13.42}/test.env.template +0 -0
|
@@ -8,7 +8,7 @@ venv: venv/touchfile
|
|
|
8
8
|
|
|
9
9
|
venv/touchfile: requirements-dev.txt requirements.txt
|
|
10
10
|
test -d venv || python3 -m venv venv
|
|
11
|
-
. venv/bin/activate; pip install uv; $(MAKE) deps
|
|
11
|
+
. venv/bin/activate; pip install --disable-pip-version-check uv; $(MAKE) deps
|
|
12
12
|
touch venv/touchfile
|
|
13
13
|
|
|
14
14
|
lock-deps:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ingestr
|
|
3
|
-
Version: 0.13.
|
|
3
|
+
Version: 0.13.42
|
|
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
|
|
@@ -72,11 +72,14 @@ Requires-Dist: google-auth==2.38.0
|
|
|
72
72
|
Requires-Dist: google-cloud-bigquery-storage==2.24.0
|
|
73
73
|
Requires-Dist: google-cloud-bigquery==3.30.0
|
|
74
74
|
Requires-Dist: google-cloud-core==2.4.2
|
|
75
|
+
Requires-Dist: google-cloud-spanner==3.54.0
|
|
75
76
|
Requires-Dist: google-cloud-storage==3.1.0
|
|
76
77
|
Requires-Dist: google-crc32c==1.6.0
|
|
77
78
|
Requires-Dist: google-resumable-media==2.7.2
|
|
78
79
|
Requires-Dist: googleapis-common-protos==1.69.0
|
|
79
80
|
Requires-Dist: greenlet==3.2.2
|
|
81
|
+
Requires-Dist: grpc-google-iam-v1==0.14.2
|
|
82
|
+
Requires-Dist: grpc-interceptor==0.15.4
|
|
80
83
|
Requires-Dist: grpcio-status==1.62.3
|
|
81
84
|
Requires-Dist: grpcio==1.70.0
|
|
82
85
|
Requires-Dist: hdbcli==2.23.27
|
|
@@ -168,9 +171,11 @@ Requires-Dist: soupsieve==2.6
|
|
|
168
171
|
Requires-Dist: sqlalchemy-bigquery==1.12.1
|
|
169
172
|
Requires-Dist: sqlalchemy-hana==2.0.0
|
|
170
173
|
Requires-Dist: sqlalchemy-redshift==0.8.14
|
|
174
|
+
Requires-Dist: sqlalchemy-spanner==1.11.0
|
|
171
175
|
Requires-Dist: sqlalchemy2-stubs==0.0.2a38
|
|
172
176
|
Requires-Dist: sqlalchemy==1.4.52
|
|
173
177
|
Requires-Dist: sqlglot==26.12.1
|
|
178
|
+
Requires-Dist: sqlparse==0.5.3
|
|
174
179
|
Requires-Dist: stripe==10.7.0
|
|
175
180
|
Requires-Dist: tenacity==9.0.0
|
|
176
181
|
Requires-Dist: thrift==0.16.0
|
|
@@ -138,6 +138,7 @@ export default defineConfig({
|
|
|
138
138
|
{ text: "Salesforce", link: "/supported-sources/salesforce.md" },
|
|
139
139
|
{ text: "Shopify", link: "/supported-sources/shopify.md" },
|
|
140
140
|
{ text: "Slack", link: "/supported-sources/slack.md" },
|
|
141
|
+
{ text: "Spanner", link: "/supported-sources/spanner.md" },
|
|
141
142
|
{ text: "Stripe", link: "/supported-sources/stripe.md" },
|
|
142
143
|
{ text: "TikTok Ads", link: "/supported-sources/tiktok-ads.md" },
|
|
143
144
|
{ text: "Zendesk", link: "/supported-sources/zendesk.md" },
|
|
Binary file
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Spanner
|
|
2
|
+
[Spanner](https://cloud.google.com/spanner) is a fully managed, scalable, and strongly consistent database service.
|
|
3
|
+
|
|
4
|
+
ingestr supports Spanner as a source.
|
|
5
|
+
|
|
6
|
+
## URI format
|
|
7
|
+
The URI format for Spanner is as follows:
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
```plaintext
|
|
11
|
+
spanner://?project_id=<project_id>&instance_id=<instance_id>&database=<database>&credentials_path=</path/to/service/account.json>
|
|
12
|
+
```
|
|
13
|
+
or
|
|
14
|
+
```plaintext
|
|
15
|
+
spanner://?project_id=<project_id>&instance_id=<instance_id>&database=<database>&credentials_base64=<base64_encoded_credentials>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
URI parameters:
|
|
19
|
+
- `project_id`: Your Google Cloud project ID (e.g., "my-project-123")
|
|
20
|
+
- `instance_id`: The Spanner instance ID (e.g., "my-instance")
|
|
21
|
+
- `database`: The database name (e.g., "my-database")
|
|
22
|
+
- `credentials_path`: Path to your Google Cloud service account JSON file
|
|
23
|
+
- `credentials_base64`: Base64-encoded service account credentials (alternative to credentials_path)
|
|
24
|
+
|
|
25
|
+
Let's say we have the above credentials. Here's a sample command that will copy the data from Spanner (GoogleSQL) to DuckDB.
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
ingestr ingest \
|
|
29
|
+
--source-uri 'spanner://?project_id=id_123&instance_id=instance_123&database=db_123&credentials_path=./service_account.json' \
|
|
30
|
+
--source-table 'users' \
|
|
31
|
+
--dest-uri duckdb:///spanner.duckdb \
|
|
32
|
+
--dest-table 'dest.output'
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
<img alt="pipedrive_img" src="../media/spanner_ingestion.png"/>
|
|
37
|
+
|
|
38
|
+
> [!NOTE]
|
|
39
|
+
> Currently, only GoogleSQL databases are supported.
|
|
40
|
+
|
|
41
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
version = "v0.13.42"
|
|
@@ -79,6 +79,7 @@ SQL_SOURCE_SCHEMES = [
|
|
|
79
79
|
"clickhouse",
|
|
80
80
|
"databricks",
|
|
81
81
|
"db2",
|
|
82
|
+
"spanner",
|
|
82
83
|
]
|
|
83
84
|
|
|
84
85
|
|
|
@@ -119,6 +120,7 @@ class SourceDestinationFactory:
|
|
|
119
120
|
sources: Dict[str, Type[SourceProtocol]] = {
|
|
120
121
|
"csv": LocalCsvSource,
|
|
121
122
|
"mongodb": MongoDbSource,
|
|
123
|
+
"mongodb+srv": MongoDbSource,
|
|
122
124
|
"notion": NotionSource,
|
|
123
125
|
"gsheets": GoogleSheetsSource,
|
|
124
126
|
"shopify": ShopifySource,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"""Source that loads collections form any a mongo database, supports incremental loads."""
|
|
2
2
|
|
|
3
|
-
from typing import Any, Iterable, List, Optional
|
|
3
|
+
from typing import Any, Dict, Iterable, List, Mapping, Optional, Union
|
|
4
4
|
|
|
5
5
|
import dlt
|
|
6
|
+
from dlt.common.data_writers import TDataItemFormat
|
|
6
7
|
from dlt.sources import DltResource
|
|
7
8
|
|
|
8
9
|
from .helpers import (
|
|
@@ -21,6 +22,10 @@ def mongodb(
|
|
|
21
22
|
incremental: Optional[dlt.sources.incremental] = None, # type: ignore[type-arg]
|
|
22
23
|
write_disposition: Optional[str] = dlt.config.value,
|
|
23
24
|
parallel: Optional[bool] = dlt.config.value,
|
|
25
|
+
limit: Optional[int] = None,
|
|
26
|
+
filter_: Optional[Dict[str, Any]] = None,
|
|
27
|
+
projection: Optional[Union[Mapping[str, Any], Iterable[str]]] = None,
|
|
28
|
+
pymongoarrow_schema: Optional[Any] = None,
|
|
24
29
|
) -> Iterable[DltResource]:
|
|
25
30
|
"""
|
|
26
31
|
A DLT source which loads data from a mongo database using PyMongo.
|
|
@@ -34,6 +39,18 @@ def mongodb(
|
|
|
34
39
|
E.g., `incremental=dlt.sources.incremental('updated_at', pendulum.parse('2022-01-01T00:00:00Z'))`
|
|
35
40
|
write_disposition (str): Write disposition of the resource.
|
|
36
41
|
parallel (Optional[bool]): Option to enable parallel loading for the collection. Default is False.
|
|
42
|
+
limit (Optional[int]):
|
|
43
|
+
The maximum number of documents to load. The limit is
|
|
44
|
+
applied to each requested collection separately.
|
|
45
|
+
filter_ (Optional[Dict[str, Any]]): The filter to apply to the collection.
|
|
46
|
+
projection: (Optional[Union[Mapping[str, Any], Iterable[str]]]): The projection to select fields of a collection
|
|
47
|
+
when loading the collection. Supported inputs:
|
|
48
|
+
include (list) - ["year", "title"]
|
|
49
|
+
include (dict) - {"year": True, "title": True}
|
|
50
|
+
exclude (dict) - {"released": False, "runtime": False}
|
|
51
|
+
Note: Can't mix include and exclude statements '{"title": True, "released": False}`
|
|
52
|
+
pymongoarrow_schema (pymongoarrow.schema.Schema): Mapping of expected field types of a collection to convert BSON to Arrow
|
|
53
|
+
|
|
37
54
|
Returns:
|
|
38
55
|
Iterable[DltResource]: A list of DLT resources for each collection to be loaded.
|
|
39
56
|
"""
|
|
@@ -58,19 +75,36 @@ def mongodb(
|
|
|
58
75
|
primary_key="_id",
|
|
59
76
|
write_disposition=write_disposition,
|
|
60
77
|
spec=MongoDbCollectionConfiguration,
|
|
61
|
-
)(
|
|
78
|
+
)(
|
|
79
|
+
client,
|
|
80
|
+
collection,
|
|
81
|
+
incremental=incremental,
|
|
82
|
+
parallel=parallel,
|
|
83
|
+
limit=limit,
|
|
84
|
+
filter_=filter_ or {},
|
|
85
|
+
projection=projection,
|
|
86
|
+
pymongoarrow_schema=pymongoarrow_schema,
|
|
87
|
+
)
|
|
62
88
|
|
|
63
89
|
|
|
64
|
-
@dlt.
|
|
65
|
-
|
|
90
|
+
@dlt.resource(
|
|
91
|
+
name=lambda args: args["collection"],
|
|
92
|
+
standalone=True,
|
|
93
|
+
spec=MongoDbCollectionResourceConfiguration,
|
|
66
94
|
)
|
|
67
95
|
def mongodb_collection(
|
|
68
|
-
connection_url: str = dlt.
|
|
96
|
+
connection_url: str = dlt.secrets.value,
|
|
69
97
|
database: Optional[str] = dlt.config.value,
|
|
70
98
|
collection: str = dlt.config.value,
|
|
71
99
|
incremental: Optional[dlt.sources.incremental] = None, # type: ignore[type-arg]
|
|
72
100
|
write_disposition: Optional[str] = dlt.config.value,
|
|
73
101
|
parallel: Optional[bool] = False,
|
|
102
|
+
limit: Optional[int] = None,
|
|
103
|
+
chunk_size: Optional[int] = 10000,
|
|
104
|
+
data_item_format: Optional[TDataItemFormat] = "object",
|
|
105
|
+
filter_: Optional[Dict[str, Any]] = None,
|
|
106
|
+
projection: Optional[Union[Mapping[str, Any], Iterable[str]]] = dlt.config.value,
|
|
107
|
+
pymongoarrow_schema: Optional[Any] = None,
|
|
74
108
|
) -> Any:
|
|
75
109
|
"""
|
|
76
110
|
A DLT source which loads a collection from a mongo database using PyMongo.
|
|
@@ -83,6 +117,21 @@ def mongodb_collection(
|
|
|
83
117
|
E.g., `incremental=dlt.sources.incremental('updated_at', pendulum.parse('2022-01-01T00:00:00Z'))`
|
|
84
118
|
write_disposition (str): Write disposition of the resource.
|
|
85
119
|
parallel (Optional[bool]): Option to enable parallel loading for the collection. Default is False.
|
|
120
|
+
limit (Optional[int]): The number of documents load.
|
|
121
|
+
chunk_size (Optional[int]): The number of documents load in each batch.
|
|
122
|
+
data_item_format (Optional[TDataItemFormat]): The data format to use for loading.
|
|
123
|
+
Supported formats:
|
|
124
|
+
object - Python objects (dicts, lists).
|
|
125
|
+
arrow - Apache Arrow tables.
|
|
126
|
+
filter_ (Optional[Dict[str, Any]]): The filter to apply to the collection.
|
|
127
|
+
projection: (Optional[Union[Mapping[str, Any], Iterable[str]]]): The projection to select fields
|
|
128
|
+
when loading the collection. Supported inputs:
|
|
129
|
+
include (list) - ["year", "title"]
|
|
130
|
+
include (dict) - {"year": True, "title": True}
|
|
131
|
+
exclude (dict) - {"released": False, "runtime": False}
|
|
132
|
+
Note: Can't mix include and exclude statements '{"title": True, "released": False}`
|
|
133
|
+
pymongoarrow_schema (pymongoarrow.schema.Schema): Mapping of expected field types to convert BSON to Arrow
|
|
134
|
+
|
|
86
135
|
Returns:
|
|
87
136
|
Iterable[DltResource]: A list of DLT resources for each collection to be loaded.
|
|
88
137
|
"""
|
|
@@ -100,4 +149,15 @@ def mongodb_collection(
|
|
|
100
149
|
name=collection_obj.name,
|
|
101
150
|
primary_key="_id",
|
|
102
151
|
write_disposition=write_disposition,
|
|
103
|
-
)(
|
|
152
|
+
)(
|
|
153
|
+
client,
|
|
154
|
+
collection_obj,
|
|
155
|
+
incremental=incremental,
|
|
156
|
+
parallel=parallel,
|
|
157
|
+
limit=limit,
|
|
158
|
+
chunk_size=chunk_size,
|
|
159
|
+
data_item_format=data_item_format,
|
|
160
|
+
filter_=filter_ or {},
|
|
161
|
+
projection=projection,
|
|
162
|
+
pymongoarrow_schema=pymongoarrow_schema,
|
|
163
|
+
)
|