ingestr 0.13.49__tar.gz → 0.14.98__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.

Files changed (408) hide show
  1. ingestr-0.14.98/.dlt/config.toml +3 -0
  2. ingestr-0.14.98/.github/workflows/release.yml +151 -0
  3. {ingestr-0.13.49 → ingestr-0.14.98}/.github/workflows/tests.yml +24 -1
  4. {ingestr-0.13.49 → ingestr-0.14.98}/.gitignore +4 -1
  5. ingestr-0.14.98/Dockerfile +61 -0
  6. {ingestr-0.13.49 → ingestr-0.14.98}/Makefile +14 -5
  7. {ingestr-0.13.49 → ingestr-0.14.98}/PKG-INFO +82 -17
  8. {ingestr-0.13.49 → ingestr-0.14.98}/README.md +53 -3
  9. {ingestr-0.13.49 → ingestr-0.14.98}/docs/.vitepress/config.mjs +47 -10
  10. {ingestr-0.13.49 → ingestr-0.14.98}/docs/commands/ingest.md +22 -0
  11. ingestr-0.14.98/docs/getting-started/data-masking.md +377 -0
  12. {ingestr-0.13.49 → ingestr-0.14.98}/docs/index.md +2 -2
  13. ingestr-0.14.98/docs/media/clickup_ingestion.png +0 -0
  14. ingestr-0.14.98/docs/media/cratedb-destination.png +0 -0
  15. ingestr-0.14.98/docs/media/cratedb-source.png +0 -0
  16. ingestr-0.14.98/docs/media/linear.png +0 -0
  17. ingestr-0.14.98/docs/media/mixpanel_ingestion.png +0 -0
  18. ingestr-0.14.98/docs/media/quickbook_ingestion.png +0 -0
  19. ingestr-0.14.98/docs/media/sftp.png +0 -0
  20. ingestr-0.14.98/docs/media/wise_ingestion.png +0 -0
  21. ingestr-0.14.98/docs/media/zoom_ingestion.png +0 -0
  22. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/adjust.md +14 -9
  23. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/airtable.md +22 -5
  24. ingestr-0.14.98/docs/supported-sources/allium.md +164 -0
  25. ingestr-0.14.98/docs/supported-sources/anthropic.md +356 -0
  26. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/applovin.md +6 -6
  27. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/applovin_max.md +5 -1
  28. ingestr-0.14.98/docs/supported-sources/appsflyer.md +93 -0
  29. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/appstore.md +65 -56
  30. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/asana.md +11 -10
  31. ingestr-0.14.98/docs/supported-sources/attio.md +47 -0
  32. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/chess.md +5 -4
  33. ingestr-0.14.98/docs/supported-sources/clickup.md +45 -0
  34. ingestr-0.14.98/docs/supported-sources/couchbase.md +136 -0
  35. ingestr-0.14.98/docs/supported-sources/cratedb.md +139 -0
  36. ingestr-0.14.98/docs/supported-sources/cursor.md +148 -0
  37. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/db2.md +8 -0
  38. ingestr-0.14.98/docs/supported-sources/docebo.md +75 -0
  39. ingestr-0.14.98/docs/supported-sources/elasticsearch.md +80 -0
  40. ingestr-0.14.98/docs/supported-sources/facebook-ads.md +161 -0
  41. ingestr-0.14.98/docs/supported-sources/fluxx.md +306 -0
  42. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/frankfurter.md +7 -3
  43. ingestr-0.14.98/docs/supported-sources/freshdesk.md +49 -0
  44. ingestr-0.14.98/docs/supported-sources/fundraiseup.md +83 -0
  45. ingestr-0.14.98/docs/supported-sources/gcs.md +169 -0
  46. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/github.md +6 -7
  47. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/google_analytics.md +8 -1
  48. ingestr-0.14.98/docs/supported-sources/gorgias.md +42 -0
  49. ingestr-0.14.98/docs/supported-sources/hostaway.md +104 -0
  50. ingestr-0.14.98/docs/supported-sources/http.md +111 -0
  51. ingestr-0.14.98/docs/supported-sources/hubspot.md +52 -0
  52. ingestr-0.14.98/docs/supported-sources/influxdb.md +39 -0
  53. ingestr-0.14.98/docs/supported-sources/intercom.md +57 -0
  54. ingestr-0.14.98/docs/supported-sources/isoc-pulse.md +150 -0
  55. ingestr-0.14.98/docs/supported-sources/jira.md +76 -0
  56. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/kinesis.md +5 -1
  57. ingestr-0.14.98/docs/supported-sources/klaviyo.md +57 -0
  58. ingestr-0.14.98/docs/supported-sources/linear.md +57 -0
  59. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/linkedin_ads.md +6 -3
  60. ingestr-0.14.98/docs/supported-sources/mailchimp.md +99 -0
  61. ingestr-0.14.98/docs/supported-sources/mixpanel.md +48 -0
  62. ingestr-0.14.98/docs/supported-sources/monday.md +59 -0
  63. ingestr-0.14.98/docs/supported-sources/mongodb.md +201 -0
  64. ingestr-0.14.98/docs/supported-sources/motherduck.md +46 -0
  65. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/mssql.md +18 -0
  66. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/mysql.md +3 -3
  67. ingestr-0.14.98/docs/supported-sources/personio.md +58 -0
  68. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/phantombuster.md +6 -2
  69. ingestr-0.14.98/docs/supported-sources/pinterest.md +30 -0
  70. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/pipedrive.md +8 -6
  71. ingestr-0.14.98/docs/supported-sources/plusvibeai.md +93 -0
  72. ingestr-0.14.98/docs/supported-sources/quickbooks.md +51 -0
  73. ingestr-0.14.98/docs/supported-sources/revenuecat.md +62 -0
  74. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/s3.md +46 -0
  75. ingestr-0.14.98/docs/supported-sources/salesforce.md +90 -0
  76. ingestr-0.14.98/docs/supported-sources/sftp.md +43 -0
  77. ingestr-0.14.98/docs/supported-sources/shopify.md +45 -0
  78. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/slack.md +8 -4
  79. ingestr-0.14.98/docs/supported-sources/socrata.md +127 -0
  80. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/solidgate.md +7 -3
  81. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/spanner.md +4 -4
  82. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/sqlite.md +1 -1
  83. ingestr-0.14.98/docs/supported-sources/stripe.md +146 -0
  84. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/tiktok-ads.md +5 -0
  85. ingestr-0.14.98/docs/supported-sources/trino.md +96 -0
  86. ingestr-0.14.98/docs/supported-sources/trustpilot.md +36 -0
  87. ingestr-0.14.98/docs/supported-sources/wise.md +49 -0
  88. ingestr-0.14.98/docs/supported-sources/zendesk.md +87 -0
  89. ingestr-0.14.98/docs/supported-sources/zoom.md +39 -0
  90. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/conftest.py +9 -0
  91. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/main.py +47 -4
  92. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/adjust/__init__.py +4 -4
  93. ingestr-0.14.98/ingestr/src/allium/__init__.py +128 -0
  94. ingestr-0.14.98/ingestr/src/anthropic/__init__.py +277 -0
  95. ingestr-0.14.98/ingestr/src/anthropic/helpers.py +525 -0
  96. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/applovin_max/__init__.py +1 -0
  97. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/appstore/__init__.py +1 -0
  98. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/asana_source/__init__.py +1 -1
  99. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/attio/__init__.py +10 -7
  100. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/attio/helpers.py +19 -8
  101. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/blob.py +24 -0
  102. ingestr-0.14.98/ingestr/src/buildinfo.py +1 -0
  103. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/chess/__init__.py +1 -1
  104. ingestr-0.14.98/ingestr/src/clickup/__init__.py +85 -0
  105. ingestr-0.14.98/ingestr/src/clickup/helpers.py +47 -0
  106. ingestr-0.14.98/ingestr/src/couchbase_source/__init__.py +118 -0
  107. ingestr-0.14.98/ingestr/src/couchbase_source/helpers.py +135 -0
  108. ingestr-0.14.98/ingestr/src/cursor/__init__.py +83 -0
  109. ingestr-0.14.98/ingestr/src/cursor/helpers.py +188 -0
  110. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/destinations.py +381 -27
  111. ingestr-0.14.98/ingestr/src/docebo/__init__.py +589 -0
  112. ingestr-0.14.98/ingestr/src/docebo/client.py +435 -0
  113. ingestr-0.14.98/ingestr/src/docebo/helpers.py +97 -0
  114. ingestr-0.14.98/ingestr/src/elasticsearch/helpers.py +138 -0
  115. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/errors.py +8 -0
  116. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/facebook_ads/__init__.py +47 -28
  117. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/facebook_ads/helpers.py +59 -37
  118. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/facebook_ads/settings.py +2 -0
  119. ingestr-0.14.98/ingestr/src/facebook_ads/utils.py +39 -0
  120. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/factory.py +81 -0
  121. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/filesystem/__init__.py +8 -3
  122. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/filters.py +23 -0
  123. ingestr-0.14.98/ingestr/src/fluxx/__init__.py +9906 -0
  124. ingestr-0.14.98/ingestr/src/fluxx/helpers.py +209 -0
  125. ingestr-0.14.98/ingestr/src/frankfurter/__init__.py +157 -0
  126. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/frankfurter/helpers.py +3 -3
  127. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/freshdesk/__init__.py +25 -8
  128. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/freshdesk/freshdesk_client.py +40 -5
  129. ingestr-0.14.98/ingestr/src/fundraiseup/__init__.py +49 -0
  130. ingestr-0.14.98/ingestr/src/fundraiseup/client.py +81 -0
  131. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/github/__init__.py +41 -6
  132. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_analytics/__init__.py +1 -1
  133. ingestr-0.14.98/ingestr/src/hostaway/__init__.py +302 -0
  134. ingestr-0.14.98/ingestr/src/hostaway/client.py +288 -0
  135. ingestr-0.14.98/ingestr/src/http/__init__.py +35 -0
  136. ingestr-0.14.98/ingestr/src/http/readers.py +114 -0
  137. ingestr-0.14.98/ingestr/src/http_client.py +24 -0
  138. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/hubspot/__init__.py +6 -12
  139. ingestr-0.14.98/ingestr/src/influxdb/__init__.py +46 -0
  140. ingestr-0.14.98/ingestr/src/influxdb/client.py +34 -0
  141. ingestr-0.14.98/ingestr/src/intercom/__init__.py +142 -0
  142. ingestr-0.14.98/ingestr/src/intercom/helpers.py +674 -0
  143. ingestr-0.14.98/ingestr/src/intercom/settings.py +279 -0
  144. ingestr-0.14.98/ingestr/src/isoc_pulse/__init__.py +159 -0
  145. ingestr-0.14.98/ingestr/src/jira_source/__init__.py +340 -0
  146. ingestr-0.14.98/ingestr/src/jira_source/helpers.py +439 -0
  147. ingestr-0.14.98/ingestr/src/jira_source/settings.py +170 -0
  148. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/kafka/__init__.py +4 -1
  149. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/kinesis/__init__.py +3 -3
  150. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/kinesis/helpers.py +19 -2
  151. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/klaviyo/__init__.py +5 -5
  152. ingestr-0.14.98/ingestr/src/linear/__init__.py +634 -0
  153. ingestr-0.14.98/ingestr/src/linear/helpers.py +111 -0
  154. ingestr-0.14.98/ingestr/src/mailchimp/__init__.py +126 -0
  155. ingestr-0.14.98/ingestr/src/mailchimp/helpers.py +226 -0
  156. ingestr-0.14.98/ingestr/src/mailchimp/settings.py +164 -0
  157. ingestr-0.14.98/ingestr/src/masking.py +344 -0
  158. ingestr-0.14.98/ingestr/src/mixpanel/__init__.py +62 -0
  159. ingestr-0.14.98/ingestr/src/mixpanel/client.py +99 -0
  160. ingestr-0.14.98/ingestr/src/monday/__init__.py +246 -0
  161. ingestr-0.14.98/ingestr/src/monday/helpers.py +392 -0
  162. ingestr-0.14.98/ingestr/src/monday/settings.py +328 -0
  163. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/mongodb/__init__.py +5 -2
  164. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/mongodb/helpers.py +384 -10
  165. ingestr-0.14.98/ingestr/src/pinterest/__init__.py +82 -0
  166. ingestr-0.14.98/ingestr/src/plusvibeai/__init__.py +335 -0
  167. ingestr-0.14.98/ingestr/src/plusvibeai/helpers.py +544 -0
  168. ingestr-0.14.98/ingestr/src/plusvibeai/settings.py +252 -0
  169. ingestr-0.14.98/ingestr/src/quickbooks/__init__.py +117 -0
  170. ingestr-0.14.98/ingestr/src/revenuecat/__init__.py +83 -0
  171. ingestr-0.14.98/ingestr/src/revenuecat/helpers.py +237 -0
  172. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/salesforce/__init__.py +15 -8
  173. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/shopify/__init__.py +1 -17
  174. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/smartsheets/__init__.py +33 -5
  175. ingestr-0.14.98/ingestr/src/socrata_source/__init__.py +83 -0
  176. ingestr-0.14.98/ingestr/src/socrata_source/helpers.py +85 -0
  177. ingestr-0.14.98/ingestr/src/socrata_source/settings.py +8 -0
  178. ingestr-0.14.98/ingestr/src/solidgate/__init__.py +219 -0
  179. ingestr-0.14.98/ingestr/src/solidgate/helpers.py +154 -0
  180. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/sources.py +2049 -94
  181. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/stripe_analytics/__init__.py +47 -18
  182. ingestr-0.14.98/ingestr/src/stripe_analytics/helpers.py +353 -0
  183. ingestr-0.14.98/ingestr/src/stripe_analytics/settings.py +66 -0
  184. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/tiktok_ads/__init__.py +12 -6
  185. ingestr-0.14.98/ingestr/src/trustpilot/__init__.py +48 -0
  186. ingestr-0.14.98/ingestr/src/trustpilot/client.py +48 -0
  187. ingestr-0.14.98/ingestr/src/wise/__init__.py +68 -0
  188. ingestr-0.14.98/ingestr/src/wise/client.py +63 -0
  189. ingestr-0.14.98/ingestr/src/zoom/__init__.py +99 -0
  190. ingestr-0.14.98/ingestr/src/zoom/helpers.py +102 -0
  191. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/tests/unit/test_smartsheets.py +6 -9
  192. {ingestr-0.13.49 → ingestr-0.14.98}/package-lock.json +3 -3
  193. {ingestr-0.13.49 → ingestr-0.14.98}/pyproject.toml +21 -1
  194. {ingestr-0.13.49 → ingestr-0.14.98}/requirements.in +11 -7
  195. {ingestr-0.13.49 → ingestr-0.14.98}/requirements.txt +96 -53
  196. {ingestr-0.13.49 → ingestr-0.14.98}/requirements_arm64.txt +98 -48
  197. ingestr-0.14.98/resources/demo.gif +0 -0
  198. {ingestr-0.13.49 → ingestr-0.14.98}/styles/config/vocabularies/bruin/accept.txt +1 -0
  199. ingestr-0.13.49/.github/workflows/release.yml +0 -81
  200. ingestr-0.13.49/Dockerfile +0 -44
  201. ingestr-0.13.49/docs/supported-sources/appsflyer.md +0 -58
  202. ingestr-0.13.49/docs/supported-sources/attio.md +0 -42
  203. ingestr-0.13.49/docs/supported-sources/elasticsearch.md +0 -35
  204. ingestr-0.13.49/docs/supported-sources/facebook-ads.md +0 -51
  205. ingestr-0.13.49/docs/supported-sources/freshdesk.md +0 -47
  206. ingestr-0.13.49/docs/supported-sources/gcs.md +0 -66
  207. ingestr-0.13.49/docs/supported-sources/gorgias.md +0 -53
  208. ingestr-0.13.49/docs/supported-sources/hubspot.md +0 -64
  209. ingestr-0.13.49/docs/supported-sources/klaviyo.md +0 -50
  210. ingestr-0.13.49/docs/supported-sources/mongodb.md +0 -24
  211. ingestr-0.13.49/docs/supported-sources/personio.md +0 -51
  212. ingestr-0.13.49/docs/supported-sources/salesforce.md +0 -68
  213. ingestr-0.13.49/docs/supported-sources/shopify.md +0 -43
  214. ingestr-0.13.49/docs/supported-sources/stripe.md +0 -51
  215. ingestr-0.13.49/docs/supported-sources/zendesk.md +0 -84
  216. ingestr-0.13.49/ingestr/src/buildinfo.py +0 -1
  217. ingestr-0.13.49/ingestr/src/frankfurter/__init__.py +0 -163
  218. ingestr-0.13.49/ingestr/src/http_client.py +0 -18
  219. ingestr-0.13.49/ingestr/src/solidgate/__init__.py +0 -97
  220. ingestr-0.13.49/ingestr/src/solidgate/helpers.py +0 -74
  221. ingestr-0.13.49/ingestr/src/stripe_analytics/helpers.py +0 -68
  222. ingestr-0.13.49/ingestr/src/stripe_analytics/settings.py +0 -26
  223. {ingestr-0.13.49 → ingestr-0.14.98}/.dockerignore +0 -0
  224. {ingestr-0.13.49 → ingestr-0.14.98}/.githooks/pre-commit-hook.sh +0 -0
  225. {ingestr-0.13.49 → ingestr-0.14.98}/.github/workflows/deploy-docs.yml +0 -0
  226. {ingestr-0.13.49 → ingestr-0.14.98}/.github/workflows/secrets-scan.yml +0 -0
  227. {ingestr-0.13.49 → ingestr-0.14.98}/.gitleaksignore +0 -0
  228. {ingestr-0.13.49 → ingestr-0.14.98}/.python-version +0 -0
  229. {ingestr-0.13.49 → ingestr-0.14.98}/.vale.ini +0 -0
  230. {ingestr-0.13.49 → ingestr-0.14.98}/LICENSE.md +0 -0
  231. {ingestr-0.13.49 → ingestr-0.14.98}/docs/.vitepress/theme/custom.css +0 -0
  232. {ingestr-0.13.49 → ingestr-0.14.98}/docs/.vitepress/theme/index.js +0 -0
  233. {ingestr-0.13.49 → ingestr-0.14.98}/docs/commands/example-uris.md +0 -0
  234. {ingestr-0.13.49 → ingestr-0.14.98}/docs/getting-started/core-concepts.md +0 -0
  235. {ingestr-0.13.49 → ingestr-0.14.98}/docs/getting-started/incremental-loading.md +0 -0
  236. {ingestr-0.13.49 → ingestr-0.14.98}/docs/getting-started/quickstart.md +0 -0
  237. {ingestr-0.13.49 → ingestr-0.14.98}/docs/getting-started/telemetry.md +0 -0
  238. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/applovin_max.png +0 -0
  239. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/athena.png +0 -0
  240. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/clickhouse_img.png +0 -0
  241. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/freshdesk_ingestion.png +0 -0
  242. /ingestr-0.13.49/docs/media/spanner_ingestion.png → /ingestr-0.14.98/docs/media/gcp_spanner_ingestion.png +0 -0
  243. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/github.png +0 -0
  244. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/google_analytics_realtime_report.png +0 -0
  245. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/googleanalytics.png +0 -0
  246. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/ingestion_elasticsearch_img.png +0 -0
  247. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/kinesis.bigquery.png +0 -0
  248. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/linkedin_ads.png +0 -0
  249. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/personio.png +0 -0
  250. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/personio_duckdb.png +0 -0
  251. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/phantombuster.png +0 -0
  252. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/pipedrive.png +0 -0
  253. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/stripe_postgres.png +0 -0
  254. {ingestr-0.13.49 → ingestr-0.14.98}/docs/media/tiktok.png +0 -0
  255. {ingestr-0.13.49/resources → ingestr-0.14.98/docs/public}/demo.gif +0 -0
  256. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/athena.md +0 -0
  257. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/bigquery.md +0 -0
  258. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/clickhouse.md +0 -0
  259. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/csv.md +0 -0
  260. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/custom_queries.md +0 -0
  261. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/databricks.md +0 -0
  262. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/duckdb.md +0 -0
  263. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/dynamodb.md +0 -0
  264. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/google-ads.md +0 -0
  265. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/gsheets.md +0 -0
  266. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/kafka.md +0 -0
  267. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/notion.md +0 -0
  268. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/oracle.md +0 -0
  269. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/postgres.md +0 -0
  270. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/redshift.md +0 -0
  271. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/sap-hana.md +0 -0
  272. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/smartsheets.md +0 -0
  273. {ingestr-0.13.49 → ingestr-0.14.98}/docs/supported-sources/snowflake.md +0 -0
  274. {ingestr-0.13.49 → ingestr-0.14.98}/docs/tutorials/load-kinesis-bigquery.md +0 -0
  275. {ingestr-0.13.49 → ingestr-0.14.98}/docs/tutorials/load-personio-duckdb.md +0 -0
  276. {ingestr-0.13.49 → ingestr-0.14.98}/docs/tutorials/load-stripe-postgres.md +0 -0
  277. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/.gitignore +0 -0
  278. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/adjust/adjust_helpers.py +0 -0
  279. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/airtable/__init__.py +0 -0
  280. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/applovin/__init__.py +0 -0
  281. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/appsflyer/__init__.py +0 -0
  282. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/appsflyer/client.py +0 -0
  283. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/appstore/client.py +0 -0
  284. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/appstore/errors.py +0 -0
  285. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/appstore/models.py +0 -0
  286. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/appstore/resources.py +0 -0
  287. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/arrow/__init__.py +0 -0
  288. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/asana_source/helpers.py +0 -0
  289. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/asana_source/settings.py +0 -0
  290. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/chess/helpers.py +0 -0
  291. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/chess/settings.py +0 -0
  292. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/collector/spinner.py +0 -0
  293. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/dynamodb/__init__.py +0 -0
  294. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/elasticsearch/__init__.py +0 -0
  295. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/facebook_ads/exceptions.py +0 -0
  296. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/filesystem/helpers.py +0 -0
  297. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/filesystem/readers.py +0 -0
  298. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/freshdesk/settings.py +0 -0
  299. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/github/helpers.py +0 -0
  300. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/github/queries.py +0 -0
  301. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/github/settings.py +0 -0
  302. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_ads/__init__.py +0 -0
  303. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_ads/field.py +0 -0
  304. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_ads/metrics.py +0 -0
  305. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_ads/predicates.py +0 -0
  306. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_ads/reports.py +0 -0
  307. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_analytics/helpers.py +0 -0
  308. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_sheets/README.md +0 -0
  309. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_sheets/__init__.py +0 -0
  310. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
  311. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
  312. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
  313. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/gorgias/__init__.py +0 -0
  314. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/gorgias/helpers.py +0 -0
  315. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/hubspot/helpers.py +0 -0
  316. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/hubspot/settings.py +0 -0
  317. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/kafka/helpers.py +0 -0
  318. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/klaviyo/client.py +0 -0
  319. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/klaviyo/helpers.py +0 -0
  320. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/linkedin_ads/__init__.py +0 -0
  321. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
  322. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/linkedin_ads/helpers.py +0 -0
  323. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/loader.py +0 -0
  324. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/notion/__init__.py +0 -0
  325. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/notion/helpers/__init__.py +0 -0
  326. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/notion/helpers/client.py +0 -0
  327. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/notion/helpers/database.py +0 -0
  328. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/notion/settings.py +0 -0
  329. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/partition.py +0 -0
  330. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/personio/__init__.py +0 -0
  331. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/personio/helpers.py +0 -0
  332. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/phantombuster/__init__.py +0 -0
  333. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/phantombuster/client.py +0 -0
  334. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/pipedrive/__init__.py +0 -0
  335. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/pipedrive/helpers/__init__.py +0 -0
  336. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/pipedrive/helpers/custom_fields_munger.py +0 -0
  337. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/pipedrive/helpers/pages.py +0 -0
  338. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/pipedrive/settings.py +0 -0
  339. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/pipedrive/typing.py +0 -0
  340. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/resource.py +0 -0
  341. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/salesforce/helpers.py +0 -0
  342. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/shopify/exceptions.py +0 -0
  343. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/shopify/helpers.py +0 -0
  344. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/shopify/settings.py +0 -0
  345. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/slack/__init__.py +0 -0
  346. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/slack/helpers.py +0 -0
  347. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/slack/settings.py +0 -0
  348. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/sql_database/__init__.py +0 -0
  349. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/sql_database/callbacks.py +0 -0
  350. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/table_definition.py +0 -0
  351. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/telemetry/event.py +0 -0
  352. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/testdata/fakebqcredentials.json +0 -0
  353. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
  354. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/time.py +0 -0
  355. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/version.py +0 -0
  356. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/zendesk/__init__.py +0 -0
  357. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/zendesk/helpers/__init__.py +0 -0
  358. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
  359. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/zendesk/helpers/credentials.py +0 -0
  360. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
  361. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/src/zendesk/settings.py +0 -0
  362. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/testdata/.gitignore +0 -0
  363. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/testdata/create_replace.csv +0 -0
  364. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/testdata/delete_insert_expected.csv +0 -0
  365. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/testdata/delete_insert_part1.csv +0 -0
  366. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/testdata/delete_insert_part2.csv +0 -0
  367. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/testdata/merge_expected.csv +0 -0
  368. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/testdata/merge_part1.csv +0 -0
  369. {ingestr-0.13.49 → ingestr-0.14.98}/ingestr/testdata/merge_part2.csv +0 -0
  370. {ingestr-0.13.49 → ingestr-0.14.98}/package.json +0 -0
  371. {ingestr-0.13.49 → ingestr-0.14.98}/requirements-dev.txt +0 -0
  372. {ingestr-0.13.49 → ingestr-0.14.98}/resources/demo.tape +0 -0
  373. {ingestr-0.13.49 → ingestr-0.14.98}/resources/ingestr.svg +0 -0
  374. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/AMPM.yml +0 -0
  375. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Acronyms.yml +0 -0
  376. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Colons.yml +0 -0
  377. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Contractions.yml +0 -0
  378. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/DateFormat.yml +0 -0
  379. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Ellipses.yml +0 -0
  380. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/EmDash.yml +0 -0
  381. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Exclamation.yml +0 -0
  382. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/FirstPerson.yml +0 -0
  383. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Gender.yml +0 -0
  384. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/GenderBias.yml +0 -0
  385. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/HeadingPunctuation.yml +0 -0
  386. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Headings.yml +0 -0
  387. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Latin.yml +0 -0
  388. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/LyHyphens.yml +0 -0
  389. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/OptionalPlurals.yml +0 -0
  390. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Ordinal.yml +0 -0
  391. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/OxfordComma.yml +0 -0
  392. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Parens.yml +0 -0
  393. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Passive.yml +0 -0
  394. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Periods.yml +0 -0
  395. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Quotes.yml +0 -0
  396. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Ranges.yml +0 -0
  397. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Semicolons.yml +0 -0
  398. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Slang.yml +0 -0
  399. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Spacing.yml +0 -0
  400. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Spelling.yml +0 -0
  401. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Units.yml +0 -0
  402. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/We.yml +0 -0
  403. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/Will.yml +0 -0
  404. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/WordList.yml +0 -0
  405. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/meta.json +0 -0
  406. {ingestr-0.13.49 → ingestr-0.14.98}/styles/Google/vocab.txt +0 -0
  407. {ingestr-0.13.49 → ingestr-0.14.98}/styles/bruin/Ingestr.yml +0 -0
  408. {ingestr-0.13.49 → ingestr-0.14.98}/test.env.template +0 -0
