ingestr 0.13.91__tar.gz → 0.13.92__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 (334) hide show
  1. {ingestr-0.13.91 → ingestr-0.13.92}/PKG-INFO +1 -1
  2. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/salesforce.md +3 -3
  3. ingestr-0.13.92/ingestr/src/buildinfo.py +1 -0
  4. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/mongodb/helpers.py +124 -0
  5. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/smartsheets/__init__.py +32 -4
  6. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/sources.py +12 -7
  7. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/tests/unit/test_smartsheets.py +1 -4
  8. ingestr-0.13.91/ingestr/src/buildinfo.py +0 -1
  9. {ingestr-0.13.91 → ingestr-0.13.92}/.dlt/config.toml +0 -0
  10. {ingestr-0.13.91 → ingestr-0.13.92}/.dockerignore +0 -0
  11. {ingestr-0.13.91 → ingestr-0.13.92}/.githooks/pre-commit-hook.sh +0 -0
  12. {ingestr-0.13.91 → ingestr-0.13.92}/.github/workflows/deploy-docs.yml +0 -0
  13. {ingestr-0.13.91 → ingestr-0.13.92}/.github/workflows/release.yml +0 -0
  14. {ingestr-0.13.91 → ingestr-0.13.92}/.github/workflows/secrets-scan.yml +0 -0
  15. {ingestr-0.13.91 → ingestr-0.13.92}/.github/workflows/tests.yml +0 -0
  16. {ingestr-0.13.91 → ingestr-0.13.92}/.gitignore +0 -0
  17. {ingestr-0.13.91 → ingestr-0.13.92}/.gitleaksignore +0 -0
  18. {ingestr-0.13.91 → ingestr-0.13.92}/.python-version +0 -0
  19. {ingestr-0.13.91 → ingestr-0.13.92}/.vale.ini +0 -0
  20. {ingestr-0.13.91 → ingestr-0.13.92}/Dockerfile +0 -0
  21. {ingestr-0.13.91 → ingestr-0.13.92}/LICENSE.md +0 -0
  22. {ingestr-0.13.91 → ingestr-0.13.92}/Makefile +0 -0
  23. {ingestr-0.13.91 → ingestr-0.13.92}/README.md +0 -0
  24. {ingestr-0.13.91 → ingestr-0.13.92}/docs/.vitepress/config.mjs +0 -0
  25. {ingestr-0.13.91 → ingestr-0.13.92}/docs/.vitepress/theme/custom.css +0 -0
  26. {ingestr-0.13.91 → ingestr-0.13.92}/docs/.vitepress/theme/index.js +0 -0
  27. {ingestr-0.13.91 → ingestr-0.13.92}/docs/commands/example-uris.md +0 -0
  28. {ingestr-0.13.91 → ingestr-0.13.92}/docs/commands/ingest.md +0 -0
  29. {ingestr-0.13.91 → ingestr-0.13.92}/docs/getting-started/core-concepts.md +0 -0
  30. {ingestr-0.13.91 → ingestr-0.13.92}/docs/getting-started/data-masking.md +0 -0
  31. {ingestr-0.13.91 → ingestr-0.13.92}/docs/getting-started/incremental-loading.md +0 -0
  32. {ingestr-0.13.91 → ingestr-0.13.92}/docs/getting-started/quickstart.md +0 -0
  33. {ingestr-0.13.91 → ingestr-0.13.92}/docs/getting-started/telemetry.md +0 -0
  34. {ingestr-0.13.91 → ingestr-0.13.92}/docs/index.md +0 -0
  35. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/applovin_max.png +0 -0
  36. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/athena.png +0 -0
  37. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/clickhouse_img.png +0 -0
  38. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/clickup_ingestion.png +0 -0
  39. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/cratedb-destination.png +0 -0
  40. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/cratedb-source.png +0 -0
  41. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/freshdesk_ingestion.png +0 -0
  42. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/gcp_spanner_ingestion.png +0 -0
  43. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/github.png +0 -0
  44. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/google_analytics_realtime_report.png +0 -0
  45. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/googleanalytics.png +0 -0
  46. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/ingestion_elasticsearch_img.png +0 -0
  47. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/kinesis.bigquery.png +0 -0
  48. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/linear.png +0 -0
  49. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/linkedin_ads.png +0 -0
  50. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/mixpanel_ingestion.png +0 -0
  51. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/personio.png +0 -0
  52. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/personio_duckdb.png +0 -0
  53. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/phantombuster.png +0 -0
  54. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/pipedrive.png +0 -0
  55. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/quickbook_ingestion.png +0 -0
  56. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/sftp.png +0 -0
  57. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/stripe_postgres.png +0 -0
  58. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/tiktok.png +0 -0
  59. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/wise_ingestion.png +0 -0
  60. {ingestr-0.13.91 → ingestr-0.13.92}/docs/media/zoom_ingestion.png +0 -0
  61. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/adjust.md +0 -0
  62. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/airtable.md +0 -0
  63. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/applovin.md +0 -0
  64. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/applovin_max.md +0 -0
  65. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/appsflyer.md +0 -0
  66. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/appstore.md +0 -0
  67. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/asana.md +0 -0
  68. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/athena.md +0 -0
  69. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/attio.md +0 -0
  70. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/bigquery.md +0 -0
  71. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/chess.md +0 -0
  72. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/clickhouse.md +0 -0
  73. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/clickup.md +0 -0
  74. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/cratedb.md +0 -0
  75. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/csv.md +0 -0
  76. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/custom_queries.md +0 -0
  77. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/databricks.md +0 -0
  78. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/db2.md +0 -0
  79. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/duckdb.md +0 -0
  80. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/dynamodb.md +0 -0
  81. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/elasticsearch.md +0 -0
  82. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/facebook-ads.md +0 -0
  83. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/fluxx.md +0 -0
  84. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/frankfurter.md +0 -0
  85. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/freshdesk.md +0 -0
  86. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/gcs.md +0 -0
  87. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/github.md +0 -0
  88. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/google-ads.md +0 -0
  89. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/google_analytics.md +0 -0
  90. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/gorgias.md +0 -0
  91. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/gsheets.md +0 -0
  92. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/hubspot.md +0 -0
  93. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/influxdb.md +0 -0
  94. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/isoc-pulse.md +0 -0
  95. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/kafka.md +0 -0
  96. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/kinesis.md +0 -0
  97. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/klaviyo.md +0 -0
  98. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/linear.md +0 -0
  99. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/linkedin_ads.md +0 -0
  100. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/mixpanel.md +0 -0
  101. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/mongodb.md +0 -0
  102. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/motherduck.md +0 -0
  103. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/mssql.md +0 -0
  104. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/mysql.md +0 -0
  105. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/notion.md +0 -0
  106. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/oracle.md +0 -0
  107. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/personio.md +0 -0
  108. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/phantombuster.md +0 -0
  109. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/pinterest.md +0 -0
  110. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/pipedrive.md +0 -0
  111. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/postgres.md +0 -0
  112. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/quickbooks.md +0 -0
  113. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/redshift.md +0 -0
  114. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/revenuecat.md +0 -0
  115. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/s3.md +0 -0
  116. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/sap-hana.md +0 -0
  117. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/sftp.md +0 -0
  118. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/shopify.md +0 -0
  119. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/slack.md +0 -0
  120. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/smartsheets.md +0 -0
  121. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/snowflake.md +0 -0
  122. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/solidgate.md +0 -0
  123. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/spanner.md +0 -0
  124. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/sqlite.md +0 -0
  125. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/stripe.md +0 -0
  126. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/tiktok-ads.md +0 -0
  127. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/trustpilot.md +0 -0
  128. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/wise.md +0 -0
  129. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/zendesk.md +0 -0
  130. {ingestr-0.13.91 → ingestr-0.13.92}/docs/supported-sources/zoom.md +0 -0
  131. {ingestr-0.13.91 → ingestr-0.13.92}/docs/tutorials/load-kinesis-bigquery.md +0 -0
  132. {ingestr-0.13.91 → ingestr-0.13.92}/docs/tutorials/load-personio-duckdb.md +0 -0
  133. {ingestr-0.13.91 → ingestr-0.13.92}/docs/tutorials/load-stripe-postgres.md +0 -0
  134. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/conftest.py +0 -0
  135. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/main.py +0 -0
  136. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/.gitignore +0 -0
  137. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/adjust/__init__.py +0 -0
  138. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/adjust/adjust_helpers.py +0 -0
  139. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/airtable/__init__.py +0 -0
  140. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/applovin/__init__.py +0 -0
  141. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/applovin_max/__init__.py +0 -0
  142. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/appsflyer/__init__.py +0 -0
  143. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/appsflyer/client.py +0 -0
  144. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/appstore/__init__.py +0 -0
  145. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/appstore/client.py +0 -0
  146. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/appstore/errors.py +0 -0
  147. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/appstore/models.py +0 -0
  148. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/appstore/resources.py +0 -0
  149. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/arrow/__init__.py +0 -0
  150. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/asana_source/__init__.py +0 -0
  151. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/asana_source/helpers.py +0 -0
  152. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/asana_source/settings.py +0 -0
  153. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/attio/__init__.py +0 -0
  154. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/attio/helpers.py +0 -0
  155. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/blob.py +0 -0
  156. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/chess/__init__.py +0 -0
  157. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/chess/helpers.py +0 -0
  158. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/chess/settings.py +0 -0
  159. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/clickup/__init__.py +0 -0
  160. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/clickup/helpers.py +0 -0
  161. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/collector/spinner.py +0 -0
  162. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/destinations.py +0 -0
  163. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/dynamodb/__init__.py +0 -0
  164. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/elasticsearch/__init__.py +0 -0
  165. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/errors.py +0 -0
  166. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/facebook_ads/__init__.py +0 -0
  167. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/facebook_ads/exceptions.py +0 -0
  168. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/facebook_ads/helpers.py +0 -0
  169. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/facebook_ads/settings.py +0 -0
  170. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/facebook_ads/utils.py +0 -0
  171. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/factory.py +0 -0
  172. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/filesystem/__init__.py +0 -0
  173. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/filesystem/helpers.py +0 -0
  174. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/filesystem/readers.py +0 -0
  175. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/filters.py +0 -0
  176. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/fluxx/__init__.py +0 -0
  177. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/fluxx/helpers.py +0 -0
  178. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/frankfurter/__init__.py +0 -0
  179. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/frankfurter/helpers.py +0 -0
  180. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/freshdesk/__init__.py +0 -0
  181. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/freshdesk/freshdesk_client.py +0 -0
  182. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/freshdesk/settings.py +0 -0
  183. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/github/__init__.py +0 -0
  184. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/github/helpers.py +0 -0
  185. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/github/queries.py +0 -0
  186. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/github/settings.py +0 -0
  187. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_ads/__init__.py +0 -0
  188. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_ads/field.py +0 -0
  189. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_ads/metrics.py +0 -0
  190. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_ads/predicates.py +0 -0
  191. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_ads/reports.py +0 -0
  192. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_analytics/__init__.py +0 -0
  193. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_analytics/helpers.py +0 -0
  194. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_sheets/README.md +0 -0
  195. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_sheets/__init__.py +0 -0
  196. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
  197. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
  198. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
  199. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/gorgias/__init__.py +0 -0
  200. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/gorgias/helpers.py +0 -0
  201. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/http_client.py +0 -0
  202. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/hubspot/__init__.py +0 -0
  203. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/hubspot/helpers.py +0 -0
  204. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/hubspot/settings.py +0 -0
  205. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/influxdb/__init__.py +0 -0
  206. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/influxdb/client.py +0 -0
  207. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/isoc_pulse/__init__.py +0 -0
  208. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/kafka/__init__.py +0 -0
  209. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/kafka/helpers.py +0 -0
  210. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/kinesis/__init__.py +0 -0
  211. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/kinesis/helpers.py +0 -0
  212. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/klaviyo/__init__.py +0 -0
  213. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/klaviyo/client.py +0 -0
  214. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/klaviyo/helpers.py +0 -0
  215. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/linear/__init__.py +0 -0
  216. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/linear/helpers.py +0 -0
  217. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/linkedin_ads/__init__.py +0 -0
  218. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
  219. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/linkedin_ads/helpers.py +0 -0
  220. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/loader.py +0 -0
  221. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/masking.py +0 -0
  222. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/mixpanel/__init__.py +0 -0
  223. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/mixpanel/client.py +0 -0
  224. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/mongodb/__init__.py +0 -0
  225. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/notion/__init__.py +0 -0
  226. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/notion/helpers/__init__.py +0 -0
  227. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/notion/helpers/client.py +0 -0
  228. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/notion/helpers/database.py +0 -0
  229. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/notion/settings.py +0 -0
  230. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/partition.py +0 -0
  231. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/personio/__init__.py +0 -0
  232. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/personio/helpers.py +0 -0
  233. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/phantombuster/__init__.py +0 -0
  234. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/phantombuster/client.py +0 -0
  235. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/pinterest/__init__.py +0 -0
  236. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/pipedrive/__init__.py +0 -0
  237. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/pipedrive/helpers/__init__.py +0 -0
  238. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/pipedrive/helpers/custom_fields_munger.py +0 -0
  239. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/pipedrive/helpers/pages.py +0 -0
  240. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/pipedrive/settings.py +0 -0
  241. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/pipedrive/typing.py +0 -0
  242. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/quickbooks/__init__.py +0 -0
  243. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/resource.py +0 -0
  244. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/revenuecat/__init__.py +0 -0
  245. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/revenuecat/helpers.py +0 -0
  246. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/salesforce/__init__.py +0 -0
  247. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/salesforce/helpers.py +0 -0
  248. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/shopify/__init__.py +0 -0
  249. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/shopify/exceptions.py +0 -0
  250. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/shopify/helpers.py +0 -0
  251. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/shopify/settings.py +0 -0
  252. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/slack/__init__.py +0 -0
  253. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/slack/helpers.py +0 -0
  254. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/slack/settings.py +0 -0
  255. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/solidgate/__init__.py +0 -0
  256. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/solidgate/helpers.py +0 -0
  257. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/sql_database/__init__.py +0 -0
  258. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/sql_database/callbacks.py +0 -0
  259. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/stripe_analytics/__init__.py +0 -0
  260. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/stripe_analytics/helpers.py +0 -0
  261. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/stripe_analytics/settings.py +0 -0
  262. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/table_definition.py +0 -0
  263. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/telemetry/event.py +0 -0
  264. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/testdata/fakebqcredentials.json +0 -0
  265. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/tiktok_ads/__init__.py +0 -0
  266. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
  267. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/time.py +0 -0
  268. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/trustpilot/__init__.py +0 -0
  269. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/trustpilot/client.py +0 -0
  270. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/version.py +0 -0
  271. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/wise/__init__.py +0 -0
  272. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/wise/client.py +0 -0
  273. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/zendesk/__init__.py +0 -0
  274. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/zendesk/helpers/__init__.py +0 -0
  275. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
  276. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/zendesk/helpers/credentials.py +0 -0
  277. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
  278. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/zendesk/settings.py +0 -0
  279. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/zoom/__init__.py +0 -0
  280. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/src/zoom/helpers.py +0 -0
  281. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/testdata/.gitignore +0 -0
  282. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/testdata/create_replace.csv +0 -0
  283. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/testdata/delete_insert_expected.csv +0 -0
  284. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/testdata/delete_insert_part1.csv +0 -0
  285. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/testdata/delete_insert_part2.csv +0 -0
  286. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/testdata/merge_expected.csv +0 -0
  287. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/testdata/merge_part1.csv +0 -0
  288. {ingestr-0.13.91 → ingestr-0.13.92}/ingestr/testdata/merge_part2.csv +0 -0
  289. {ingestr-0.13.91 → ingestr-0.13.92}/package-lock.json +0 -0
  290. {ingestr-0.13.91 → ingestr-0.13.92}/package.json +0 -0
  291. {ingestr-0.13.91 → ingestr-0.13.92}/pyproject.toml +0 -0
  292. {ingestr-0.13.91 → ingestr-0.13.92}/requirements-dev.txt +0 -0
  293. {ingestr-0.13.91 → ingestr-0.13.92}/requirements.in +0 -0
  294. {ingestr-0.13.91 → ingestr-0.13.92}/requirements.txt +0 -0
  295. {ingestr-0.13.91 → ingestr-0.13.92}/requirements_arm64.txt +0 -0
  296. {ingestr-0.13.91 → ingestr-0.13.92}/resources/demo.gif +0 -0
  297. {ingestr-0.13.91 → ingestr-0.13.92}/resources/demo.tape +0 -0
  298. {ingestr-0.13.91 → ingestr-0.13.92}/resources/ingestr.svg +0 -0
  299. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/AMPM.yml +0 -0
  300. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Acronyms.yml +0 -0
  301. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Colons.yml +0 -0
  302. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Contractions.yml +0 -0
  303. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/DateFormat.yml +0 -0
  304. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Ellipses.yml +0 -0
  305. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/EmDash.yml +0 -0
  306. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Exclamation.yml +0 -0
  307. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/FirstPerson.yml +0 -0
  308. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Gender.yml +0 -0
  309. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/GenderBias.yml +0 -0
  310. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/HeadingPunctuation.yml +0 -0
  311. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Headings.yml +0 -0
  312. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Latin.yml +0 -0
  313. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/LyHyphens.yml +0 -0
  314. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/OptionalPlurals.yml +0 -0
  315. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Ordinal.yml +0 -0
  316. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/OxfordComma.yml +0 -0
  317. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Parens.yml +0 -0
  318. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Passive.yml +0 -0
  319. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Periods.yml +0 -0
  320. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Quotes.yml +0 -0
  321. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Ranges.yml +0 -0
  322. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Semicolons.yml +0 -0
  323. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Slang.yml +0 -0
  324. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Spacing.yml +0 -0
  325. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Spelling.yml +0 -0
  326. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Units.yml +0 -0
  327. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/We.yml +0 -0
  328. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/Will.yml +0 -0
  329. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/WordList.yml +0 -0
  330. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/meta.json +0 -0
  331. {ingestr-0.13.91 → ingestr-0.13.92}/styles/Google/vocab.txt +0 -0
  332. {ingestr-0.13.91 → ingestr-0.13.92}/styles/bruin/Ingestr.yml +0 -0
  333. {ingestr-0.13.91 → ingestr-0.13.92}/styles/config/vocabularies/bruin/accept.txt +0 -0
  334. {ingestr-0.13.91 → ingestr-0.13.92}/test.env.template +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ingestr
