ingestr 0.13.40__tar.gz → 0.13.42__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 (276) hide show
  1. {ingestr-0.13.40 → ingestr-0.13.42}/Makefile +1 -1
  2. {ingestr-0.13.40 → ingestr-0.13.42}/PKG-INFO +6 -1
  3. {ingestr-0.13.40 → ingestr-0.13.42}/docs/.vitepress/config.mjs +1 -0
  4. ingestr-0.13.42/docs/media/spanner_ingestion.png +0 -0
  5. ingestr-0.13.42/docs/supported-sources/spanner.md +41 -0
  6. ingestr-0.13.42/ingestr/src/buildinfo.py +1 -0
  7. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/factory.py +2 -0
  8. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/mongodb/__init__.py +66 -6
  9. ingestr-0.13.42/ingestr/src/mongodb/helpers.py +669 -0
  10. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/sources.py +46 -2
  11. {ingestr-0.13.40 → ingestr-0.13.42}/requirements.in +2 -0
  12. {ingestr-0.13.40 → ingestr-0.13.42}/requirements.txt +25 -1
  13. {ingestr-0.13.40 → ingestr-0.13.42}/requirements_arm64.txt +25 -1
  14. ingestr-0.13.40/ingestr/src/buildinfo.py +0 -1
  15. ingestr-0.13.40/ingestr/src/mongodb/helpers.py +0 -166
  16. {ingestr-0.13.40 → ingestr-0.13.42}/.dockerignore +0 -0
  17. {ingestr-0.13.40 → ingestr-0.13.42}/.githooks/pre-commit-hook.sh +0 -0
  18. {ingestr-0.13.40 → ingestr-0.13.42}/.github/workflows/deploy-docs.yml +0 -0
  19. {ingestr-0.13.40 → ingestr-0.13.42}/.github/workflows/release.yml +0 -0
  20. {ingestr-0.13.40 → ingestr-0.13.42}/.github/workflows/secrets-scan.yml +0 -0
  21. {ingestr-0.13.40 → ingestr-0.13.42}/.github/workflows/tests.yml +0 -0
  22. {ingestr-0.13.40 → ingestr-0.13.42}/.gitignore +0 -0
  23. {ingestr-0.13.40 → ingestr-0.13.42}/.gitleaksignore +0 -0
  24. {ingestr-0.13.40 → ingestr-0.13.42}/.python-version +0 -0
  25. {ingestr-0.13.40 → ingestr-0.13.42}/.vale.ini +0 -0
  26. {ingestr-0.13.40 → ingestr-0.13.42}/Dockerfile +0 -0
  27. {ingestr-0.13.40 → ingestr-0.13.42}/LICENSE.md +0 -0
  28. {ingestr-0.13.40 → ingestr-0.13.42}/README.md +0 -0
  29. {ingestr-0.13.40 → ingestr-0.13.42}/docs/.vitepress/theme/custom.css +0 -0
  30. {ingestr-0.13.40 → ingestr-0.13.42}/docs/.vitepress/theme/index.js +0 -0
  31. {ingestr-0.13.40 → ingestr-0.13.42}/docs/commands/example-uris.md +0 -0
  32. {ingestr-0.13.40 → ingestr-0.13.42}/docs/commands/ingest.md +0 -0
  33. {ingestr-0.13.40 → ingestr-0.13.42}/docs/getting-started/core-concepts.md +0 -0
  34. {ingestr-0.13.40 → ingestr-0.13.42}/docs/getting-started/incremental-loading.md +0 -0
  35. {ingestr-0.13.40 → ingestr-0.13.42}/docs/getting-started/quickstart.md +0 -0
  36. {ingestr-0.13.40 → ingestr-0.13.42}/docs/getting-started/telemetry.md +0 -0
  37. {ingestr-0.13.40 → ingestr-0.13.42}/docs/index.md +0 -0
  38. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/applovin_max.png +0 -0
  39. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/athena.png +0 -0
  40. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/clickhouse_img.png +0 -0
  41. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/freshdesk_ingestion.png +0 -0
  42. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/github.png +0 -0
  43. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/google_analytics_realtime_report.png +0 -0
  44. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/googleanalytics.png +0 -0
  45. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/ingestion_elasticsearch_img.png +0 -0
  46. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/kinesis.bigquery.png +0 -0
  47. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/linkedin_ads.png +0 -0
  48. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/personio.png +0 -0
  49. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/personio_duckdb.png +0 -0
  50. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/phantombuster.png +0 -0
  51. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/pipedrive.png +0 -0
  52. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/stripe_postgres.png +0 -0
  53. {ingestr-0.13.40 → ingestr-0.13.42}/docs/media/tiktok.png +0 -0
  54. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/adjust.md +0 -0
  55. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/airtable.md +0 -0
  56. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/applovin.md +0 -0
  57. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/applovin_max.md +0 -0
  58. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/appsflyer.md +0 -0
  59. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/appstore.md +0 -0
  60. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/asana.md +0 -0
  61. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/athena.md +0 -0
  62. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/bigquery.md +0 -0
  63. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/chess.md +0 -0
  64. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/clickhouse.md +0 -0
  65. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/csv.md +0 -0
  66. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/custom_queries.md +0 -0
  67. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/databricks.md +0 -0
  68. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/db2.md +0 -0
  69. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/duckdb.md +0 -0
  70. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/dynamodb.md +0 -0
  71. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/elasticsearch.md +0 -0
  72. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/facebook-ads.md +0 -0
  73. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/frankfurter.md +0 -0
  74. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/freshdesk.md +0 -0
  75. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/gcs.md +0 -0
  76. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/github.md +0 -0
  77. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/google-ads.md +0 -0
  78. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/google_analytics.md +0 -0
  79. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/gorgias.md +0 -0
  80. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/gsheets.md +0 -0
  81. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/hubspot.md +0 -0
  82. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/kafka.md +0 -0
  83. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/kinesis.md +0 -0
  84. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/klaviyo.md +0 -0
  85. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/linkedin_ads.md +0 -0
  86. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/mongodb.md +0 -0
  87. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/mssql.md +0 -0
  88. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/mysql.md +0 -0
  89. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/notion.md +0 -0
  90. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/oracle.md +0 -0
  91. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/personio.md +0 -0
  92. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/phantombuster.md +0 -0
  93. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/pipedrive.md +0 -0
  94. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/postgres.md +0 -0
  95. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/redshift.md +0 -0
  96. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/s3.md +0 -0
  97. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/salesforce.md +0 -0
  98. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/sap-hana.md +0 -0
  99. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/shopify.md +0 -0
  100. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/slack.md +0 -0
  101. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/snowflake.md +0 -0
  102. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/sqlite.md +0 -0
  103. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/stripe.md +0 -0
  104. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/tiktok-ads.md +0 -0
  105. {ingestr-0.13.40 → ingestr-0.13.42}/docs/supported-sources/zendesk.md +0 -0
  106. {ingestr-0.13.40 → ingestr-0.13.42}/docs/tutorials/load-kinesis-bigquery.md +0 -0
  107. {ingestr-0.13.40 → ingestr-0.13.42}/docs/tutorials/load-personio-duckdb.md +0 -0
  108. {ingestr-0.13.40 → ingestr-0.13.42}/docs/tutorials/load-stripe-postgres.md +0 -0
  109. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/conftest.py +0 -0
  110. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/main.py +0 -0
  111. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/.gitignore +0 -0
  112. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/adjust/__init__.py +0 -0
  113. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/adjust/adjust_helpers.py +0 -0
  114. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/airtable/__init__.py +0 -0
  115. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/applovin/__init__.py +0 -0
  116. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/applovin_max/__init__.py +0 -0
  117. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appsflyer/__init__.py +0 -0
  118. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appsflyer/client.py +0 -0
  119. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appstore/__init__.py +0 -0
  120. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appstore/client.py +0 -0
  121. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appstore/errors.py +0 -0
  122. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appstore/models.py +0 -0
  123. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/appstore/resources.py +0 -0
  124. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/arrow/__init__.py +0 -0
  125. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/asana_source/__init__.py +0 -0
  126. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/asana_source/helpers.py +0 -0
  127. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/asana_source/settings.py +0 -0
  128. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/blob.py +0 -0
  129. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/chess/__init__.py +0 -0
  130. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/chess/helpers.py +0 -0
  131. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/chess/settings.py +0 -0
  132. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/collector/spinner.py +0 -0
  133. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/destinations.py +0 -0
  134. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/dynamodb/__init__.py +0 -0
  135. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/elasticsearch/__init__.py +0 -0
  136. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/errors.py +0 -0
  137. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/facebook_ads/__init__.py +0 -0
  138. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/facebook_ads/exceptions.py +0 -0
  139. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/facebook_ads/helpers.py +0 -0
  140. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/facebook_ads/settings.py +0 -0
  141. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/filesystem/__init__.py +0 -0
  142. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/filesystem/helpers.py +0 -0
  143. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/filesystem/readers.py +0 -0
  144. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/filters.py +0 -0
  145. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/frankfurter/__init__.py +0 -0
  146. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/frankfurter/helpers.py +0 -0
  147. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/freshdesk/__init__.py +0 -0
  148. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/freshdesk/freshdesk_client.py +0 -0
  149. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/freshdesk/settings.py +0 -0
  150. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/github/__init__.py +0 -0
  151. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/github/helpers.py +0 -0
  152. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/github/queries.py +0 -0
  153. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/github/settings.py +0 -0
  154. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_ads/__init__.py +0 -0
  155. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_ads/field.py +0 -0
  156. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_ads/metrics.py +0 -0
  157. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_ads/predicates.py +0 -0
  158. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_ads/reports.py +0 -0
  159. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_analytics/__init__.py +0 -0
  160. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_analytics/helpers.py +0 -0
  161. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_sheets/README.md +0 -0
  162. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_sheets/__init__.py +0 -0
  163. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
  164. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
  165. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
  166. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/gorgias/__init__.py +0 -0
  167. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/gorgias/helpers.py +0 -0
  168. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/hubspot/__init__.py +0 -0
  169. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/hubspot/helpers.py +0 -0
  170. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/hubspot/settings.py +0 -0
  171. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/kafka/__init__.py +0 -0
  172. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/kafka/helpers.py +0 -0
  173. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/kinesis/__init__.py +0 -0
  174. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/kinesis/helpers.py +0 -0
  175. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/klaviyo/__init__.py +0 -0
  176. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/klaviyo/client.py +0 -0
  177. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/klaviyo/helpers.py +0 -0
  178. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/linkedin_ads/__init__.py +0 -0
  179. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
  180. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/linkedin_ads/helpers.py +0 -0
  181. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/loader.py +0 -0
  182. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/notion/__init__.py +0 -0
  183. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/notion/helpers/__init__.py +0 -0
  184. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/notion/helpers/client.py +0 -0
  185. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/notion/helpers/database.py +0 -0
  186. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/notion/settings.py +0 -0
  187. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/partition.py +0 -0
  188. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/personio/__init__.py +0 -0
  189. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/personio/helpers.py +0 -0
  190. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/phantombuster/__init__.py +0 -0
  191. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/phantombuster/client.py +0 -0
  192. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/__init__.py +0 -0
  193. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/helpers/__init__.py +0 -0
  194. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/helpers/custom_fields_munger.py +0 -0
  195. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/helpers/pages.py +0 -0
  196. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/settings.py +0 -0
  197. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/pipedrive/typing.py +0 -0
  198. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/resource.py +0 -0
  199. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/salesforce/__init__.py +0 -0
  200. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/salesforce/helpers.py +0 -0
  201. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/shopify/__init__.py +0 -0
  202. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/shopify/exceptions.py +0 -0
  203. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/shopify/helpers.py +0 -0
  204. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/shopify/settings.py +0 -0
  205. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/slack/__init__.py +0 -0
  206. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/slack/helpers.py +0 -0
  207. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/slack/settings.py +0 -0
  208. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/sql_database/__init__.py +0 -0
  209. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/sql_database/callbacks.py +0 -0
  210. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/stripe_analytics/__init__.py +0 -0
  211. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/stripe_analytics/helpers.py +0 -0
  212. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/stripe_analytics/settings.py +0 -0
  213. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/table_definition.py +0 -0
  214. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/telemetry/event.py +0 -0
  215. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/testdata/fakebqcredentials.json +0 -0
  216. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/tiktok_ads/__init__.py +0 -0
  217. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
  218. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/time.py +0 -0
  219. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/version.py +0 -0
  220. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/__init__.py +0 -0
  221. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/helpers/__init__.py +0 -0
  222. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
  223. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/helpers/credentials.py +0 -0
  224. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
  225. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/src/zendesk/settings.py +0 -0
  226. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/.gitignore +0 -0
  227. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/create_replace.csv +0 -0
  228. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/delete_insert_expected.csv +0 -0
  229. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/delete_insert_part1.csv +0 -0
  230. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/delete_insert_part2.csv +0 -0
  231. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/merge_expected.csv +0 -0
  232. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/merge_part1.csv +0 -0
  233. {ingestr-0.13.40 → ingestr-0.13.42}/ingestr/testdata/merge_part2.csv +0 -0
  234. {ingestr-0.13.40 → ingestr-0.13.42}/package-lock.json +0 -0
  235. {ingestr-0.13.40 → ingestr-0.13.42}/package.json +0 -0
  236. {ingestr-0.13.40 → ingestr-0.13.42}/pyproject.toml +0 -0
  237. {ingestr-0.13.40 → ingestr-0.13.42}/requirements-dev.txt +0 -0
  238. {ingestr-0.13.40 → ingestr-0.13.42}/resources/demo.gif +0 -0
  239. {ingestr-0.13.40 → ingestr-0.13.42}/resources/demo.tape +0 -0
  240. {ingestr-0.13.40 → ingestr-0.13.42}/resources/ingestr.svg +0 -0
  241. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/AMPM.yml +0 -0
  242. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Acronyms.yml +0 -0
  243. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Colons.yml +0 -0
  244. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Contractions.yml +0 -0
  245. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/DateFormat.yml +0 -0
  246. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Ellipses.yml +0 -0
  247. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/EmDash.yml +0 -0
  248. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Exclamation.yml +0 -0
  249. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/FirstPerson.yml +0 -0
  250. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Gender.yml +0 -0
  251. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/GenderBias.yml +0 -0
  252. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/HeadingPunctuation.yml +0 -0
  253. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Headings.yml +0 -0
  254. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Latin.yml +0 -0
  255. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/LyHyphens.yml +0 -0
  256. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/OptionalPlurals.yml +0 -0
  257. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Ordinal.yml +0 -0
  258. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/OxfordComma.yml +0 -0
  259. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Parens.yml +0 -0
  260. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Passive.yml +0 -0
  261. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Periods.yml +0 -0
  262. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Quotes.yml +0 -0
  263. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Ranges.yml +0 -0
  264. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Semicolons.yml +0 -0
  265. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Slang.yml +0 -0
  266. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Spacing.yml +0 -0
  267. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Spelling.yml +0 -0
  268. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Units.yml +0 -0
  269. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/We.yml +0 -0
  270. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/Will.yml +0 -0
  271. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/WordList.yml +0 -0
  272. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/meta.json +0 -0
  273. {ingestr-0.13.40 → ingestr-0.13.42}/styles/Google/vocab.txt +0 -0
  274. {ingestr-0.13.40 → ingestr-0.13.42}/styles/bruin/Ingestr.yml +0 -0
  275. {ingestr-0.13.40 → ingestr-0.13.42}/styles/config/vocabularies/bruin/accept.txt +0 -0
  276. {ingestr-0.13.40 → ingestr-0.13.42}/test.env.template +0 -0
@@ -8,7 +8,7 @@ venv: venv/touchfile
8
8
 
9
9
  venv/touchfile: requirements-dev.txt requirements.txt
10
10
  test -d venv || python3 -m venv venv
11
- . venv/bin/activate; pip install uv; $(MAKE) deps
11
+ . venv/bin/activate; pip install --disable-pip-version-check uv; $(MAKE) deps
12
12
  touch venv/touchfile
13
13
 
14
14
  lock-deps:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ingestr
3
- Version: 0.13.40
3
+ Version: 0.13.42
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
@@ -72,11 +72,14 @@ Requires-Dist: google-auth==2.38.0
72
72
  Requires-Dist: google-cloud-bigquery-storage==2.24.0
73
73
  Requires-Dist: google-cloud-bigquery==3.30.0
74
74
  Requires-Dist: google-cloud-core==2.4.2
75
+ Requires-Dist: google-cloud-spanner==3.54.0
75
76
  Requires-Dist: google-cloud-storage==3.1.0
76
77
  Requires-Dist: google-crc32c==1.6.0
77
78
  Requires-Dist: google-resumable-media==2.7.2
78
79
  Requires-Dist: googleapis-common-protos==1.69.0
79
80
  Requires-Dist: greenlet==3.2.2
81
+ Requires-Dist: grpc-google-iam-v1==0.14.2
82
+ Requires-Dist: grpc-interceptor==0.15.4
80
83
  Requires-Dist: grpcio-status==1.62.3