@@ -0,0 +1,3 @@
1
+ [runtime]
2
+
3
+ dlthub_telemetry=false
@@ -0,0 +1,151 @@
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: "Release ingestr on 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
+ env:
21
+ TWINE_PASSWORD: ${{ secrets.PYPI_INGESTR_TOKEN }}
22
+ steps:
23
+ - name: checkout
24
+ uses: actions/checkout@v4
25
+ with:
26
+ fetch-depth: 0
27
+ - name: setup python
28
+ uses: actions/setup-python@v5
29
+ with:
30
+ python-version: '3.11'
31
+
32
+ # github actions invoke a fresh shell
33
+ # for each step. This causes us to lose our
34
+ # venv context. So we run all our build commands
35
+ # in a single step to simplify our pipeline.
36
+ - name: build and release
37
+ run: |
38
+ pip install uv
39
+ uv venv
40
+ source .venv/bin/activate
41
+ uv pip install -r requirements-dev.txt
42
+ make build
43
+ make upload-release
44
+
45
+ docker-build:
46
+ if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')
47
+ runs-on: ubuntu-24.04-arm
48
+ strategy:
49
+ fail-fast: false
50
+ matrix:
51
+ platform:
52
+ - linux/amd64
53
+ - linux/arm64
54
+
55
+ permissions:
56
+ contents: read
57
+ packages: write
58
+
59
+ steps:
60
+ - name: Prepare
61
+ run: |
62
+ platform=${{ matrix.platform }}
63
+ echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
64
+
65
+ - name: Checkout repository
66
+ uses: actions/checkout@v4
67
+
68
+ - name: Log in to the Container registry
69
+ uses: docker/login-action@v3
70
+ with:
71
+ registry: ${{ env.REGISTRY }}
72
+ username: ${{ github.actor }}
73
+ password: ${{ secrets.GITHUB_TOKEN }}
74
+
75
+ - name: Extract metadata (tags, labels) for Docker
76
+ id: meta
77
+ uses: docker/metadata-action@v5
78
+ with:
79
+ images: ${{ env.IMAGE }}
80
+
81
+ - name: Set up Docker Buildx
82
+ uses: docker/setup-buildx-action@v3
83
+
84
+ - name: Build and push Docker image
85
+ uses: docker/build-push-action@v5
86
+ id: build
87
+ with:
88
+ context: .
89
+ platforms: ${{ matrix.platform }}
90
+ tags: ${{ env.IMAGE }}
91
+ labels: ${{ steps.meta.outputs.labels }}
92
+ outputs: type=image,push-by-digest=true,name-canonical=true,push=true
93
+
94
+ - name: Export digest
95
+ run: |
96
+ mkdir -p ${{ runner.temp }}/digests
97
+ digest="${{ steps.build.outputs.digest }}"
98
+ # The following strips the 'sha256:' prefix from the digest using bash parameter expansion.
99
+ touch "${{ runner.temp }}/digests/${digest#sha256:}"
100
+
101
+ - name: Upload digest
102
+ uses: actions/upload-artifact@v4
103
+ with:
104
+ name: digests-${{ env.PLATFORM_PAIR }}
105
+ path: ${{ runner.temp }}/digests/*
106
+ if-no-files-found: error
107
+ retention-days: 1
108
+
109
+ docker-publish:
110
+ permissions:
111
+ contents: read
112
+ packages: write
113
+
114
+ runs-on: ubuntu-latest
115
+ needs:
116
+ - docker-build
117
+ - tests
118
+ steps:
119
+ - name: Download digests
120
+ uses: actions/download-artifact@v4
121
+ with:
122
+ path: ${{ runner.temp }}/digests
123
+ pattern: digests-*
124
+ merge-multiple: true
125
+
126
+ - name: Log in to the Container registry
127
+ uses: docker/login-action@v3
128
+ with:
129
+ registry: ${{ env.REGISTRY }}
130
+ username: ${{ github.actor }}
131
+ password: ${{ secrets.GITHUB_TOKEN }}
132
+
133
+ - name: Set up Docker Buildx
134
+ uses: docker/setup-buildx-action@v3
135
+
136
+ - name: Docker meta
137
+ id: meta
138
+ uses: docker/metadata-action@v5
139
+ with:
140
+ images: ${{ env.IMAGE }}
141
+ tags: |
142
+ type=ref,event=tag
143
+ type=semver,pattern={{raw}}
144
+
145
+ - name: Create manifest list and push
146
+ working-directory: ${{ runner.temp }}/digests
147
+ run: |
148
+ docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
149
+ $(printf '${{ env.IMAGE }}@sha256:%s ' *)
150
+
151
+
@@ -13,13 +13,35 @@ concurrency:
13
13
  cancel-in-progress: true
14
14
 
15
15
  jobs:
16
+ check-changes:
17
+ runs-on: ubuntu-latest
18
+ outputs:
19
+ code-changes: ${{ steps.filter.outputs.code-changes }}
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: dorny/paths-filter@v3
23
+ id: filter
24
+ with:
25
+ filters: |
26
+ code-changes:
27
+ - '**'
28
+ - '!**/*.md'
29
+ - '!docs/**'
30
+
16
31
  tests:
