omniload 0.0.0.dev0__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.
- omniload-0.0.0.dev0/.dlt/config.toml +3 -0
- omniload-0.0.0.dev0/.dockerignore +137 -0
- omniload-0.0.0.dev0/.githooks/pre-commit-hook.sh +23 -0
- omniload-0.0.0.dev0/.github/workflows/deploy-docs.yml +62 -0
- omniload-0.0.0.dev0/.github/workflows/release.yml +149 -0
- omniload-0.0.0.dev0/.github/workflows/secrets-scan.yml +12 -0
- omniload-0.0.0.dev0/.github/workflows/tests.yml +94 -0
- omniload-0.0.0.dev0/.gitignore +29 -0
- omniload-0.0.0.dev0/.gitleaksignore +7 -0
- omniload-0.0.0.dev0/.npmrc +1 -0
- omniload-0.0.0.dev0/.vale.ini +16 -0
- omniload-0.0.0.dev0/Dockerfile +61 -0
- omniload-0.0.0.dev0/LICENSE.Apache-2.0 +201 -0
- omniload-0.0.0.dev0/LICENSE.md +21 -0
- omniload-0.0.0.dev0/Makefile +68 -0
- omniload-0.0.0.dev0/NOTICE +35 -0
- omniload-0.0.0.dev0/PKG-INFO +439 -0
- omniload-0.0.0.dev0/README.md +347 -0
- omniload-0.0.0.dev0/docs/.vitepress/config.mjs +223 -0
- omniload-0.0.0.dev0/docs/.vitepress/theme/CopyPageButton.vue +176 -0
- omniload-0.0.0.dev0/docs/.vitepress/theme/Layout.vue +27 -0
- omniload-0.0.0.dev0/docs/.vitepress/theme/custom.css +34 -0
- omniload-0.0.0.dev0/docs/.vitepress/theme/index.js +9 -0
- omniload-0.0.0.dev0/docs/commands/example-uris.md +5 -0
- omniload-0.0.0.dev0/docs/commands/ingest.md +132 -0
- omniload-0.0.0.dev0/docs/getting-started/core-concepts.md +41 -0
- omniload-0.0.0.dev0/docs/getting-started/data-masking.md +377 -0
- omniload-0.0.0.dev0/docs/getting-started/incremental-loading.md +228 -0
- omniload-0.0.0.dev0/docs/getting-started/quickstart.md +61 -0
- omniload-0.0.0.dev0/docs/index.md +39 -0
- omniload-0.0.0.dev0/docs/media/applovin_max.png +0 -0
- omniload-0.0.0.dev0/docs/media/athena.png +0 -0
- omniload-0.0.0.dev0/docs/media/clickhouse_img.png +0 -0
- omniload-0.0.0.dev0/docs/media/clickup_ingestion.png +0 -0
- omniload-0.0.0.dev0/docs/media/cratedb-destination.png +0 -0
- omniload-0.0.0.dev0/docs/media/cratedb-source.png +0 -0
- omniload-0.0.0.dev0/docs/media/freshdesk_ingestion.png +0 -0
- omniload-0.0.0.dev0/docs/media/gcp_spanner_ingestion.png +0 -0
- omniload-0.0.0.dev0/docs/media/github.png +0 -0
- omniload-0.0.0.dev0/docs/media/google_analytics_realtime_report.png +0 -0
- omniload-0.0.0.dev0/docs/media/googleanalytics.png +0 -0
- omniload-0.0.0.dev0/docs/media/ingestion_elasticsearch_img.png +0 -0
- omniload-0.0.0.dev0/docs/media/kinesis.bigquery.png +0 -0
- omniload-0.0.0.dev0/docs/media/linear.png +0 -0
- omniload-0.0.0.dev0/docs/media/linkedin_ads.png +0 -0
- omniload-0.0.0.dev0/docs/media/mixpanel_ingestion.png +0 -0
- omniload-0.0.0.dev0/docs/media/personio.png +0 -0
- omniload-0.0.0.dev0/docs/media/personio_duckdb.png +0 -0
- omniload-0.0.0.dev0/docs/media/phantombuster.png +0 -0
- omniload-0.0.0.dev0/docs/media/pipedrive.png +0 -0
- omniload-0.0.0.dev0/docs/media/quickbook_ingestion.png +0 -0
- omniload-0.0.0.dev0/docs/media/sftp.png +0 -0
- omniload-0.0.0.dev0/docs/media/stripe_postgres.png +0 -0
- omniload-0.0.0.dev0/docs/media/tiktok.png +0 -0
- omniload-0.0.0.dev0/docs/media/wise_ingestion.png +0 -0
- omniload-0.0.0.dev0/docs/media/zoom_ingestion.png +0 -0
- omniload-0.0.0.dev0/docs/public/demo.gif +0 -0
- omniload-0.0.0.dev0/docs/supported-sources/adjust.md +118 -0
- omniload-0.0.0.dev0/docs/supported-sources/airtable.md +57 -0
- omniload-0.0.0.dev0/docs/supported-sources/allium.md +164 -0
- omniload-0.0.0.dev0/docs/supported-sources/anthropic.md +356 -0
- omniload-0.0.0.dev0/docs/supported-sources/appleads.md +196 -0
- omniload-0.0.0.dev0/docs/supported-sources/applovin.md +144 -0
- omniload-0.0.0.dev0/docs/supported-sources/applovin_max.md +52 -0
- omniload-0.0.0.dev0/docs/supported-sources/appsflyer.md +93 -0
- omniload-0.0.0.dev0/docs/supported-sources/appstore.md +263 -0
- omniload-0.0.0.dev0/docs/supported-sources/asana.md +59 -0
- omniload-0.0.0.dev0/docs/supported-sources/athena.md +42 -0
- omniload-0.0.0.dev0/docs/supported-sources/attio.md +47 -0
- omniload-0.0.0.dev0/docs/supported-sources/bigquery.md +52 -0
- omniload-0.0.0.dev0/docs/supported-sources/bruin.md +48 -0
- omniload-0.0.0.dev0/docs/supported-sources/chess.md +38 -0
- omniload-0.0.0.dev0/docs/supported-sources/clickhouse.md +58 -0
- omniload-0.0.0.dev0/docs/supported-sources/clickup.md +45 -0
- omniload-0.0.0.dev0/docs/supported-sources/couchbase.md +136 -0
- omniload-0.0.0.dev0/docs/supported-sources/cratedb.md +147 -0
- omniload-0.0.0.dev0/docs/supported-sources/csv.md +9 -0
- omniload-0.0.0.dev0/docs/supported-sources/cursor.md +148 -0
- omniload-0.0.0.dev0/docs/supported-sources/custom_queries.md +50 -0
- omniload-0.0.0.dev0/docs/supported-sources/customerio.md +134 -0
- omniload-0.0.0.dev0/docs/supported-sources/databricks.md +44 -0
- omniload-0.0.0.dev0/docs/supported-sources/db2.md +28 -0
- omniload-0.0.0.dev0/docs/supported-sources/docebo.md +75 -0
- omniload-0.0.0.dev0/docs/supported-sources/duckdb.md +16 -0
- omniload-0.0.0.dev0/docs/supported-sources/dune.md +125 -0
- omniload-0.0.0.dev0/docs/supported-sources/dynamodb.md +114 -0
- omniload-0.0.0.dev0/docs/supported-sources/elasticsearch.md +80 -0
- omniload-0.0.0.dev0/docs/supported-sources/facebook-ads.md +249 -0
- omniload-0.0.0.dev0/docs/supported-sources/fireflies.md +108 -0
- omniload-0.0.0.dev0/docs/supported-sources/fluxx.md +307 -0
- omniload-0.0.0.dev0/docs/supported-sources/frankfurter.md +52 -0
- omniload-0.0.0.dev0/docs/supported-sources/freshdesk.md +49 -0
- omniload-0.0.0.dev0/docs/supported-sources/fundraiseup.md +83 -0
- omniload-0.0.0.dev0/docs/supported-sources/g2.md +55 -0
- omniload-0.0.0.dev0/docs/supported-sources/gcs.md +196 -0
- omniload-0.0.0.dev0/docs/supported-sources/github.md +48 -0
- omniload-0.0.0.dev0/docs/supported-sources/google-ads.md +266 -0
- omniload-0.0.0.dev0/docs/supported-sources/google_analytics.md +89 -0
- omniload-0.0.0.dev0/docs/supported-sources/gorgias.md +42 -0
- omniload-0.0.0.dev0/docs/supported-sources/gsheets.md +46 -0
- omniload-0.0.0.dev0/docs/supported-sources/hostaway.md +104 -0
- omniload-0.0.0.dev0/docs/supported-sources/http.md +123 -0
- omniload-0.0.0.dev0/docs/supported-sources/hubspot.md +208 -0
- omniload-0.0.0.dev0/docs/supported-sources/indeed.md +115 -0
- omniload-0.0.0.dev0/docs/supported-sources/influxdb.md +39 -0
- omniload-0.0.0.dev0/docs/supported-sources/intercom.md +57 -0
- omniload-0.0.0.dev0/docs/supported-sources/isoc-pulse.md +150 -0
- omniload-0.0.0.dev0/docs/supported-sources/jira.md +77 -0
- omniload-0.0.0.dev0/docs/supported-sources/jobtread.md +69 -0
- omniload-0.0.0.dev0/docs/supported-sources/kafka.md +38 -0
- omniload-0.0.0.dev0/docs/supported-sources/kinesis.md +43 -0
- omniload-0.0.0.dev0/docs/supported-sources/klaviyo.md +57 -0
- omniload-0.0.0.dev0/docs/supported-sources/linear.md +57 -0
- omniload-0.0.0.dev0/docs/supported-sources/linkedin_ads.md +170 -0
- omniload-0.0.0.dev0/docs/supported-sources/mailchimp.md +99 -0
- omniload-0.0.0.dev0/docs/supported-sources/mixpanel.md +50 -0
- omniload-0.0.0.dev0/docs/supported-sources/monday.md +59 -0
- omniload-0.0.0.dev0/docs/supported-sources/mongodb.md +226 -0
- omniload-0.0.0.dev0/docs/supported-sources/motherduck.md +46 -0
- omniload-0.0.0.dev0/docs/supported-sources/mssql.md +48 -0
- omniload-0.0.0.dev0/docs/supported-sources/mysql.md +20 -0
- omniload-0.0.0.dev0/docs/supported-sources/notion.md +32 -0
- omniload-0.0.0.dev0/docs/supported-sources/oracle.md +20 -0
- omniload-0.0.0.dev0/docs/supported-sources/personio.md +58 -0
- omniload-0.0.0.dev0/docs/supported-sources/phantombuster.md +42 -0
- omniload-0.0.0.dev0/docs/supported-sources/pinterest.md +30 -0
- omniload-0.0.0.dev0/docs/supported-sources/pipedrive.md +45 -0
- omniload-0.0.0.dev0/docs/supported-sources/plusvibeai.md +93 -0
- omniload-0.0.0.dev0/docs/supported-sources/postgres.md +21 -0
- omniload-0.0.0.dev0/docs/supported-sources/posthog.md +70 -0
- omniload-0.0.0.dev0/docs/supported-sources/primer.md +59 -0
- omniload-0.0.0.dev0/docs/supported-sources/quickbooks.md +51 -0
- omniload-0.0.0.dev0/docs/supported-sources/rabbitmq.md +49 -0
- omniload-0.0.0.dev0/docs/supported-sources/reddit_ads.md +150 -0
- omniload-0.0.0.dev0/docs/supported-sources/redshift.md +21 -0
- omniload-0.0.0.dev0/docs/supported-sources/revenuecat.md +62 -0
- omniload-0.0.0.dev0/docs/supported-sources/s3.md +213 -0
- omniload-0.0.0.dev0/docs/supported-sources/salesforce.md +90 -0
- omniload-0.0.0.dev0/docs/supported-sources/sap-hana.md +20 -0
- omniload-0.0.0.dev0/docs/supported-sources/sftp.md +43 -0
- omniload-0.0.0.dev0/docs/supported-sources/shopify.md +58 -0
- omniload-0.0.0.dev0/docs/supported-sources/slack.md +46 -0
- omniload-0.0.0.dev0/docs/supported-sources/smartsheets.md +47 -0
- omniload-0.0.0.dev0/docs/supported-sources/snapchat-ads.md +200 -0
- omniload-0.0.0.dev0/docs/supported-sources/snowflake.md +79 -0
- omniload-0.0.0.dev0/docs/supported-sources/socrata.md +128 -0
- omniload-0.0.0.dev0/docs/supported-sources/solidgate.md +50 -0
- omniload-0.0.0.dev0/docs/supported-sources/spanner.md +41 -0
- omniload-0.0.0.dev0/docs/supported-sources/sqlite.md +16 -0
- omniload-0.0.0.dev0/docs/supported-sources/stripe.md +146 -0
- omniload-0.0.0.dev0/docs/supported-sources/surveymonkey.md +62 -0
- omniload-0.0.0.dev0/docs/supported-sources/tiktok-ads.md +63 -0
- omniload-0.0.0.dev0/docs/supported-sources/trino.md +96 -0
- omniload-0.0.0.dev0/docs/supported-sources/trustpilot.md +36 -0
- omniload-0.0.0.dev0/docs/supported-sources/wise.md +49 -0
- omniload-0.0.0.dev0/docs/supported-sources/zendesk.md +87 -0
- omniload-0.0.0.dev0/docs/supported-sources/zoom.md +51 -0
- omniload-0.0.0.dev0/docs/tutorials/load-kinesis-bigquery.md +130 -0
- omniload-0.0.0.dev0/docs/tutorials/load-personio-duckdb.md +94 -0
- omniload-0.0.0.dev0/docs/tutorials/load-stripe-postgres.md +101 -0
- omniload-0.0.0.dev0/omniload/conftest.py +72 -0
- omniload-0.0.0.dev0/omniload/main.py +810 -0
- omniload-0.0.0.dev0/omniload/src/.gitignore +10 -0
- omniload-0.0.0.dev0/omniload/src/adjust/__init__.py +108 -0
- omniload-0.0.0.dev0/omniload/src/adjust/adjust_helpers.py +122 -0
- omniload-0.0.0.dev0/omniload/src/airtable/__init__.py +84 -0
- omniload-0.0.0.dev0/omniload/src/allium/__init__.py +128 -0
- omniload-0.0.0.dev0/omniload/src/anthropic/__init__.py +277 -0
- omniload-0.0.0.dev0/omniload/src/anthropic/helpers.py +525 -0
- omniload-0.0.0.dev0/omniload/src/applovin/__init__.py +316 -0
- omniload-0.0.0.dev0/omniload/src/applovin_max/__init__.py +117 -0
- omniload-0.0.0.dev0/omniload/src/appsflyer/__init__.py +325 -0
- omniload-0.0.0.dev0/omniload/src/appsflyer/client.py +110 -0
- omniload-0.0.0.dev0/omniload/src/appstore/__init__.py +142 -0
- omniload-0.0.0.dev0/omniload/src/appstore/client.py +126 -0
- omniload-0.0.0.dev0/omniload/src/appstore/errors.py +15 -0
- omniload-0.0.0.dev0/omniload/src/appstore/models.py +117 -0
- omniload-0.0.0.dev0/omniload/src/appstore/resources.py +179 -0
- omniload-0.0.0.dev0/omniload/src/arrow/__init__.py +81 -0
- omniload-0.0.0.dev0/omniload/src/asana_source/__init__.py +281 -0
- omniload-0.0.0.dev0/omniload/src/asana_source/helpers.py +30 -0
- omniload-0.0.0.dev0/omniload/src/asana_source/settings.py +158 -0
- omniload-0.0.0.dev0/omniload/src/attio/__init__.py +102 -0
- omniload-0.0.0.dev0/omniload/src/attio/helpers.py +65 -0
- omniload-0.0.0.dev0/omniload/src/blob.py +95 -0
- omniload-0.0.0.dev0/omniload/src/bruin/__init__.py +76 -0
- omniload-0.0.0.dev0/omniload/src/chess/__init__.py +180 -0
- omniload-0.0.0.dev0/omniload/src/chess/helpers.py +35 -0
- omniload-0.0.0.dev0/omniload/src/chess/settings.py +18 -0
- omniload-0.0.0.dev0/omniload/src/clickup/__init__.py +85 -0
- omniload-0.0.0.dev0/omniload/src/clickup/helpers.py +47 -0
- omniload-0.0.0.dev0/omniload/src/collector/spinner.py +43 -0
- omniload-0.0.0.dev0/omniload/src/couchbase_source/__init__.py +118 -0
- omniload-0.0.0.dev0/omniload/src/couchbase_source/helpers.py +135 -0
- omniload-0.0.0.dev0/omniload/src/cursor/__init__.py +83 -0
- omniload-0.0.0.dev0/omniload/src/cursor/helpers.py +188 -0
- omniload-0.0.0.dev0/omniload/src/customer_io/__init__.py +486 -0
- omniload-0.0.0.dev0/omniload/src/customer_io/helpers.py +530 -0
- omniload-0.0.0.dev0/omniload/src/destinations.py +982 -0
- omniload-0.0.0.dev0/omniload/src/docebo/__init__.py +589 -0
- omniload-0.0.0.dev0/omniload/src/docebo/client.py +435 -0
- omniload-0.0.0.dev0/omniload/src/docebo/helpers.py +97 -0
- omniload-0.0.0.dev0/omniload/src/dune/__init__.py +104 -0
- omniload-0.0.0.dev0/omniload/src/dune/helpers.py +108 -0
- omniload-0.0.0.dev0/omniload/src/dynamodb/__init__.py +86 -0
- omniload-0.0.0.dev0/omniload/src/elasticsearch/__init__.py +80 -0
- omniload-0.0.0.dev0/omniload/src/elasticsearch/helpers.py +141 -0
- omniload-0.0.0.dev0/omniload/src/errors.py +26 -0
- omniload-0.0.0.dev0/omniload/src/facebook_ads/__init__.py +403 -0
- omniload-0.0.0.dev0/omniload/src/facebook_ads/exceptions.py +19 -0
- omniload-0.0.0.dev0/omniload/src/facebook_ads/helpers.py +296 -0
- omniload-0.0.0.dev0/omniload/src/facebook_ads/settings.py +224 -0
- omniload-0.0.0.dev0/omniload/src/facebook_ads/utils.py +53 -0
- omniload-0.0.0.dev0/omniload/src/factory.py +305 -0
- omniload-0.0.0.dev0/omniload/src/filesystem/__init__.py +133 -0
- omniload-0.0.0.dev0/omniload/src/filesystem/helpers.py +114 -0
- omniload-0.0.0.dev0/omniload/src/filesystem/readers.py +187 -0
- omniload-0.0.0.dev0/omniload/src/filters.py +62 -0
- omniload-0.0.0.dev0/omniload/src/fireflies/__init__.py +151 -0
- omniload-0.0.0.dev0/omniload/src/fireflies/helpers.py +753 -0
- omniload-0.0.0.dev0/omniload/src/fluxx/__init__.py +10013 -0
- omniload-0.0.0.dev0/omniload/src/fluxx/helpers.py +233 -0
- omniload-0.0.0.dev0/omniload/src/frankfurter/__init__.py +157 -0
- omniload-0.0.0.dev0/omniload/src/frankfurter/helpers.py +48 -0
- omniload-0.0.0.dev0/omniload/src/freshdesk/__init__.py +103 -0
- omniload-0.0.0.dev0/omniload/src/freshdesk/freshdesk_client.py +151 -0
- omniload-0.0.0.dev0/omniload/src/freshdesk/settings.py +23 -0
- omniload-0.0.0.dev0/omniload/src/fundraiseup/__init__.py +95 -0
- omniload-0.0.0.dev0/omniload/src/fundraiseup/client.py +81 -0
- omniload-0.0.0.dev0/omniload/src/github/__init__.py +202 -0
- omniload-0.0.0.dev0/omniload/src/github/helpers.py +207 -0
- omniload-0.0.0.dev0/omniload/src/github/queries.py +129 -0
- omniload-0.0.0.dev0/omniload/src/github/settings.py +24 -0
- omniload-0.0.0.dev0/omniload/src/google_ads/__init__.py +198 -0
- omniload-0.0.0.dev0/omniload/src/google_ads/field.py +17 -0
- omniload-0.0.0.dev0/omniload/src/google_ads/metrics.py +254 -0
- omniload-0.0.0.dev0/omniload/src/google_ads/predicates.py +37 -0
- omniload-0.0.0.dev0/omniload/src/google_ads/reports.py +411 -0
- omniload-0.0.0.dev0/omniload/src/google_ads/test_google_ads.py +184 -0
- omniload-0.0.0.dev0/omniload/src/google_analytics/__init__.py +144 -0
- omniload-0.0.0.dev0/omniload/src/google_analytics/helpers.py +312 -0
- omniload-0.0.0.dev0/omniload/src/google_sheets/README.md +95 -0
- omniload-0.0.0.dev0/omniload/src/google_sheets/__init__.py +166 -0
- omniload-0.0.0.dev0/omniload/src/google_sheets/helpers/__init__.py +15 -0
- omniload-0.0.0.dev0/omniload/src/google_sheets/helpers/api_calls.py +160 -0
- omniload-0.0.0.dev0/omniload/src/google_sheets/helpers/data_processing.py +316 -0
- omniload-0.0.0.dev0/omniload/src/gorgias/__init__.py +595 -0
- omniload-0.0.0.dev0/omniload/src/gorgias/helpers.py +166 -0
- omniload-0.0.0.dev0/omniload/src/hostaway/__init__.py +302 -0
- omniload-0.0.0.dev0/omniload/src/hostaway/client.py +288 -0
- omniload-0.0.0.dev0/omniload/src/http/__init__.py +38 -0
- omniload-0.0.0.dev0/omniload/src/http/readers.py +146 -0
- omniload-0.0.0.dev0/omniload/src/http_client.py +24 -0
- omniload-0.0.0.dev0/omniload/src/hubspot/__init__.py +800 -0
- omniload-0.0.0.dev0/omniload/src/hubspot/helpers.py +417 -0
- omniload-0.0.0.dev0/omniload/src/hubspot/settings.py +329 -0
- omniload-0.0.0.dev0/omniload/src/indeed/__init__.py +153 -0
- omniload-0.0.0.dev0/omniload/src/indeed/helpers.py +228 -0
- omniload-0.0.0.dev0/omniload/src/influxdb/__init__.py +46 -0
- omniload-0.0.0.dev0/omniload/src/influxdb/client.py +34 -0
- omniload-0.0.0.dev0/omniload/src/intercom/__init__.py +142 -0
- omniload-0.0.0.dev0/omniload/src/intercom/helpers.py +674 -0
- omniload-0.0.0.dev0/omniload/src/intercom/settings.py +279 -0
- omniload-0.0.0.dev0/omniload/src/isoc_pulse/__init__.py +159 -0
- omniload-0.0.0.dev0/omniload/src/jira_source/__init__.py +377 -0
- omniload-0.0.0.dev0/omniload/src/jira_source/helpers.py +510 -0
- omniload-0.0.0.dev0/omniload/src/jira_source/settings.py +184 -0
- omniload-0.0.0.dev0/omniload/src/kafka/__init__.py +120 -0
- omniload-0.0.0.dev0/omniload/src/kafka/helpers.py +241 -0
- omniload-0.0.0.dev0/omniload/src/kinesis/__init__.py +153 -0
- omniload-0.0.0.dev0/omniload/src/kinesis/helpers.py +96 -0
- omniload-0.0.0.dev0/omniload/src/klaviyo/__init__.py +237 -0
- omniload-0.0.0.dev0/omniload/src/klaviyo/client.py +212 -0
- omniload-0.0.0.dev0/omniload/src/klaviyo/helpers.py +19 -0
- omniload-0.0.0.dev0/omniload/src/linear/__init__.py +634 -0
- omniload-0.0.0.dev0/omniload/src/linear/helpers.py +111 -0
- omniload-0.0.0.dev0/omniload/src/linkedin_ads/__init__.py +266 -0
- omniload-0.0.0.dev0/omniload/src/linkedin_ads/dimension_time_enum.py +17 -0
- omniload-0.0.0.dev0/omniload/src/linkedin_ads/helpers.py +246 -0
- omniload-0.0.0.dev0/omniload/src/loader.py +69 -0
- omniload-0.0.0.dev0/omniload/src/mailchimp/__init__.py +126 -0
- omniload-0.0.0.dev0/omniload/src/mailchimp/helpers.py +226 -0
- omniload-0.0.0.dev0/omniload/src/mailchimp/settings.py +164 -0
- omniload-0.0.0.dev0/omniload/src/masking.py +344 -0
- omniload-0.0.0.dev0/omniload/src/mixpanel/__init__.py +62 -0
- omniload-0.0.0.dev0/omniload/src/mixpanel/client.py +104 -0
- omniload-0.0.0.dev0/omniload/src/monday/__init__.py +246 -0
- omniload-0.0.0.dev0/omniload/src/monday/helpers.py +392 -0
- omniload-0.0.0.dev0/omniload/src/monday/settings.py +325 -0
- omniload-0.0.0.dev0/omniload/src/mongodb/__init__.py +281 -0
- omniload-0.0.0.dev0/omniload/src/mongodb/helpers.py +975 -0
- omniload-0.0.0.dev0/omniload/src/notion/__init__.py +69 -0
- omniload-0.0.0.dev0/omniload/src/notion/helpers/__init__.py +14 -0
- omniload-0.0.0.dev0/omniload/src/notion/helpers/client.py +178 -0
- omniload-0.0.0.dev0/omniload/src/notion/helpers/database.py +92 -0
- omniload-0.0.0.dev0/omniload/src/notion/settings.py +17 -0
- omniload-0.0.0.dev0/omniload/src/partition.py +32 -0
- omniload-0.0.0.dev0/omniload/src/personio/__init__.py +345 -0
- omniload-0.0.0.dev0/omniload/src/personio/helpers.py +100 -0
- omniload-0.0.0.dev0/omniload/src/phantombuster/__init__.py +65 -0
- omniload-0.0.0.dev0/omniload/src/phantombuster/client.py +87 -0
- omniload-0.0.0.dev0/omniload/src/pinterest/__init__.py +82 -0
- omniload-0.0.0.dev0/omniload/src/pipedrive/__init__.py +212 -0
- omniload-0.0.0.dev0/omniload/src/pipedrive/helpers/__init__.py +37 -0
- omniload-0.0.0.dev0/omniload/src/pipedrive/helpers/custom_fields_munger.py +116 -0
- omniload-0.0.0.dev0/omniload/src/pipedrive/helpers/pages.py +129 -0
- omniload-0.0.0.dev0/omniload/src/pipedrive/settings.py +41 -0
- omniload-0.0.0.dev0/omniload/src/pipedrive/typing.py +17 -0
- omniload-0.0.0.dev0/omniload/src/plusvibeai/__init__.py +335 -0
- omniload-0.0.0.dev0/omniload/src/plusvibeai/helpers.py +544 -0
- omniload-0.0.0.dev0/omniload/src/plusvibeai/settings.py +252 -0
- omniload-0.0.0.dev0/omniload/src/primer/__init__.py +45 -0
- omniload-0.0.0.dev0/omniload/src/primer/helpers.py +79 -0
- omniload-0.0.0.dev0/omniload/src/quickbooks/__init__.py +117 -0
- omniload-0.0.0.dev0/omniload/src/reddit_ads/__init__.py +183 -0
- omniload-0.0.0.dev0/omniload/src/reddit_ads/helpers.py +232 -0
- omniload-0.0.0.dev0/omniload/src/resource.py +40 -0
- omniload-0.0.0.dev0/omniload/src/revenuecat/__init__.py +83 -0
- omniload-0.0.0.dev0/omniload/src/revenuecat/helpers.py +237 -0
- omniload-0.0.0.dev0/omniload/src/salesforce/__init__.py +170 -0
- omniload-0.0.0.dev0/omniload/src/salesforce/helpers.py +78 -0
- omniload-0.0.0.dev0/omniload/src/shopify/__init__.py +1953 -0
- omniload-0.0.0.dev0/omniload/src/shopify/exceptions.py +17 -0
- omniload-0.0.0.dev0/omniload/src/shopify/helpers.py +202 -0
- omniload-0.0.0.dev0/omniload/src/shopify/settings.py +19 -0
- omniload-0.0.0.dev0/omniload/src/slack/__init__.py +290 -0
- omniload-0.0.0.dev0/omniload/src/slack/helpers.py +218 -0
- omniload-0.0.0.dev0/omniload/src/slack/settings.py +36 -0
- omniload-0.0.0.dev0/omniload/src/smartsheets/__init__.py +82 -0
- omniload-0.0.0.dev0/omniload/src/snapchat_ads/__init__.py +455 -0
- omniload-0.0.0.dev0/omniload/src/snapchat_ads/client.py +72 -0
- omniload-0.0.0.dev0/omniload/src/snapchat_ads/helpers.py +630 -0
- omniload-0.0.0.dev0/omniload/src/snapchat_ads/settings.py +130 -0
- omniload-0.0.0.dev0/omniload/src/socrata_source/__init__.py +83 -0
- omniload-0.0.0.dev0/omniload/src/socrata_source/helpers.py +85 -0
- omniload-0.0.0.dev0/omniload/src/socrata_source/settings.py +8 -0
- omniload-0.0.0.dev0/omniload/src/solidgate/__init__.py +219 -0
- omniload-0.0.0.dev0/omniload/src/solidgate/helpers.py +154 -0
- omniload-0.0.0.dev0/omniload/src/sources.py +5408 -0
- omniload-0.0.0.dev0/omniload/src/sql_database/__init__.py +0 -0
- omniload-0.0.0.dev0/omniload/src/sql_database/callbacks.py +66 -0
- omniload-0.0.0.dev0/omniload/src/stripe_analytics/__init__.py +183 -0
- omniload-0.0.0.dev0/omniload/src/stripe_analytics/helpers.py +386 -0
- omniload-0.0.0.dev0/omniload/src/stripe_analytics/settings.py +80 -0
- omniload-0.0.0.dev0/omniload/src/table_definition.py +15 -0
- omniload-0.0.0.dev0/omniload/src/testdata/fakebqcredentials.json +14 -0
- omniload-0.0.0.dev0/omniload/src/tiktok_ads/__init__.py +150 -0
- omniload-0.0.0.dev0/omniload/src/tiktok_ads/tiktok_helpers.py +130 -0
- omniload-0.0.0.dev0/omniload/src/time.py +11 -0
- omniload-0.0.0.dev0/omniload/src/trustpilot/__init__.py +48 -0
- omniload-0.0.0.dev0/omniload/src/trustpilot/client.py +48 -0
- omniload-0.0.0.dev0/omniload/src/version.py +6 -0
- omniload-0.0.0.dev0/omniload/src/wise/__init__.py +68 -0
- omniload-0.0.0.dev0/omniload/src/wise/client.py +63 -0
- omniload-0.0.0.dev0/omniload/src/zendesk/__init__.py +480 -0
- omniload-0.0.0.dev0/omniload/src/zendesk/helpers/__init__.py +39 -0
- omniload-0.0.0.dev0/omniload/src/zendesk/helpers/api_helpers.py +119 -0
- omniload-0.0.0.dev0/omniload/src/zendesk/helpers/credentials.py +68 -0
- omniload-0.0.0.dev0/omniload/src/zendesk/helpers/talk_api.py +132 -0
- omniload-0.0.0.dev0/omniload/src/zendesk/settings.py +71 -0
- omniload-0.0.0.dev0/omniload/src/zoom/__init__.py +99 -0
- omniload-0.0.0.dev0/omniload/src/zoom/helpers.py +102 -0
- omniload-0.0.0.dev0/omniload/testdata/.gitignore +2 -0
- omniload-0.0.0.dev0/omniload/testdata/create_replace.csv +21 -0
- omniload-0.0.0.dev0/omniload/testdata/delete_insert_expected.csv +6 -0
- omniload-0.0.0.dev0/omniload/testdata/delete_insert_part1.csv +5 -0
- omniload-0.0.0.dev0/omniload/testdata/delete_insert_part2.csv +6 -0
- omniload-0.0.0.dev0/omniload/testdata/merge_expected.csv +5 -0
- omniload-0.0.0.dev0/omniload/testdata/merge_part1.csv +4 -0
- omniload-0.0.0.dev0/omniload/testdata/merge_part2.csv +5 -0
- omniload-0.0.0.dev0/omniload/tests/unit/test_smartsheets.py +133 -0
- omniload-0.0.0.dev0/package-lock.json +2499 -0
- omniload-0.0.0.dev0/package.json +11 -0
- omniload-0.0.0.dev0/pyproject.toml +200 -0
- omniload-0.0.0.dev0/requirements-dev.txt +13 -0
- omniload-0.0.0.dev0/requirements.txt +66 -0
- omniload-0.0.0.dev0/requirements_arm64.txt +674 -0
- omniload-0.0.0.dev0/resources/demo.gif +0 -0
- omniload-0.0.0.dev0/resources/demo.tape +18 -0
- omniload-0.0.0.dev0/styles/Google/AMPM.yml +9 -0
- omniload-0.0.0.dev0/styles/Google/Acronyms.yml +64 -0
- omniload-0.0.0.dev0/styles/Google/Colons.yml +8 -0
- omniload-0.0.0.dev0/styles/Google/Contractions.yml +30 -0
- omniload-0.0.0.dev0/styles/Google/DateFormat.yml +9 -0
- omniload-0.0.0.dev0/styles/Google/Ellipses.yml +9 -0
- omniload-0.0.0.dev0/styles/Google/EmDash.yml +13 -0
- omniload-0.0.0.dev0/styles/Google/Exclamation.yml +12 -0
- omniload-0.0.0.dev0/styles/Google/FirstPerson.yml +13 -0
- omniload-0.0.0.dev0/styles/Google/Gender.yml +9 -0
- omniload-0.0.0.dev0/styles/Google/GenderBias.yml +43 -0
- omniload-0.0.0.dev0/styles/Google/HeadingPunctuation.yml +13 -0
- omniload-0.0.0.dev0/styles/Google/Headings.yml +29 -0
- omniload-0.0.0.dev0/styles/Google/Latin.yml +11 -0
- omniload-0.0.0.dev0/styles/Google/LyHyphens.yml +14 -0
- omniload-0.0.0.dev0/styles/Google/OptionalPlurals.yml +12 -0
- omniload-0.0.0.dev0/styles/Google/Ordinal.yml +7 -0
- omniload-0.0.0.dev0/styles/Google/OxfordComma.yml +7 -0
- omniload-0.0.0.dev0/styles/Google/Parens.yml +7 -0
- omniload-0.0.0.dev0/styles/Google/Passive.yml +184 -0
- omniload-0.0.0.dev0/styles/Google/Periods.yml +7 -0
- omniload-0.0.0.dev0/styles/Google/Quotes.yml +7 -0
- omniload-0.0.0.dev0/styles/Google/Ranges.yml +7 -0
- omniload-0.0.0.dev0/styles/Google/Semicolons.yml +8 -0
- omniload-0.0.0.dev0/styles/Google/Slang.yml +11 -0
- omniload-0.0.0.dev0/styles/Google/Spacing.yml +10 -0
- omniload-0.0.0.dev0/styles/Google/Spelling.yml +10 -0
- omniload-0.0.0.dev0/styles/Google/Units.yml +8 -0
- omniload-0.0.0.dev0/styles/Google/We.yml +11 -0
- omniload-0.0.0.dev0/styles/Google/Will.yml +7 -0
- omniload-0.0.0.dev0/styles/Google/WordList.yml +80 -0
- omniload-0.0.0.dev0/styles/Google/meta.json +4 -0
- omniload-0.0.0.dev0/styles/Google/vocab.txt +0 -0
- omniload-0.0.0.dev0/styles/config/vocabularies/omniload/accept.txt +52 -0
- omniload-0.0.0.dev0/test.env.template +4 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
*.egg-info/
|
|
23
|
+
.installed.cfg
|
|
24
|
+
*.egg
|
|
25
|
+
|
|
26
|
+
# PyInstaller
|
|
27
|
+
# Usually these files are written by a python script from a template
|
|
28
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
29
|
+
*.manifest
|
|
30
|
+
*.spec
|
|
31
|
+
|
|
32
|
+
# Installer logs
|
|
33
|
+
pip-log.txt
|
|
34
|
+
pip-delete-this-directory.txt
|
|
35
|
+
|
|
36
|
+
# Unit test / coverage reports
|
|
37
|
+
htmlcov/
|
|
38
|
+
.tox/
|
|
39
|
+
.nox/
|
|
40
|
+
.coverage
|
|
41
|
+
.coverage.*
|
|
42
|
+
.cache
|
|
43
|
+
nosetests.xml
|
|
44
|
+
coverage.xml
|
|
45
|
+
*.cover
|
|
46
|
+
.hypothesis/
|
|
47
|
+
.pytest_cache/
|
|
48
|
+
.ruff_cache/
|
|
49
|
+
.dist/
|
|
50
|
+
venv/
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# Translations
|
|
54
|
+
*.mo
|
|
55
|
+
*.pot
|
|
56
|
+
|
|
57
|
+
# Django stuff:
|
|
58
|
+
*.log
|
|
59
|
+
local_settings.py
|
|
60
|
+
db.sqlite3
|
|
61
|
+
db.sqlite3-journal
|
|
62
|
+
|
|
63
|
+
# Flask stuff:
|
|
64
|
+
instance/
|
|
65
|
+
.webassets-cache
|
|
66
|
+
|
|
67
|
+
# Scrapy stuff:
|
|
68
|
+
.scrapy
|
|
69
|
+
|
|
70
|
+
# Sphinx documentation
|
|
71
|
+
docs/_build/
|
|
72
|
+
|
|
73
|
+
# PyBuilder
|
|
74
|
+
target/
|
|
75
|
+
|
|
76
|
+
# Jupyter Notebook
|
|
77
|
+
.ipynb_checkpoints
|
|
78
|
+
|
|
79
|
+
# IPython
|
|
80
|
+
profile_default/
|
|
81
|
+
ipython_config.py
|
|
82
|
+
|
|
83
|
+
# pyenv
|
|
84
|
+
.python-version
|
|
85
|
+
|
|
86
|
+
# pipenv
|
|
87
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
88
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
89
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
90
|
+
# install all needed dependencies.
|
|
91
|
+
#Pipfile.lock
|
|
92
|
+
|
|
93
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
94
|
+
__pypackages__/
|
|
95
|
+
|
|
96
|
+
# Celery stuff
|
|
97
|
+
celerybeat-schedule
|
|
98
|
+
celerybeat.pid
|
|
99
|
+
|
|
100
|
+
# SageMath parsed files
|
|
101
|
+
*.sage.py
|
|
102
|
+
|
|
103
|
+
# Environments
|
|
104
|
+
.env
|
|
105
|
+
.venv
|
|
106
|
+
env/
|
|
107
|
+
venv/
|
|
108
|
+
ENV/
|
|
109
|
+
env.bak/
|
|
110
|
+
venv.bak/
|
|
111
|
+
|
|
112
|
+
# Spyder project settings
|
|
113
|
+
.spyderproject
|
|
114
|
+
.spyproject
|
|
115
|
+
|
|
116
|
+
# Rope project settings
|
|
117
|
+
.ropeproject
|
|
118
|
+
|
|
119
|
+
# mkdocs documentation
|
|
120
|
+
/site
|
|
121
|
+
|
|
122
|
+
# mypy
|
|
123
|
+
.mypy_cache/
|
|
124
|
+
.dmypy.json
|
|
125
|
+
dmypy.json
|
|
126
|
+
|
|
127
|
+
# Pyre type checker
|
|
128
|
+
.pyre/
|
|
129
|
+
|
|
130
|
+
# pytype static type analyzer
|
|
131
|
+
.pytype/
|
|
132
|
+
|
|
133
|
+
# Cython debug symbols
|
|
134
|
+
cython_debug/
|
|
135
|
+
|
|
136
|
+
Dockerfile
|
|
137
|
+
requirements-dev.txt
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
echo "scanning for secrets ..."
|
|
6
|
+
|
|
7
|
+
WORK_DIR="/root/code"
|
|
8
|
+
|
|
9
|
+
secret_detected() {
|
|
10
|
+
echo "secrets detected in source code. commit aborted."
|
|
11
|
+
exit 1
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
# use gitleaks binary if available
|
|
15
|
+
# else fallback to using docker for running gitleaks
|
|
16
|
+
CMD="gitleaks protect --staged -v"
|
|
17
|
+
|
|
18
|
+
if [[ ! `which gitleaks` ]]; then
|
|
19
|
+
which docker > /dev/null || (echo "gitleaks or docker is required for running secrets scan." && exit 1)
|
|
20
|
+
CMD="docker run -v $PWD:$WORK_DIR -w $WORK_DIR --rm ghcr.io/gitleaks/gitleaks:latest protect --staged -v"
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
$CMD || secret_detected
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Deploy VitePress site to Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
|
|
7
|
+
# Allows you to run this workflow manually from the Actions tab
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
pages: write
|
|
14
|
+
id-token: write
|
|
15
|
+
|
|
16
|
+
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
|
17
|
+
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
|
18
|
+
concurrency:
|
|
19
|
+
group: pages
|
|
20
|
+
cancel-in-progress: false
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
# Build job
|
|
24
|
+
build:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- name: Checkout
|
|
28
|
+
uses: actions/checkout@v4
|
|
29
|
+
with:
|
|
30
|
+
fetch-depth: 0 # Not needed if lastUpdated is not enabled
|
|
31
|
+
# - uses: pnpm/action-setup@v2 # Uncomment this if you're using pnpm
|
|
32
|
+
# - uses: oven-sh/setup-bun@v1 # Uncomment this if you're using Bun
|
|
33
|
+
- name: Setup Node
|
|
34
|
+
uses: actions/setup-node@v4
|
|
35
|
+
with:
|
|
36
|
+
node-version: '22.14.0'
|
|
37
|
+
cache: npm # or pnpm / yarn
|
|
38
|
+
- name: Setup Pages
|
|
39
|
+
uses: actions/configure-pages@v4
|
|
40
|
+
- name: Install dependencies with npm@11 (for min-release-age support)
|
|
41
|
+
run: npx npm@11.10.0 ci
|
|
42
|
+
- name: Build with VitePress
|
|
43
|
+
run: |
|
|
44
|
+
npm run docs:build
|
|
45
|
+
touch docs/.vitepress/dist/.nojekyll
|
|
46
|
+
- name: Upload artifact
|
|
47
|
+
uses: actions/upload-pages-artifact@v3
|
|
48
|
+
with:
|
|
49
|
+
path: docs/.vitepress/dist
|
|
50
|
+
|
|
51
|
+
# Deployment job
|
|
52
|
+
deploy:
|
|
53
|
+
environment:
|
|
54
|
+
name: github-pages
|
|
55
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
56
|
+
needs: build
|
|
57
|
+
runs-on: ubuntu-latest
|
|
58
|
+
name: Deploy
|
|
59
|
+
steps:
|
|
60
|
+
- name: Deploy to GitHub Pages
|
|
61
|
+
id: deployment
|
|
62
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# WARN: this is used as a notification filter in our slack.
|
|
2
|
+
# When updating this, make sure to update the workflow subscription as well.
|
|
3
|
+
name: "Publish to pip and ghcr.io"
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
tags:
|
|
8
|
+
- "v*.*.*"
|
|
9
|
+
|
|
10
|
+
env:
|
|
11
|
+
REGISTRY: ghcr.io
|
|
12
|
+
IMAGE: ghcr.io/${{ github.repository }}
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
tests:
|
|
16
|
+
uses: ./.github/workflows/tests.yml
|
|
17
|
+
pip-release:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
needs: tests
|
|
20
|
+
steps:
|
|
21
|
+
- name: checkout
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
with:
|
|
24
|
+
fetch-depth: 0
|
|
25
|
+
- name: setup python
|
|
26
|
+
uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: '3.11'
|
|
29
|
+
|
|
30
|
+
# github actions invoke a fresh shell
|
|
31
|
+
# for each step. This causes us to lose our
|
|
32
|
+
# venv context. So we run all our build commands
|
|
33
|
+
# in a single step to simplify our pipeline.
|
|
34
|
+
- name: build and release
|
|
35
|
+
run: |
|
|
36
|
+
pip install uv
|
|
37
|
+
uv venv
|
|
38
|
+
source .venv/bin/activate
|
|
39
|
+
uv pip install -r requirements-dev.txt
|
|
40
|
+
make build
|
|
41
|
+
make upload-release
|
|
42
|
+
|
|
43
|
+
docker-build:
|
|
44
|
+
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')
|
|
45
|
+
runs-on: ubuntu-24.04-arm
|
|
46
|
+
strategy:
|
|
47
|
+
fail-fast: false
|
|
48
|
+
matrix:
|
|
49
|
+
platform:
|
|
50
|
+
- linux/amd64
|
|
51
|
+
- linux/arm64
|
|
52
|
+
|
|
53
|
+
permissions:
|
|
54
|
+
contents: read
|
|
55
|
+
packages: write
|
|
56
|
+
|
|
57
|
+
steps:
|
|
58
|
+
- name: Prepare
|
|
59
|
+
run: |
|
|
60
|
+
platform=${{ matrix.platform }}
|
|
61
|
+
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
|
62
|
+
|
|
63
|
+
- name: Checkout repository
|
|
64
|
+
uses: actions/checkout@v4
|
|
65
|
+
|
|
66
|
+
- name: Log in to the Container registry
|
|
67
|
+
uses: docker/login-action@v3
|
|
68
|
+
with:
|
|
69
|
+
registry: ${{ env.REGISTRY }}
|
|
70
|
+
username: ${{ github.actor }}
|
|
71
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
72
|
+
|
|
73
|
+
- name: Extract metadata (tags, labels) for Docker
|
|
74
|
+
id: meta
|
|
75
|
+
uses: docker/metadata-action@v5
|
|
76
|
+
with:
|
|
77
|
+
images: ${{ env.IMAGE }}
|
|
78
|
+
|
|
79
|
+
- name: Set up Docker Buildx
|
|
80
|
+
uses: docker/setup-buildx-action@v3
|
|
81
|
+
|
|
82
|
+
- name: Build and push Docker image
|
|
83
|
+
uses: docker/build-push-action@v5
|
|
84
|
+
id: build
|
|
85
|
+
with:
|
|
86
|
+
context: .
|
|
87
|
+
platforms: ${{ matrix.platform }}
|
|
88
|
+
tags: ${{ env.IMAGE }}
|
|
89
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
90
|
+
outputs: type=image,push-by-digest=true,name-canonical=true,push=true
|
|
91
|
+
|
|
92
|
+
- name: Export digest
|
|
93
|
+
run: |
|
|
94
|
+
mkdir -p ${{ runner.temp }}/digests
|
|
95
|
+
digest="${{ steps.build.outputs.digest }}"
|
|
96
|
+
# The following strips the 'sha256:' prefix from the digest using bash parameter expansion.
|
|
97
|
+
touch "${{ runner.temp }}/digests/${digest#sha256:}"
|
|
98
|
+
|
|
99
|
+
- name: Upload digest
|
|
100
|
+
uses: actions/upload-artifact@v4
|
|
101
|
+
with:
|
|
102
|
+
name: digests-${{ env.PLATFORM_PAIR }}
|
|
103
|
+
path: ${{ runner.temp }}/digests/*
|
|
104
|
+
if-no-files-found: error
|
|
105
|
+
retention-days: 1
|
|
106
|
+
|
|
107
|
+
docker-publish:
|
|
108
|
+
permissions:
|
|
109
|
+
contents: read
|
|
110
|
+
packages: write
|
|
111
|
+
|
|
112
|
+
runs-on: ubuntu-latest
|
|
113
|
+
needs:
|
|
114
|
+
- docker-build
|
|
115
|
+
- tests
|
|
116
|
+
steps:
|
|
117
|
+
- name: Download digests
|
|
118
|
+
uses: actions/download-artifact@v4
|
|
119
|
+
with:
|
|
120
|
+
path: ${{ runner.temp }}/digests
|
|
121
|
+
pattern: digests-*
|
|
122
|
+
merge-multiple: true
|
|
123
|
+
|
|
124
|
+
- name: Log in to the Container registry
|
|
125
|
+
uses: docker/login-action@v3
|
|
126
|
+
with:
|
|
127
|
+
registry: ${{ env.REGISTRY }}
|
|
128
|
+
username: ${{ github.actor }}
|
|
129
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
130
|
+
|
|
131
|
+
- name: Set up Docker Buildx
|
|
132
|
+
uses: docker/setup-buildx-action@v3
|
|
133
|
+
|
|
134
|
+
- name: Docker meta
|
|
135
|
+
id: meta
|
|
136
|
+
uses: docker/metadata-action@v5
|
|
137
|
+
with:
|
|
138
|
+
images: ${{ env.IMAGE }}
|
|
139
|
+
tags: |
|
|
140
|
+
type=ref,event=tag
|
|
141
|
+
type=semver,pattern={{raw}}
|
|
142
|
+
|
|
143
|
+
- name: Create manifest list and push
|
|
144
|
+
working-directory: ${{ runner.temp }}/digests
|
|
145
|
+
run: |
|
|
146
|
+
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
|
|
147
|
+
$(printf '${{ env.IMAGE }}@sha256:%s ' *)
|
|
148
|
+
|
|
149
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
name: secrets_scan
|
|
2
|
+
on: [pull_request, push, workflow_dispatch]
|
|
3
|
+
jobs:
|
|
4
|
+
scan:
|
|
5
|
+
name: gitleaks
|
|
6
|
+
runs-on: ubuntu-latest
|
|
7
|
+
steps:
|
|
8
|
+
- uses: actions/checkout@v3
|
|
9
|
+
with:
|
|
10
|
+
fetch-depth: 0
|
|
11
|
+
- name: scan for secrets (gitleaks)
|
|
12
|
+
run: docker run -v $PWD:/code -w /code ghcr.io/gitleaks/gitleaks:latest dir -v
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
on:
|
|
2
|
+
push:
|
|
3
|
+
branches:
|
|
4
|
+
- main
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
workflow_dispatch: {}
|
|
8
|
+
workflow_call: {}
|
|
9
|
+
pull_request:
|
|
10
|
+
branches:
|
|
11
|
+
- main
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
15
|
+
cancel-in-progress: true
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
check-changes:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
outputs:
|
|
21
|
+
code-changes: ${{ steps.filter.outputs.code-changes }}
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
- uses: dorny/paths-filter@v3
|
|
25
|
+
id: filter
|
|
26
|
+
with:
|
|
27
|
+
filters: |
|
|
28
|
+
code-changes:
|
|
29
|
+
- '**'
|
|
30
|
+
- '!**/*.md'
|
|
31
|
+
- '!docs/**'
|
|
32
|
+
|
|
33
|
+
tests:
|
|
34
|
+
needs: check-changes
|
|
35
|
+
if: github.event_name == 'workflow_call' || github.event_name == 'workflow_dispatch' || needs.check-changes.outputs.code-changes == 'true' || startsWith(github.ref, 'refs/tags/')
|
|
36
|
+
strategy:
|
|
37
|
+
fail-fast: false
|
|
38
|
+
matrix:
|
|
39
|
+
# I tried running stuff on macOS but it was too slow and unreliable.
|
|
40
|
+
# I also tried windows runners but couldn't get Docker to work there, so I gave up.
|
|
41
|
+
os: [ubuntu-latest]
|
|
42
|
+
python-version: [
|
|
43
|
+
'3.10',
|
|
44
|
+
'3.11',
|
|
45
|
+
'3.12',
|
|
46
|
+
'3.13',
|
|
47
|
+
]
|
|
48
|
+
runs-on: ${{ matrix.os }}
|
|
49
|
+
steps:
|
|
50
|
+
- uses: actions/checkout@v4
|
|
51
|
+
- name: install Microsoft ODBC
|
|
52
|
+
if: matrix.os == 'ubuntu-latest'
|
|
53
|
+
run: |
|
|
54
|
+
sudo apt-get update
|
|
55
|
+
sudo ACCEPT_EULA=Y apt-get install msodbcsql18 -y
|
|
56
|
+
- name: install Microsoft ODBC
|
|
57
|
+
if: matrix.os == 'macos-13'
|
|
58
|
+
run: |
|
|
59
|
+
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
|
|
60
|
+
brew update
|
|
61
|
+
HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql18
|
|
62
|
+
- name: Install Docker on macOS
|
|
63
|
+
if: matrix.os == 'macos-13'
|
|
64
|
+
run: |
|
|
65
|
+
brew install docker
|
|
66
|
+
brew install docker-compose
|
|
67
|
+
brew install colima
|
|
68
|
+
colima start
|
|
69
|
+
# Wait for Docker daemon to be ready
|
|
70
|
+
while ! docker system info > /dev/null 2>&1; do sleep 1; done
|
|
71
|
+
- name: install Microsoft ODBC
|
|
72
|
+
if: matrix.os == 'windows-latest'
|
|
73
|
+
run: |
|
|
74
|
+
Invoke-WebRequest -Uri https://go.microsoft.com/fwlink/?linkid=2249006 -OutFile msodbcsql.msi
|
|
75
|
+
Start-Process -FilePath "msiexec.exe" -ArgumentList "/i msodbcsql.msi /qn /norestart IACCEPTMSODBCSQLLICENSETERMS=YES" -Wait
|
|
76
|
+
- uses: actions/setup-python@v4
|
|
77
|
+
with:
|
|
78
|
+
python-version: ${{ matrix.python-version }}
|
|
79
|
+
- name: install uv
|
|
80
|
+
uses: astral-sh/setup-uv@v3
|
|
81
|
+
- name: Install pip dependencies
|
|
82
|
+
run: make deps-ci
|
|
83
|
+
|
|
84
|
+
- name: run tests (macOS)
|
|
85
|
+
if: matrix.os == 'macos-13'
|
|
86
|
+
run: make test-ci
|
|
87
|
+
env:
|
|
88
|
+
TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock
|
|
89
|
+
DOCKER_HOST: unix:///Users/runner/.colima/docker.sock
|
|
90
|
+
- name: run tests (other OS)
|
|
91
|
+
if: matrix.os != 'macos-13'
|
|
92
|
+
run: make test-ci
|
|
93
|
+
- name: check the formatting
|
|
94
|
+
run: make lint-ci
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
.DS_Store
|
|
2
|
+
__pycache__
|
|
3
|
+
.env
|
|
4
|
+
venv
|
|
5
|
+
!.gitkeep
|
|
6
|
+
.idea
|
|
7
|
+
.vscode/*
|
|
8
|
+
.metals/*
|
|
9
|
+
.coverage.*
|
|
10
|
+
.coverage
|
|
11
|
+
.ruff_cache
|
|
12
|
+
.pytest_cache
|
|
13
|
+
.mypy_cache
|
|
14
|
+
pipeline_data
|
|
15
|
+
dist
|
|
16
|
+
docs/.vitepress/dist
|
|
17
|
+
docs/.vitepress/cache
|
|
18
|
+
node_modules
|
|
19
|
+
*.duckdb
|
|
20
|
+
*.duckdb.wal
|
|
21
|
+
*.db
|
|
22
|
+
*.db.wal
|
|
23
|
+
*.sql
|
|
24
|
+
ingest.sh
|
|
25
|
+
test.env
|
|
26
|
+
*.log
|
|
27
|
+
.claude
|
|
28
|
+
helper_scripts
|
|
29
|
+
tmp
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
omniload/src/telemetry/event.py:generic-api-key:17
|
|
2
|
+
omniload/src/testdata/fakebqcredentials.json:private-key:5
|
|
3
|
+
docs/supported-sources/shopify.md:generic-api-key:26
|
|
4
|
+
docs/supported-sources/smartsheets.md:generic-api-key:38
|
|
5
|
+
omniload/src/google_analytics/helpers_test.py:generic-api-key:45
|
|
6
|
+
omniload/src/google_analytics/helpers_test.py:generic-api-key:51
|
|
7
|
+
omniload/src/google_analytics/helpers_test.py:generic-api-key:58
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
min-release-age=7
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
StylesPath = styles
|
|
2
|
+
|
|
3
|
+
MinAlertLevel = suggestion
|
|
4
|
+
|
|
5
|
+
Packages = Google
|
|
6
|
+
|
|
7
|
+
Vocab = omniload
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
[*]
|
|
11
|
+
BasedOnStyles = Vale, Google, omniload
|
|
12
|
+
Google.We = NO
|
|
13
|
+
Google.Passive = NO
|
|
14
|
+
Google.Will = NO
|
|
15
|
+
Google.Latin = NO
|
|
16
|
+
Google.Contractions = NO
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
FROM python:3.11-slim-trixie
|
|
2
|
+
|
|
3
|
+
# Guidelines that have been followed.
|
|
4
|
+
# - https://hynek.me/articles/docker-uv/
|
|
5
|
+
|
|
6
|
+
# Install the `uv` package manager.
|
|
7
|
+
# Security-conscious organizations should package/review uv themselves.
|
|
8
|
+
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
|
|
9
|
+
|
|
10
|
+
# - Tell uv to byte-compile packages for faster application startups.
|
|
11
|
+
# - Silence uv complaining about not being able to use hard links.
|
|
12
|
+
# - Prevent uv from accidentally downloading isolated Python builds.
|
|
13
|
+
# - Install packages into the system Python environment.
|
|
14
|
+
ENV \
|
|
15
|
+
UV_COMPILE_BYTECODE=1 \
|
|
16
|
+
UV_LINK_MODE=copy \
|
|
17
|
+
UV_PYTHON_DOWNLOADS=never \
|
|
18
|
+
UV_SYSTEM_PYTHON=1
|
|
19
|
+
|
|
20
|
+
WORKDIR /app
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# Install all prerequisites.
|
|
24
|
+
|
|
25
|
+
RUN \
|
|
26
|
+
export ACCEPT_EULA='Y' && \
|
|
27
|
+
# Install build dependencies
|
|
28
|
+
apt-get update && \
|
|
29
|
+
apt-get install -y curl gcc gpg libpq-dev build-essential unixodbc-dev g++ apt-transport-https git
|
|
30
|
+
|
|
31
|
+
RUN \
|
|
32
|
+
# Install pyodbc db drivers for MSSQL and PostgreSQL
|
|
33
|
+
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /usr/share/keyrings/microsoft-prod.gpg && \
|
|
34
|
+
curl -sSL https://packages.microsoft.com/config/debian/12/prod.list | tee /etc/apt/sources.list.d/mssql-release.list
|
|
35
|
+
|
|
36
|
+
RUN \
|
|
37
|
+
# install the rest of them
|
|
38
|
+
apt-get update && \
|
|
39
|
+
ACCEPT_EULA=Y apt-get install -y msodbcsql18 odbc-postgresql && \
|
|
40
|
+
# Update odbcinst.ini to make sure full path to driver is listed, and set CommLog to 0. i.e disables any communication logs to be written to files
|
|
41
|
+
sed 's/Driver=psql/Driver=\/usr\/lib\/x86_64-linux-gnu\/odbc\/psql/;s/CommLog=1/CommLog=0/' /etc/odbcinst.ini > /tmp/temp.ini && \
|
|
42
|
+
mv -f /tmp/temp.ini /etc/odbcinst.ini
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# Install application.
|
|
46
|
+
|
|
47
|
+
# Copy sources and activate platform-specific requirements file.
|
|
48
|
+
COPY . /app
|
|
49
|
+
RUN if [ "$(uname -m)" = "aarch64" ]; then \
|
|
50
|
+
cp /app/requirements_arm64.txt /app/requirements.txt; \
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
# Generate version file
|
|
54
|
+
RUN make write-build-info
|
|
55
|
+
|
|
56
|
+
# Install all required packages and the application.
|
|
57
|
+
RUN uv pip install --requirement requirements.txt pyodbc .
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# Ready.
|
|
61
|
+
ENTRYPOINT ["omniload"]
|