ingestr 0.13.9__tar.gz → 0.13.11__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 (232) hide show
  1. {ingestr-0.13.9 → ingestr-0.13.11}/PKG-INFO +27 -16
  2. {ingestr-0.13.9 → ingestr-0.13.11}/README.md +15 -5
  3. {ingestr-0.13.9 → ingestr-0.13.11}/docs/.vitepress/config.mjs +3 -1
  4. ingestr-0.13.11/docs/media/personio.png +0 -0
  5. ingestr-0.13.11/docs/supported-sources/personio.md +51 -0
  6. ingestr-0.13.11/docs/supported-sources/salesforce.md +68 -0
  7. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/applovin/__init__.py +8 -7
  8. ingestr-0.13.11/ingestr/src/buildinfo.py +1 -0
  9. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/factory.py +4 -0
  10. ingestr-0.13.11/ingestr/src/personio/__init__.py +331 -0
  11. ingestr-0.13.11/ingestr/src/personio/helpers.py +85 -0
  12. ingestr-0.13.11/ingestr/src/salesforce/__init__.py +149 -0
  13. ingestr-0.13.11/ingestr/src/salesforce/helpers.py +64 -0
  14. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/sources.py +118 -5
  15. {ingestr-0.13.9 → ingestr-0.13.11}/requirements.txt +11 -12
  16. ingestr-0.13.9/ingestr/src/buildinfo.py +0 -1
  17. {ingestr-0.13.9 → ingestr-0.13.11}/.dockerignore +0 -0
  18. {ingestr-0.13.9 → ingestr-0.13.11}/.githooks/pre-commit-hook.sh +0 -0
  19. {ingestr-0.13.9 → ingestr-0.13.11}/.github/workflows/deploy-docs.yml +0 -0
  20. {ingestr-0.13.9 → ingestr-0.13.11}/.github/workflows/release.yml +0 -0
  21. {ingestr-0.13.9 → ingestr-0.13.11}/.github/workflows/secrets-scan.yml +0 -0
  22. {ingestr-0.13.9 → ingestr-0.13.11}/.github/workflows/tests.yml +0 -0
  23. {ingestr-0.13.9 → ingestr-0.13.11}/.gitignore +0 -0
  24. {ingestr-0.13.9 → ingestr-0.13.11}/.gitleaksignore +0 -0
  25. {ingestr-0.13.9 → ingestr-0.13.11}/.python-version +0 -0
  26. {ingestr-0.13.9 → ingestr-0.13.11}/.vale.ini +0 -0
  27. {ingestr-0.13.9 → ingestr-0.13.11}/Dockerfile +0 -0
  28. {ingestr-0.13.9 → ingestr-0.13.11}/LICENSE.md +0 -0
  29. {ingestr-0.13.9 → ingestr-0.13.11}/Makefile +0 -0
  30. {ingestr-0.13.9 → ingestr-0.13.11}/docs/.vitepress/theme/custom.css +0 -0
  31. {ingestr-0.13.9 → ingestr-0.13.11}/docs/.vitepress/theme/index.js +0 -0
  32. {ingestr-0.13.9 → ingestr-0.13.11}/docs/commands/example-uris.md +0 -0
  33. {ingestr-0.13.9 → ingestr-0.13.11}/docs/commands/ingest.md +0 -0
  34. {ingestr-0.13.9 → ingestr-0.13.11}/docs/getting-started/core-concepts.md +0 -0
  35. {ingestr-0.13.9 → ingestr-0.13.11}/docs/getting-started/incremental-loading.md +0 -0
  36. {ingestr-0.13.9 → ingestr-0.13.11}/docs/getting-started/quickstart.md +0 -0
  37. {ingestr-0.13.9 → ingestr-0.13.11}/docs/getting-started/telemetry.md +0 -0
  38. {ingestr-0.13.9 → ingestr-0.13.11}/docs/index.md +0 -0
  39. {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/applovin_max.png +0 -0
  40. {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/athena.png +0 -0
  41. {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/clickhouse_img.png +0 -0
  42. {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/github.png +0 -0
  43. {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/googleanalytics.png +0 -0
  44. {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/linkedin_ads.png +0 -0
  45. {ingestr-0.13.9 → ingestr-0.13.11}/docs/media/tiktok.png +0 -0
  46. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/adjust.md +0 -0
  47. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/airtable.md +0 -0
  48. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/applovin.md +0 -0
  49. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/applovin_max.md +0 -0
  50. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/appsflyer.md +0 -0
  51. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/appstore.md +0 -0
  52. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/asana.md +0 -0
  53. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/athena.md +0 -0
  54. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/bigquery.md +0 -0
  55. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/chess.md +0 -0
  56. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/clickhouse.md +0 -0
  57. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/csv.md +0 -0
  58. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/custom_queries.md +0 -0
  59. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/databricks.md +0 -0
  60. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/duckdb.md +0 -0
  61. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/dynamodb.md +0 -0
  62. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/facebook-ads.md +0 -0
  63. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/gcs.md +0 -0
  64. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/github.md +0 -0
  65. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/google-ads.md +0 -0
  66. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/google_analytics.md +0 -0
  67. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/gorgias.md +0 -0
  68. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/gsheets.md +0 -0
  69. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/hubspot.md +0 -0
  70. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/kafka.md +0 -0
  71. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/klaviyo.md +0 -0
  72. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/linkedin_ads.md +0 -0
  73. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/mongodb.md +0 -0
  74. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/mssql.md +0 -0
  75. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/mysql.md +0 -0
  76. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/notion.md +0 -0
  77. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/oracle.md +0 -0
  78. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/postgres.md +0 -0
  79. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/redshift.md +0 -0
  80. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/s3.md +0 -0
  81. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/sap-hana.md +0 -0
  82. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/shopify.md +0 -0
  83. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/slack.md +0 -0
  84. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/snowflake.md +0 -0
  85. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/sqlite.md +0 -0
  86. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/stripe.md +0 -0
  87. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/tiktok-ads.md +0 -0
  88. {ingestr-0.13.9 → ingestr-0.13.11}/docs/supported-sources/zendesk.md +0 -0
  89. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/main.py +0 -0
  90. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/.gitignore +0 -0
  91. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/adjust/__init__.py +0 -0
  92. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/adjust/adjust_helpers.py +0 -0
  93. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/airtable/__init__.py +0 -0
  94. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/applovin_max/__init__.py +0 -0
  95. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appsflyer/_init_.py +0 -0
  96. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appsflyer/client.py +0 -0
  97. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appstore/__init__.py +0 -0
  98. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appstore/client.py +0 -0
  99. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appstore/errors.py +0 -0
  100. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appstore/models.py +0 -0
  101. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/appstore/resources.py +0 -0
  102. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/arrow/__init__.py +0 -0
  103. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/asana_source/__init__.py +0 -0
  104. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/asana_source/helpers.py +0 -0
  105. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/asana_source/settings.py +0 -0
  106. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/blob.py +0 -0
  107. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/chess/__init__.py +0 -0
  108. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/chess/helpers.py +0 -0
  109. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/chess/settings.py +0 -0
  110. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/destinations.py +0 -0
  111. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/dynamodb/__init__.py +0 -0
  112. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/errors.py +0 -0
  113. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/facebook_ads/__init__.py +0 -0
  114. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/facebook_ads/exceptions.py +0 -0
  115. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/facebook_ads/helpers.py +0 -0
  116. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/facebook_ads/settings.py +0 -0
  117. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/filesystem/__init__.py +0 -0
  118. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/filesystem/helpers.py +0 -0
  119. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/filesystem/readers.py +0 -0
  120. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/filters.py +0 -0
  121. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/github/__init__.py +0 -0
  122. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/github/helpers.py +0 -0
  123. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/github/queries.py +0 -0
  124. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/github/settings.py +0 -0
  125. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_ads/__init__.py +0 -0
  126. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_ads/field.py +0 -0
  127. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_ads/metrics.py +0 -0
  128. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_ads/predicates.py +0 -0
  129. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_ads/reports.py +0 -0
  130. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_analytics/__init__.py +0 -0
  131. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_analytics/helpers.py +0 -0
  132. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_sheets/README.md +0 -0
  133. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_sheets/__init__.py +0 -0
  134. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_sheets/helpers/__init__.py +0 -0
  135. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_sheets/helpers/api_calls.py +0 -0
  136. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/google_sheets/helpers/data_processing.py +0 -0
  137. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/gorgias/__init__.py +0 -0
  138. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/gorgias/helpers.py +0 -0
  139. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/hubspot/__init__.py +0 -0
  140. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/hubspot/helpers.py +0 -0
  141. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/hubspot/settings.py +0 -0
  142. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/kafka/__init__.py +0 -0
  143. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/kafka/helpers.py +0 -0
  144. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/klaviyo/_init_.py +0 -0
  145. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/klaviyo/client.py +0 -0
  146. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/klaviyo/helpers.py +0 -0
  147. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/linkedin_ads/__init__.py +0 -0
  148. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/linkedin_ads/dimension_time_enum.py +0 -0
  149. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/linkedin_ads/helpers.py +0 -0
  150. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/loader.py +0 -0
  151. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/mongodb/__init__.py +0 -0
  152. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/mongodb/helpers.py +0 -0
  153. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/notion/__init__.py +0 -0
  154. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/notion/helpers/__init__.py +0 -0
  155. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/notion/helpers/client.py +0 -0
  156. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/notion/helpers/database.py +0 -0
  157. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/notion/settings.py +0 -0
  158. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/shopify/__init__.py +0 -0
  159. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/shopify/exceptions.py +0 -0
  160. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/shopify/helpers.py +0 -0
  161. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/shopify/settings.py +0 -0
  162. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/slack/__init__.py +0 -0
  163. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/slack/helpers.py +0 -0
  164. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/slack/settings.py +0 -0
  165. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/sql_database/__init__.py +0 -0
  166. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/sql_database/callbacks.py +0 -0
  167. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/stripe_analytics/__init__.py +0 -0
  168. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/stripe_analytics/helpers.py +0 -0
  169. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/stripe_analytics/settings.py +0 -0
  170. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/table_definition.py +0 -0
  171. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/telemetry/event.py +0 -0
  172. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/testdata/fakebqcredentials.json +0 -0
  173. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/tiktok_ads/__init__.py +0 -0
  174. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/tiktok_ads/tiktok_helpers.py +0 -0
  175. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/time.py +0 -0
  176. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/version.py +0 -0
  177. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/__init__.py +0 -0
  178. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/helpers/__init__.py +0 -0
  179. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/helpers/api_helpers.py +0 -0
  180. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/helpers/credentials.py +0 -0
  181. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/helpers/talk_api.py +0 -0
  182. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/src/zendesk/settings.py +0 -0
  183. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/.gitignore +0 -0
  184. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/create_replace.csv +0 -0
  185. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/delete_insert_expected.csv +0 -0
  186. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/delete_insert_part1.csv +0 -0
  187. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/delete_insert_part2.csv +0 -0
  188. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/merge_expected.csv +0 -0
  189. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/merge_part1.csv +0 -0
  190. {ingestr-0.13.9 → ingestr-0.13.11}/ingestr/testdata/merge_part2.csv +0 -0
  191. {ingestr-0.13.9 → ingestr-0.13.11}/package-lock.json +0 -0
  192. {ingestr-0.13.9 → ingestr-0.13.11}/package.json +0 -0
  193. {ingestr-0.13.9 → ingestr-0.13.11}/pyproject.toml +0 -0
  194. {ingestr-0.13.9 → ingestr-0.13.11}/requirements-dev.txt +0 -0
  195. {ingestr-0.13.9 → ingestr-0.13.11}/resources/demo.gif +0 -0
  196. {ingestr-0.13.9 → ingestr-0.13.11}/resources/demo.tape +0 -0
  197. {ingestr-0.13.9 → ingestr-0.13.11}/resources/ingestr.svg +0 -0
  198. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/AMPM.yml +0 -0
  199. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Acronyms.yml +0 -0
  200. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Colons.yml +0 -0
  201. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Contractions.yml +0 -0
  202. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/DateFormat.yml +0 -0
  203. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Ellipses.yml +0 -0
  204. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/EmDash.yml +0 -0
  205. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Exclamation.yml +0 -0
  206. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/FirstPerson.yml +0 -0
  207. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Gender.yml +0 -0
  208. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/GenderBias.yml +0 -0
  209. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/HeadingPunctuation.yml +0 -0
  210. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Headings.yml +0 -0
  211. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Latin.yml +0 -0
  212. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/LyHyphens.yml +0 -0
  213. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/OptionalPlurals.yml +0 -0
  214. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Ordinal.yml +0 -0
  215. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/OxfordComma.yml +0 -0
  216. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Parens.yml +0 -0
  217. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Passive.yml +0 -0
  218. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Periods.yml +0 -0
  219. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Quotes.yml +0 -0
  220. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Ranges.yml +0 -0
  221. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Semicolons.yml +0 -0
  222. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Slang.yml +0 -0
  223. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Spacing.yml +0 -0
  224. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Spelling.yml +0 -0
  225. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Units.yml +0 -0
  226. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/We.yml +0 -0
  227. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/Will.yml +0 -0
  228. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/WordList.yml +0 -0
  229. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/meta.json +0 -0
  230. {ingestr-0.13.9 → ingestr-0.13.11}/styles/Google/vocab.txt +0 -0
  231. {ingestr-0.13.9 → ingestr-0.13.11}/styles/bruin/Ingestr.yml +0 -0
  232. {ingestr-0.13.9 → ingestr-0.13.11}/styles/config/vocabularies/bruin/accept.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ingestr
3
- Version: 0.13.9
3
+ Version: 0.13.11
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
@@ -18,42 +18,43 @@ Requires-Dist: asana==3.2.3
18
18
  Requires-Dist: clickhouse-connect==0.8.14
19
19
  Requires-Dist: clickhouse-driver==0.2.9
20
20
  Requires-Dist: clickhouse-sqlalchemy==0.2.7
21
- Requires-Dist: confluent-kafka>=2.6.1
21
+ Requires-Dist: confluent-kafka>=2.8.0
22
22
  Requires-Dist: databricks-sql-connector==2.9.3
23
23
  Requires-Dist: dataclasses-json==0.6.7
24
- Requires-Dist: dlt==1.5.0
25
- Requires-Dist: duckdb-engine==0.13.5
26
- Requires-Dist: duckdb==1.1.3
24
+ Requires-Dist: dlt==1.6.1
25
+ Requires-Dist: duckdb-engine==0.15.0
26
+ Requires-Dist: duckdb==1.2.0
27
27
  Requires-Dist: facebook-business==20.0.0
28
28
  Requires-Dist: flatten-json==0.1.14
29
29
  Requires-Dist: gcsfs==2024.10.0
30
30
  Requires-Dist: google-ads==25.1.0
31
- Requires-Dist: google-analytics-data==0.18.16
31
+ Requires-Dist: google-analytics-data==0.18.17
32
32
  Requires-Dist: google-api-python-client==2.130.0
33
33
  Requires-Dist: google-cloud-bigquery-storage==2.24.0
34
- Requires-Dist: mysql-connector-python==9.1.0
34
+ Requires-Dist: mysql-connector-python==9.2.0
35
35
  Requires-Dist: pendulum==3.0.0
36
36
  Requires-Dist: psutil==6.1.1
37
37
  Requires-Dist: psycopg2-binary==2.9.10
38
38
  Requires-Dist: py-machineid==0.6.0
39
39
  Requires-Dist: pyairtable==2.3.3
40
40
  Requires-Dist: pyarrow==18.1.0
41
- Requires-Dist: pyathena==3.9.0
42
- Requires-Dist: pymongo==4.10.1
41
+ Requires-Dist: pyathena==3.12.2
42
+ Requires-Dist: pymongo==4.11.1
43
43
  Requires-Dist: pymysql==1.1.1
44
44
  Requires-Dist: pyrate-limiter==3.7.0
45
45
  Requires-Dist: redshift-connector==2.1.5
46
46
  Requires-Dist: rich==13.9.4
47
47
  Requires-Dist: rudder-sdk-python==2.1.4
48
48
  Requires-Dist: s3fs==2024.10.0
49
+ Requires-Dist: simple-salesforce==1.12.6
49
50
  Requires-Dist: snowflake-sqlalchemy==1.6.1
50
- Requires-Dist: sqlalchemy-bigquery==1.12.0
51
+ Requires-Dist: sqlalchemy-bigquery==1.12.1
51
52
  Requires-Dist: sqlalchemy-hana==2.0.0
52
53
  Requires-Dist: sqlalchemy-redshift==0.8.14
53
54
  Requires-Dist: sqlalchemy2-stubs==0.0.2a38
54
55
  Requires-Dist: sqlalchemy==1.4.52
55
56
  Requires-Dist: stripe==10.7.0
56
- Requires-Dist: tqdm==4.67.0
57
+ Requires-Dist: tqdm==4.67.1
57
58
  Requires-Dist: typer==0.13.1
58
59
  Requires-Dist: types-requests==2.32.0.20240907
59
60
  Provides-Extra: odbc
@@ -161,6 +162,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
161
162
  <td>✅</td>
162
163
  <td>✅</td>
163
164
  </tr>
165
+ <tr>
166
+ <td>DynamoDB</td>
167
+ <td>✅</td>
168
+ <td>-</td>
169
+ </tr>
164
170
  <tr>
165
171
  <td>Local CSV file</td>
166
172
  <td>✅</td>
@@ -247,11 +253,6 @@ Pull requests are welcome. However, please open an issue first to discuss what y
247
253
  <td>✅</td>
248
254
  <td>-</td>
249
255
  </tr>
250
- <tr>
251
- <td>DynamoDB</td>
252
- <td>✅</td>
253
- <td>-</td>
254
- </tr>
255
256
  <tr>
256
257
  <td>Facebook Ads</td>
257
258
  <td>✅</td>
@@ -301,12 +302,22 @@ Pull requests are welcome. However, please open an issue first to discuss what y
301
302
  <td>Notion</td>
302
303
  <td>✅</td>
303
304
  <td>-</td>
305
+ </tr>
306
+ <tr>
307
+ <td>Personio</td>
308
+ <td>✅</td>
309
+ <td>-</td>
304
310
  </tr>
305
311
  <tr>
306
312
  <td>S3</td>
307
313
  <td>✅</td>
308
314
  <td>-</td>
309
315
  </tr>
316
+ <tr>
317
+ <td>Salesforce</td>
318
+ <td>✅</td>
319
+ <td>-</td>
320
+ </tr>
310
321
  <tr>
311
322
  <td>Shopify</td>
312
323
  <td>✅</td>
@@ -97,6 +97,11 @@ Pull requests are welcome. However, please open an issue first to discuss what y
97
97
  <td>✅</td>
98
98
  <td>✅</td>
99
99
  </tr>
100
+ <tr>
101
+ <td>DynamoDB</td>
102
+ <td>✅</td>
103
+ <td>-</td>
104
+ </tr>
100
105
  <tr>
101
106
  <td>Local CSV file</td>
102
107
  <td>✅</td>
@@ -183,11 +188,6 @@ Pull requests are welcome. However, please open an issue first to discuss what y
183
188
  <td>✅</td>
184
189
  <td>-</td>
185
190
  </tr>
186
- <tr>
187
- <td>DynamoDB</td>
188
- <td>✅</td>
189
- <td>-</td>
190
- </tr>
191
191
  <tr>
192
192
  <td>Facebook Ads</td>
193
193
  <td>✅</td>
@@ -237,12 +237,22 @@ Pull requests are welcome. However, please open an issue first to discuss what y
237
237
  <td>Notion</td>
238
238
  <td>✅</td>
239
239
  <td>-</td>
240
+ </tr>
241
+ <tr>
242
+ <td>Personio</td>
243
+ <td>✅</td>
244
+ <td>-</td>
240
245
  </tr>
241
246
  <tr>
242
247
  <td>S3</td>
243
248
  <td>✅</td>
244
249
  <td>-</td>
245
250
  </tr>
251
+ <tr>
252
+ <td>Salesforce</td>
253
+ <td>✅</td>
254
+ <td>-</td>
255
+ </tr>
246
256
  <tr>
247
257
  <td>Shopify</td>
248
258
  <td>✅</td>
@@ -62,6 +62,7 @@ export default defineConfig({
62
62
  { text: "ClickHouse", link: "/supported-sources/clickhouse.md" },
63
63
  { text: "Databricks", link: "/supported-sources/databricks.md" },
64
64
  { text: "DuckDB", link: "/supported-sources/duckdb.md" },
65
+ { text: "DynamoDB", link: "/supported-sources/dynamodb.md" },
65
66
  {
66
67
  text: "Google BigQuery",
67
68
  link: "/supported-sources/bigquery.md",
@@ -100,7 +101,6 @@ export default defineConfig({
100
101
  { text: "Applovin Max", link: "/supported-sources/applovin_max.md"},
101
102
  { text: "Asana", link: "/supported-sources/asana.md" },
102
103
  { text: "Chess.com", link: "/supported-sources/chess.md" },
103
- { text: "DynamoDB", link: "/supported-sources/dynamodb.md" },
104
104
  {
105
105
  text: "Facebook Ads",
106
106
  link: "/supported-sources/facebook-ads.md",
@@ -115,7 +115,9 @@ export default defineConfig({
115
115
  { text: "Klaviyo", link: "/supported-sources/klaviyo.md" },
116
116
  { text: "LinkedIn Ads", link: "/supported-sources/linkedin_ads.md" },
117
117
  { text: "Notion", link: "/supported-sources/notion.md" },
118
+ { text: "Personio", link: "/supported-sources/personio.md" },
118
119
  { text: "S3", link: "/supported-sources/s3.md" },
120
+ { text: "Salesforce", link: "/supported-sources/salesforce.md" },
119
121
  { text: "Shopify", link: "/supported-sources/shopify.md" },
120
122
  { text: "Slack", link: "/supported-sources/slack.md" },
121
123
  { text: "Stripe", link: "/supported-sources/stripe.md" },
Binary file
@@ -0,0 +1,51 @@
1
+ # Personio
2
+ [Personio](https://personio.de/) is a human resources management software that helps businesses
3
+ streamline HR processes, including recruitment, employee data management, and payroll, in one
4
+ platform.
5
+
6
+ ingestr supports Personio as a source.
7
+
8
+ ## URI format
9
+
10
+ The URI format for Personio is as follows:
11
+
12
+ ```plaintext
13
+ personio://?client_id=<client-id>&client_secret=<client-secret>
14
+ ```
15
+
16
+ URI parameters:
17
+
18
+ - `client_id`: the client ID used for authentication with the Personio API
19
+ - `client_secret`: the client secret used for authentication with the Personio API
20
+
21
+ ## Setting up a Personio Integration
22
+
23
+ To grab personio credentials, please follow the guide [here](https://dlthub.com/docs/dlt-ecosystem/verified-sources/personio#grab-credentials).
24
+
25
+ Once you complete the guide, you should have a client ID and client secret. Let's say your `client_id` is id_123 and your `client_secret` is secret_123, here's a sample command that will copy the data from Personio into a DuckDB database:
26
+
27
+ ```bash
28
+ ingestr ingest --source-uri 'personio://?client_id=id_123&client_secret=secret_123' \
29
+ --source-table 'employees' \
30
+ --dest-uri duckdb:///personio.duckdb \
31
+ --dest-table 'dest.employees'
32
+ ```
33
+
34
+ <img alt="personio_img" src="../media/personio.png"/>
35
+
36
+
37
+ Personio source allows ingesting the following resources into separate tables:
38
+ - [employees](https://developer.personio.de/reference/get_company-employees) : Retrieves company employees details
39
+ - [absences](https://developer.personio.de/reference/get_company-time-offs) : Retrieves absence periods for absences tracked in days
40
+ - [absence_types](https://developer.personio.de/reference/get_company-time-off-types) : Retrieves list of various types of employee absences
41
+ - [attendances](https://developer.personio.de/reference/get_company-attendances) : Retrieves attendance records for each employee
42
+ - [projects](https://developer.personio.de/reference/get_company-attendances-projects) : Retrieves a list of all company projects
43
+ - [document_categories](https://developer.personio.de/reference/get_company-document-categories) : Retrieves all document categories of the company
44
+ - [employees_absences_balance](https://developer.personio.de/reference/get_company-employees-employee-id-absences-balance) : Retrieves the absence balance for a specific employee
45
+ - [custom_reports_list](https://developer.personio.de/reference/listreports) : Retrieves metadata about existing custom reports in your Personio account, such as report name, report type, report date / timeframe.
46
+
47
+ Use these as `--source-table` parameter in the `ingestr ingest` command.\
48
+
49
+
50
+ > [!WARNING]
51
+ > Personio does not support incremental loading for many endpoints, which means ingestr will load endpoints incrementally if they support it, and do a full-refresh if not.
@@ -0,0 +1,68 @@
1
+ # Salesforce
2
+ [Salesforce](https://www.salesforce.com/) is a cloud-based customer relationship management (CRM) platform that helps businesses manage sales, customer interactions, and business processes. It provides tools for sales automation, customer service, marketing, analytics, and application development.
3
+
4
+ Ingestr supports Salesforce as a source.
5
+
6
+ ## URI format
7
+
8
+ The URI format for Salesforce is as follows:
9
+ ```
10
+ salesforce://?username=<username>&password=<password>&token=<token>
11
+ ```
12
+
13
+ URI parameters:
14
+ - `username` is your Salesforce account username.
15
+ - `password` is your Salesforce account password.
16
+ - `token` is your Salesforce security token.
17
+
18
+ You can obtain your security token by logging into your Salesforce account and navigating to the user settings under "Reset My Security Token."
19
+
20
+ ## Setting up a Salesforce Integration
21
+
22
+ You can obtain an OAuth access token by setting up a connected app in Salesforce and using OAuth 2.0 authentication. For more information, see [Salesforce API Authentication](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/quickstart_oauth.htm).
23
+
24
+ ## Example
25
+
26
+ Let's say:
27
+ * Your Salesforce username is `user`.
28
+ * Your password is `password123`.
29
+ * Your security token is `fake_token`.
30
+ * You want to ingest `account` data from your salesforce account
31
+ * You want to save this data in a duckdb database `sf.db` under the table `public.account`
32
+
33
+ You can run the following command to achieve this:
34
+ ```sh
35
+ ingestr ingest \
36
+ --source-uri "salesforce://?username=user&password=password123&token=fake_token" \
37
+ --source-table "account" \
38
+ --dest-uri "duckdb:///sf.db" \
39
+ --dest-table "public.account"
40
+ ```
41
+
42
+ ## Tables
43
+
44
+ Salesforce source allows ingesting the following objects into separate tables:
45
+
46
+ | **Table** | **Mode** | **Description** |
47
+ |---------------------------|-----------|----------------|
48
+ | `user` | replace | Refers to an individual who has access to a Salesforce org or instance. |
49
+ | `user_role` | replace | A standard object that represents a role within the organization's hierarchy. |
50
+ | `opportunity` | merge | Represents a sales opportunity for a specific account or contact. |
51
+ | `opportunity_line_item` | merge | Represents individual line items or products associated with an Opportunity. |
52
+ | `opportunity_contact_role` | merge | Represents the association between an Opportunity and a Contact. |
53
+ | `account` | merge | Individual or organization that interacts with your business. |
54
+ | `contact` | replace | An individual person associated with an account or organization. |
55
+ | `lead` | replace | Prospective customer/individual/org. that has shown interest in a company's products/services. |
56
+ | `campaign` | replace | Marketing initiative or project designed to achieve specific goals, such as generating leads. |
57
+ | `campaign_member` | merge | Association between a Contact or Lead and a Campaign. |
58
+ | `product` | replace | For managing and organizing your product-related data within the Salesforce ecosystem. |
59
+ | `pricebook` | replace | Used to manage product pricing and create price books. |
60
+ | `pricebook_entry` | replace | Represents a specific price for a product in a price book. |
61
+ | `task` | merge | Used to track and manage various activities and tasks within the Salesforce platform. |
62
+ | `event` | merge | Used to track and manage calendar-based events, such as meetings, appointments, or calls. |
63
+
64
+ Use these as `--source-table` parameters in the `ingestr ingest` command.
65
+
66
+ > [!WARNING]
67
+ > Salesforce API limits may affect the frequency and volume of data ingestion. Incremental loading is supported for objects with the `SystemModstamp` field, but some objects may require full-refresh loads. This is indicated by `mode` in the tables above. Tables with mode `replace` don't support incremental loads, while the ones with `merge` do.
68
+
@@ -1,10 +1,10 @@
1
- from datetime import datetime, timezone, timedelta
1
+ from datetime import datetime, timedelta, timezone
2
2
  from enum import Enum
3
3
  from typing import Dict, List, Optional
4
- from requests import Response
5
4
 
6
5
  import dlt
7
6
  from dlt.sources.rest_api import EndpointResource, RESTAPIConfig, rest_api_resources
7
+ from requests import Response
8
8
 
9
9
 
10
10
  class InvalidCustomReportError(Exception):
@@ -13,9 +13,11 @@ class InvalidCustomReportError(Exception):
13
13
  "Custom report should be in the format 'custom:{endpoint}:{report_type}:{dimensions}"
14
14
  )
15
15
 
16
+
16
17
  class ClientError(Exception):
17
18
  pass
18
19
 
20
+
19
21
  TYPE_HINTS = {
20
22
  "application_is_hidden": {"data_type": "bool"},
21
23
  "average_cpa": {"data_type": "double"},
@@ -119,7 +121,6 @@ def applovin_source(
119
121
  end_date: Optional[str],
120
122
  custom: Optional[str],
121
123
  ):
122
-
123
124
  backfill = False
124
125
  if end_date is None:
125
126
  backfill = True
@@ -127,7 +128,7 @@ def applovin_source(
127
128
  # use the greatest of yesterday and start_date
128
129
  end_date = max(
129
130
  datetime.now(timezone.utc) - timedelta(days=1),
130
- datetime.fromisoformat(start_date).replace(tzinfo=timezone.utc)
131
+ datetime.fromisoformat(start_date).replace(tzinfo=timezone.utc),
131
132
  ).strftime("%Y-%m-%d")
132
133
 
133
134
  config: RESTAPIConfig = {
@@ -157,7 +158,7 @@ def applovin_source(
157
158
  "paginator": "single_page",
158
159
  "response_actions": [
159
160
  http_error_handler,
160
- ]
161
+ ],
161
162
  },
162
163
  },
163
164
  "resources": [
@@ -177,8 +178,7 @@ def applovin_source(
177
178
  "advertiser-probabilistic-report",
178
179
  "probabilisticReport",
179
180
  exclude(
180
- REPORT_SCHEMA[ReportType.ADVERTISER],
181
- PROBABILISTIC_REPORT_EXCLUDE
181
+ REPORT_SCHEMA[ReportType.ADVERTISER], PROBABILISTIC_REPORT_EXCLUDE
182
182
  ),
183
183
  ReportType.ADVERTISER,
184
184
  ),
@@ -256,6 +256,7 @@ def exclude(source: List[str], exclude_list: List[str]) -> List[str]:
256
256
  def build_type_hints(cols: List[str]) -> dict:
257
257
  return {col: TYPE_HINTS[col] for col in cols if col in TYPE_HINTS}
258
258
 
259
+
259
260
  def http_error_handler(resp: Response):
260
261
  if not resp.ok:
261
262
  raise ClientError(f"HTTP Status {resp.status_code}: {resp.text}")
@@ -0,0 +1 @@
1
+ version = "v0.13.11"
@@ -42,12 +42,14 @@ from ingestr.src.sources import (
42
42
  MongoDbSource,
43
43
  NotionSource,
44
44
  S3Source,
45
+ SalesforceSource,
45
46
  ShopifySource,
46
47
  SlackSource,
47
48
  SqlSource,
48
49
  StripeAnalyticsSource,
49
50
  TikTokSource,
50
51
  ZendeskSource,
52
+ PersonioSource,
51
53
  )
52
54
 
53
55
  SQL_SOURCE_SCHEMES = [
@@ -136,6 +138,8 @@ class SourceDestinationFactory:
136
138
  "linkedinads": LinkedInAdsSource,
137
139
  "applovin": AppLovinSource,
138
140
  "applovinmax": ApplovinMaxSource,
141
+ "salesforce": SalesforceSource,
142
+ "personio": PersonioSource,
139
143
  }
140
144
  destinations: Dict[str, Type[DestinationProtocol]] = {
141
145
  "bigquery": BigQueryDestination,