3
- Version: 0.13.91
3
+ Version: 0.13.92
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
@@ -14,7 +14,7 @@ URI parameters:
14
14
  - `username` is your Salesforce account username.
15
15
  - `password` is your Salesforce account password.
16
16
  - `token` is your Salesforce security token.
17
- - `domain` is your Salesforce instance domain.
17
+ - `domain` is your Salesforce instance domain (for example, `login`, `test`, or `your-domain.my`). Do **not** include `.salesforce.com`.
18
18
 
19
19
  You can obtain your security token by logging into your Salesforce account and navigating to the user settings under "Reset My Security Token."
20
20
 
@@ -28,14 +28,14 @@ Let's say:
28
28
  * Your Salesforce username is `user`.
29
29
  * Your password is `password123`.
30
30
  * Your security token is `fake_token`.
31
- * Your domain is `test.salesforce.com`.
31
+ * Your domain is `your-domain.my`.
32
32
  * You want to ingest `account` data from your salesforce account
33
33
  * You want to save this data in a duckdb database `sf.db` under the table `public.account`
34
34
 
35
35
  You can run the following command to achieve this:
36
36
  ```sh
37
37
  ingestr ingest \
38
- --source-uri "salesforce://?username=user&password=password123&token=fake_token&domain=test.salesforce.com" \
38
+ --source-uri "salesforce://?username=user&password=password123&token=fake_token&domain=your-domain.my" \
39
39
  --source-table "account" \
40
40
  --dest-uri "duckdb:///sf.db" \
41
41
  --dest-table "public.account"
@@ -0,0 +1 @@
1
+ version = "v0.13.92"
@@ -1,5 +1,6 @@
1
1
  """Mongo database source helpers"""
2
2
 
3
+ import re
3
4
  from itertools import islice
4
5
  from typing import (
5
6
  TYPE_CHECKING,
@@ -866,4 +867,127 @@ class MongoDbCollectionResourceConfiguration(BaseConfiguration):
866
867
  projection: Optional[Union[Mapping[str, Any], Iterable[str]]] = dlt.config.value
867
868
 
868
869
 
870
+ def convert_mongo_shell_to_extended_json(query_string: str) -> str:
871
+ """
872
+ Convert MongoDB shell syntax to MongoDB Extended JSON v2 format.
873
+
874
+ This function handles common MongoDB shell constructs like ISODate, ObjectId,
875
+ NumberLong, NumberDecimal, etc. and converts them to their Extended JSON equivalents
876
+ that can be parsed by bson.json_util.
877
+
878
+ Args:
879
+ query_string: A string containing MongoDB shell syntax
880
+
881
+ Returns:
882
+ A string with MongoDB Extended JSON v2 format
883
+
884
+ Examples:
885
+ >>> convert_mongo_shell_to_extended_json('ISODate("2010-01-01T00:00:00.000Z")')
886
+ '{"$date": "2010-01-01T00:00:00.000Z"}'
887
+
888
+ >>> convert_mongo_shell_to_extended_json('ObjectId("507f1f77bcf86cd799439011")')
889
+ '{"$oid": "507f1f77bcf86cd799439011"}'
890
+ """
891
+ converted = query_string
892
+
893
+ # Convert ISODate("...") to {"$date": "..."}
894
+ # Pattern matches ISODate("2010-01-01T00:00:00.000+0000") or similar
895
+ converted = re.sub(
896
+ r'ISODate\("([^"]+)"\)',
897
+ r'{"$date": "\1"}',
898
+ converted
899
+ )
900
+
901
+ # Convert ObjectId("...") to {"$oid": "..."}
902
+ converted = re.sub(
903
+ r'ObjectId\("([^"]+)"\)',
904
+ r'{"$oid": "\1"}',
905
+ converted
906
+ )
907
+
908
+ # Convert NumberLong(...) to {"$numberLong": "..."}
909
+ # Note: NumberLong can have quotes or not: NumberLong(123) or NumberLong("123")
910
+ converted = re.sub(
911
+ r'NumberLong\("([^"]+)"\)',
912
+ r'{"$numberLong": "\1"}',
913
+ converted
914
+ )
915
+ converted = re.sub(
916
+ r'NumberLong\(([^)]+)\)',
917
+ r'{"$numberLong": "\1"}',
918
+ converted
919
+ )
920
+
921
+ # Convert NumberInt(...) to {"$numberInt": "..."}
922
+ converted = re.sub(
923
+ r'NumberInt\("([^"]+)"\)',
924
+ r'{"$numberInt": "\1"}',
925
+ converted
926
+ )
927
+ converted = re.sub(
928
+ r'NumberInt\(([^)]+)\)',
929
+ r'{"$numberInt": "\1"}',
930
+ converted
931
+ )
932
+
933
+ # Convert NumberDecimal("...") to {"$numberDecimal": "..."}
934
+ converted = re.sub(
935
+ r'NumberDecimal\("([^"]+)"\)',
936
+ r'{"$numberDecimal": "\1"}',
937
+ converted
938
+ )
939
+
940
+ # Convert Timestamp(..., ...) to {"$timestamp": {"t": ..., "i": ...}}
941
+ # Timestamp(1234567890, 1) -> {"$timestamp": {"t": 1234567890, "i": 1}}
942
+ converted = re.sub(
943
+ r'Timestamp\((\d+),\s*(\d+)\)',
944
+ r'{"$timestamp": {"t": \1, "i": \2}}',
945
+ converted
946
+ )
947
+
948
+ # Convert BinData(..., "...") to {"$binary": {"base64": "...", "subType": "..."}}
949
+ converted = re.sub(
950
+ r'BinData\((\d+),\s*"([^"]+)"\)',
951
+ r'{"$binary": {"base64": "\2", "subType": "\1"}}',
952
+ converted
953
+ )
954
+
955
+ # Convert MinKey() to {"$minKey": 1}
956
+ converted = re.sub(
957
+ r'MinKey\(\)',
958
+ r'{"$minKey": 1}',
959
+ converted
960
+ )
961
+
962
+ # Convert MaxKey() to {"$maxKey": 1}
963
+ converted = re.sub(
964
+ r'MaxKey\(\)',
965
+ r'{"$maxKey": 1}',
966
+ converted
967
+ )
968
+
969
+ # Convert UUID("...") to {"$uuid": "..."}
970
+ converted = re.sub(
971
+ r'UUID\("([^"]+)"\)',
972
+ r'{"$uuid": "\1"}',
973
+ converted
974
+ )
975
+
976
+ # Convert DBRef("collection", "id") to {"$ref": "collection", "$id": "id"}
977
+ converted = re.sub(
978
+ r'DBRef\("([^"]+)",\s*"([^"]+)"\)',
979
+ r'{"$ref": "\1", "$id": "\2"}',
980
+ converted
981
+ )
982
+
983
+ # Convert Code("...") to {"$code": "..."}
984
+ converted = re.sub(
985
+ r'Code\("([^"]+)"\)',
986
+ r'{"$code": "\1"}',
987
+ converted
988
+ )
989
+
990
+ return converted
991
+
992
+
869
993
  __source_name__ = "mongodb"
@@ -3,6 +3,22 @@ from typing import Iterable
3
3
  import dlt
4
4
  import smartsheet # type: ignore
5
5
  from dlt.extract import DltResource
6
+ from smartsheet.models.enums import ColumnType # type: ignore
7
+ from smartsheet.models.sheet import Sheet # type: ignore
8
+
9
+ TYPE_MAPPING = {
10
+ ColumnType.TEXT_NUMBER: "text",
11
+ ColumnType.DATE: "date",
12
+ ColumnType.DATETIME: "timestamp",
13
+ ColumnType.CONTACT_LIST: "text",
14
+ ColumnType.CHECKBOX: "bool",
15
+ ColumnType.PICKLIST: "text",
16
+ ColumnType.DURATION: "text",
17
+ ColumnType.PREDECESSOR: "text",
18
+ ColumnType.ABSTRACT_DATETIME: "timestamp",
19
+ ColumnType.MULTI_CONTACT_LIST: "text",
20
+ ColumnType.MULTI_PICKLIST: "text",
21
+ }
6
22
 
7
23
 
8
24
  @dlt.source
@@ -34,21 +50,33 @@ def smartsheet_source(
34
50
  )
35
51
  sheet_name = sheet_details.name
36
52
  resource_name = f"sheet_{sheet_name.replace(' ', '_').lower()}"
53
+ sheet = smartsheet_client.Sheets.get_sheet(sheet_id_int)
37
54
 
38
55
  yield dlt.resource(
39
- _get_sheet_data(smartsheet_client, sheet_id_int),
56
+ _get_sheet_data(sheet),
40
57
  name=resource_name,
58
+ columns=_generate_type_hints(sheet),
41
59
  write_disposition="replace",
42
60
  )
43
61
 
44
62
 
45
- def _get_sheet_data(smartsheet_client: smartsheet.Smartsheet, sheet_id: int):
63
+ def _get_sheet_data(sheet: Sheet):
46
64
  """Helper function to get all rows from a sheet."""
47
- sheet = smartsheet_client.Sheets.get_sheet(sheet_id)
48
- # Transform rows to a list of dictionaries
65
+
49
66
  column_titles = [col.title for col in sheet.columns]
50
67
  for row in sheet.rows:
51
68
  row_data = {"_row_id": row.id}
52
69
  for i, cell in enumerate(row.cells):
53
70
  row_data[column_titles[i]] = cell.value
54
71
  yield row_data
72
+
73
+
74
+ def _generate_type_hints(sheet: Sheet):
75
+ return {
76
+ col.title: {
77
+ "data_type": TYPE_MAPPING.get(col.type.value),
78
+ "nullable": True,
79
+ }
80
+ for col in sheet.columns
81
+ if col.type.value in TYPE_MAPPING
82
+ }
@@ -427,14 +427,19 @@ class MongoDbSource:
427
427
  if ":" in table:
428
428
  collection_name, query_json = table.split(":", 1)
429
429
 
430
- # Parse and validate the query
430
+ # Parse the query using MongoDB's extended JSON parser
431
+ # First, convert MongoDB shell syntax to Extended JSON format
432
+ from bson import json_util
433
+ from ingestr.src.mongodb.helpers import convert_mongo_shell_to_extended_json
434
+
435
+ # Convert MongoDB shell constructs to Extended JSON v2 format
436
+ converted_query = convert_mongo_shell_to_extended_json(query_json)
437
+
431
438
  try:
432
- import json
433
-
434
- query = json.loads(query_json)
435
- except json.JSONDecodeError as e:
436
- raise ValueError(f"Invalid JSON query format: {e}")
437
-
439
+ query = json_util.loads(converted_query)
440
+ except Exception as e:
441
+ raise ValueError(f"Invalid MongoDB query format: {e}")
442
+
438
443
  # Validate that it's a list for aggregation pipeline
439
444
  if not isinstance(query, list):
440
445
  raise ValueError(
@@ -84,7 +84,6 @@ class TestSmartsheetSource(unittest.TestCase):
84
84
  list(source)
85
85
 
86
86
  def test_get_sheet_data(self):
87
- mock_smartsheet_client_instance = MagicMock()
88
87
  mock_sheet = Sheet(
89
88
  {
90
89
  "id": 456,
@@ -121,15 +120,13 @@ class TestSmartsheetSource(unittest.TestCase):
121
120
  ],
122
121
  }
123
122
  )
124
- mock_smartsheet_client_instance.Sheets.get_sheet.return_value = mock_sheet
125
123
 
126
- data_generator = _get_sheet_data(mock_smartsheet_client_instance, 456)
124
+ data_generator = _get_sheet_data(mock_sheet)
127
125
  data = list(data_generator)
128
126
 
129
127
  self.assertEqual(len(data), 2)
130
128
  self.assertEqual(data[0], {"_row_id": 201, "ID": 1, "Value": "Alpha"})
131
129
  self.assertEqual(data[1], {"_row_id": 202, "ID": 2, "Value": "Beta"})
132
- mock_smartsheet_client_instance.Sheets.get_sheet.assert_called_once_with(456)
133
130
 
134
131
 
135
132
  if __name__ == "__main__":
@@ -1 +0,0 @@
1
- version = "v0.13.91"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes