ingestr 0.12.4__tar.gz → 0.12.5__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.12.4 → ingestr-0.12.5}/PKG-INFO +4 -4
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/main.py +2 -1
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/arrow/__init__.py +0 -4
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/sources.py +17 -44
- ingestr-0.12.5/ingestr/src/sql_database/callbacks.py +66 -0
- ingestr-0.12.5/ingestr/src/version.py +1 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/requirements.txt +3 -3
- ingestr-0.12.5/styles/Google/vocab.txt +0 -0
- ingestr-0.12.4/ingestr/src/version.py +0 -1
- {ingestr-0.12.4 → ingestr-0.12.5}/.dockerignore +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/.githooks/pre-commit-hook.sh +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/.github/workflows/deploy-docs.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/.github/workflows/secrets-scan.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/.github/workflows/tests.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/.gitignore +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/.gitleaksignore +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/.python-version +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/.vale.ini +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/Dockerfile +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/LICENSE.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/Makefile +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/README.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/.vitepress/config.mjs +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/.vitepress/theme/custom.css +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/.vitepress/theme/index.js +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/commands/example-uris.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/commands/ingest.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/getting-started/core-concepts.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/getting-started/incremental-loading.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/getting-started/quickstart.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/getting-started/telemetry.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/index.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/media/athena.png +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/media/github.png +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/media/googleanalytics.png +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/media/tiktok.png +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/adjust.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/airtable.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/appsflyer.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/asana.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/athena.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/bigquery.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/chess.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/csv.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/custom_queries.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/databricks.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/duckdb.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/dynamodb.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/facebook-ads.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/github.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/google_analytics.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/gorgias.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/gsheets.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/hubspot.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/kafka.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/klaviyo.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/mongodb.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/mssql.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/mysql.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/notion.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/oracle.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/postgres.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/redshift.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/s3.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/sap-hana.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/shopify.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/slack.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/snowflake.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/sqlite.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/stripe.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/tiktok-ads.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/docs/supported-sources/zendesk.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/.gitignore +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/adjust/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/adjust/adjust_helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/airtable/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/appsflyer/_init_.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/appsflyer/client.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/asana_source/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/asana_source/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/asana_source/settings.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/chess/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/chess/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/chess/settings.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/destinations.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/dynamodb/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/facebook_ads/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/facebook_ads/exceptions.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/facebook_ads/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/facebook_ads/settings.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/factory.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/filesystem/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/filesystem/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/filesystem/readers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/filters.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/github/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/github/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/github/queries.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/github/settings.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/google_analytics/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/google_analytics/helpers/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/google_analytics/helpers/data_processing.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/google_sheets/README.md +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/google_sheets/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/gorgias/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/gorgias/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/hubspot/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/hubspot/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/hubspot/settings.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/kafka/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/kafka/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/klaviyo/_init_.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/klaviyo/client.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/klaviyo/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/mongodb/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/mongodb/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/notion/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/notion/helpers/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/notion/helpers/client.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/notion/helpers/database.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/notion/settings.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/shopify/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/shopify/exceptions.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/shopify/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/shopify/settings.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/slack/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/slack/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/slack/settings.py +0 -0
- /ingestr-0.12.4/styles/Google/vocab.txt → /ingestr-0.12.5/ingestr/src/sql_database/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/stripe_analytics/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/stripe_analytics/helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/stripe_analytics/settings.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/table_definition.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/telemetry/event.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/testdata/fakebqcredentials.json +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/tiktok_ads/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/time.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/zendesk/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/zendesk/helpers/__init__.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/zendesk/helpers/credentials.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/src/zendesk/settings.py +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/testdata/.gitignore +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/testdata/create_replace.csv +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/testdata/delete_insert_expected.csv +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/testdata/delete_insert_part1.csv +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/testdata/delete_insert_part2.csv +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/testdata/merge_expected.csv +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/testdata/merge_part1.csv +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/ingestr/testdata/merge_part2.csv +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/package-lock.json +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/package.json +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/pyproject.toml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/requirements-dev.txt +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/resources/demo.gif +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/resources/demo.tape +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/resources/ingestr.svg +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/AMPM.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Acronyms.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Colons.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Contractions.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/DateFormat.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Ellipses.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/EmDash.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Exclamation.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/FirstPerson.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Gender.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/GenderBias.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/HeadingPunctuation.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Headings.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Latin.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/LyHyphens.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/OptionalPlurals.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Ordinal.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/OxfordComma.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Parens.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Passive.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Periods.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Quotes.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Ranges.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Semicolons.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Slang.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Spacing.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Spelling.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Units.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/We.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/Will.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/WordList.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/Google/meta.json +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/styles/bruin/Ingestr.yml +0 -0
- {ingestr-0.12.4 → ingestr-0.12.5}/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.12.
|
|
3
|
+
Version: 0.12.5
|
|
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
|
|
@@ -17,11 +17,11 @@ Requires-Python: >=3.9
|
|
|
17
17
|
Requires-Dist: asana==3.2.3
|
|
18
18
|
Requires-Dist: confluent-kafka>=2.6.1
|
|
19
19
|
Requires-Dist: databricks-sql-connector==2.9.3
|
|
20
|
-
Requires-Dist: dlt==1.
|
|
20
|
+
Requires-Dist: dlt==1.5.0
|
|
21
21
|
Requires-Dist: duckdb-engine==0.13.5
|
|
22
22
|
Requires-Dist: duckdb==1.1.3
|
|
23
23
|
Requires-Dist: facebook-business==20.0.0
|
|
24
|
-
Requires-Dist: google-analytics-data==0.18.
|
|
24
|
+
Requires-Dist: google-analytics-data==0.18.16
|
|
25
25
|
Requires-Dist: google-api-python-client==2.130.0
|
|
26
26
|
Requires-Dist: google-cloud-bigquery-storage==2.24.0
|
|
27
27
|
Requires-Dist: mysql-connector-python==9.1.0
|
|
@@ -34,7 +34,7 @@ Requires-Dist: pyathena==3.9.0
|
|
|
34
34
|
Requires-Dist: pymongo==4.10.1
|
|
35
35
|
Requires-Dist: pymysql==1.1.1
|
|
36
36
|
Requires-Dist: pyrate-limiter==3.7.0
|
|
37
|
-
Requires-Dist: redshift-connector==2.1.
|
|
37
|
+
Requires-Dist: redshift-connector==2.1.5
|
|
38
38
|
Requires-Dist: rich==13.9.4
|
|
39
39
|
Requires-Dist: rudder-sdk-python==2.1.4
|
|
40
40
|
Requires-Dist: s3fs==2024.10.0
|
|
@@ -57,8 +57,9 @@ class SpinnerCollector(Collector):
|
|
|
57
57
|
name: str,
|
|
58
58
|
inc: int = 1,
|
|
59
59
|
total: Optional[int] = None,
|
|
60
|
-
message: Optional[str] = None,
|
|
60
|
+
message: Optional[str] = None, # type: ignore
|
|
61
61
|
label: str = "",
|
|
62
|
+
**kwargs,
|
|
62
63
|
) -> None:
|
|
63
64
|
self.status.update(self.current_step)
|
|
64
65
|
|
|
@@ -18,7 +18,6 @@ from urllib.parse import ParseResult, parse_qs, quote, urlparse
|
|
|
18
18
|
|
|
19
19
|
import dlt
|
|
20
20
|
import pendulum
|
|
21
|
-
import sqlalchemy
|
|
22
21
|
from dlt.common.configuration.specs import (
|
|
23
22
|
AwsCredentials,
|
|
24
23
|
)
|
|
@@ -42,7 +41,6 @@ from dlt.sources.sql_database.schema_types import (
|
|
|
42
41
|
)
|
|
43
42
|
from sqlalchemy import Column
|
|
44
43
|
from sqlalchemy import types as sa
|
|
45
|
-
from sqlalchemy.dialects import mysql
|
|
46
44
|
|
|
47
45
|
from ingestr.src.adjust import REQUIRED_CUSTOM_DIMENSIONS, adjust_source
|
|
48
46
|
from ingestr.src.adjust.adjust_helpers import parse_filters
|
|
@@ -67,6 +65,12 @@ from ingestr.src.mongodb import mongodb_collection
|
|
|
67
65
|
from ingestr.src.notion import notion_databases
|
|
68
66
|
from ingestr.src.shopify import shopify_source
|
|
69
67
|
from ingestr.src.slack import slack_source
|
|
68
|
+
from ingestr.src.sql_database.callbacks import (
|
|
69
|
+
chained_query_adapter_callback,
|
|
70
|
+
custom_query_variable_subsitution,
|
|
71
|
+
limit_callback,
|
|
72
|
+
type_adapter_callback,
|
|
73
|
+
)
|
|
70
74
|
from ingestr.src.stripe_analytics import stripe_source
|
|
71
75
|
from ingestr.src.table_definition import TableDefinition, table_string_to_dataclass
|
|
72
76
|
from ingestr.src.tiktok_ads import tiktok_source
|
|
@@ -103,21 +107,18 @@ class SqlSource:
|
|
|
103
107
|
kwargs.get("incremental_key", ""),
|
|
104
108
|
initial_value=start_value,
|
|
105
109
|
end_value=end_value,
|
|
110
|
+
range_end="closed",
|
|
111
|
+
range_start="closed",
|
|
106
112
|
)
|
|
107
113
|
|
|
108
114
|
if uri.startswith("mysql://"):
|
|
109
115
|
uri = uri.replace("mysql://", "mysql+pymysql://")
|
|
110
116
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
query_adapter_callback = None
|
|
117
|
+
query_adapters = []
|
|
114
118
|
if kwargs.get("sql_limit"):
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if kwargs.get("incremental_key"):
|
|
119
|
-
query = query.order_by(kwargs.get("incremental_key"))
|
|
120
|
-
return query
|
|
119
|
+
query_adapters.append(
|
|
120
|
+
limit_callback(kwargs.get("sql_limit"), kwargs.get("incremental_key"))
|
|
121
|
+
)
|
|
121
122
|
|
|
122
123
|
defer_table_reflect = False
|
|
123
124
|
sql_backend = kwargs.get("sql_backend", "sqlalchemy")
|
|
@@ -196,38 +197,10 @@ class SqlSource:
|
|
|
196
197
|
if getattr(engine, "may_dispose_after_use", False):
|
|
197
198
|
engine.dispose()
|
|
198
199
|
|
|
199
|
-
dlt.sources.sql_database.table_rows = table_rows
|
|
200
|
-
|
|
201
|
-
def query_adapter_callback(query, table, incremental=None, engine=None):
|
|
202
|
-
params = {}
|
|
203
|
-
if incremental:
|
|
204
|
-
params["interval_start"] = (
|
|
205
|
-
incremental.last_value
|
|
206
|
-
if incremental.last_value is not None
|
|
207
|
-
else datetime(year=1, month=1, day=1)
|
|
208
|
-
)
|
|
209
|
-
if incremental.end_value is not None:
|
|
210
|
-
params["interval_end"] = incremental.end_value
|
|
211
|
-
else:
|
|
212
|
-
if ":interval_start" in query_value:
|
|
213
|
-
params["interval_start"] = (
|
|
214
|
-
datetime.min
|
|
215
|
-
if kwargs.get("interval_start") is None
|
|
216
|
-
else kwargs.get("interval_start")
|
|
217
|
-
)
|
|
218
|
-
if ":interval_end" in query_value:
|
|
219
|
-
params["interval_end"] = (
|
|
220
|
-
datetime.max
|
|
221
|
-
if kwargs.get("interval_end") is None
|
|
222
|
-
else kwargs.get("interval_end")
|
|
223
|
-
)
|
|
224
|
-
|
|
225
|
-
return sqlalchemy.text(query_value).bindparams(**params)
|
|
200
|
+
dlt.sources.sql_database.table_rows = table_rows # type: ignore
|
|
226
201
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
return sa.JSON
|
|
230
|
-
return sql_type
|
|
202
|
+
# override the query adapters, the only one we want is the one here in the case of custom queries
|
|
203
|
+
query_adapters = [custom_query_variable_subsitution(query_value, kwargs)]
|
|
231
204
|
|
|
232
205
|
builder_res = self.table_builder(
|
|
233
206
|
credentials=ConnectionStringCredentials(uri),
|
|
@@ -236,8 +209,8 @@ class SqlSource:
|
|
|
236
209
|
incremental=incremental,
|
|
237
210
|
backend=sql_backend,
|
|
238
211
|
chunk_size=kwargs.get("page_size", None),
|
|
239
|
-
reflection_level=
|
|
240
|
-
query_adapter_callback=
|
|
212
|
+
reflection_level=kwargs.get("sql_reflection_level", None),
|
|
213
|
+
query_adapter_callback=chained_query_adapter_callback(query_adapters),
|
|
241
214
|
type_adapter_callback=type_adapter_callback,
|
|
242
215
|
table_adapter_callback=table_adapter_exclude_columns(
|
|
243
216
|
kwargs.get("sql_exclude_columns", [])
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
|
|
3
|
+
from sqlalchemy import text
|
|
4
|
+
from sqlalchemy import types as sa
|
|
5
|
+
from sqlalchemy.dialects import mysql
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def type_adapter_callback(sql_type):
|
|
9
|
+
if isinstance(sql_type, mysql.SET):
|
|
10
|
+
return sa.JSON
|
|
11
|
+
return sql_type
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def chained_query_adapter_callback(query_adapters):
|
|
15
|
+
"""
|
|
16
|
+
This function is used to chain multiple query adapters together,.
|
|
17
|
+
This gives us the flexibility to introduce various adapters based on the given command parameters.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def callback(query, table):
|
|
21
|
+
for adapter in query_adapters:
|
|
22
|
+
query = adapter(query, table)
|
|
23
|
+
|
|
24
|
+
return query
|
|
25
|
+
|
|
26
|
+
return callback
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def limit_callback(sql_limit: int, incremental_key: str):
|
|
30
|
+
def callback(query, table):
|
|
31
|
+
query = query.limit(sql_limit)
|
|
32
|
+
if incremental_key:
|
|
33
|
+
query = query.order_by(incremental_key)
|
|
34
|
+
return query
|
|
35
|
+
|
|
36
|
+
return callback
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def custom_query_variable_subsitution(query_value: str, kwargs: dict):
|
|
40
|
+
def callback(query, table, incremental=None, engine=None):
|
|
41
|
+
params = {}
|
|
42
|
+
if incremental:
|
|
43
|
+
params["interval_start"] = (
|
|
44
|
+
incremental.last_value
|
|
45
|
+
if incremental.last_value is not None
|
|
46
|
+
else datetime(year=1, month=1, day=1)
|
|
47
|
+
)
|
|
48
|
+
if incremental.end_value is not None:
|
|
49
|
+
params["interval_end"] = incremental.end_value
|
|
50
|
+
else:
|
|
51
|
+
if ":interval_start" in query_value:
|
|
52
|
+
params["interval_start"] = (
|
|
53
|
+
datetime.min
|
|
54
|
+
if kwargs.get("interval_start") is None
|
|
55
|
+
else kwargs.get("interval_start")
|
|
56
|
+
)
|
|
57
|
+
if ":interval_end" in query_value:
|
|
58
|
+
params["interval_end"] = (
|
|
59
|
+
datetime.max
|
|
60
|
+
if kwargs.get("interval_end") is None
|
|
61
|
+
else kwargs.get("interval_end")
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
return text(query_value).bindparams(**params)
|
|
65
|
+
|
|
66
|
+
return callback
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.12.5"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
confluent-kafka>=2.6.1
|
|
2
2
|
databricks-sql-connector==2.9.3
|
|
3
|
-
dlt==1.
|
|
3
|
+
dlt==1.5.0
|
|
4
4
|
duckdb_engine==0.13.5
|
|
5
5
|
duckdb==1.1.3
|
|
6
6
|
google-api-python-client==2.130.0
|
|
@@ -12,7 +12,7 @@ py-machineid==0.6.0
|
|
|
12
12
|
pymongo==4.10.1
|
|
13
13
|
pymysql==1.1.1
|
|
14
14
|
pyrate-limiter==3.7.0
|
|
15
|
-
redshift-connector==2.1.
|
|
15
|
+
redshift-connector==2.1.5
|
|
16
16
|
rich==13.9.4
|
|
17
17
|
rudder-sdk-python==2.1.4
|
|
18
18
|
snowflake-sqlalchemy==1.6.1
|
|
@@ -30,5 +30,5 @@ types-requests==2.32.0.20240907
|
|
|
30
30
|
s3fs==2024.10.0
|
|
31
31
|
pyarrow==18.1.0
|
|
32
32
|
pyathena==3.9.0
|
|
33
|
-
google-analytics-data==0.18.
|
|
33
|
+
google-analytics-data==0.18.16
|
|
34
34
|
asana==3.2.3
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.12.4"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/ingestr-0.12.4/styles/Google/vocab.txt → /ingestr-0.12.5/ingestr/src/sql_database/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|