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.
Files changed (414) hide show
  1. omniload-0.0.0.dev0/.dlt/config.toml +3 -0
  2. omniload-0.0.0.dev0/.dockerignore +137 -0
  3. omniload-0.0.0.dev0/.githooks/pre-commit-hook.sh +23 -0
  4. omniload-0.0.0.dev0/.github/workflows/deploy-docs.yml +62 -0
  5. omniload-0.0.0.dev0/.github/workflows/release.yml +149 -0
  6. omniload-0.0.0.dev0/.github/workflows/secrets-scan.yml +12 -0
  7. omniload-0.0.0.dev0/.github/workflows/tests.yml +94 -0
  8. omniload-0.0.0.dev0/.gitignore +29 -0
  9. omniload-0.0.0.dev0/.gitleaksignore +7 -0
  10. omniload-0.0.0.dev0/.npmrc +1 -0
  11. omniload-0.0.0.dev0/.vale.ini +16 -0
  12. omniload-0.0.0.dev0/Dockerfile +61 -0
  13. omniload-0.0.0.dev0/LICENSE.Apache-2.0 +201 -0
  14. omniload-0.0.0.dev0/LICENSE.md +21 -0
  15. omniload-0.0.0.dev0/Makefile +68 -0
  16. omniload-0.0.0.dev0/NOTICE +35 -0
  17. omniload-0.0.0.dev0/PKG-INFO +439 -0
  18. omniload-0.0.0.dev0/README.md +347 -0
  19. omniload-0.0.0.dev0/docs/.vitepress/config.mjs +223 -0
  20. omniload-0.0.0.dev0/docs/.vitepress/theme/CopyPageButton.vue +176 -0
  21. omniload-0.0.0.dev0/docs/.vitepress/theme/Layout.vue +27 -0
  22. omniload-0.0.0.dev0/docs/.vitepress/theme/custom.css +34 -0
  23. omniload-0.0.0.dev0/docs/.vitepress/theme/index.js +9 -0
  24. omniload-0.0.0.dev0/docs/commands/example-uris.md +5 -0
  25. omniload-0.0.0.dev0/docs/commands/ingest.md +132 -0
  26. omniload-0.0.0.dev0/docs/getting-started/core-concepts.md +41 -0
  27. omniload-0.0.0.dev0/docs/getting-started/data-masking.md +377 -0
  28. omniload-0.0.0.dev0/docs/getting-started/incremental-loading.md +228 -0
  29. omniload-0.0.0.dev0/docs/getting-started/quickstart.md +61 -0
  30. omniload-0.0.0.dev0/docs/index.md +39 -0
  31. omniload-0.0.0.dev0/docs/media/applovin_max.png +0 -0
  32. omniload-0.0.0.dev0/docs/media/athena.png +0 -0
  33. omniload-0.0.0.dev0/docs/media/clickhouse_img.png +0 -0
  34. omniload-0.0.0.dev0/docs/media/clickup_ingestion.png +0 -0
  35. omniload-0.0.0.dev0/docs/media/cratedb-destination.png +0 -0
  36. omniload-0.0.0.dev0/docs/media/cratedb-source.png +0 -0
  37. omniload-0.0.0.dev0/docs/media/freshdesk_ingestion.png +0 -0
  38. omniload-0.0.0.dev0/docs/media/gcp_spanner_ingestion.png +0 -0
  39. omniload-0.0.0.dev0/docs/media/github.png +0 -0
  40. omniload-0.0.0.dev0/docs/media/google_analytics_realtime_report.png +0 -0
  41. omniload-0.0.0.dev0/docs/media/googleanalytics.png +0 -0
  42. omniload-0.0.0.dev0/docs/media/ingestion_elasticsearch_img.png +0 -0
  43. omniload-0.0.0.dev0/docs/media/kinesis.bigquery.png +0 -0
  44. omniload-0.0.0.dev0/docs/media/linear.png +0 -0
  45. omniload-0.0.0.dev0/docs/media/linkedin_ads.png +0 -0
  46. omniload-0.0.0.dev0/docs/media/mixpanel_ingestion.png +0 -0
  47. omniload-0.0.0.dev0/docs/media/personio.png +0 -0
  48. omniload-0.0.0.dev0/docs/media/personio_duckdb.png +0 -0
  49. omniload-0.0.0.dev0/docs/media/phantombuster.png +0 -0
  50. omniload-0.0.0.dev0/docs/media/pipedrive.png +0 -0
  51. omniload-0.0.0.dev0/docs/media/quickbook_ingestion.png +0 -0
  52. omniload-0.0.0.dev0/docs/media/sftp.png +0 -0
  53. omniload-0.0.0.dev0/docs/media/stripe_postgres.png +0 -0
  54. omniload-0.0.0.dev0/docs/media/tiktok.png +0 -0
  55. omniload-0.0.0.dev0/docs/media/wise_ingestion.png +0 -0
  56. omniload-0.0.0.dev0/docs/media/zoom_ingestion.png +0 -0
  57. omniload-0.0.0.dev0/docs/public/demo.gif +0 -0
  58. omniload-0.0.0.dev0/docs/supported-sources/adjust.md +118 -0
  59. omniload-0.0.0.dev0/docs/supported-sources/airtable.md +57 -0
  60. omniload-0.0.0.dev0/docs/supported-sources/allium.md +164 -0
  61. omniload-0.0.0.dev0/docs/supported-sources/anthropic.md +356 -0
  62. omniload-0.0.0.dev0/docs/supported-sources/appleads.md +196 -0
  63. omniload-0.0.0.dev0/docs/supported-sources/applovin.md +144 -0
  64. omniload-0.0.0.dev0/docs/supported-sources/applovin_max.md +52 -0
  65. omniload-0.0.0.dev0/docs/supported-sources/appsflyer.md +93 -0
  66. omniload-0.0.0.dev0/docs/supported-sources/appstore.md +263 -0
  67. omniload-0.0.0.dev0/docs/supported-sources/asana.md +59 -0
  68. omniload-0.0.0.dev0/docs/supported-sources/athena.md +42 -0
  69. omniload-0.0.0.dev0/docs/supported-sources/attio.md +47 -0
  70. omniload-0.0.0.dev0/docs/supported-sources/bigquery.md +52 -0
  71. omniload-0.0.0.dev0/docs/supported-sources/bruin.md +48 -0
  72. omniload-0.0.0.dev0/docs/supported-sources/chess.md +38 -0
  73. omniload-0.0.0.dev0/docs/supported-sources/clickhouse.md +58 -0
  74. omniload-0.0.0.dev0/docs/supported-sources/clickup.md +45 -0
  75. omniload-0.0.0.dev0/docs/supported-sources/couchbase.md +136 -0
  76. omniload-0.0.0.dev0/docs/supported-sources/cratedb.md +147 -0
  77. omniload-0.0.0.dev0/docs/supported-sources/csv.md +9 -0
  78. omniload-0.0.0.dev0/docs/supported-sources/cursor.md +148 -0
  79. omniload-0.0.0.dev0/docs/supported-sources/custom_queries.md +50 -0
  80. omniload-0.0.0.dev0/docs/supported-sources/customerio.md +134 -0
  81. omniload-0.0.0.dev0/docs/supported-sources/databricks.md +44 -0
  82. omniload-0.0.0.dev0/docs/supported-sources/db2.md +28 -0
  83. omniload-0.0.0.dev0/docs/supported-sources/docebo.md +75 -0
  84. omniload-0.0.0.dev0/docs/supported-sources/duckdb.md +16 -0
  85. omniload-0.0.0.dev0/docs/supported-sources/dune.md +125 -0
  86. omniload-0.0.0.dev0/docs/supported-sources/dynamodb.md +114 -0
  87. omniload-0.0.0.dev0/docs/supported-sources/elasticsearch.md +80 -0
  88. omniload-0.0.0.dev0/docs/supported-sources/facebook-ads.md +249 -0
  89. omniload-0.0.0.dev0/docs/supported-sources/fireflies.md +108 -0
  90. omniload-0.0.0.dev0/docs/supported-sources/fluxx.md +307 -0
  91. omniload-0.0.0.dev0/docs/supported-sources/frankfurter.md +52 -0
  92. omniload-0.0.0.dev0/docs/supported-sources/freshdesk.md +49 -0
  93. omniload-0.0.0.dev0/docs/supported-sources/fundraiseup.md +83 -0
  94. omniload-0.0.0.dev0/docs/supported-sources/g2.md +55 -0
  95. omniload-0.0.0.dev0/docs/supported-sources/gcs.md +196 -0
  96. omniload-0.0.0.dev0/docs/supported-sources/github.md +48 -0
  97. omniload-0.0.0.dev0/docs/supported-sources/google-ads.md +266 -0
  98. omniload-0.0.0.dev0/docs/supported-sources/google_analytics.md +89 -0
  99. omniload-0.0.0.dev0/docs/supported-sources/gorgias.md +42 -0
  100. omniload-0.0.0.dev0/docs/supported-sources/gsheets.md +46 -0
  101. omniload-0.0.0.dev0/docs/supported-sources/hostaway.md +104 -0
  102. omniload-0.0.0.dev0/docs/supported-sources/http.md +123 -0
  103. omniload-0.0.0.dev0/docs/supported-sources/hubspot.md +208 -0
  104. omniload-0.0.0.dev0/docs/supported-sources/indeed.md +115 -0
  105. omniload-0.0.0.dev0/docs/supported-sources/influxdb.md +39 -0
  106. omniload-0.0.0.dev0/docs/supported-sources/intercom.md +57 -0
  107. omniload-0.0.0.dev0/docs/supported-sources/isoc-pulse.md +150 -0
  108. omniload-0.0.0.dev0/docs/supported-sources/jira.md +77 -0
  109. omniload-0.0.0.dev0/docs/supported-sources/jobtread.md +69 -0
  110. omniload-0.0.0.dev0/docs/supported-sources/kafka.md +38 -0
  111. omniload-0.0.0.dev0/docs/supported-sources/kinesis.md +43 -0
  112. omniload-0.0.0.dev0/docs/supported-sources/klaviyo.md +57 -0
  113. omniload-0.0.0.dev0/docs/supported-sources/linear.md +57 -0
  114. omniload-0.0.0.dev0/docs/supported-sources/linkedin_ads.md +170 -0
  115. omniload-0.0.0.dev0/docs/supported-sources/mailchimp.md +99 -0
  116. omniload-0.0.0.dev0/docs/supported-sources/mixpanel.md +50 -0
  117. omniload-0.0.0.dev0/docs/supported-sources/monday.md +59 -0
  118. omniload-0.0.0.dev0/docs/supported-sources/mongodb.md +226 -0
  119. omniload-0.0.0.dev0/docs/supported-sources/motherduck.md +46 -0
  120. omniload-0.0.0.dev0/docs/supported-sources/mssql.md +48 -0
  121. omniload-0.0.0.dev0/docs/supported-sources/mysql.md +20 -0
  122. omniload-0.0.0.dev0/docs/supported-sources/notion.md +32 -0
  123. omniload-0.0.0.dev0/docs/supported-sources/oracle.md +20 -0
  124. omniload-0.0.0.dev0/docs/supported-sources/personio.md +58 -0
  125. omniload-0.0.0.dev0/docs/supported-sources/phantombuster.md +42 -0
  126. omniload-0.0.0.dev0/docs/supported-sources/pinterest.md +30 -0
  127. omniload-0.0.0.dev0/docs/supported-sources/pipedrive.md +45 -0
  128. omniload-0.0.0.dev0/docs/supported-sources/plusvibeai.md +93 -0
  129. omniload-0.0.0.dev0/docs/supported-sources/postgres.md +21 -0
  130. omniload-0.0.0.dev0/docs/supported-sources/posthog.md +70 -0
  131. omniload-0.0.0.dev0/docs/supported-sources/primer.md +59 -0
  132. omniload-0.0.0.dev0/docs/supported-sources/quickbooks.md +51 -0
  133. omniload-0.0.0.dev0/docs/supported-sources/rabbitmq.md +49 -0
  134. omniload-0.0.0.dev0/docs/supported-sources/reddit_ads.md +150 -0
  135. omniload-0.0.0.dev0/docs/supported-sources/redshift.md +21 -0
  136. omniload-0.0.0.dev0/docs/supported-sources/revenuecat.md +62 -0
  137. omniload-0.0.0.dev0/docs/supported-sources/s3.md +213 -0
  138. omniload-0.0.0.dev0/docs/supported-sources/salesforce.md +90 -0
  139. omniload-0.0.0.dev0/docs/supported-sources/sap-hana.md +20 -0
  140. omniload-0.0.0.dev0/docs/supported-sources/sftp.md +43 -0
  141. omniload-0.0.0.dev0/docs/supported-sources/shopify.md +58 -0
  142. omniload-0.0.0.dev0/docs/supported-sources/slack.md +46 -0
  143. omniload-0.0.0.dev0/docs/supported-sources/smartsheets.md +47 -0
  144. omniload-0.0.0.dev0/docs/supported-sources/snapchat-ads.md +200 -0
  145. omniload-0.0.0.dev0/docs/supported-sources/snowflake.md +79 -0
  146. omniload-0.0.0.dev0/docs/supported-sources/socrata.md +128 -0
  147. omniload-0.0.0.dev0/docs/supported-sources/solidgate.md +50 -0
  148. omniload-0.0.0.dev0/docs/supported-sources/spanner.md +41 -0
  149. omniload-0.0.0.dev0/docs/supported-sources/sqlite.md +16 -0
  150. omniload-0.0.0.dev0/docs/supported-sources/stripe.md +146 -0
  151. omniload-0.0.0.dev0/docs/supported-sources/surveymonkey.md +62 -0
  152. omniload-0.0.0.dev0/docs/supported-sources/tiktok-ads.md +63 -0
  153. omniload-0.0.0.dev0/docs/supported-sources/trino.md +96 -0
  154. omniload-0.0.0.dev0/docs/supported-sources/trustpilot.md +36 -0
  155. omniload-0.0.0.dev0/docs/supported-sources/wise.md +49 -0
  156. omniload-0.0.0.dev0/docs/supported-sources/zendesk.md +87 -0
  157. omniload-0.0.0.dev0/docs/supported-sources/zoom.md +51 -0
  158. omniload-0.0.0.dev0/docs/tutorials/load-kinesis-bigquery.md +130 -0
  159. omniload-0.0.0.dev0/docs/tutorials/load-personio-duckdb.md +94 -0
  160. omniload-0.0.0.dev0/docs/tutorials/load-stripe-postgres.md +101 -0
  161. omniload-0.0.0.dev0/omniload/conftest.py +72 -0
  162. omniload-0.0.0.dev0/omniload/main.py +810 -0
  163. omniload-0.0.0.dev0/omniload/src/.gitignore +10 -0
  164. omniload-0.0.0.dev0/omniload/src/adjust/__init__.py +108 -0
  165. omniload-0.0.0.dev0/omniload/src/adjust/adjust_helpers.py +122 -0
  166. omniload-0.0.0.dev0/omniload/src/airtable/__init__.py +84 -0
  167. omniload-0.0.0.dev0/omniload/src/allium/__init__.py +128 -0
  168. omniload-0.0.0.dev0/omniload/src/anthropic/__init__.py +277 -0
  169. omniload-0.0.0.dev0/omniload/src/anthropic/helpers.py +525 -0
  170. omniload-0.0.0.dev0/omniload/src/applovin/__init__.py +316 -0
  171. omniload-0.0.0.dev0/omniload/src/applovin_max/__init__.py +117 -0
  172. omniload-0.0.0.dev0/omniload/src/appsflyer/__init__.py +325 -0
  173. omniload-0.0.0.dev0/omniload/src/appsflyer/client.py +110 -0
  174. omniload-0.0.0.dev0/omniload/src/appstore/__init__.py +142 -0
  175. omniload-0.0.0.dev0/omniload/src/appstore/client.py +126 -0
  176. omniload-0.0.0.dev0/omniload/src/appstore/errors.py +15 -0
  177. omniload-0.0.0.dev0/omniload/src/appstore/models.py +117 -0
  178. omniload-0.0.0.dev0/omniload/src/appstore/resources.py +179 -0
  179. omniload-0.0.0.dev0/omniload/src/arrow/__init__.py +81 -0
  180. omniload-0.0.0.dev0/omniload/src/asana_source/__init__.py +281 -0
  181. omniload-0.0.0.dev0/omniload/src/asana_source/helpers.py +30 -0
  182. omniload-0.0.0.dev0/omniload/src/asana_source/settings.py +158 -0
  183. omniload-0.0.0.dev0/omniload/src/attio/__init__.py +102 -0
  184. omniload-0.0.0.dev0/omniload/src/attio/helpers.py +65 -0
  185. omniload-0.0.0.dev0/omniload/src/blob.py +95 -0
  186. omniload-0.0.0.dev0/omniload/src/bruin/__init__.py +76 -0
  187. omniload-0.0.0.dev0/omniload/src/chess/__init__.py +180 -0
  188. omniload-0.0.0.dev0/omniload/src/chess/helpers.py +35 -0
  189. omniload-0.0.0.dev0/omniload/src/chess/settings.py +18 -0
  190. omniload-0.0.0.dev0/omniload/src/clickup/__init__.py +85 -0
  191. omniload-0.0.0.dev0/omniload/src/clickup/helpers.py +47 -0
  192. omniload-0.0.0.dev0/omniload/src/collector/spinner.py +43 -0
  193. omniload-0.0.0.dev0/omniload/src/couchbase_source/__init__.py +118 -0
  194. omniload-0.0.0.dev0/omniload/src/couchbase_source/helpers.py +135 -0
  195. omniload-0.0.0.dev0/omniload/src/cursor/__init__.py +83 -0
  196. omniload-0.0.0.dev0/omniload/src/cursor/helpers.py +188 -0
  197. omniload-0.0.0.dev0/omniload/src/customer_io/__init__.py +486 -0
  198. omniload-0.0.0.dev0/omniload/src/customer_io/helpers.py +530 -0
  199. omniload-0.0.0.dev0/omniload/src/destinations.py +982 -0
  200. omniload-0.0.0.dev0/omniload/src/docebo/__init__.py +589 -0
  201. omniload-0.0.0.dev0/omniload/src/docebo/client.py +435 -0
  202. omniload-0.0.0.dev0/omniload/src/docebo/helpers.py +97 -0
  203. omniload-0.0.0.dev0/omniload/src/dune/__init__.py +104 -0
  204. omniload-0.0.0.dev0/omniload/src/dune/helpers.py +108 -0
  205. omniload-0.0.0.dev0/omniload/src/dynamodb/__init__.py +86 -0
  206. omniload-0.0.0.dev0/omniload/src/elasticsearch/__init__.py +80 -0
  207. omniload-0.0.0.dev0/omniload/src/elasticsearch/helpers.py +141 -0
  208. omniload-0.0.0.dev0/omniload/src/errors.py +26 -0
  209. omniload-0.0.0.dev0/omniload/src/facebook_ads/__init__.py +403 -0
  210. omniload-0.0.0.dev0/omniload/src/facebook_ads/exceptions.py +19 -0
  211. omniload-0.0.0.dev0/omniload/src/facebook_ads/helpers.py +296 -0
  212. omniload-0.0.0.dev0/omniload/src/facebook_ads/settings.py +224 -0
  213. omniload-0.0.0.dev0/omniload/src/facebook_ads/utils.py +53 -0
  214. omniload-0.0.0.dev0/omniload/src/factory.py +305 -0
  215. omniload-0.0.0.dev0/omniload/src/filesystem/__init__.py +133 -0
  216. omniload-0.0.0.dev0/omniload/src/filesystem/helpers.py +114 -0
  217. omniload-0.0.0.dev0/omniload/src/filesystem/readers.py +187 -0
  218. omniload-0.0.0.dev0/omniload/src/filters.py +62 -0
  219. omniload-0.0.0.dev0/omniload/src/fireflies/__init__.py +151 -0
  220. omniload-0.0.0.dev0/omniload/src/fireflies/helpers.py +753 -0
  221. omniload-0.0.0.dev0/omniload/src/fluxx/__init__.py +10013 -0
  222. omniload-0.0.0.dev0/omniload/src/fluxx/helpers.py +233 -0
  223. omniload-0.0.0.dev0/omniload/src/frankfurter/__init__.py +157 -0
  224. omniload-0.0.0.dev0/omniload/src/frankfurter/helpers.py +48 -0
  225. omniload-0.0.0.dev0/omniload/src/freshdesk/__init__.py +103 -0
  226. omniload-0.0.0.dev0/omniload/src/freshdesk/freshdesk_client.py +151 -0
  227. omniload-0.0.0.dev0/omniload/src/freshdesk/settings.py +23 -0
  228. omniload-0.0.0.dev0/omniload/src/fundraiseup/__init__.py +95 -0
  229. omniload-0.0.0.dev0/omniload/src/fundraiseup/client.py +81 -0
  230. omniload-0.0.0.dev0/omniload/src/github/__init__.py +202 -0
  231. omniload-0.0.0.dev0/omniload/src/github/helpers.py +207 -0
  232. omniload-0.0.0.dev0/omniload/src/github/queries.py +129 -0
  233. omniload-0.0.0.dev0/omniload/src/github/settings.py +24 -0
  234. omniload-0.0.0.dev0/omniload/src/google_ads/__init__.py +198 -0
  235. omniload-0.0.0.dev0/omniload/src/google_ads/field.py +17 -0
  236. omniload-0.0.0.dev0/omniload/src/google_ads/metrics.py +254 -0
  237. omniload-0.0.0.dev0/omniload/src/google_ads/predicates.py +37 -0
  238. omniload-0.0.0.dev0/omniload/src/google_ads/reports.py +411 -0
  239. omniload-0.0.0.dev0/omniload/src/google_ads/test_google_ads.py +184 -0
  240. omniload-0.0.0.dev0/omniload/src/google_analytics/__init__.py +144 -0
  241. omniload-0.0.0.dev0/omniload/src/google_analytics/helpers.py +312 -0
  242. omniload-0.0.0.dev0/omniload/src/google_sheets/README.md +95 -0
  243. omniload-0.0.0.dev0/omniload/src/google_sheets/__init__.py +166 -0
  244. omniload-0.0.0.dev0/omniload/src/google_sheets/helpers/__init__.py +15 -0
  245. omniload-0.0.0.dev0/omniload/src/google_sheets/helpers/api_calls.py +160 -0
  246. omniload-0.0.0.dev0/omniload/src/google_sheets/helpers/data_processing.py +316 -0
  247. omniload-0.0.0.dev0/omniload/src/gorgias/__init__.py +595 -0
  248. omniload-0.0.0.dev0/omniload/src/gorgias/helpers.py +166 -0
  249. omniload-0.0.0.dev0/omniload/src/hostaway/__init__.py +302 -0
  250. omniload-0.0.0.dev0/omniload/src/hostaway/client.py +288 -0
  251. omniload-0.0.0.dev0/omniload/src/http/__init__.py +38 -0
  252. omniload-0.0.0.dev0/omniload/src/http/readers.py +146 -0
  253. omniload-0.0.0.dev0/omniload/src/http_client.py +24 -0
  254. omniload-0.0.0.dev0/omniload/src/hubspot/__init__.py +800 -0
  255. omniload-0.0.0.dev0/omniload/src/hubspot/helpers.py +417 -0
  256. omniload-0.0.0.dev0/omniload/src/hubspot/settings.py +329 -0
  257. omniload-0.0.0.dev0/omniload/src/indeed/__init__.py +153 -0
  258. omniload-0.0.0.dev0/omniload/src/indeed/helpers.py +228 -0
  259. omniload-0.0.0.dev0/omniload/src/influxdb/__init__.py +46 -0
  260. omniload-0.0.0.dev0/omniload/src/influxdb/client.py +34 -0
  261. omniload-0.0.0.dev0/omniload/src/intercom/__init__.py +142 -0
  262. omniload-0.0.0.dev0/omniload/src/intercom/helpers.py +674 -0
  263. omniload-0.0.0.dev0/omniload/src/intercom/settings.py +279 -0
  264. omniload-0.0.0.dev0/omniload/src/isoc_pulse/__init__.py +159 -0
  265. omniload-0.0.0.dev0/omniload/src/jira_source/__init__.py +377 -0
  266. omniload-0.0.0.dev0/omniload/src/jira_source/helpers.py +510 -0
  267. omniload-0.0.0.dev0/omniload/src/jira_source/settings.py +184 -0
  268. omniload-0.0.0.dev0/omniload/src/kafka/__init__.py +120 -0
  269. omniload-0.0.0.dev0/omniload/src/kafka/helpers.py +241 -0
  270. omniload-0.0.0.dev0/omniload/src/kinesis/__init__.py +153 -0
  271. omniload-0.0.0.dev0/omniload/src/kinesis/helpers.py +96 -0
  272. omniload-0.0.0.dev0/omniload/src/klaviyo/__init__.py +237 -0
  273. omniload-0.0.0.dev0/omniload/src/klaviyo/client.py +212 -0
  274. omniload-0.0.0.dev0/omniload/src/klaviyo/helpers.py +19 -0
  275. omniload-0.0.0.dev0/omniload/src/linear/__init__.py +634 -0
  276. omniload-0.0.0.dev0/omniload/src/linear/helpers.py +111 -0
  277. omniload-0.0.0.dev0/omniload/src/linkedin_ads/__init__.py +266 -0
  278. omniload-0.0.0.dev0/omniload/src/linkedin_ads/dimension_time_enum.py +17 -0
  279. omniload-0.0.0.dev0/omniload/src/linkedin_ads/helpers.py +246 -0
  280. omniload-0.0.0.dev0/omniload/src/loader.py +69 -0
  281. omniload-0.0.0.dev0/omniload/src/mailchimp/__init__.py +126 -0
  282. omniload-0.0.0.dev0/omniload/src/mailchimp/helpers.py +226 -0
  283. omniload-0.0.0.dev0/omniload/src/mailchimp/settings.py +164 -0
  284. omniload-0.0.0.dev0/omniload/src/masking.py +344 -0
  285. omniload-0.0.0.dev0/omniload/src/mixpanel/__init__.py +62 -0
  286. omniload-0.0.0.dev0/omniload/src/mixpanel/client.py +104 -0
  287. omniload-0.0.0.dev0/omniload/src/monday/__init__.py +246 -0
  288. omniload-0.0.0.dev0/omniload/src/monday/helpers.py +392 -0
  289. omniload-0.0.0.dev0/omniload/src/monday/settings.py +325 -0
  290. omniload-0.0.0.dev0/omniload/src/mongodb/__init__.py +281 -0
  291. omniload-0.0.0.dev0/omniload/src/mongodb/helpers.py +975 -0
  292. omniload-0.0.0.dev0/omniload/src/notion/__init__.py +69 -0
  293. omniload-0.0.0.dev0/omniload/src/notion/helpers/__init__.py +14 -0
  294. omniload-0.0.0.dev0/omniload/src/notion/helpers/client.py +178 -0
  295. omniload-0.0.0.dev0/omniload/src/notion/helpers/database.py +92 -0
  296. omniload-0.0.0.dev0/omniload/src/notion/settings.py +17 -0
  297. omniload-0.0.0.dev0/omniload/src/partition.py +32 -0
  298. omniload-0.0.0.dev0/omniload/src/personio/__init__.py +345 -0
  299. omniload-0.0.0.dev0/omniload/src/personio/helpers.py +100 -0
  300. omniload-0.0.0.dev0/omniload/src/phantombuster/__init__.py +65 -0
  301. omniload-0.0.0.dev0/omniload/src/phantombuster/client.py +87 -0
  302. omniload-0.0.0.dev0/omniload/src/pinterest/__init__.py +82 -0
  303. omniload-0.0.0.dev0/omniload/src/pipedrive/__init__.py +212 -0
  304. omniload-0.0.0.dev0/omniload/src/pipedrive/helpers/__init__.py +37 -0
  305. omniload-0.0.0.dev0/omniload/src/pipedrive/helpers/custom_fields_munger.py +116 -0
  306. omniload-0.0.0.dev0/omniload/src/pipedrive/helpers/pages.py +129 -0
  307. omniload-0.0.0.dev0/omniload/src/pipedrive/settings.py +41 -0
  308. omniload-0.0.0.dev0/omniload/src/pipedrive/typing.py +17 -0
  309. omniload-0.0.0.dev0/omniload/src/plusvibeai/__init__.py +335 -0
  310. omniload-0.0.0.dev0/omniload/src/plusvibeai/helpers.py +544 -0
  311. omniload-0.0.0.dev0/omniload/src/plusvibeai/settings.py +252 -0
  312. omniload-0.0.0.dev0/omniload/src/primer/__init__.py +45 -0
  313. omniload-0.0.0.dev0/omniload/src/primer/helpers.py +79 -0
  314. omniload-0.0.0.dev0/omniload/src/quickbooks/__init__.py +117 -0
  315. omniload-0.0.0.dev0/omniload/src/reddit_ads/__init__.py +183 -0
  316. omniload-0.0.0.dev0/omniload/src/reddit_ads/helpers.py +232 -0
  317. omniload-0.0.0.dev0/omniload/src/resource.py +40 -0
  318. omniload-0.0.0.dev0/omniload/src/revenuecat/__init__.py +83 -0
  319. omniload-0.0.0.dev0/omniload/src/revenuecat/helpers.py +237 -0
  320. omniload-0.0.0.dev0/omniload/src/salesforce/__init__.py +170 -0
  321. omniload-0.0.0.dev0/omniload/src/salesforce/helpers.py +78 -0
  322. omniload-0.0.0.dev0/omniload/src/shopify/__init__.py +1953 -0
  323. omniload-0.0.0.dev0/omniload/src/shopify/exceptions.py +17 -0
  324. omniload-0.0.0.dev0/omniload/src/shopify/helpers.py +202 -0
  325. omniload-0.0.0.dev0/omniload/src/shopify/settings.py +19 -0
  326. omniload-0.0.0.dev0/omniload/src/slack/__init__.py +290 -0
  327. omniload-0.0.0.dev0/omniload/src/slack/helpers.py +218 -0
  328. omniload-0.0.0.dev0/omniload/src/slack/settings.py +36 -0
  329. omniload-0.0.0.dev0/omniload/src/smartsheets/__init__.py +82 -0
  330. omniload-0.0.0.dev0/omniload/src/snapchat_ads/__init__.py +455 -0
  331. omniload-0.0.0.dev0/omniload/src/snapchat_ads/client.py +72 -0
  332. omniload-0.0.0.dev0/omniload/src/snapchat_ads/helpers.py +630 -0
  333. omniload-0.0.0.dev0/omniload/src/snapchat_ads/settings.py +130 -0
  334. omniload-0.0.0.dev0/omniload/src/socrata_source/__init__.py +83 -0
  335. omniload-0.0.0.dev0/omniload/src/socrata_source/helpers.py +85 -0
  336. omniload-0.0.0.dev0/omniload/src/socrata_source/settings.py +8 -0
  337. omniload-0.0.0.dev0/omniload/src/solidgate/__init__.py +219 -0
  338. omniload-0.0.0.dev0/omniload/src/solidgate/helpers.py +154 -0
  339. omniload-0.0.0.dev0/omniload/src/sources.py +5408 -0
  340. omniload-0.0.0.dev0/omniload/src/sql_database/__init__.py +0 -0
  341. omniload-0.0.0.dev0/omniload/src/sql_database/callbacks.py +66 -0
  342. omniload-0.0.0.dev0/omniload/src/stripe_analytics/__init__.py +183 -0
  343. omniload-0.0.0.dev0/omniload/src/stripe_analytics/helpers.py +386 -0
  344. omniload-0.0.0.dev0/omniload/src/stripe_analytics/settings.py +80 -0
  345. omniload-0.0.0.dev0/omniload/src/table_definition.py +15 -0
  346. omniload-0.0.0.dev0/omniload/src/testdata/fakebqcredentials.json +14 -0
  347. omniload-0.0.0.dev0/omniload/src/tiktok_ads/__init__.py +150 -0
  348. omniload-0.0.0.dev0/omniload/src/tiktok_ads/tiktok_helpers.py +130 -0
  349. omniload-0.0.0.dev0/omniload/src/time.py +11 -0
  350. omniload-0.0.0.dev0/omniload/src/trustpilot/__init__.py +48 -0
  351. omniload-0.0.0.dev0/omniload/src/trustpilot/client.py +48 -0
  352. omniload-0.0.0.dev0/omniload/src/version.py +6 -0
  353. omniload-0.0.0.dev0/omniload/src/wise/__init__.py +68 -0
  354. omniload-0.0.0.dev0/omniload/src/wise/client.py +63 -0
  355. omniload-0.0.0.dev0/omniload/src/zendesk/__init__.py +480 -0
  356. omniload-0.0.0.dev0/omniload/src/zendesk/helpers/__init__.py +39 -0
  357. omniload-0.0.0.dev0/omniload/src/zendesk/helpers/api_helpers.py +119 -0
  358. omniload-0.0.0.dev0/omniload/src/zendesk/helpers/credentials.py +68 -0
  359. omniload-0.0.0.dev0/omniload/src/zendesk/helpers/talk_api.py +132 -0
  360. omniload-0.0.0.dev0/omniload/src/zendesk/settings.py +71 -0
  361. omniload-0.0.0.dev0/omniload/src/zoom/__init__.py +99 -0
  362. omniload-0.0.0.dev0/omniload/src/zoom/helpers.py +102 -0
  363. omniload-0.0.0.dev0/omniload/testdata/.gitignore +2 -0
  364. omniload-0.0.0.dev0/omniload/testdata/create_replace.csv +21 -0
  365. omniload-0.0.0.dev0/omniload/testdata/delete_insert_expected.csv +6 -0
  366. omniload-0.0.0.dev0/omniload/testdata/delete_insert_part1.csv +5 -0
  367. omniload-0.0.0.dev0/omniload/testdata/delete_insert_part2.csv +6 -0
  368. omniload-0.0.0.dev0/omniload/testdata/merge_expected.csv +5 -0
  369. omniload-0.0.0.dev0/omniload/testdata/merge_part1.csv +4 -0
  370. omniload-0.0.0.dev0/omniload/testdata/merge_part2.csv +5 -0
  371. omniload-0.0.0.dev0/omniload/tests/unit/test_smartsheets.py +133 -0
  372. omniload-0.0.0.dev0/package-lock.json +2499 -0
  373. omniload-0.0.0.dev0/package.json +11 -0
  374. omniload-0.0.0.dev0/pyproject.toml +200 -0
  375. omniload-0.0.0.dev0/requirements-dev.txt +13 -0
  376. omniload-0.0.0.dev0/requirements.txt +66 -0
  377. omniload-0.0.0.dev0/requirements_arm64.txt +674 -0
  378. omniload-0.0.0.dev0/resources/demo.gif +0 -0
  379. omniload-0.0.0.dev0/resources/demo.tape +18 -0
  380. omniload-0.0.0.dev0/styles/Google/AMPM.yml +9 -0
  381. omniload-0.0.0.dev0/styles/Google/Acronyms.yml +64 -0
  382. omniload-0.0.0.dev0/styles/Google/Colons.yml +8 -0
  383. omniload-0.0.0.dev0/styles/Google/Contractions.yml +30 -0
  384. omniload-0.0.0.dev0/styles/Google/DateFormat.yml +9 -0
  385. omniload-0.0.0.dev0/styles/Google/Ellipses.yml +9 -0
  386. omniload-0.0.0.dev0/styles/Google/EmDash.yml +13 -0
  387. omniload-0.0.0.dev0/styles/Google/Exclamation.yml +12 -0
  388. omniload-0.0.0.dev0/styles/Google/FirstPerson.yml +13 -0
  389. omniload-0.0.0.dev0/styles/Google/Gender.yml +9 -0
  390. omniload-0.0.0.dev0/styles/Google/GenderBias.yml +43 -0
  391. omniload-0.0.0.dev0/styles/Google/HeadingPunctuation.yml +13 -0
  392. omniload-0.0.0.dev0/styles/Google/Headings.yml +29 -0
  393. omniload-0.0.0.dev0/styles/Google/Latin.yml +11 -0
  394. omniload-0.0.0.dev0/styles/Google/LyHyphens.yml +14 -0
  395. omniload-0.0.0.dev0/styles/Google/OptionalPlurals.yml +12 -0
  396. omniload-0.0.0.dev0/styles/Google/Ordinal.yml +7 -0
  397. omniload-0.0.0.dev0/styles/Google/OxfordComma.yml +7 -0
  398. omniload-0.0.0.dev0/styles/Google/Parens.yml +7 -0
  399. omniload-0.0.0.dev0/styles/Google/Passive.yml +184 -0
  400. omniload-0.0.0.dev0/styles/Google/Periods.yml +7 -0
  401. omniload-0.0.0.dev0/styles/Google/Quotes.yml +7 -0
  402. omniload-0.0.0.dev0/styles/Google/Ranges.yml +7 -0
  403. omniload-0.0.0.dev0/styles/Google/Semicolons.yml +8 -0
  404. omniload-0.0.0.dev0/styles/Google/Slang.yml +11 -0
  405. omniload-0.0.0.dev0/styles/Google/Spacing.yml +10 -0
  406. omniload-0.0.0.dev0/styles/Google/Spelling.yml +10 -0
  407. omniload-0.0.0.dev0/styles/Google/Units.yml +8 -0
  408. omniload-0.0.0.dev0/styles/Google/We.yml +11 -0
  409. omniload-0.0.0.dev0/styles/Google/Will.yml +7 -0
  410. omniload-0.0.0.dev0/styles/Google/WordList.yml +80 -0
  411. omniload-0.0.0.dev0/styles/Google/meta.json +4 -0
  412. omniload-0.0.0.dev0/styles/Google/vocab.txt +0 -0
  413. omniload-0.0.0.dev0/styles/config/vocabularies/omniload/accept.txt +52 -0
  414. omniload-0.0.0.dev0/test.env.template +4 -0
@@ -0,0 +1,3 @@
1
+ [runtime]
2
+
3
+ dlthub_telemetry=false
@@ -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"]