32
+ needs: check-changes
33
+ if: needs.check-changes.outputs.code-changes == 'true'
17
34
  strategy:
18
35
  matrix:
19
36
  # I tried running stuff on macOS but it was too slow and unreliable.
20
37
  # I also tried windows runners but couldn't get Docker to work there, so I gave up.
21
38
  os: [ubuntu-latest]
22
- python-version: ['3.10', '3.11', '3.12']
39
+ python-version: [
40
+ '3.10',
41
+ '3.11',
42
+ '3.12',
43
+ '3.13',
44
+ ]
23
45
  runs-on: ${{ matrix.os }}
24
46
  steps:
25
47
  - uses: actions/checkout@v4
@@ -53,6 +75,7 @@ jobs:
53
75
  uses: astral-sh/setup-uv@v3
54
76
  - name: Install pip dependencies
55
77
  run: make deps-ci
78
+
56
79
  - name: run tests (macOS)
57
80
  if: matrix.os == 'macos-13'
58
81
  run: make test-ci
@@ -3,6 +3,7 @@ __pycache__
3
3
  .env
4
4
  venv
5
5
  !.gitkeep
6
+ .idea
6
7
  .vscode/*
7
8
  .metals/*
8
9
  .coverage.*
@@ -22,4 +23,6 @@ node_modules
22
23
  *.sql
23
24
  ingest.sh
24
25
  test.env
25
- *.log
26
+ *.log
27
+ .claude
28
+ helper_scripts
@@ -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 ["ingestr"]
@@ -1,6 +1,6 @@
1
1
  SHELL := /bin/bash
2
2
  .ONESHELL:
3
- .PHONY: test lint format test-ci lint-ci build upload-release setup docker-shell
3
+ .PHONY: test lint format test-ci lint-ci build upload-release setup docker-shell write-build-info remove-build-info
4
4
 
5
5
  BUILDINFO=ingestr/src/buildinfo.py
6
6
 
@@ -31,11 +31,14 @@ test-specific: venv lock-deps
31
31
  . venv/bin/activate; set -a; source test.env; set +a; TESTCONTAINERS_RYUK_DISABLED=true pytest -n auto -rP -vv --tb=short --capture=no -k $(test)
32
32
 
33
33
  lint-ci:
34
- ruff format ingestr && ruff check ingestr --fix
35
- mypy --config-file pyproject.toml --explicit-package-bases ingestr
34
+ @ruff format --diff ingestr && ruff check ingestr && mypy --config-file pyproject.toml --explicit-package-bases ingestr
35
+
36
+ format:
37
+ @ruff format ingestr && ruff check ingestr --fix
38
+ @mypy --config-file pyproject.toml --explicit-package-bases ingestr
36
39
 
37
40
  lint: venv lock-deps
38
- . venv/bin/activate; $(MAKE) lint-ci
41
+ . venv/bin/activate; $(MAKE) format
39
42
 
40
43
  lint-docs:
41
44
  vale docs --glob='!**/.vitepress/**'
@@ -43,8 +46,14 @@ lint-docs:
43
46
  tl: test lint
44
47
 
45
48
  build: lock-deps
46
- cat > ${BUILDINFO} <<< "version = \"$$(git describe --tags --abbrev=0)\""
49
+ $(MAKE) write-build-info
47
50
  rm -rf dist && python3 -m build
51
+ $(MAKE) remove-build-info
52
+
53
+ write-build-info:
54
+ cat > ${BUILDINFO} <<< "version = \"$$(git describe --tags --abbrev=0)\""
55
+
56
+ remove-build-info:
48
57
  rm -f ${BUILDINFO}
49
58
 
50
59
  upload-release:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ingestr
3
- Version: 0.13.49
3
+ Version: 0.14.98
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
@@ -26,7 +26,7 @@ Requires-Dist: asn1crypto==1.5.1
26
26
  Requires-Dist: asynch==0.2.4
27
27
  Requires-Dist: attrs==25.1.0
28
28
  Requires-Dist: backoff==2.2.1
29
- Requires-Dist: beautifulsoup4==4.13.3
29
+ Requires-Dist: bcrypt==4.3.0
30
30
  Requires-Dist: boto3==1.37.1
31
31
  Requires-Dist: botocore==1.37.1
32
32
  Requires-Dist: cachetools==5.5.2
@@ -39,26 +39,33 @@ Requires-Dist: clickhouse-connect==0.8.14
39
39
  Requires-Dist: clickhouse-driver==0.2.9
40
40
  Requires-Dist: clickhouse-sqlalchemy==0.2.7
41
41
  Requires-Dist: confluent-kafka==2.8.0
42
+ Requires-Dist: couchbase==4.3.6
43
+ Requires-Dist: crate==2.0.0
42
44
  Requires-Dist: cryptography==44.0.2
43
45
  Requires-Dist: curlify==2.2.1
44
- Requires-Dist: databricks-sql-connector==2.9.3
46
+ Requires-Dist: databricks-sql-connector==4.0.5
45
47
  Requires-Dist: databricks-sqlalchemy==1.0.2
46
48
  Requires-Dist: dataclasses-json==0.6.7
47
49
  Requires-Dist: decorator==5.2.1
48
50
  Requires-Dist: deprecation==2.1.0
49
- Requires-Dist: dlt==1.10.0
51
+ Requires-Dist: dlt-cratedb==0.0.2
52
+ Requires-Dist: dlt==1.16.0
50
53
  Requires-Dist: dnspython==2.7.0
51
54
  Requires-Dist: duckdb-engine==0.17.0
52
55
  Requires-Dist: duckdb==1.2.1
56
+ Requires-Dist: ecdsa==0.19.1
53
57
  Requires-Dist: elastic-transport==8.17.1
54
58
  Requires-Dist: elasticsearch==8.10.1
59
+ Requires-Dist: enum-compat==0.0.3
55
60
  Requires-Dist: et-xmlfile==2.0.0
56
- Requires-Dist: facebook-business==20.0.0
61
+ Requires-Dist: facebook-business==23.0.0
57
62
  Requires-Dist: filelock==3.17.0
58
63
  Requires-Dist: flatten-json==0.1.14
59
64
  Requires-Dist: frozenlist==1.5.0
60
65
  Requires-Dist: fsspec==2025.3.2
66
+ Requires-Dist: future==1.0.0
61
67
  Requires-Dist: gcsfs==2025.3.2
68
+ Requires-Dist: geojson==3.2.0
62
69
  Requires-Dist: gitdb==4.0.12
63
70
  Requires-Dist: gitpython==3.1.44
64
71
  Requires-Dist: giturlparse==0.12.0
@@ -77,7 +84,7 @@ Requires-Dist: google-cloud-storage==3.1.0
77
84
  Requires-Dist: google-crc32c==1.6.0
78
85
  Requires-Dist: google-resumable-media==2.7.2
79
86
  Requires-Dist: googleapis-common-protos==1.69.0
80
- Requires-Dist: greenlet==3.2.2
87
+ Requires-Dist: greenlet==3.2.4
81
88
  Requires-Dist: grpc-google-iam-v1==0.14.2
82
89
  Requires-Dist: grpc-interceptor==0.15.4
83
90
  Requires-Dist: grpcio-status==1.62.3
@@ -86,17 +93,16 @@ Requires-Dist: hdbcli==2.23.27
86
93
  Requires-Dist: hexbytes==1.3.0
87
94
  Requires-Dist: httplib2==0.22.0
88
95
  Requires-Dist: humanize==4.12.1
89
- Requires-Dist: ibm-db-sa==0.4.1
90
- Requires-Dist: ibm-db==3.2.6
91
96
  Requires-Dist: idna==3.10
92
97
  Requires-Dist: inflection==0.5.1
98
+ Requires-Dist: influxdb-client==1.41.0
99
+ Requires-Dist: intuit-oauth==1.2.4
93
100
  Requires-Dist: isodate==0.7.2
94
101
  Requires-Dist: jmespath==1.0.1
95
102
  Requires-Dist: jsonpath-ng==1.7.0
96
103
  Requires-Dist: leb128==1.0.8
97
104
  Requires-Dist: lxml==5.3.1
98
105
  Requires-Dist: lz4==4.4.3
99
- Requires-Dist: makefun==1.15.6
100
106
  Requires-Dist: mako==1.3.9
101
107
  Requires-Dist: markdown-it-py==3.0.0
102
108
  Requires-Dist: markupsafe==3.0.2
@@ -110,9 +116,10 @@ Requires-Dist: mysql-connector-python==9.2.0
110
116
  Requires-Dist: numpy==2.2.3
111
117
  Requires-Dist: oauthlib==3.2.2
112
118
  Requires-Dist: openpyxl==3.1.5
113
- Requires-Dist: orjson==3.10.15
119
+ Requires-Dist: orjson==3.11.3
114
120
  Requires-Dist: packaging==24.2
115
121
  Requires-Dist: pandas==2.2.3
122
+ Requires-Dist: paramiko==3.5.1
116
123
  Requires-Dist: pathvalidate==3.2.3
117
124
  Requires-Dist: pendulum==3.0.0
118
125
  Requires-Dist: platformdirs==4.3.6
@@ -137,18 +144,22 @@ Requires-Dist: pygments==2.19.1
137
144
  Requires-Dist: pyjwt==2.10.1
138
145
  Requires-Dist: pymongo==4.11.1
139
146
  Requires-Dist: pymysql==1.1.1
147
+ Requires-Dist: pynacl==1.5.0
140
148
  Requires-Dist: pyopenssl==25.0.0
141
149
  Requires-Dist: pyparsing==3.2.1
142
150
  Requires-Dist: pyrate-limiter==3.7.0
143
151
  Requires-Dist: python-dateutil==2.9.0.post0
144
152
  Requires-Dist: python-dotenv==1.0.1
153
+ Requires-Dist: python-jose==3.5.0
154
+ Requires-Dist: python-quickbooks==0.9.2
145
155
  Requires-Dist: pytz==2025.1
146
156
  Requires-Dist: pyyaml==6.0.2
147
- Requires-Dist: redshift-connector==2.1.5
157
+ Requires-Dist: rauth==0.7.3
158
+ Requires-Dist: reactivex==4.0.4
148
159
  Requires-Dist: requests-file==2.1.0
149
160
  Requires-Dist: requests-oauthlib==1.3.1
150
161
  Requires-Dist: requests-toolbelt==1.0.0
151
- Requires-Dist: requests==2.32.3
162
+ Requires-Dist: requests==2.32.5
152
163
  Requires-Dist: requirements-parser==0.11.0
153
164
  Requires-Dist: rich-argparse==1.7.0
154
165
  Requires-Dist: rich==13.9.4
@@ -156,7 +167,6 @@ Requires-Dist: rsa==4.9
156
167
  Requires-Dist: rudder-sdk-python==2.1.4
157
168
  Requires-Dist: s3fs==2025.3.2
158
169
  Requires-Dist: s3transfer==0.11.3
159
- Requires-Dist: scramp==1.4.5
160
170
  Requires-Dist: semver==3.0.4
161
171
  Requires-Dist: setuptools==75.8.2
162
172
  Requires-Dist: shellingham==1.5.4
@@ -168,8 +178,8 @@ Requires-Dist: smmap==5.0.2
168
178
  Requires-Dist: snowflake-connector-python==3.14.0
169
179
  Requires-Dist: snowflake-sqlalchemy==1.6.1
170
180
  Requires-Dist: sortedcontainers==2.4.0
171
- Requires-Dist: soupsieve==2.6
172
181
  Requires-Dist: sqlalchemy-bigquery==1.12.1
182
+ Requires-Dist: sqlalchemy-cratedb==0.41.0
173
183
  Requires-Dist: sqlalchemy-hana==2.0.0
174
184
  Requires-Dist: sqlalchemy-redshift==0.8.14
175
185
  Requires-Dist: sqlalchemy-spanner==1.11.0
@@ -183,6 +193,7 @@ Requires-Dist: thrift==0.16.0
183
193
  Requires-Dist: time-machine==2.16.0
184
194
  Requires-Dist: tomlkit==0.13.2
185
195
  Requires-Dist: tqdm==4.67.1
196
+ Requires-Dist: trino==0.336.0
186
197
  Requires-Dist: typer==0.13.1
187
198
  Requires-Dist: types-requests==2.32.0.20240907
188
199
  Requires-Dist: types-setuptools==75.8.2.20250305
@@ -192,11 +203,15 @@ Requires-Dist: tzdata==2025.1
192
203
  Requires-Dist: tzlocal==5.3
193
204
  Requires-Dist: uritemplate==4.1.1
194
205
  Requires-Dist: urllib3==2.3.0
206
+ Requires-Dist: verlib2==0.2.0
195
207
  Requires-Dist: wrapt==1.17.2
196
208
  Requires-Dist: yarl==1.18.3
197
209
  Requires-Dist: zeep==4.3.1
198
210
  Requires-Dist: zstandard==0.23.0
199
211
  Requires-Dist: zstd==1.5.6.5
212
+ Provides-Extra: ibm-db
213
+ Requires-Dist: ibm-db-sa==0.4.1; extra == 'ibm-db'
214
+ Requires-Dist: ibm-db==3.2.6; extra == 'ibm-db'
200
215
  Provides-Extra: odbc
201
216
  Requires-Dist: pyodbc==5.1.0; extra == 'odbc'
202
217
  Provides-Extra: oracle
@@ -292,11 +307,21 @@ Pull requests are welcome. However, please open an issue first to discuss what y
292
307
  <td>✅</td>
293
308
  <td>✅</td>
294
309
  </tr>
310
+ <tr>
311
+ <td>CrateDB</td>
312
+ <td>✅</td>
313
+ <td>✅</td>
314
+ </tr>
295
315
  <tr>
296
316
  <td>Databricks</td>
297
317
  <td>✅</td>
298
318
  <td>✅</td>
299
319
  </tr>
320
+ <tr>
321
+ <td>IBM Db2</td>
322
+ <td>✅</td>
323
+ <td>-</td>
324
+ </tr>
300
325
  <tr>
301
326
  <td>DuckDB</td>
302
327
  <td>✅</td>
@@ -307,6 +332,16 @@ Pull requests are welcome. However, please open an issue first to discuss what y
307
332
  <td>✅</td>
308
333
  <td>-</td>
309
334
  </tr>
335
+ <tr>
336
+ <td>Elasticsearch</td>
337
+ <td>✅</td>
338
+ <td>✅</td>
339
+ </tr>
340
+ <tr>
341
+ <td>GCP Spanner</td>
342
+ <td>✅</td>
343
+ <td>-</td>
344
+ </tr>
310
345
  <tr>
311
346
  <td>Local CSV file</td>
312
347
  <td>✅</td>
@@ -320,7 +355,12 @@ Pull requests are welcome. However, please open an issue first to discuss what y
320
355
  <tr>
321
356
  <td>MongoDB</td>
322
357
  <td>✅</td>
323
- <td>❌</td>
358
+ <td>✅</td>
359
+ </tr>
360
+ <tr>
361
+ <td>MotherDuck</td>
362
+ <td>✅</td>
363
+ <td>✅</td>
324
364
  </tr>
325
365
  <tr>
326
366
  <td>MySQL</td>
@@ -357,6 +397,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
357
397
  <td>✅</td>
358
398
  <td>❌</td>
359
399
  </tr>
400
+ <tr>
401
+ <td>Trino</td>
402
+ <td>✅</td>
403
+ <td>✅</td>
404
+ </tr>
360
405
  <tr>
361
406
  <td colspan="3" style='text-align:center;'><strong>Platforms</strong></td>
362
407
  </tr>
@@ -393,6 +438,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
393
438
  <td>✅</td>
394
439
  <td>-</td>
395
440
  </tr>
441
+ <tr>
442
+ <td>Attio</td>
443
+ <td>✅</td>
444
+ <td>-</td>
445
+ </tr>
396
446
  <tr>
397
447
  <td>Chess.com</td>
398
448
  <td>✅</td>
@@ -404,7 +454,7 @@ Pull requests are welcome. However, please open an issue first to discuss what y
404
454
  <td>-</td>
405
455
  </tr>
406
456
  <tr>
407
- <td>Github</td>
457
+ <td>GitHub</td>
408
458
  <td>✅</td>
409
459
  <td>-</td>
410
460
  </tr>
@@ -447,6 +497,16 @@ Pull requests are welcome. However, please open an issue first to discuss what y
447
497
  <td>Personio</td>
448
498
  <td>✅</td>
449
499
  <td>-</td>
500
+ </tr>
501
+ <tr>
502
+ <td>Phantombuster</td>
503
+ <td>✅</td>
504
+ <td>-</td>
505
+ </tr>
506
+ <tr>
507
+ <td>Pipedrive</td>
508
+ <td>✅</td>
509
+ <td>-</td>
450
510
  </tr>
451
511
  <tr>
452
512
  <td>S3</td>
@@ -469,7 +529,12 @@ Pull requests are welcome. However, please open an issue first to discuss what y
469
529
  <td>-</td>
470
530
  </tr>
471
531
  <tr>
472
- <td>Smartsheet</td>
532
+ <td>Smartsheets</td>
533
+ <td>✅</td>
534
+ <td>-</td>
535
+ </tr>
536
+ <tr>
537
+ <td>Solidgate</td>
473
538
  <td>✅</td>
474
539
  <td>-</td>
475
540
  </tr>