ingestr 0.13.9__tar.gz → 0.13.11__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.9 → ingestr-0.13.11}/PKG-INFO +27 -16
- {ingestr-0.13.9 → ingestr-0.13.11}/README.md +15 -5
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/.vitepress/config.mjs +3 -1
- ingestr-0.13.11/docs/media/personio.png +0 -0
- ingestr-0.13.11/docs/supported-sources/personio.md +51 -0
- ingestr-0.13.11/docs/supported-sources/salesforce.md +68 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/applovin/__init__.py +8 -7
- ingestr-0.13.11/ingestr/src/buildinfo.py +1 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/factory.py +4 -0
- ingestr-0.13.11/ingestr/src/personio/__init__.py +331 -0
- ingestr-0.13.11/ingestr/src/personio/helpers.py +85 -0
- ingestr-0.13.11/ingestr/src/salesforce/__init__.py +149 -0
- ingestr-0.13.11/ingestr/src/salesforce/helpers.py +64 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/sources.py +118 -5
- {ingestr-0.13.9 → ingestr-0.13.11}/requirements.txt +11 -12
- ingestr-0.13.9/ingestr/src/buildinfo.py +0 -1
- {ingestr-0.13.9 → ingestr-0.13.11}/.dockerignore +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/.githooks/pre-commit-hook.sh +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/.github/workflows/deploy-docs.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/.github/workflows/release.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/.github/workflows/secrets-scan.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/.github/workflows/tests.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/.gitignore +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/.gitleaksignore +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/.python-version +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/.vale.ini +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/Dockerfile +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/LICENSE.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/Makefile +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/.vitepress/theme/custom.css +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/.vitepress/theme/index.js +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/commands/example-uris.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/commands/ingest.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/getting-started/core-concepts.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/getting-started/incremental-loading.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/getting-started/quickstart.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/getting-started/telemetry.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/index.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/applovin_max.png +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/athena.png +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/clickhouse_img.png +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/github.png +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/googleanalytics.png +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/linkedin_ads.png +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/tiktok.png +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/adjust.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/airtable.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/applovin.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/applovin_max.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/appsflyer.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/appstore.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/asana.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/athena.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/bigquery.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/chess.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/clickhouse.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/csv.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/custom_queries.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/databricks.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/duckdb.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/dynamodb.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/facebook-ads.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/gcs.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/github.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/google-ads.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/google_analytics.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/gorgias.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/gsheets.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/hubspot.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/kafka.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/klaviyo.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/linkedin_ads.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/mongodb.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/mssql.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/mysql.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/notion.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/oracle.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/postgres.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/redshift.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/s3.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/sap-hana.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/shopify.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/slack.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/snowflake.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/sqlite.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/stripe.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/tiktok-ads.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/zendesk.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/main.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/.gitignore +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/adjust/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/adjust/adjust_helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/airtable/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/applovin_max/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appsflyer/_init_.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appsflyer/client.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appstore/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appstore/client.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appstore/errors.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appstore/models.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appstore/resources.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/arrow/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/asana_source/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/asana_source/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/asana_source/settings.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/blob.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/chess/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/chess/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/chess/settings.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/destinations.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/dynamodb/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/errors.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/facebook_ads/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/facebook_ads/exceptions.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/facebook_ads/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/facebook_ads/settings.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/filesystem/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/filesystem/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/filesystem/readers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/filters.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/github/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/github/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/github/queries.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/github/settings.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_ads/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_ads/field.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_ads/metrics.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_ads/predicates.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_ads/reports.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_analytics/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_analytics/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_sheets/README.md +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_sheets/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/gorgias/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/gorgias/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/hubspot/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/hubspot/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/hubspot/settings.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/kafka/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/kafka/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/klaviyo/_init_.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/klaviyo/client.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/klaviyo/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/linkedin_ads/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/linkedin_ads/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/loader.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/mongodb/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/mongodb/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/notion/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/notion/helpers/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/notion/helpers/client.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/notion/helpers/database.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/notion/settings.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/shopify/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/shopify/exceptions.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/shopify/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/shopify/settings.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/slack/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/slack/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/slack/settings.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/sql_database/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/sql_database/callbacks.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/stripe_analytics/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/stripe_analytics/helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/stripe_analytics/settings.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/table_definition.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/telemetry/event.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/testdata/fakebqcredentials.json +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/tiktok_ads/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/time.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/version.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/helpers/__init__.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/helpers/credentials.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/settings.py +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/.gitignore +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/create_replace.csv +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/delete_insert_expected.csv +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/delete_insert_part1.csv +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/delete_insert_part2.csv +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/merge_expected.csv +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/merge_part1.csv +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/merge_part2.csv +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/package-lock.json +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/package.json +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/pyproject.toml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/requirements-dev.txt +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/resources/demo.gif +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/resources/demo.tape +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/resources/ingestr.svg +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/AMPM.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Acronyms.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Colons.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Contractions.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/DateFormat.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Ellipses.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/EmDash.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Exclamation.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/FirstPerson.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Gender.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/GenderBias.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/HeadingPunctuation.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Headings.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Latin.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/LyHyphens.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/OptionalPlurals.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Ordinal.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/OxfordComma.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Parens.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Passive.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Periods.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Quotes.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Ranges.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Semicolons.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Slang.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Spacing.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Spelling.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Units.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/We.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Will.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/WordList.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/meta.json +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/vocab.txt +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/bruin/Ingestr.yml +0 -0
- {ingestr-0.13.9 → ingestr-0.13.11}/styles/config/vocabularies/bruin/accept.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ingestr
|
|
3
|
-
Version: 0.13.
|
|
3
|
+
Version: 0.13.11
|
|
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
|
|
@@ -18,42 +18,43 @@ Requires-Dist: asana==3.2.3
|
|
|
18
18
|
Requires-Dist: clickhouse-connect==0.8.14
|
|
19
19
|
Requires-Dist: clickhouse-driver==0.2.9
|
|
20
20
|
Requires-Dist: clickhouse-sqlalchemy==0.2.7
|
|
21
|
-
Requires-Dist: confluent-kafka>=2.
|
|
21
|
+
Requires-Dist: confluent-kafka>=2.8.0
|
|
22
22
|
Requires-Dist: databricks-sql-connector==2.9.3
|
|
23
23
|
Requires-Dist: dataclasses-json==0.6.7
|
|
24
|
-
Requires-Dist: dlt==1.
|
|
25
|
-
Requires-Dist: duckdb-engine==0.
|
|
26
|
-
Requires-Dist: duckdb==1.
|
|
24
|
+
Requires-Dist: dlt==1.6.1
|
|
25
|
+
Requires-Dist: duckdb-engine==0.15.0
|
|
26
|
+
Requires-Dist: duckdb==1.2.0
|
|
27
27
|
Requires-Dist: facebook-business==20.0.0
|
|
28
28
|
Requires-Dist: flatten-json==0.1.14
|
|
29
29
|
Requires-Dist: gcsfs==2024.10.0
|
|
30
30
|
Requires-Dist: google-ads==25.1.0
|
|
31
|
-
Requires-Dist: google-analytics-data==0.18.
|
|
31
|
+
Requires-Dist: google-analytics-data==0.18.17
|
|
32
32
|
Requires-Dist: google-api-python-client==2.130.0
|
|
33
33
|
Requires-Dist: google-cloud-bigquery-storage==2.24.0
|
|
34
|
-
Requires-Dist: mysql-connector-python==9.
|
|
34
|
+
Requires-Dist: mysql-connector-python==9.2.0
|
|
35
35
|
Requires-Dist: pendulum==3.0.0
|
|
36
36
|
Requires-Dist: psutil==6.1.1
|
|
37
37
|
Requires-Dist: psycopg2-binary==2.9.10
|
|
38
38
|
Requires-Dist: py-machineid==0.6.0
|
|
39
39
|
Requires-Dist: pyairtable==2.3.3
|
|
40
40
|
Requires-Dist: pyarrow==18.1.0
|
|
41
|
-
Requires-Dist: pyathena==3.
|
|
42
|
-
Requires-Dist: pymongo==4.
|
|
41
|
+
Requires-Dist: pyathena==3.12.2
|
|
42
|
+
Requires-Dist: pymongo==4.11.1
|
|
43
43
|
Requires-Dist: pymysql==1.1.1
|
|
44
44
|
Requires-Dist: pyrate-limiter==3.7.0
|
|
45
45
|
Requires-Dist: redshift-connector==2.1.5
|
|
46
46
|
Requires-Dist: rich==13.9.4
|
|
47
47
|
Requires-Dist: rudder-sdk-python==2.1.4
|
|
48
48
|
Requires-Dist: s3fs==2024.10.0
|
|
49
|
+
Requires-Dist: simple-salesforce==1.12.6
|
|
49
50
|
Requires-Dist: snowflake-sqlalchemy==1.6.1
|
|
50
|
-
Requires-Dist: sqlalchemy-bigquery==1.12.
|
|
51
|
+
Requires-Dist: sqlalchemy-bigquery==1.12.1
|
|
51
52
|
Requires-Dist: sqlalchemy-hana==2.0.0
|
|
52
53
|
Requires-Dist: sqlalchemy-redshift==0.8.14
|
|
53
54
|
Requires-Dist: sqlalchemy2-stubs==0.0.2a38
|
|
54
55
|
Requires-Dist: sqlalchemy==1.4.52
|
|
55
56
|
Requires-Dist: stripe==10.7.0
|
|
56
|
-
Requires-Dist: tqdm==4.67.
|
|
57
|
+
Requires-Dist: tqdm==4.67.1
|
|
57
58
|
Requires-Dist: typer==0.13.1
|
|
58
59
|
Requires-Dist: types-requests==2.32.0.20240907
|
|
59
60
|
Provides-Extra: odbc
|
|
@@ -161,6 +162,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
161
162
|
<td>✅</td>
|
|
162
163
|
<td>✅</td>
|
|
163
164
|
</tr>
|
|
165
|
+
<tr>
|
|
166
|
+
<td>DynamoDB</td>
|
|
167
|
+
<td>✅</td>
|
|
168
|
+
<td>-</td>
|
|
169
|
+
</tr>
|
|
164
170
|
<tr>
|
|
165
171
|
<td>Local CSV file</td>
|
|
166
172
|
<td>✅</td>
|
|
@@ -247,11 +253,6 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
247
253
|
<td>✅</td>
|
|
248
254
|
<td>-</td>
|
|
249
255
|
</tr>
|
|
250
|
-
<tr>
|
|
251
|
-
<td>DynamoDB</td>
|
|
252
|
-
<td>✅</td>
|
|
253
|
-
<td>-</td>
|
|
254
|
-
</tr>
|
|
255
256
|
<tr>
|
|
256
257
|
<td>Facebook Ads</td>
|
|
257
258
|
<td>✅</td>
|
|
@@ -301,12 +302,22 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
301
302
|
<td>Notion</td>
|
|
302
303
|
<td>✅</td>
|
|
303
304
|
<td>-</td>
|
|
305
|
+
</tr>
|
|
306
|
+
<tr>
|
|
307
|
+
<td>Personio</td>
|
|
308
|
+
<td>✅</td>
|
|
309
|
+
<td>-</td>
|
|
304
310
|
</tr>
|
|
305
311
|
<tr>
|
|
306
312
|
<td>S3</td>
|
|
307
313
|
<td>✅</td>
|
|
308
314
|
<td>-</td>
|
|
309
315
|
</tr>
|
|
316
|
+
<tr>
|
|
317
|
+
<td>Salesforce</td>
|
|
318
|
+
<td>✅</td>
|
|
319
|
+
<td>-</td>
|
|
320
|
+
</tr>
|
|
310
321
|
<tr>
|
|
311
322
|
<td>Shopify</td>
|
|
312
323
|
<td>✅</td>
|
|
@@ -97,6 +97,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
97
97
|
<td>✅</td>
|
|
98
98
|
<td>✅</td>
|
|
99
99
|
</tr>
|
|
100
|
+
<tr>
|
|
101
|
+
<td>DynamoDB</td>
|
|
102
|
+
<td>✅</td>
|
|
103
|
+
<td>-</td>
|
|
104
|
+
</tr>
|
|
100
105
|
<tr>
|
|
101
106
|
<td>Local CSV file</td>
|
|
102
107
|
<td>✅</td>
|
|
@@ -183,11 +188,6 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
183
188
|
<td>✅</td>
|
|
184
189
|
<td>-</td>
|
|
185
190
|
</tr>
|
|
186
|
-
<tr>
|
|
187
|
-
<td>DynamoDB</td>
|
|
188
|
-
<td>✅</td>
|
|
189
|
-
<td>-</td>
|
|
190
|
-
</tr>
|
|
191
191
|
<tr>
|
|
192
192
|
<td>Facebook Ads</td>
|
|
193
193
|
<td>✅</td>
|
|
@@ -237,12 +237,22 @@ Pull requests are welcome. However, please open an issue first to discuss what y
|
|
|
237
237
|
<td>Notion</td>
|
|
238
238
|
<td>✅</td>
|
|
239
239
|
<td>-</td>
|
|
240
|
+
</tr>
|
|
241
|
+
<tr>
|
|
242
|
+
<td>Personio</td>
|
|
243
|
+
<td>✅</td>
|
|
244
|
+
<td>-</td>
|
|
240
245
|
</tr>
|
|
241
246
|
<tr>
|
|
242
247
|
<td>S3</td>
|
|
243
248
|
<td>✅</td>
|
|
244
249
|
<td>-</td>
|
|
245
250
|
</tr>
|
|
251
|
+
<tr>
|
|
252
|
+
<td>Salesforce</td>
|
|
253
|
+
<td>✅</td>
|
|
254
|
+
<td>-</td>
|
|
255
|
+
</tr>
|
|
246
256
|
<tr>
|
|
247
257
|
<td>Shopify</td>
|
|
248
258
|
<td>✅</td>
|
|
@@ -62,6 +62,7 @@ export default defineConfig({
|
|
|
62
62
|
{ text: "ClickHouse", link: "/supported-sources/clickhouse.md" },
|
|
63
63
|
{ text: "Databricks", link: "/supported-sources/databricks.md" },
|
|
64
64
|
{ text: "DuckDB", link: "/supported-sources/duckdb.md" },
|
|
65
|
+
{ text: "DynamoDB", link: "/supported-sources/dynamodb.md" },
|
|
65
66
|
{
|
|
66
67
|
text: "Google BigQuery",
|
|
67
68
|
link: "/supported-sources/bigquery.md",
|
|
@@ -100,7 +101,6 @@ export default defineConfig({
|
|
|
100
101
|
{ text: "Applovin Max", link: "/supported-sources/applovin_max.md"},
|
|
101
102
|
{ text: "Asana", link: "/supported-sources/asana.md" },
|
|
102
103
|
{ text: "Chess.com", link: "/supported-sources/chess.md" },
|
|
103
|
-
{ text: "DynamoDB", link: "/supported-sources/dynamodb.md" },
|
|
104
104
|
{
|
|
105
105
|
text: "Facebook Ads",
|
|
106
106
|
link: "/supported-sources/facebook-ads.md",
|
|
@@ -115,7 +115,9 @@ export default defineConfig({
|
|
|
115
115
|
{ text: "Klaviyo", link: "/supported-sources/klaviyo.md" },
|
|
116
116
|
{ text: "LinkedIn Ads", link: "/supported-sources/linkedin_ads.md" },
|
|
117
117
|
{ text: "Notion", link: "/supported-sources/notion.md" },
|
|
118
|
+
{ text: "Personio", link: "/supported-sources/personio.md" },
|
|
118
119
|
{ text: "S3", link: "/supported-sources/s3.md" },
|
|
120
|
+
{ text: "Salesforce", link: "/supported-sources/salesforce.md" },
|
|
119
121
|
{ text: "Shopify", link: "/supported-sources/shopify.md" },
|
|
120
122
|
{ text: "Slack", link: "/supported-sources/slack.md" },
|
|
121
123
|
{ text: "Stripe", link: "/supported-sources/stripe.md" },
|
|
Binary file
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Personio
|
|
2
|
+
[Personio](https://personio.de/) is a human resources management software that helps businesses
|
|
3
|
+
streamline HR processes, including recruitment, employee data management, and payroll, in one
|
|
4
|
+
platform.
|
|
5
|
+
|
|
6
|
+
ingestr supports Personio as a source.
|
|
7
|
+
|
|
8
|
+
## URI format
|
|
9
|
+
|
|
10
|
+
The URI format for Personio is as follows:
|
|
11
|
+
|
|
12
|
+
```plaintext
|
|
13
|
+
personio://?client_id=<client-id>&client_secret=<client-secret>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
URI parameters:
|
|
17
|
+
|
|
18
|
+
- `client_id`: the client ID used for authentication with the Personio API
|
|
19
|
+
- `client_secret`: the client secret used for authentication with the Personio API
|
|
20
|
+
|
|
21
|
+
## Setting up a Personio Integration
|
|
22
|
+
|
|
23
|
+
To grab personio credentials, please follow the guide [here](https://dlthub.com/docs/dlt-ecosystem/verified-sources/personio#grab-credentials).
|
|
24
|
+
|
|
25
|
+
Once you complete the guide, you should have a client ID and client secret. Let's say your `client_id` is id_123 and your `client_secret` is secret_123, here's a sample command that will copy the data from Personio into a DuckDB database:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
ingestr ingest --source-uri 'personio://?client_id=id_123&client_secret=secret_123' \
|
|
29
|
+
--source-table 'employees' \
|
|
30
|
+
--dest-uri duckdb:///personio.duckdb \
|
|
31
|
+
--dest-table 'dest.employees'
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
<img alt="personio_img" src="../media/personio.png"/>
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
Personio source allows ingesting the following resources into separate tables:
|
|
38
|
+
- [employees](https://developer.personio.de/reference/get_company-employees) : Retrieves company employees details
|
|
39
|
+
- [absences](https://developer.personio.de/reference/get_company-time-offs) : Retrieves absence periods for absences tracked in days
|
|
40
|
+
- [absence_types](https://developer.personio.de/reference/get_company-time-off-types) : Retrieves list of various types of employee absences
|
|
41
|
+
- [attendances](https://developer.personio.de/reference/get_company-attendances) : Retrieves attendance records for each employee
|
|
42
|
+
- [projects](https://developer.personio.de/reference/get_company-attendances-projects) : Retrieves a list of all company projects
|
|
43
|
+
- [document_categories](https://developer.personio.de/reference/get_company-document-categories) : Retrieves all document categories of the company
|
|
44
|
+
- [employees_absences_balance](https://developer.personio.de/reference/get_company-employees-employee-id-absences-balance) : Retrieves the absence balance for a specific employee
|
|
45
|
+
- [custom_reports_list](https://developer.personio.de/reference/listreports) : Retrieves metadata about existing custom reports in your Personio account, such as report name, report type, report date / timeframe.
|
|
46
|
+
|
|
47
|
+
Use these as `--source-table` parameter in the `ingestr ingest` command.\
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
> [!WARNING]
|
|
51
|
+
> Personio does not support incremental loading for many endpoints, which means ingestr will load endpoints incrementally if they support it, and do a full-refresh if not.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Salesforce
|
|
2
|
+
[Salesforce](https://www.salesforce.com/) is a cloud-based customer relationship management (CRM) platform that helps businesses manage sales, customer interactions, and business processes. It provides tools for sales automation, customer service, marketing, analytics, and application development.
|
|
3
|
+
|
|
4
|
+
Ingestr supports Salesforce as a source.
|
|
5
|
+
|
|
6
|
+
## URI format
|
|
7
|
+
|
|
8
|
+
The URI format for Salesforce is as follows:
|
|
9
|
+
```
|
|
10
|
+
salesforce://?username=<username>&password=<password>&token=<token>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
URI parameters:
|
|
14
|
+
- `username` is your Salesforce account username.
|
|
15
|
+
- `password` is your Salesforce account password.
|
|
16
|
+
- `token` is your Salesforce security token.
|
|
17
|
+
|
|
18
|
+
You can obtain your security token by logging into your Salesforce account and navigating to the user settings under "Reset My Security Token."
|
|
19
|
+
|
|
20
|
+
## Setting up a Salesforce Integration
|
|
21
|
+
|
|
22
|
+
You can obtain an OAuth access token by setting up a connected app in Salesforce and using OAuth 2.0 authentication. For more information, see [Salesforce API Authentication](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/quickstart_oauth.htm).
|
|
23
|
+
|
|
24
|
+
## Example
|
|
25
|
+
|
|
26
|
+
Let's say:
|
|
27
|
+
* Your Salesforce username is `user`.
|
|
28
|
+
* Your password is `password123`.
|
|
29
|
+
* Your security token is `fake_token`.
|
|
30
|
+
* You want to ingest `account` data from your salesforce account
|
|
31
|
+
* You want to save this data in a duckdb database `sf.db` under the table `public.account`
|
|
32
|
+
|
|
33
|
+
You can run the following command to achieve this:
|
|
34
|
+
```sh
|
|
35
|
+
ingestr ingest \
|
|
36
|
+
--source-uri "salesforce://?username=user&password=password123&token=fake_token" \
|
|
37
|
+
--source-table "account" \
|
|
38
|
+
--dest-uri "duckdb:///sf.db" \
|
|
39
|
+
--dest-table "public.account"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Tables
|
|
43
|
+
|
|
44
|
+
Salesforce source allows ingesting the following objects into separate tables:
|
|
45
|
+
|
|
46
|
+
| **Table** | **Mode** | **Description** |
|
|
47
|
+
|---------------------------|-----------|----------------|
|
|
48
|
+
| `user` | replace | Refers to an individual who has access to a Salesforce org or instance. |
|
|
49
|
+
| `user_role` | replace | A standard object that represents a role within the organization's hierarchy. |
|
|
50
|
+
| `opportunity` | merge | Represents a sales opportunity for a specific account or contact. |
|
|
51
|
+
| `opportunity_line_item` | merge | Represents individual line items or products associated with an Opportunity. |
|
|
52
|
+
| `opportunity_contact_role` | merge | Represents the association between an Opportunity and a Contact. |
|
|
53
|
+
| `account` | merge | Individual or organization that interacts with your business. |
|
|
54
|
+
| `contact` | replace | An individual person associated with an account or organization. |
|
|
55
|
+
| `lead` | replace | Prospective customer/individual/org. that has shown interest in a company's products/services. |
|
|
56
|
+
| `campaign` | replace | Marketing initiative or project designed to achieve specific goals, such as generating leads. |
|
|
57
|
+
| `campaign_member` | merge | Association between a Contact or Lead and a Campaign. |
|
|
58
|
+
| `product` | replace | For managing and organizing your product-related data within the Salesforce ecosystem. |
|
|
59
|
+
| `pricebook` | replace | Used to manage product pricing and create price books. |
|
|
60
|
+
| `pricebook_entry` | replace | Represents a specific price for a product in a price book. |
|
|
61
|
+
| `task` | merge | Used to track and manage various activities and tasks within the Salesforce platform. |
|
|
62
|
+
| `event` | merge | Used to track and manage calendar-based events, such as meetings, appointments, or calls. |
|
|
63
|
+
|
|
64
|
+
Use these as `--source-table` parameters in the `ingestr ingest` command.
|
|
65
|
+
|
|
66
|
+
> [!WARNING]
|
|
67
|
+
> Salesforce API limits may affect the frequency and volume of data ingestion. Incremental loading is supported for objects with the `SystemModstamp` field, but some objects may require full-refresh loads. This is indicated by `mode` in the tables above. Tables with mode `replace` don't support incremental loads, while the ones with `merge` do.
|
|
68
|
+
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
from datetime import datetime,
|
|
1
|
+
from datetime import datetime, timedelta, timezone
|
|
2
2
|
from enum import Enum
|
|
3
3
|
from typing import Dict, List, Optional
|
|
4
|
-
from requests import Response
|
|
5
4
|
|
|
6
5
|
import dlt
|
|
7
6
|
from dlt.sources.rest_api import EndpointResource, RESTAPIConfig, rest_api_resources
|
|
7
|
+
from requests import Response
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class InvalidCustomReportError(Exception):
|
|
@@ -13,9 +13,11 @@ class InvalidCustomReportError(Exception):
|
|
|
13
13
|
"Custom report should be in the format 'custom:{endpoint}:{report_type}:{dimensions}"
|
|
14
14
|
)
|
|
15
15
|
|
|
16
|
+
|
|
16
17
|
class ClientError(Exception):
|
|
17
18
|
pass
|
|
18
19
|
|
|
20
|
+
|
|
19
21
|
TYPE_HINTS = {
|
|
20
22
|
"application_is_hidden": {"data_type": "bool"},
|
|
21
23
|
"average_cpa": {"data_type": "double"},
|
|
@@ -119,7 +121,6 @@ def applovin_source(
|
|
|
119
121
|
end_date: Optional[str],
|
|
120
122
|
custom: Optional[str],
|
|
121
123
|
):
|
|
122
|
-
|
|
123
124
|
backfill = False
|
|
124
125
|
if end_date is None:
|
|
125
126
|
backfill = True
|
|
@@ -127,7 +128,7 @@ def applovin_source(
|
|
|
127
128
|
# use the greatest of yesterday and start_date
|
|
128
129
|
end_date = max(
|
|
129
130
|
datetime.now(timezone.utc) - timedelta(days=1),
|
|
130
|
-
datetime.fromisoformat(start_date).replace(tzinfo=timezone.utc)
|
|
131
|
+
datetime.fromisoformat(start_date).replace(tzinfo=timezone.utc),
|
|
131
132
|
).strftime("%Y-%m-%d")
|
|
132
133
|
|
|
133
134
|
config: RESTAPIConfig = {
|
|
@@ -157,7 +158,7 @@ def applovin_source(
|
|
|
157
158
|
"paginator": "single_page",
|
|
158
159
|
"response_actions": [
|
|
159
160
|
http_error_handler,
|
|
160
|
-
]
|
|
161
|
+
],
|
|
161
162
|
},
|
|
162
163
|
},
|
|
163
164
|
"resources": [
|
|
@@ -177,8 +178,7 @@ def applovin_source(
|
|
|
177
178
|
"advertiser-probabilistic-report",
|
|
178
179
|
"probabilisticReport",
|
|
179
180
|
exclude(
|
|
180
|
-
REPORT_SCHEMA[ReportType.ADVERTISER],
|
|
181
|
-
PROBABILISTIC_REPORT_EXCLUDE
|
|
181
|
+
REPORT_SCHEMA[ReportType.ADVERTISER], PROBABILISTIC_REPORT_EXCLUDE
|
|
182
182
|
),
|
|
183
183
|
ReportType.ADVERTISER,
|
|
184
184
|
),
|
|
@@ -256,6 +256,7 @@ def exclude(source: List[str], exclude_list: List[str]) -> List[str]:
|
|
|
256
256
|
def build_type_hints(cols: List[str]) -> dict:
|
|
257
257
|
return {col: TYPE_HINTS[col] for col in cols if col in TYPE_HINTS}
|
|
258
258
|
|
|
259
|
+
|
|
259
260
|
def http_error_handler(resp: Response):
|
|
260
261
|
if not resp.ok:
|
|
261
262
|
raise ClientError(f"HTTP Status {resp.status_code}: {resp.text}")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
version = "v0.13.11"
|
|
@@ -42,12 +42,14 @@ from ingestr.src.sources import (
|
|
|
42
42
|
MongoDbSource,
|
|
43
43
|
NotionSource,
|
|
44
44
|
S3Source,
|
|
45
|
+
SalesforceSource,
|
|
45
46
|
ShopifySource,
|
|
46
47
|
SlackSource,
|
|
47
48
|
SqlSource,
|
|
48
49
|
StripeAnalyticsSource,
|
|
49
50
|
TikTokSource,
|
|
50
51
|
ZendeskSource,
|
|
52
|
+
PersonioSource,
|
|
51
53
|
)
|
|
52
54
|
|
|
53
55
|
SQL_SOURCE_SCHEMES = [
|
|
@@ -136,6 +138,8 @@ class SourceDestinationFactory:
|
|
|
136
138
|
"linkedinads": LinkedInAdsSource,
|
|
137
139
|
"applovin": AppLovinSource,
|
|
138
140
|
"applovinmax": ApplovinMaxSource,
|
|
141
|
+
"salesforce": SalesforceSource,
|
|
142
|
+
"personio": PersonioSource,
|
|
139
143
|
}
|
|
140
144
|
destinations: Dict[str, Type[DestinationProtocol]] = {
|
|
141
145
|
"bigquery": BigQueryDestination,
|