81
84
  Requires-Dist: grpcio==1.70.0
82
85
  Requires-Dist: hdbcli==2.23.27
@@ -168,9 +171,11 @@ Requires-Dist: soupsieve==2.6
168
171
  Requires-Dist: sqlalchemy-bigquery==1.12.1
169
172
  Requires-Dist: sqlalchemy-hana==2.0.0
170
173
  Requires-Dist: sqlalchemy-redshift==0.8.14
174
+ Requires-Dist: sqlalchemy-spanner==1.11.0
171
175
  Requires-Dist: sqlalchemy2-stubs==0.0.2a38
172
176
  Requires-Dist: sqlalchemy==1.4.52
173
177
  Requires-Dist: sqlglot==26.12.1
178
+ Requires-Dist: sqlparse==0.5.3
174
179
  Requires-Dist: stripe==10.7.0
175
180
  Requires-Dist: tenacity==9.0.0
176
181
  Requires-Dist: thrift==0.16.0
@@ -138,6 +138,7 @@ export default defineConfig({
138
138
  { text: "Salesforce", link: "/supported-sources/salesforce.md" },
139
139
  { text: "Shopify", link: "/supported-sources/shopify.md" },
140
140
  { text: "Slack", link: "/supported-sources/slack.md" },
141
+ { text: "Spanner", link: "/supported-sources/spanner.md" },
141
142
  { text: "Stripe", link: "/supported-sources/stripe.md" },
142
143
  { text: "TikTok Ads", link: "/supported-sources/tiktok-ads.md" },
143
144
  { text: "Zendesk", link: "/supported-sources/zendesk.md" },
@@ -0,0 +1,41 @@
1
+ # Spanner
2
+ [Spanner](https://cloud.google.com/spanner) is a fully managed, scalable, and strongly consistent database service.
3
+
4
+ ingestr supports Spanner as a source.
5
+
6
+ ## URI format
7
+ The URI format for Spanner is as follows:
8
+
9
+
10
+ ```plaintext
11
+ spanner://?project_id=<project_id>&instance_id=<instance_id>&database=<database>&credentials_path=</path/to/service/account.json>
12
+ ```
13
+ or
14
+ ```plaintext
15
+ spanner://?project_id=<project_id>&instance_id=<instance_id>&database=<database>&credentials_base64=<base64_encoded_credentials>
16
+ ```
17
+
18
+ URI parameters:
19
+ - `project_id`: Your Google Cloud project ID (e.g., "my-project-123")
20
+ - `instance_id`: The Spanner instance ID (e.g., "my-instance")
21
+ - `database`: The database name (e.g., "my-database")
22
+ - `credentials_path`: Path to your Google Cloud service account JSON file
23
+ - `credentials_base64`: Base64-encoded service account credentials (alternative to credentials_path)
24
+
25
+ Let's say we have the above credentials. Here's a sample command that will copy the data from Spanner (GoogleSQL) to DuckDB.
26
+
27
+ ```sh
28
+ ingestr ingest \
29
+ --source-uri 'spanner://?project_id=id_123&instance_id=instance_123&database=db_123&credentials_path=./service_account.json' \
30
+ --source-table 'users' \
31
+ --dest-uri duckdb:///spanner.duckdb \
32
+ --dest-table 'dest.output'
33
+
34
+ ```
35
+
36
+ <img alt="pipedrive_img" src="../media/spanner_ingestion.png"/>
37
+
38
+ > [!NOTE]
39
+ > Currently, only GoogleSQL databases are supported.
40
+
41
+
@@ -0,0 +1 @@
1
+ version = "v0.13.42"
@@ -79,6 +79,7 @@ SQL_SOURCE_SCHEMES = [
79
79
  "clickhouse",
80
80
  "databricks",
81
81
  "db2",
82
+ "spanner",
82
83
  ]
83
84
 
84
85
 
@@ -119,6 +120,7 @@ class SourceDestinationFactory:
119
120
  sources: Dict[str, Type[SourceProtocol]] = {
120
121
  "csv": LocalCsvSource,
121
122
  "mongodb": MongoDbSource,
123
+ "mongodb+srv": MongoDbSource,
122
124
  "notion": NotionSource,
123
125
  "gsheets": GoogleSheetsSource,
124
126
  "shopify": ShopifySource,
@@ -1,8 +1,9 @@
1
1
  """Source that loads collections form any a mongo database, supports incremental loads."""
2
2
 
3
- from typing import Any, Iterable, List, Optional
3
+ from typing import Any, Dict, Iterable, List, Mapping, Optional, Union
4
4
 
5
5
  import dlt
6
+ from dlt.common.data_writers import TDataItemFormat
6
7
  from dlt.sources import DltResource
7
8
 
8
9
  from .helpers import (
@@ -21,6 +22,10 @@ def mongodb(
21
22
  incremental: Optional[dlt.sources.incremental] = None, # type: ignore[type-arg]
22
23
  write_disposition: Optional[str] = dlt.config.value,
23
24
  parallel: Optional[bool] = dlt.config.value,
25
+ limit: Optional[int] = None,
26
+ filter_: Optional[Dict[str, Any]] = None,
27
+ projection: Optional[Union[Mapping[str, Any], Iterable[str]]] = None,
28
+ pymongoarrow_schema: Optional[Any] = None,
24
29
  ) -> Iterable[DltResource]:
25
30
  """
26
31
  A DLT source which loads data from a mongo database using PyMongo.
@@ -34,6 +39,18 @@ def mongodb(
34
39
  E.g., `incremental=dlt.sources.incremental('updated_at', pendulum.parse('2022-01-01T00:00:00Z'))`
35
40
  write_disposition (str): Write disposition of the resource.
36
41
  parallel (Optional[bool]): Option to enable parallel loading for the collection. Default is False.
42
+ limit (Optional[int]):
43
+ The maximum number of documents to load. The limit is
44
+ applied to each requested collection separately.
45
+ filter_ (Optional[Dict[str, Any]]): The filter to apply to the collection.
46
+ projection: (Optional[Union[Mapping[str, Any], Iterable[str]]]): The projection to select fields of a collection
47
+ when loading the collection. Supported inputs:
48
+ include (list) - ["year", "title"]
49
+ include (dict) - {"year": True, "title": True}
50
+ exclude (dict) - {"released": False, "runtime": False}
51
+ Note: Can't mix include and exclude statements '{"title": True, "released": False}`
52
+ pymongoarrow_schema (pymongoarrow.schema.Schema): Mapping of expected field types of a collection to convert BSON to Arrow
53
+
37
54
  Returns:
38
55
  Iterable[DltResource]: A list of DLT resources for each collection to be loaded.
39
56
  """
@@ -58,19 +75,36 @@ def mongodb(
58
75
  primary_key="_id",
59
76
  write_disposition=write_disposition,
60
77
  spec=MongoDbCollectionConfiguration,
61
- )(client, collection, incremental=incremental, parallel=parallel)
78
+ )(
79
+ client,
80
+ collection,
81
+ incremental=incremental,
82
+ parallel=parallel,
83
+ limit=limit,
84
+ filter_=filter_ or {},
85
+ projection=projection,
86
+ pymongoarrow_schema=pymongoarrow_schema,
87
+ )
62
88
 
63
89
 
64
- @dlt.common.configuration.with_config(
65
- sections=("sources", "mongodb"), spec=MongoDbCollectionResourceConfiguration
90
+ @dlt.resource(
91
+ name=lambda args: args["collection"],
92
+ standalone=True,
93
+ spec=MongoDbCollectionResourceConfiguration,
66
94
  )
67
95
  def mongodb_collection(
68
- connection_url: str = dlt.config.value,
96
+ connection_url: str = dlt.secrets.value,
69
97
  database: Optional[str] = dlt.config.value,
70
98
  collection: str = dlt.config.value,
71
99
  incremental: Optional[dlt.sources.incremental] = None, # type: ignore[type-arg]
72
100
  write_disposition: Optional[str] = dlt.config.value,
73
101
  parallel: Optional[bool] = False,
102
+ limit: Optional[int] = None,
103
+ chunk_size: Optional[int] = 10000,
104
+ data_item_format: Optional[TDataItemFormat] = "object",
105
+ filter_: Optional[Dict[str, Any]] = None,
106
+ projection: Optional[Union[Mapping[str, Any], Iterable[str]]] = dlt.config.value,
107
+ pymongoarrow_schema: Optional[Any] = None,
74
108
  ) -> Any:
75
109
  """
76
110
  A DLT source which loads a collection from a mongo database using PyMongo.
@@ -83,6 +117,21 @@ def mongodb_collection(
83
117
  E.g., `incremental=dlt.sources.incremental('updated_at', pendulum.parse('2022-01-01T00:00:00Z'))`
84
118
  write_disposition (str): Write disposition of the resource.
85
119
  parallel (Optional[bool]): Option to enable parallel loading for the collection. Default is False.
120
+ limit (Optional[int]): The number of documents load.
121
+ chunk_size (Optional[int]): The number of documents load in each batch.
122
+ data_item_format (Optional[TDataItemFormat]): The data format to use for loading.
123
+ Supported formats:
124
+ object - Python objects (dicts, lists).
125
+ arrow - Apache Arrow tables.
126
+ filter_ (Optional[Dict[str, Any]]): The filter to apply to the collection.
127
+ projection: (Optional[Union[Mapping[str, Any], Iterable[str]]]): The projection to select fields
128
+ when loading the collection. Supported inputs:
129
+ include (list) - ["year", "title"]
130
+ include (dict) - {"year": True, "title": True}
131
+ exclude (dict) - {"released": False, "runtime": False}
132
+ Note: Can't mix include and exclude statements '{"title": True, "released": False}`
133
+ pymongoarrow_schema (pymongoarrow.schema.Schema): Mapping of expected field types to convert BSON to Arrow
134
+
86
135
  Returns:
87
136
  Iterable[DltResource]: A list of DLT resources for each collection to be loaded.
88
137
  """
@@ -100,4 +149,15 @@ def mongodb_collection(
100
149
  name=collection_obj.name,
101
150
  primary_key="_id",
102
151
  write_disposition=write_disposition,
103
- )(client, collection_obj, incremental=incremental, parallel=parallel)
152
+ )(
153
+ client,
154
+ collection_obj,
155
+ incremental=incremental,
156
+ parallel=parallel,
157
+ limit=limit,
158
+ chunk_size=chunk_size,
159
+ data_item_format=data_item_format,
160
+ filter_=filter_ or {},
161
+ projection=projection,
162
+ pymongoarrow_schema=pymongoarrow_schema,
163
+ )