ingestr 0.14.1__tar.gz → 0.14.2__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 (350) hide show
  1. ingestr-0.14.2/.github/workflows/release.yml +151 -0
  2. {ingestr-0.14.1 → ingestr-0.14.2}/PKG-INFO +1 -1
  3. ingestr-0.14.2/ingestr/src/buildinfo.py +1 -0
  4. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/factory.py +2 -0
  5. ingestr-0.14.2/ingestr/src/intercom/__init__.py +142 -0
  6. ingestr-0.14.2/ingestr/src/intercom/helpers.py +674 -0
  7. ingestr-0.14.2/ingestr/src/intercom/settings.py +277 -0
  8. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/sources.py +73 -0
  9. ingestr-0.14.1/.github/workflows/release.yml +0 -81
  10. ingestr-0.14.1/ingestr/src/buildinfo.py +0 -1
  11. {ingestr-0.14.1 → ingestr-0.14.2}/.dlt/config.toml +0 -0
  12. {ingestr-0.14.1 → ingestr-0.14.2}/.dockerignore +0 -0
  13. {ingestr-0.14.1 → ingestr-0.14.2}/.githooks/pre-commit-hook.sh +0 -0
  14. {ingestr-0.14.1 → ingestr-0.14.2}/.github/workflows/deploy-docs.yml +0 -0
  15. {ingestr-0.14.1 → ingestr-0.14.2}/.github/workflows/secrets-scan.yml +0 -0
  16. {ingestr-0.14.1 → ingestr-0.14.2}/.github/workflows/tests.yml +0 -0
  17. {ingestr-0.14.1 → ingestr-0.14.2}/.gitignore +0 -0
  18. {ingestr-0.14.1 → ingestr-0.14.2}/.gitleaksignore +0 -0
  19. {ingestr-0.14.1 → ingestr-0.14.2}/.python-version +0 -0
  20. {ingestr-0.14.1 → ingestr-0.14.2}/.vale.ini +0 -0
  21. {ingestr-0.14.1 → ingestr-0.14.2}/Dockerfile +0 -0
  22. {ingestr-0.14.1 → ingestr-0.14.2}/LICENSE.md +0 -0
  23. {ingestr-0.14.1 → ingestr-0.14.2}/Makefile +0 -0
  24. {ingestr-0.14.1 → ingestr-0.14.2}/README.md +0 -0
  25. {ingestr-0.14.1 → ingestr-0.14.2}/docs/.vitepress/config.mjs +0 -0
  26. {ingestr-0.14.1 → ingestr-0.14.2}/docs/.vitepress/theme/custom.css +0 -0
  27. {ingestr-0.14.1 → ingestr-0.14.2}/docs/.vitepress/theme/index.js +0 -0
  28. {ingestr-0.14.1 → ingestr-0.14.2}/docs/commands/example-uris.md +0 -0
  29. {ingestr-0.14.1 → ingestr-0.14.2}/docs/commands/ingest.md +0 -0
  30. {ingestr-0.14.1 → ingestr-0.14.2}/docs/getting-started/core-concepts.md +0 -0
  31. {ingestr-0.14.1 → ingestr-0.14.2}/docs/getting-started/data-masking.md +0 -0
  32. {ingestr-0.14.1 → ingestr-0.14.2}/docs/getting-started/incremental-loading.md +0 -0
  33. {ingestr-0.14.1 → ingestr-0.14.2}/docs/getting-started/quickstart.md +0 -0
  34. {ingestr-0.14.1 → ingestr-0.14.2}/docs/getting-started/telemetry.md +0 -0
  35. {ingestr-0.14.1 → ingestr-0.14.2}/docs/index.md +0 -0
  36. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/applovin_max.png +0 -0
  37. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/athena.png +0 -0
  38. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/clickhouse_img.png +0 -0
  39. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/clickup_ingestion.png +0 -0
  40. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/cratedb-destination.png +0 -0
  41. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/cratedb-source.png +0 -0
  42. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/freshdesk_ingestion.png +0 -0
  43. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/gcp_spanner_ingestion.png +0 -0
  44. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/github.png +0 -0
  45. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/google_analytics_realtime_report.png +0 -0
  46. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/googleanalytics.png +0 -0
  47. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/ingestion_elasticsearch_img.png +0 -0
  48. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/kinesis.bigquery.png +0 -0
  49. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/linear.png +0 -0
  50. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/linkedin_ads.png +0 -0
  51. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/mixpanel_ingestion.png +0 -0
  52. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/personio.png +0 -0
  53. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/personio_duckdb.png +0 -0
  54. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/phantombuster.png +0 -0
  55. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/pipedrive.png +0 -0
  56. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/quickbook_ingestion.png +0 -0
  57. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/sftp.png +0 -0
  58. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/stripe_postgres.png +0 -0
  59. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/tiktok.png +0 -0
  60. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/wise_ingestion.png +0 -0
  61. {ingestr-0.14.1 → ingestr-0.14.2}/docs/media/zoom_ingestion.png +0 -0
  62. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/adjust.md +0 -0
  63. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/airtable.md +0 -0
  64. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/anthropic.md +0 -0
  65. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/applovin.md +0 -0
  66. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/applovin_max.md +0 -0
  67. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/appsflyer.md +0 -0
  68. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/appstore.md +0 -0
  69. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/asana.md +0 -0
  70. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/athena.md +0 -0
  71. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/attio.md +0 -0
  72. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/bigquery.md +0 -0
  73. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/chess.md +0 -0
  74. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/clickhouse.md +0 -0
  75. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/clickup.md +0 -0
  76. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/cratedb.md +0 -0
  77. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/csv.md +0 -0
  78. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/custom_queries.md +0 -0
  79. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/databricks.md +0 -0
  80. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/db2.md +0 -0
  81. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/docebo.md +0 -0
  82. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/duckdb.md +0 -0
  83. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/dynamodb.md +0 -0
  84. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/elasticsearch.md +0 -0
  85. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/facebook-ads.md +0 -0
  86. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/fluxx.md +0 -0
  87. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/frankfurter.md +0 -0
  88. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/freshdesk.md +0 -0
  89. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/fundraiseup.md +0 -0
  90. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/gcs.md +0 -0
  91. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/github.md +0 -0
  92. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/google-ads.md +0 -0
  93. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/google_analytics.md +0 -0
  94. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/gorgias.md +0 -0
  95. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/gsheets.md +0 -0
  96. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/hubspot.md +0 -0
  97. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/influxdb.md +0 -0
  98. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/isoc-pulse.md +0 -0
  99. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/kafka.md +0 -0
  100. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/kinesis.md +0 -0
  101. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/klaviyo.md +0 -0
  102. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/linear.md +0 -0
  103. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/linkedin_ads.md +0 -0
  104. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/mixpanel.md +0 -0
  105. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/mongodb.md +0 -0
  106. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/motherduck.md +0 -0
  107. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/mssql.md +0 -0
  108. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/mysql.md +0 -0
  109. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/notion.md +0 -0
  110. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/oracle.md +0 -0
  111. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/personio.md +0 -0
  112. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/phantombuster.md +0 -0
  113. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/pinterest.md +0 -0
  114. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/pipedrive.md +0 -0
  115. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/postgres.md +0 -0
  116. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/quickbooks.md +0 -0
  117. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/redshift.md +0 -0
  118. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/revenuecat.md +0 -0
  119. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/s3.md +0 -0
  120. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/salesforce.md +0 -0
  121. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/sap-hana.md +0 -0
  122. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/sftp.md +0 -0
  123. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/shopify.md +0 -0
  124. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/slack.md +0 -0
  125. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/smartsheets.md +0 -0
  126. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/snowflake.md +0 -0
  127. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/solidgate.md +0 -0
  128. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/spanner.md +0 -0
  129. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/sqlite.md +0 -0
  130. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/stripe.md +0 -0
  131. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/tiktok-ads.md +0 -0
  132. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/trino.md +0 -0
  133. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/trustpilot.md +0 -0
  134. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/wise.md +0 -0
  135. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/zendesk.md +0 -0
  136. {ingestr-0.14.1 → ingestr-0.14.2}/docs/supported-sources/zoom.md +0 -0
  137. {ingestr-0.14.1 → ingestr-0.14.2}/docs/tutorials/load-kinesis-bigquery.md +0 -0
  138. {ingestr-0.14.1 → ingestr-0.14.2}/docs/tutorials/load-personio-duckdb.md +0 -0
  139. {ingestr-0.14.1 → ingestr-0.14.2}/docs/tutorials/load-stripe-postgres.md +0 -0
  140. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/conftest.py +0 -0
  141. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/main.py +0 -0
  142. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/.gitignore +0 -0
  143. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/adjust/__init__.py +0 -0
  144. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/adjust/adjust_helpers.py +0 -0
  145. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/airtable/__init__.py +0 -0
  146. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/anthropic/__init__.py +0 -0
  147. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/anthropic/helpers.py +0 -0
  148. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/applovin/__init__.py +0 -0
  149. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/applovin_max/__init__.py +0 -0
  150. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appsflyer/__init__.py +0 -0
  151. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appsflyer/client.py +0 -0
  152. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appstore/__init__.py +0 -0
  153. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appstore/client.py +0 -0
  154. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appstore/errors.py +0 -0
  155. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appstore/models.py +0 -0
  156. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/appstore/resources.py +0 -0
  157. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/arrow/__init__.py +0 -0
  158. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/asana_source/__init__.py +0 -0
  159. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/asana_source/helpers.py +0 -0
  160. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/asana_source/settings.py +0 -0
  161. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/attio/__init__.py +0 -0
  162. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/attio/helpers.py +0 -0
  163. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/blob.py +0 -0
  164. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/chess/__init__.py +0 -0
  165. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/chess/helpers.py +0 -0
  166. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/chess/settings.py +0 -0
  167. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/clickup/__init__.py +0 -0
  168. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/clickup/helpers.py +0 -0
  169. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/collector/spinner.py +0 -0
  170. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/destinations.py +0 -0
  171. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/docebo/__init__.py +0 -0
  172. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/docebo/client.py +0 -0
  173. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/docebo/helpers.py +0 -0
  174. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/dynamodb/__init__.py +0 -0
  175. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/elasticsearch/__init__.py +0 -0
  176. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/elasticsearch/helpers.py +0 -0
  177. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/errors.py +0 -0
  178. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/facebook_ads/__init__.py +0 -0
  179. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/facebook_ads/exceptions.py +0 -0
  180. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/facebook_ads/helpers.py +0 -0
  181. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/facebook_ads/settings.py +0 -0
  182. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/facebook_ads/utils.py +0 -0
  183. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/filesystem/__init__.py +0 -0
  184. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/filesystem/helpers.py +0 -0
  185. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/filesystem/readers.py +0 -0
  186. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/filters.py +0 -0
  187. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/fluxx/__init__.py +0 -0
  188. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/fluxx/helpers.py +0 -0
  189. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/frankfurter/__init__.py +0 -0
  190. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/frankfurter/helpers.py +0 -0
  191. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/freshdesk/__init__.py +0 -0
  192. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/freshdesk/freshdesk_client.py +0 -0
  193. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/freshdesk/settings.py +0 -0
  194. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/fundraiseup/__init__.py +0 -0
  195. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/fundraiseup/client.py +0 -0
  196. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/github/__init__.py +0 -0
  197. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/github/helpers.py +0 -0
  198. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/github/queries.py +0 -0
  199. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/github/settings.py +0 -0
  200. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_ads/__init__.py +0 -0
  201. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_ads/field.py +0 -0
  202. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_ads/metrics.py +0 -0
  203. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_ads/predicates.py +0 -0
  204. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_ads/reports.py +0 -0
  205. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_analytics/__init__.py +0 -0
  206. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_analytics/helpers.py +0 -0
  207. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_sheets/README.md +0 -0
  208. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_sheets/__init__.py +0 -0
  209. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
  210. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
  211. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
  212. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/gorgias/__init__.py +0 -0
  213. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/gorgias/helpers.py +0 -0
  214. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/http_client.py +0 -0
  215. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/hubspot/__init__.py +0 -0
  216. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/hubspot/helpers.py +0 -0
  217. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/hubspot/settings.py +0 -0
  218. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/influxdb/__init__.py +0 -0
  219. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/influxdb/client.py +0 -0
  220. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/isoc_pulse/__init__.py +0 -0
  221. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/kafka/__init__.py +0 -0
  222. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/kafka/helpers.py +0 -0
  223. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/kinesis/__init__.py +0 -0
  224. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/kinesis/helpers.py +0 -0
  225. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/klaviyo/__init__.py +0 -0
  226. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/klaviyo/client.py +0 -0
  227. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/klaviyo/helpers.py +0 -0
  228. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/linear/__init__.py +0 -0
  229. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/linear/helpers.py +0 -0
  230. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/linkedin_ads/__init__.py +0 -0
  231. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
  232. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/linkedin_ads/helpers.py +0 -0
  233. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/loader.py +0 -0
  234. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/masking.py +0 -0
  235. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/mixpanel/__init__.py +0 -0
  236. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/mixpanel/client.py +0 -0
  237. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/mongodb/__init__.py +0 -0
  238. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/mongodb/helpers.py +0 -0
  239. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/notion/__init__.py +0 -0
  240. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/notion/helpers/__init__.py +0 -0
  241. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/notion/helpers/client.py +0 -0
  242. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/notion/helpers/database.py +0 -0
  243. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/notion/settings.py +0 -0
  244. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/partition.py +0 -0
  245. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/personio/__init__.py +0 -0
  246. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/personio/helpers.py +0 -0
  247. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/phantombuster/__init__.py +0 -0
  248. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/phantombuster/client.py +0 -0
  249. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pinterest/__init__.py +0 -0
  250. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/__init__.py +0 -0
  251. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/helpers/__init__.py +0 -0
  252. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/helpers/custom_fields_munger.py +0 -0
  253. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/helpers/pages.py +0 -0
  254. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/settings.py +0 -0
  255. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/pipedrive/typing.py +0 -0
  256. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/quickbooks/__init__.py +0 -0
  257. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/resource.py +0 -0
  258. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/revenuecat/__init__.py +0 -0
  259. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/revenuecat/helpers.py +0 -0
  260. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/salesforce/__init__.py +0 -0
  261. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/salesforce/helpers.py +0 -0
  262. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/shopify/__init__.py +0 -0
  263. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/shopify/exceptions.py +0 -0
  264. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/shopify/helpers.py +0 -0
  265. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/shopify/settings.py +0 -0
  266. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/slack/__init__.py +0 -0
  267. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/slack/helpers.py +0 -0
  268. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/slack/settings.py +0 -0
  269. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/smartsheets/__init__.py +0 -0
  270. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/solidgate/__init__.py +0 -0
  271. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/solidgate/helpers.py +0 -0
  272. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/sql_database/__init__.py +0 -0
  273. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/sql_database/callbacks.py +0 -0
  274. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/stripe_analytics/__init__.py +0 -0
  275. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/stripe_analytics/helpers.py +0 -0
  276. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/stripe_analytics/settings.py +0 -0
  277. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/table_definition.py +0 -0
  278. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/telemetry/event.py +0 -0
  279. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/testdata/fakebqcredentials.json +0 -0
  280. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/tiktok_ads/__init__.py +0 -0
  281. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
  282. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/time.py +0 -0
  283. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/trustpilot/__init__.py +0 -0
  284. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/trustpilot/client.py +0 -0
  285. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/version.py +0 -0
  286. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/wise/__init__.py +0 -0
  287. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/wise/client.py +0 -0
  288. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/__init__.py +0 -0
  289. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/helpers/__init__.py +0 -0
  290. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
  291. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/helpers/credentials.py +0 -0
  292. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
  293. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zendesk/settings.py +0 -0
  294. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zoom/__init__.py +0 -0
  295. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/src/zoom/helpers.py +0 -0
  296. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/.gitignore +0 -0
  297. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/create_replace.csv +0 -0
  298. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/delete_insert_expected.csv +0 -0
  299. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/delete_insert_part1.csv +0 -0
  300. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/delete_insert_part2.csv +0 -0
  301. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/merge_expected.csv +0 -0
  302. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/merge_part1.csv +0 -0
  303. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/testdata/merge_part2.csv +0 -0
  304. {ingestr-0.14.1 → ingestr-0.14.2}/ingestr/tests/unit/test_smartsheets.py +0 -0
  305. {ingestr-0.14.1 → ingestr-0.14.2}/package-lock.json +0 -0
  306. {ingestr-0.14.1 → ingestr-0.14.2}/package.json +0 -0
  307. {ingestr-0.14.1 → ingestr-0.14.2}/pyproject.toml +0 -0
  308. {ingestr-0.14.1 → ingestr-0.14.2}/requirements-dev.txt +0 -0
  309. {ingestr-0.14.1 → ingestr-0.14.2}/requirements.in +0 -0
  310. {ingestr-0.14.1 → ingestr-0.14.2}/requirements.txt +0 -0
  311. {ingestr-0.14.1 → ingestr-0.14.2}/requirements_arm64.txt +0 -0
  312. {ingestr-0.14.1 → ingestr-0.14.2}/resources/demo.gif +0 -0
  313. {ingestr-0.14.1 → ingestr-0.14.2}/resources/demo.tape +0 -0
  314. {ingestr-0.14.1 → ingestr-0.14.2}/resources/ingestr.svg +0 -0
  315. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/AMPM.yml +0 -0
  316. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Acronyms.yml +0 -0
  317. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Colons.yml +0 -0
  318. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Contractions.yml +0 -0
  319. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/DateFormat.yml +0 -0
  320. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Ellipses.yml +0 -0
  321. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/EmDash.yml +0 -0
  322. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Exclamation.yml +0 -0
  323. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/FirstPerson.yml +0 -0
  324. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Gender.yml +0 -0
  325. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/GenderBias.yml +0 -0
  326. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/HeadingPunctuation.yml +0 -0
  327. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Headings.yml +0 -0
  328. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Latin.yml +0 -0
  329. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/LyHyphens.yml +0 -0
  330. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/OptionalPlurals.yml +0 -0
  331. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Ordinal.yml +0 -0
  332. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/OxfordComma.yml +0 -0
  333. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Parens.yml +0 -0
  334. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Passive.yml +0 -0
  335. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Periods.yml +0 -0
  336. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Quotes.yml +0 -0
  337. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Ranges.yml +0 -0
  338. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Semicolons.yml +0 -0
  339. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Slang.yml +0 -0
  340. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Spacing.yml +0 -0
  341. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Spelling.yml +0 -0
  342. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Units.yml +0 -0
  343. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/We.yml +0 -0
  344. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/Will.yml +0 -0
  345. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/WordList.yml +0 -0
  346. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/meta.json +0 -0
  347. {ingestr-0.14.1 → ingestr-0.14.2}/styles/Google/vocab.txt +0 -0
  348. {ingestr-0.14.1 → ingestr-0.14.2}/styles/bruin/Ingestr.yml +0 -0
  349. {ingestr-0.14.1 → ingestr-0.14.2}/styles/config/vocabularies/bruin/accept.txt +0 -0
  350. {ingestr-0.14.1 → ingestr-0.14.2}/test.env.template +0 -0
@@ -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
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ingestr
3
- Version: 0.14.1
3
+ Version: 0.14.2
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
@@ -0,0 +1 @@
1
+ version = "v0.14.2"
@@ -54,6 +54,7 @@ from ingestr.src.sources import (
54
54
  GorgiasSource,
55
55
  HubspotSource,
56
56
  InfluxDBSource,
57
+ IntercomSource,
57
58
  IsocPulseSource,
58
59
  KafkaSource,
59
60
  KinesisSource,
@@ -166,6 +167,7 @@ class SourceDestinationFactory:
166
167
  "fluxx": FluxxSource,
167
168
  "slack": SlackSource,
168
169
  "hubspot": HubspotSource,
170
+ "intercom": IntercomSource,
169
171
  "airtable": AirtableSource,
170
172
  "klaviyo": KlaviyoSource,
171
173
  "mixpanel": MixpanelSource,
@@ -0,0 +1,142 @@
1
+ """
2
+ Intercom source implementation for data ingestion.
3
+
4
+ This module provides DLT sources for retrieving data from Intercom API endpoints
5
+ including contacts, companies, conversations, tickets, and more.
6
+ """
7
+
8
+ from typing import Optional, Sequence
9
+
10
+ import dlt
11
+ from dlt.common.time import ensure_pendulum_datetime
12
+ from dlt.common.typing import TAnyDateTime
13
+ from dlt.sources import DltResource, DltSource
14
+
15
+ from .helpers import (
16
+ IntercomAPIClient,
17
+ IntercomCredentialsAccessToken,
18
+ TIntercomCredentials,
19
+ convert_datetime_to_timestamp,
20
+ create_resource_from_config,
21
+ transform_company,
22
+ transform_contact,
23
+ transform_conversation,
24
+ )
25
+ from .helpers import (
26
+ IntercomCredentialsOAuth as IntercomCredentialsOAuth,
27
+ )
28
+ from .settings import (
29
+ DEFAULT_START_DATE,
30
+ RESOURCE_CONFIGS,
31
+ )
32
+
33
+
34
+ @dlt.source(name="intercom", max_table_nesting=0)
35
+ def intercom_source(
36
+ credentials: TIntercomCredentials = dlt.secrets.value,
37
+ start_date: Optional[TAnyDateTime] = DEFAULT_START_DATE,
38
+ end_date: Optional[TAnyDateTime] = None,
39
+ ) -> Sequence[DltResource]:
40
+ """
41
+ A DLT source that retrieves data from Intercom API.
42
+
43
+ This source provides access to various Intercom resources including contacts,
44
+ companies, conversations, tickets, and more. It supports incremental loading
45
+ for resources that track updated timestamps.
46
+
47
+ Args:
48
+ credentials: Intercom API credentials (AccessToken or OAuth).
49
+ Defaults to dlt.secrets.value.
50
+ start_date: The start date for incremental loading.
51
+ Defaults to January 1, 2020.
52
+ end_date: Optional end date for incremental loading.
53
+ If not provided, loads all data from start_date to present.
54
+
55
+ Returns:
56
+ Sequence of DLT resources for different Intercom endpoints.
57
+
58
+ Example:
59
+ >>> source = intercom_source(
60
+ ... credentials=IntercomCredentialsAccessToken(
61
+ ... access_token="your_token",
62
+ ... region="us"
63
+ ... ),
64
+ ... start_date=datetime(2024, 1, 1)
65
+ ... )
66
+ """
67
+ # Initialize API client
68
+ api_client = IntercomAPIClient(credentials)
69
+
70
+ # Convert dates to pendulum and then to unix timestamps for Intercom API
71
+ start_date_obj = ensure_pendulum_datetime(start_date) if start_date else None
72
+ end_date_obj = ensure_pendulum_datetime(end_date) if end_date else None
73
+
74
+ # Convert to unix timestamps for API compatibility
75
+ # Use default start date if none provided
76
+ if not start_date_obj:
77
+ from .settings import DEFAULT_START_DATE
78
+
79
+ start_date_obj = ensure_pendulum_datetime(DEFAULT_START_DATE)
80
+
81
+ start_timestamp = convert_datetime_to_timestamp(start_date_obj)
82
+ end_timestamp = (
83
+ convert_datetime_to_timestamp(end_date_obj) if end_date_obj else None
84
+ )
85
+
86
+ # Transform function mapping
87
+ transform_functions = {
88
+ "transform_contact": transform_contact,
89
+ "transform_company": transform_company,
90
+ "transform_conversation": transform_conversation,
91
+ }
92
+
93
+ # Generate all resources from configuration
94
+ resources = []
95
+ for resource_name, config in RESOURCE_CONFIGS.items():
96
+ resource_func = create_resource_from_config(
97
+ resource_name,
98
+ config,
99
+ api_client,
100
+ start_timestamp,
101
+ end_timestamp,
102
+ transform_functions,
103
+ )
104
+
105
+ # Call the resource function to get the actual resource
106
+ resources.append(resource_func())
107
+
108
+ return resources
109
+
110
+
111
+ def intercom(
112
+ api_key: str,
113
+ region: str = "us",
114
+ start_date: Optional[TAnyDateTime] = DEFAULT_START_DATE,
115
+ end_date: Optional[TAnyDateTime] = None,
116
+ ) -> DltSource:
117
+ """
118
+ Convenience function to create Intercom source with access token.
119
+
120
+ Args:
121
+ api_key: Intercom API access token.
122
+ region: Data region (us, eu, or au). Defaults to "us".
123
+ start_date: Start date for incremental loading.
124
+ end_date: Optional end date for incremental loading.
125
+
126
+ Returns:
127
+ Sequence of DLT resources.
128
+
129
+ Example:
130
+ >>> source = intercom(
131
+ ... api_key="your_access_token",
132
+ ... region="us",
133
+ ... start_date=datetime(2024, 1, 1)
134
+ ... )
135
+ """
136
+ credentials = IntercomCredentialsAccessToken(access_token=api_key, region=region)
137
+
138
+ return intercom_source(
139
+ credentials=credentials,
140
+ start_date=start_date,
141
+ end_date=end_date,
142
+ )