omniload 0.2.0__tar.gz → 0.4.0__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.
Files changed (354) hide show
  1. omniload-0.4.0/NOTICE +35 -0
  2. {omniload-0.2.0 → omniload-0.4.0}/PKG-INFO +55 -17
  3. {omniload-0.2.0 → omniload-0.4.0}/README.md +50 -13
  4. {omniload-0.2.0 → omniload-0.4.0}/docs/conf.py +1 -0
  5. omniload-0.4.0/omniload/__init__.py +37 -0
  6. omniload-0.4.0/omniload/api.py +565 -0
  7. omniload-0.2.0/omniload/src/filters.py → omniload-0.4.0/omniload/codec/filter.py +1 -1
  8. omniload-0.2.0/omniload/src/partition.py → omniload-0.4.0/omniload/codec/hint.py +1 -1
  9. omniload-0.4.0/omniload/core/factory.py +51 -0
  10. omniload-0.4.0/omniload/core/model.py +68 -0
  11. omniload-0.4.0/omniload/core/registry.py +147 -0
  12. omniload-0.4.0/omniload/core/router.py +423 -0
  13. omniload-0.2.0/omniload/src/errors.py → omniload-0.4.0/omniload/error.py +23 -1
  14. omniload-0.4.0/omniload/main.py +372 -0
  15. omniload-0.2.0/omniload/src/adjust/__init__.py → omniload-0.4.0/omniload/source/adjust/adapter.py +1 -1
  16. omniload-0.4.0/omniload/source/adjust/api.py +87 -0
  17. omniload-0.4.0/omniload/source/airtable/api.py +42 -0
  18. omniload-0.2.0/omniload/src/allium/__init__.py → omniload-0.4.0/omniload/source/allium/adapter.py +1 -1
  19. omniload-0.4.0/omniload/source/allium/api.py +74 -0
  20. omniload-0.4.0/omniload/source/anthropic/api.py +55 -0
  21. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/anthropic/helpers.py +1 -1
  22. omniload-0.4.0/omniload/source/applovin/api.py +50 -0
  23. omniload-0.2.0/omniload/src/applovin_max/__init__.py → omniload-0.4.0/omniload/source/applovin_max/adapter.py +1 -1
  24. omniload-0.4.0/omniload/source/applovin_max/api.py +72 -0
  25. omniload-0.2.0/omniload/src/appsflyer/__init__.py → omniload-0.4.0/omniload/source/appsflyer/adapter.py +1 -1
  26. omniload-0.4.0/omniload/source/appsflyer/api.py +43 -0
  27. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/appsflyer/client.py +1 -1
  28. omniload-0.2.0/omniload/src/appstore/__init__.py → omniload-0.4.0/omniload/source/appstore/adapter.py +1 -1
  29. omniload-0.4.0/omniload/source/appstore/api.py +83 -0
  30. omniload-0.4.0/omniload/source/arrow/api.py +54 -0
  31. omniload-0.4.0/omniload/source/asana/api.py +45 -0
  32. omniload-0.4.0/omniload/source/attio/api.py +31 -0
  33. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/attio/helpers.py +1 -1
  34. omniload-0.4.0/omniload/source/blobstorage/api.py +189 -0
  35. omniload-0.4.0/omniload/source/bruin/api.py +24 -0
  36. omniload-0.4.0/omniload/source/chess/api.py +52 -0
  37. omniload-0.2.0/omniload/src/clickup/__init__.py → omniload-0.4.0/omniload/source/clickup/adapter.py +2 -1
  38. omniload-0.4.0/omniload/source/clickup/api.py +46 -0
  39. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/clickup/helpers.py +1 -1
  40. omniload-0.4.0/omniload/source/couchbase/api.py +171 -0
  41. omniload-0.4.0/omniload/source/csv/api.py +80 -0
  42. omniload-0.4.0/omniload/source/cursor/api.py +51 -0
  43. omniload-0.2.0/omniload/src/customer_io/__init__.py → omniload-0.4.0/omniload/source/customer_io/adapter.py +1 -1
  44. omniload-0.4.0/omniload/source/customer_io/api.py +104 -0
  45. omniload-0.4.0/omniload/source/docebo/api.py +67 -0
  46. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/docebo/client.py +2 -2
  47. omniload-0.2.0/omniload/src/dune/__init__.py → omniload-0.4.0/omniload/source/dune/adapter.py +2 -2
  48. omniload-0.4.0/omniload/source/dune/api.py +85 -0
  49. omniload-0.4.0/omniload/source/dynamodb/api.py +73 -0
  50. omniload-0.2.0/omniload/src/elasticsearch/__init__.py → omniload-0.4.0/omniload/source/elasticsearch/adapter.py +1 -2
  51. omniload-0.4.0/omniload/source/elasticsearch/api.py +56 -0
  52. omniload-0.2.0/omniload/src/facebook_ads/__init__.py → omniload-0.4.0/omniload/source/facebook_ads/adapter.py +1 -1
  53. omniload-0.4.0/omniload/source/facebook_ads/api.py +177 -0
  54. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/helpers.py +1 -1
  55. omniload-0.4.0/omniload/source/fireflies/api.py +62 -0
  56. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/fireflies/helpers.py +1 -1
  57. omniload-0.4.0/omniload/source/fluxx/api.py +79 -0
  58. omniload-0.2.0/omniload/src/frankfurter/__init__.py → omniload-0.4.0/omniload/source/frankfurter/adapter.py +6 -11
  59. omniload-0.4.0/omniload/source/frankfurter/api.py +55 -0
  60. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/frankfurter/helpers.py +1 -1
  61. omniload-0.2.0/omniload/src/freshdesk/__init__.py → omniload-0.4.0/omniload/source/freshdesk/adapter.py +6 -12
  62. omniload-0.4.0/omniload/source/freshdesk/api.py +72 -0
  63. omniload-0.2.0/omniload/src/freshdesk/freshdesk_client.py → omniload-0.4.0/omniload/source/freshdesk/client.py +1 -1
  64. omniload-0.4.0/omniload/source/fundraiseup/api.py +23 -0
  65. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/fundraiseup/client.py +1 -1
  66. omniload-0.2.0/omniload/src/github/__init__.py → omniload-0.4.0/omniload/source/github/adapter.py +2 -1
  67. omniload-0.4.0/omniload/source/github/api.py +73 -0
  68. omniload-0.4.0/omniload/source/google_ads/api.py +151 -0
  69. omniload-0.4.0/omniload/source/google_analytics/api.py +79 -0
  70. omniload-0.4.0/omniload/source/google_sheets/api.py +52 -0
  71. omniload-0.4.0/omniload/source/gorgias/api.py +48 -0
  72. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/gorgias/helpers.py +1 -1
  73. omniload-0.2.0/omniload/src/hostaway/__init__.py → omniload-0.4.0/omniload/source/hostaway/adapter.py +2 -1
  74. omniload-0.4.0/omniload/source/hostaway/api.py +94 -0
  75. omniload-0.4.0/omniload/source/http/api.py +61 -0
  76. omniload-0.2.0/omniload/src/hubspot/__init__.py → omniload-0.4.0/omniload/source/hubspot/adapter.py +2 -1
  77. omniload-0.4.0/omniload/source/hubspot/api.py +79 -0
  78. omniload-0.4.0/omniload/source/indeed/api.py +59 -0
  79. omniload-0.4.0/omniload/source/influxdb/api.py +66 -0
  80. omniload-0.4.0/omniload/source/intercom/api.py +79 -0
  81. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/intercom/helpers.py +1 -1
  82. omniload-0.4.0/omniload/source/isoc_pulse/api.py +45 -0
  83. omniload-0.4.0/omniload/source/jira/api.py +60 -0
  84. omniload-0.4.0/omniload/source/kafka/api.py +71 -0
  85. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/kafka/helpers.py +1 -1
  86. omniload-0.4.0/omniload/source/kinesis/api.py +50 -0
  87. omniload-0.2.0/omniload/src/klaviyo/__init__.py → omniload-0.4.0/omniload/source/klaviyo/adapter.py +2 -2
  88. omniload-0.4.0/omniload/source/klaviyo/api.py +52 -0
  89. omniload-0.4.0/omniload/source/linear/api.py +64 -0
  90. omniload-0.2.0/omniload/src/linkedin_ads/__init__.py → omniload-0.4.0/omniload/source/linkedin_ads/adapter.py +2 -2
  91. omniload-0.4.0/omniload/source/linkedin_ads/api.py +111 -0
  92. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/linkedin_ads/helpers.py +1 -1
  93. omniload-0.2.0/omniload/src/mailchimp/__init__.py → omniload-0.4.0/omniload/source/mailchimp/adapter.py +3 -3
  94. omniload-0.4.0/omniload/source/mailchimp/api.py +31 -0
  95. omniload-0.2.0/omniload/src/mixpanel/__init__.py → omniload-0.4.0/omniload/source/mixpanel/adapter.py +2 -1
  96. omniload-0.4.0/omniload/source/mixpanel/api.py +70 -0
  97. omniload-0.4.0/omniload/source/monday/api.py +42 -0
  98. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/monday/helpers.py +1 -1
  99. omniload-0.4.0/omniload/source/mongodb/api.py +206 -0
  100. omniload-0.4.0/omniload/source/notion/api.py +32 -0
  101. omniload-0.4.0/omniload/source/personio/api.py +57 -0
  102. omniload-0.2.0/omniload/src/phantombuster/__init__.py → omniload-0.4.0/omniload/source/phantombuster/adapter.py +2 -2
  103. omniload-0.4.0/omniload/source/phantombuster/api.py +54 -0
  104. omniload-0.2.0/omniload/src/pinterest/__init__.py → omniload-0.4.0/omniload/source/pinterest/adapter.py +1 -1
  105. omniload-0.4.0/omniload/source/pinterest/api.py +45 -0
  106. omniload-0.4.0/omniload/source/pipedrive/api.py +48 -0
  107. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/helpers/pages.py +2 -1
  108. omniload-0.4.0/omniload/source/plusvibeai/api.py +49 -0
  109. omniload-0.4.0/omniload/source/primer/api.py +32 -0
  110. omniload-0.2.0/omniload/src/quickbooks/__init__.py → omniload-0.4.0/omniload/source/quickbooks/adapter.py +0 -1
  111. omniload-0.4.0/omniload/source/quickbooks/api.py +80 -0
  112. omniload-0.2.0/omniload/src/reddit_ads/__init__.py → omniload-0.4.0/omniload/source/reddit_ads/adapter.py +1 -1
  113. omniload-0.4.0/omniload/source/reddit_ads/api.py +81 -0
  114. omniload-0.4.0/omniload/source/revenuecat/api.py +56 -0
  115. omniload-0.4.0/omniload/source/salesforce/api.py +43 -0
  116. omniload-0.4.0/omniload/source/sftp/api.py +57 -0
  117. omniload-0.2.0/omniload/src/shopify/__init__.py → omniload-0.4.0/omniload/source/shopify/adapter.py +1 -1
  118. omniload-0.4.0/omniload/source/shopify/api.py +93 -0
  119. omniload-0.4.0/omniload/source/slack/api.py +49 -0
  120. omniload-0.2.0/omniload/src/smartsheets/__init__.py → omniload-0.4.0/omniload/source/smartsheets/adapter.py +1 -1
  121. omniload-0.4.0/omniload/source/smartsheets/api.py +32 -0
  122. omniload-0.4.0/omniload/source/snapchat_ads/api.py +167 -0
  123. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/snapchat_ads/helpers.py +1 -1
  124. omniload-0.4.0/omniload/source/socrata/api.py +90 -0
  125. omniload-0.4.0/omniload/source/solidgate/api.py +54 -0
  126. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/solidgate/helpers.py +2 -2
  127. omniload-0.4.0/omniload/source/stripe/api.py +88 -0
  128. omniload-0.2.0/omniload/src/tiktok_ads/__init__.py → omniload-0.4.0/omniload/source/tiktok_ads/adapter.py +1 -1
  129. omniload-0.4.0/omniload/source/tiktok_ads/api.py +117 -0
  130. omniload-0.2.0/omniload/src/trustpilot/__init__.py → omniload-0.4.0/omniload/source/trustpilot/adapter.py +2 -1
  131. omniload-0.4.0/omniload/source/trustpilot/api.py +55 -0
  132. omniload-0.2.0/omniload/src/wise/__init__.py → omniload-0.4.0/omniload/source/wise/adapter.py +2 -1
  133. omniload-0.4.0/omniload/source/wise/api.py +44 -0
  134. omniload-0.2.0/omniload/src/zendesk/__init__.py → omniload-0.4.0/omniload/source/zendesk/adapter.py +2 -1
  135. omniload-0.4.0/omniload/source/zendesk/api.py +95 -0
  136. omniload-0.4.0/omniload/source/zoom/api.py +52 -0
  137. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zoom/helpers.py +1 -1
  138. omniload-0.4.0/omniload/target/athena/__init__.py +93 -0
  139. omniload-0.4.0/omniload/target/bigquery/__init__.py +83 -0
  140. omniload-0.4.0/omniload/target/blobstorage/__init__.py +141 -0
  141. omniload-0.4.0/omniload/target/clickhouse/__init__.py +98 -0
  142. omniload-0.4.0/omniload/target/cratedb/__init__.py +9 -0
  143. omniload-0.4.0/omniload/target/csv/__init__.py +128 -0
  144. omniload-0.4.0/omniload/target/databricks/__init__.py +73 -0
  145. omniload-0.4.0/omniload/target/duckdb/__init__.py +10 -0
  146. omniload-0.2.0/omniload/src/elasticsearch/helpers.py → omniload-0.4.0/omniload/target/elasticsearch/adapter.py +0 -1
  147. omniload-0.4.0/omniload/target/elasticsearch/api.py +33 -0
  148. omniload-0.4.0/omniload/target/model.py +15 -0
  149. omniload-0.4.0/omniload/target/mongodb/__init__.py +13 -0
  150. omniload-0.4.0/omniload/target/motherduck/__init__.py +22 -0
  151. omniload-0.4.0/omniload/target/mssql/__init__.py +86 -0
  152. omniload-0.4.0/omniload/target/mysql/__init__.py +20 -0
  153. omniload-0.4.0/omniload/target/postgresql/__init__.py +8 -0
  154. omniload-0.4.0/omniload/target/redshift/__init__.py +10 -0
  155. omniload-0.4.0/omniload/target/snowflake/__init__.py +8 -0
  156. omniload-0.4.0/omniload/target/sqlite/__init__.py +15 -0
  157. omniload-0.4.0/omniload/target/synapse/__init__.py +8 -0
  158. omniload-0.4.0/omniload/target/trino/__init__.py +77 -0
  159. omniload-0.4.0/omniload/util/auth.py +73 -0
  160. omniload-0.2.0/omniload/src/blob.py → omniload-0.4.0/omniload/util/endpoint.py +1 -1
  161. omniload-0.2.0/omniload/src/http_client.py → omniload-0.4.0/omniload/util/http.py +2 -1
  162. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/util}/loader.py +1 -1
  163. omniload-0.4.0/omniload/util/time.py +29 -0
  164. {omniload-0.2.0 → omniload-0.4.0}/omniload.egg-info/PKG-INFO +55 -17
  165. omniload-0.4.0/omniload.egg-info/SOURCES.txt +309 -0
  166. {omniload-0.2.0 → omniload-0.4.0}/omniload.egg-info/requires.txt +4 -3
  167. {omniload-0.2.0 → omniload-0.4.0}/omniload.egg-info/top_level.txt +1 -0
  168. {omniload-0.2.0 → omniload-0.4.0}/pyproject.toml +12 -6
  169. omniload-0.2.0/NOTICE +0 -35
  170. omniload-0.2.0/omniload/__init__.py +0 -13
  171. omniload-0.2.0/omniload/conftest.py +0 -73
  172. omniload-0.2.0/omniload/main.py +0 -808
  173. omniload-0.2.0/omniload/main_test.py +0 -6691
  174. omniload-0.2.0/omniload/src/adjust/adjust_helpers_test.py +0 -15
  175. omniload-0.2.0/omniload/src/anthropic/helpers_test.py +0 -524
  176. omniload-0.2.0/omniload/src/appsflyer/client_test.py +0 -58
  177. omniload-0.2.0/omniload/src/blob_test.py +0 -36
  178. omniload-0.2.0/omniload/src/couchbase_source/helpers_test.py +0 -170
  179. omniload-0.2.0/omniload/src/destinations.py +0 -988
  180. omniload-0.2.0/omniload/src/destinations_test.py +0 -243
  181. omniload-0.2.0/omniload/src/docebo/helpers_test.py +0 -190
  182. omniload-0.2.0/omniload/src/facebook_ads/helpers_test.py +0 -208
  183. omniload-0.2.0/omniload/src/factory.py +0 -305
  184. omniload-0.2.0/omniload/src/factory_test.py +0 -13
  185. omniload-0.2.0/omniload/src/fireflies/helpers_test.py +0 -515
  186. omniload-0.2.0/omniload/src/fluxx/helpers_test.py +0 -287
  187. omniload-0.2.0/omniload/src/fundraiseup/client_test.py +0 -463
  188. omniload-0.2.0/omniload/src/google_ads/reports_test.py +0 -212
  189. omniload-0.2.0/omniload/src/google_ads/test_google_ads.py +0 -184
  190. omniload-0.2.0/omniload/src/google_analytics/helpers_test.py +0 -78
  191. omniload-0.2.0/omniload/src/gorgias/helpers_test.py +0 -45
  192. omniload-0.2.0/omniload/src/intercom/helpers_test.py +0 -249
  193. omniload-0.2.0/omniload/src/klaviyo/helpers_test.py +0 -36
  194. omniload-0.2.0/omniload/src/linkedin_ads/helpers_test.py +0 -141
  195. omniload-0.2.0/omniload/src/loader_test.py +0 -73
  196. omniload-0.2.0/omniload/src/mailchimp/helpers_test.py +0 -303
  197. omniload-0.2.0/omniload/src/masking_test.py +0 -386
  198. omniload-0.2.0/omniload/src/mongodb/helpers_test.py +0 -455
  199. omniload-0.2.0/omniload/src/primer/helpers_test.py +0 -81
  200. omniload-0.2.0/omniload/src/reddit_ads/helpers_test.py +0 -181
  201. omniload-0.2.0/omniload/src/revenuecat/helpers_test.py +0 -158
  202. omniload-0.2.0/omniload/src/shopify/helpers_test.py +0 -49
  203. omniload-0.2.0/omniload/src/smartsheets/test_smartsheets.py +0 -134
  204. omniload-0.2.0/omniload/src/snapchat_ads/helpers_test.py +0 -248
  205. omniload-0.2.0/omniload/src/sources.py +0 -5434
  206. omniload-0.2.0/omniload/src/sources_test.py +0 -314
  207. omniload-0.2.0/omniload/src/stripe_analytics/helpers_test.py +0 -130
  208. omniload-0.2.0/omniload/src/table_definition.py +0 -15
  209. omniload-0.2.0/omniload/src/tiktok_ads/tiktok_helpers_test.py +0 -56
  210. omniload-0.2.0/omniload/src/time.py +0 -11
  211. omniload-0.2.0/omniload.egg-info/SOURCES.txt +0 -246
  212. {omniload-0.2.0 → omniload-0.4.0}/LICENSE +0 -0
  213. {omniload-0.2.0 → omniload-0.4.0}/LICENSE.Apache-2.0 +0 -0
  214. {omniload-0.2.0 → omniload-0.4.0}/MANIFEST.in +0 -0
  215. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/codec}/masking.py +0 -0
  216. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/core}/resource.py +0 -0
  217. {omniload-0.2.0 → omniload-0.4.0}/omniload/py.typed +0 -0
  218. /omniload-0.2.0/omniload/src/adjust/adjust_helpers.py → /omniload-0.4.0/omniload/source/adjust/helpers.py +0 -0
  219. /omniload-0.2.0/omniload/src/airtable/__init__.py → /omniload-0.4.0/omniload/source/airtable/adapter.py +0 -0
  220. /omniload-0.2.0/omniload/src/anthropic/__init__.py → /omniload-0.4.0/omniload/source/anthropic/adapter.py +0 -0
  221. /omniload-0.2.0/omniload/src/applovin/__init__.py → /omniload-0.4.0/omniload/source/applovin/adapter.py +0 -0
  222. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/appstore/client.py +0 -0
  223. /omniload-0.2.0/omniload/src/appstore/errors.py → /omniload-0.4.0/omniload/source/appstore/exceptions.py +0 -0
  224. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/appstore/models.py +0 -0
  225. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/appstore/resources.py +0 -0
  226. /omniload-0.2.0/omniload/src/arrow/__init__.py → /omniload-0.4.0/omniload/source/arrow/adapter.py +0 -0
  227. /omniload-0.2.0/omniload/src/asana_source/__init__.py → /omniload-0.4.0/omniload/source/asana/adapter.py +0 -0
  228. {omniload-0.2.0/omniload/src/asana_source → omniload-0.4.0/omniload/source/asana}/helpers.py +0 -0
  229. {omniload-0.2.0/omniload/src/asana_source → omniload-0.4.0/omniload/source/asana}/settings.py +0 -0
  230. /omniload-0.2.0/omniload/src/attio/__init__.py → /omniload-0.4.0/omniload/source/attio/adapter.py +0 -0
  231. /omniload-0.2.0/omniload/src/bruin/__init__.py → /omniload-0.4.0/omniload/source/bruin/adapter.py +0 -0
  232. /omniload-0.2.0/omniload/src/chess/__init__.py → /omniload-0.4.0/omniload/source/chess/adapter.py +0 -0
  233. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/chess/helpers.py +0 -0
  234. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/chess/settings.py +0 -0
  235. /omniload-0.2.0/omniload/src/couchbase_source/__init__.py → /omniload-0.4.0/omniload/source/couchbase/adapter.py +0 -0
  236. {omniload-0.2.0/omniload/src/couchbase_source → omniload-0.4.0/omniload/source/couchbase}/helpers.py +0 -0
  237. /omniload-0.2.0/omniload/src/cursor/__init__.py → /omniload-0.4.0/omniload/source/cursor/adapter.py +0 -0
  238. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/cursor/helpers.py +0 -0
  239. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/customer_io/helpers.py +0 -0
  240. /omniload-0.2.0/omniload/src/docebo/__init__.py → /omniload-0.4.0/omniload/source/docebo/adapter.py +0 -0
  241. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/docebo/helpers.py +0 -0
  242. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/dune/helpers.py +0 -0
  243. /omniload-0.2.0/omniload/src/dynamodb/__init__.py → /omniload-0.4.0/omniload/source/dynamodb/adapter.py +0 -0
  244. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/exceptions.py +0 -0
  245. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/settings.py +0 -0
  246. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/facebook_ads/utils.py +0 -0
  247. /omniload-0.2.0/omniload/src/filesystem/__init__.py → /omniload-0.4.0/omniload/source/filesystem/adapter.py +0 -0
  248. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/filesystem/helpers.py +0 -0
  249. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/filesystem/readers.py +0 -0
  250. /omniload-0.2.0/omniload/src/fireflies/__init__.py → /omniload-0.4.0/omniload/source/fireflies/adapter.py +0 -0
  251. /omniload-0.2.0/omniload/src/fluxx/__init__.py → /omniload-0.4.0/omniload/source/fluxx/adapter.py +0 -0
  252. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/fluxx/helpers.py +0 -0
  253. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/freshdesk/settings.py +0 -0
  254. /omniload-0.2.0/omniload/src/fundraiseup/__init__.py → /omniload-0.4.0/omniload/source/fundraiseup/adapter.py +0 -0
  255. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/github/helpers.py +0 -0
  256. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/github/queries.py +0 -0
  257. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/github/settings.py +0 -0
  258. /omniload-0.2.0/omniload/src/google_ads/__init__.py → /omniload-0.4.0/omniload/source/google_ads/adapter.py +0 -0
  259. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/field.py +0 -0
  260. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/metrics.py +0 -0
  261. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/predicates.py +0 -0
  262. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_ads/reports.py +0 -0
  263. /omniload-0.2.0/omniload/src/google_analytics/__init__.py → /omniload-0.4.0/omniload/source/google_analytics/adapter.py +0 -0
  264. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_analytics/helpers.py +0 -0
  265. /omniload-0.2.0/omniload/src/google_sheets/__init__.py → /omniload-0.4.0/omniload/source/google_sheets/adapter.py +0 -0
  266. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_sheets/helpers/__init__.py +0 -0
  267. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_sheets/helpers/api_calls.py +0 -0
  268. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/google_sheets/helpers/data_processing.py +0 -0
  269. /omniload-0.2.0/omniload/src/gorgias/__init__.py → /omniload-0.4.0/omniload/source/gorgias/adapter.py +0 -0
  270. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/hostaway/client.py +0 -0
  271. /omniload-0.2.0/omniload/src/http/__init__.py → /omniload-0.4.0/omniload/source/http/adapter.py +0 -0
  272. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/http/readers.py +0 -0
  273. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/hubspot/helpers.py +0 -0
  274. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/hubspot/settings.py +0 -0
  275. /omniload-0.2.0/omniload/src/indeed/__init__.py → /omniload-0.4.0/omniload/source/indeed/adapter.py +0 -0
  276. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/indeed/helpers.py +0 -0
  277. /omniload-0.2.0/omniload/src/influxdb/__init__.py → /omniload-0.4.0/omniload/source/influxdb/adapter.py +0 -0
  278. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/influxdb/client.py +0 -0
  279. /omniload-0.2.0/omniload/src/intercom/__init__.py → /omniload-0.4.0/omniload/source/intercom/adapter.py +0 -0
  280. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/intercom/settings.py +0 -0
  281. /omniload-0.2.0/omniload/src/isoc_pulse/__init__.py → /omniload-0.4.0/omniload/source/isoc_pulse/adapter.py +0 -0
  282. /omniload-0.2.0/omniload/src/jira_source/__init__.py → /omniload-0.4.0/omniload/source/jira/adapter.py +0 -0
  283. {omniload-0.2.0/omniload/src/jira_source → omniload-0.4.0/omniload/source/jira}/helpers.py +0 -0
  284. {omniload-0.2.0/omniload/src/jira_source → omniload-0.4.0/omniload/source/jira}/settings.py +0 -0
  285. /omniload-0.2.0/omniload/src/kafka/__init__.py → /omniload-0.4.0/omniload/source/kafka/adapter.py +0 -0
  286. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/kafka/model.py +0 -0
  287. /omniload-0.2.0/omniload/src/kinesis/__init__.py → /omniload-0.4.0/omniload/source/kinesis/adapter.py +0 -0
  288. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/kinesis/helpers.py +0 -0
  289. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/klaviyo/client.py +0 -0
  290. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/klaviyo/helpers.py +0 -0
  291. /omniload-0.2.0/omniload/src/linear/__init__.py → /omniload-0.4.0/omniload/source/linear/adapter.py +0 -0
  292. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/linear/helpers.py +0 -0
  293. /omniload-0.2.0/omniload/src/linkedin_ads/dimension_time_enum.py → /omniload-0.4.0/omniload/source/linkedin_ads/model.py +0 -0
  294. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/mailchimp/helpers.py +0 -0
  295. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/mailchimp/settings.py +0 -0
  296. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/mixpanel/client.py +0 -0
  297. /omniload-0.2.0/omniload/src/monday/__init__.py → /omniload-0.4.0/omniload/source/monday/adapter.py +0 -0
  298. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/monday/settings.py +0 -0
  299. /omniload-0.2.0/omniload/src/mongodb/__init__.py → /omniload-0.4.0/omniload/source/mongodb/adapter.py +0 -0
  300. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/mongodb/helpers.py +0 -0
  301. /omniload-0.2.0/omniload/src/notion/__init__.py → /omniload-0.4.0/omniload/source/notion/adapter.py +0 -0
  302. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/notion/helpers/__init__.py +0 -0
  303. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/notion/helpers/client.py +0 -0
  304. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/notion/helpers/database.py +0 -0
  305. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/notion/settings.py +0 -0
  306. /omniload-0.2.0/omniload/src/personio/__init__.py → /omniload-0.4.0/omniload/source/personio/adapter.py +0 -0
  307. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/personio/helpers.py +0 -0
  308. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/phantombuster/client.py +0 -0
  309. /omniload-0.2.0/omniload/src/pipedrive/__init__.py → /omniload-0.4.0/omniload/source/pipedrive/adapter.py +0 -0
  310. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/helpers/__init__.py +0 -0
  311. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/helpers/custom_fields_munger.py +0 -0
  312. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/settings.py +0 -0
  313. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/pipedrive/typing.py +0 -0
  314. /omniload-0.2.0/omniload/src/plusvibeai/__init__.py → /omniload-0.4.0/omniload/source/plusvibeai/adapter.py +0 -0
  315. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/plusvibeai/helpers.py +0 -0
  316. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/plusvibeai/settings.py +0 -0
  317. /omniload-0.2.0/omniload/src/primer/__init__.py → /omniload-0.4.0/omniload/source/primer/adapter.py +0 -0
  318. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/primer/helpers.py +0 -0
  319. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/reddit_ads/helpers.py +0 -0
  320. /omniload-0.2.0/omniload/src/revenuecat/__init__.py → /omniload-0.4.0/omniload/source/revenuecat/adapter.py +0 -0
  321. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/revenuecat/helpers.py +0 -0
  322. /omniload-0.2.0/omniload/src/salesforce/__init__.py → /omniload-0.4.0/omniload/source/salesforce/adapter.py +0 -0
  323. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/salesforce/helpers.py +0 -0
  324. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/shopify/exceptions.py +0 -0
  325. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/shopify/helpers.py +0 -0
  326. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/shopify/settings.py +0 -0
  327. /omniload-0.2.0/omniload/src/slack/__init__.py → /omniload-0.4.0/omniload/source/slack/adapter.py +0 -0
  328. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/slack/helpers.py +0 -0
  329. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/slack/settings.py +0 -0
  330. /omniload-0.2.0/omniload/src/snapchat_ads/__init__.py → /omniload-0.4.0/omniload/source/snapchat_ads/adapter.py +0 -0
  331. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/snapchat_ads/client.py +0 -0
  332. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/snapchat_ads/settings.py +0 -0
  333. /omniload-0.2.0/omniload/src/socrata_source/__init__.py → /omniload-0.4.0/omniload/source/socrata/adapter.py +0 -0
  334. {omniload-0.2.0/omniload/src/socrata_source → omniload-0.4.0/omniload/source/socrata}/helpers.py +0 -0
  335. {omniload-0.2.0/omniload/src/socrata_source → omniload-0.4.0/omniload/source/socrata}/settings.py +0 -0
  336. /omniload-0.2.0/omniload/src/solidgate/__init__.py → /omniload-0.4.0/omniload/source/solidgate/adapter.py +0 -0
  337. /omniload-0.2.0/omniload/src/sql_database/__init__.py → /omniload-0.4.0/omniload/source/sql_database/adapter.py +0 -0
  338. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/sql_database/callbacks.py +0 -0
  339. /omniload-0.2.0/omniload/src/stripe_analytics/__init__.py → /omniload-0.4.0/omniload/source/stripe/adapter.py +0 -0
  340. {omniload-0.2.0/omniload/src/stripe_analytics → omniload-0.4.0/omniload/source/stripe}/helpers.py +0 -0
  341. {omniload-0.2.0/omniload/src/stripe_analytics → omniload-0.4.0/omniload/source/stripe}/settings.py +0 -0
  342. /omniload-0.2.0/omniload/src/tiktok_ads/tiktok_helpers.py → /omniload-0.4.0/omniload/source/tiktok_ads/helpers.py +0 -0
  343. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/trustpilot/client.py +0 -0
  344. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/wise/client.py +0 -0
  345. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/__init__.py +0 -0
  346. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/api_helpers.py +0 -0
  347. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/credentials.py +0 -0
  348. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/helpers/talk_api.py +0 -0
  349. {omniload-0.2.0/omniload/src → omniload-0.4.0/omniload/source}/zendesk/settings.py +0 -0
  350. /omniload-0.2.0/omniload/src/zoom/__init__.py → /omniload-0.4.0/omniload/source/zoom/adapter.py +0 -0
  351. {omniload-0.2.0/omniload/src/collector → omniload-0.4.0/omniload/util}/spinner.py +0 -0
  352. {omniload-0.2.0 → omniload-0.4.0}/omniload.egg-info/dependency_links.txt +0 -0
  353. {omniload-0.2.0 → omniload-0.4.0}/omniload.egg-info/entry_points.txt +0 -0
  354. {omniload-0.2.0 → omniload-0.4.0}/setup.cfg +0 -0
omniload-0.4.0/NOTICE ADDED
@@ -0,0 +1,35 @@
1
+ NOTICE
2
+
3
+ This project contains code from the following Apache 2.0 licensed project:
4
+
5
+ dlt-hub/verified-sources
6
+ https://github.com/dlt-hub/verified-sources
7
+ Copyright 2022-2025 ScaleVector
8
+ Licensed under the Apache License, Version 2.0
9
+
10
+ The following directories contain code from dlt-hub:
11
+ - omniload/source/airtable/
12
+ - omniload/source/asana/
13
+ - omniload/source/chess/
14
+ - omniload/source/facebook_ads/
15
+ - omniload/source/filesystem/
16
+ - omniload/source/freshdesk/
17
+ - omniload/source/github/
18
+ - omniload/source/google_ads/
19
+ - omniload/source/google_analytics/
20
+ - omniload/source/google_sheets/
21
+ - omniload/source/hubspot/
22
+ - omniload/source/jira/
23
+ - omniload/source/kafka/
24
+ - omniload/source/kinesis/
25
+ - omniload/source/mongodb/
26
+ - omniload/source/notion/
27
+ - omniload/source/personio/
28
+ - omniload/source/pipedrive/
29
+ - omniload/source/salesforce/
30
+ - omniload/source/shopify/
31
+ - omniload/source/slack/
32
+ - omniload/source/stripe/
33
+ - omniload/source/zendesk/
34
+
35
+ The Apache License 2.0 can be found in the LICENSE.Apache-2.0 file.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omniload
3
- Version: 0.2.0
3
+ Version: 0.4.0
4
4
  Summary: omniload is a polyglot data loader based on dlt. Copy data between any source and any destination.
5
5
  Author: Mustafa Ersan, Sanju Shah Gupta, Saravjeet 'Aman' Singh
6
6
  Author-email: Burak Karakan <burak.karakan@getbruin.com>
@@ -65,7 +65,7 @@ License-File: NOTICE
65
65
  Requires-Dist: aiohttp<4
66
66
  Requires-Dist: asana<3.3
67
67
  Requires-Dist: click<8.5
68
- Requires-Dist: clickhouse-connect<1,>=0.8
68
+ Requires-Dist: clickhouse-connect<2,>=0.8
69
69
  Requires-Dist: clickhouse-driver<0.3
70
70
  Requires-Dist: clickhouse-sqlalchemy<0.4
71
71
  Requires-Dist: confluent-kafka<2.15
@@ -73,7 +73,7 @@ Requires-Dist: couchbase<5,>=4
73
73
  Requires-Dist: databricks-sql-connector<5
74
74
  Requires-Dist: databricks-sqlalchemy<3
75
75
  Requires-Dist: dataclasses-json<0.7
76
- Requires-Dist: dlt<1.22
76
+ Requires-Dist: dlt<1.29
77
77
  Requires-Dist: dlt-cratedb<0.2
78
78
  Requires-Dist: duckdb<1.6
79
79
  Requires-Dist: duckdb-engine<0.18
@@ -128,7 +128,7 @@ Requires-Dist: poethepoet<1; extra == "develop"
128
128
  Requires-Dist: pyproject-fmt<3; extra == "develop"
129
129
  Requires-Dist: pytest-repeat<1; extra == "develop"
130
130
  Requires-Dist: ruff<0.16; extra == "develop"
131
- Requires-Dist: ty==0.0.51; extra == "develop"
131
+ Requires-Dist: ty==0.0.53; extra == "develop"
132
132
  Requires-Dist: validate-pyproject<1; extra == "develop"
133
133
  Provides-Extra: full
134
134
  Requires-Dist: omniload[ibm-db,odbc,oracle]; extra == "full"
@@ -143,6 +143,7 @@ Provides-Extra: release
143
143
  Requires-Dist: build<2; extra == "release"
144
144
  Requires-Dist: twine<7; extra == "release"
145
145
  Provides-Extra: test
146
+ Requires-Dist: boto3<2; extra == "test"
146
147
  Requires-Dist: pendulum[test]<4,>=3; extra == "test"
147
148
  Requires-Dist: pytest<10; extra == "test"
148
149
  Requires-Dist: pytest-asyncio<2; extra == "test"
@@ -167,34 +168,49 @@ Dynamic: license-file
167
168
 
168
169
  ## About
169
170
 
170
- omniload is a polyglot data loader framework based on dlt.
171
- It allows you to load data from any source into any destination,
172
- either using a concise CLI from your shell,
173
- or the Python API from your own applications.
171
+ omniload is a polyglot data loader framework based on [dlt], the
172
+ open-source Python library for building data pipelines. dlt does the
173
+ heavy lifting (schema inference, normalization, and incremental load
174
+ state); omniload wraps it behind a single CLI and a URI scheme, so you
175
+ can copy data between any source and any destination without writing
176
+ pipeline code, either from your shell or the Python API.
174
177
 
175
178
  omniload provides the same efficient incremental data loading modes
176
- inherited by [dlt]: `append`, `merge`, and `delete+insert`.
179
+ inherited by dlt: `append`, `merge`, and `delete+insert`.
177
180
 
178
181
  ## Install
179
- We recommend using [uv] to install or run `omniload`.
182
+
183
+ ### Container
184
+
185
+ For running `omniload` in a container environment, use the provided OCI
186
+ images.
180
187
 
181
188
  ```shell
182
- pip install uv
189
+ docker run --rm ghcr.io/panodata/omniload:latest version
190
+ ```
191
+
192
+ ### Package
193
+
194
+ For running or installing the `omniload` Python package,
195
+ we are recommending to use [uv]. [^1][^2]
196
+ ```shell
183
197
  uvx omniload
184
198
  ```
185
199
 
186
- Alternatively, if you'd like to install it globally:
200
+ Alternatively, if you like to install it account-wide on your system:
187
201
  ```shell
188
- uv pip install --system omniload
202
+ uv tool install omniload
189
203
  ```
190
204
 
191
- While installation with vanilla `pip` is possible, it's an order of magnitude slower.
205
+ [^1]: You can install `uv` using `pip install uv`, or another method that matches your operating system.
206
+ [^2]: While installing `omniload` with vanilla `pip` is possible, it is an order of magnitude slower.
192
207
 
193
208
  ## Synopsis
194
209
 
195
- The next command instructs omniload to read the table `public.some_data` from
196
- your PostgreSQL instance, and to write the data to your BigQuery warehouse
197
- under the schema `omniload` and table `some_data`.
210
+ ### CLI
211
+
212
+ Instruct omniload to read from the PostgreSQL table `public.some_data`,
213
+ and write to the BigQuery warehouse table `omniload.some_data`.
198
214
 
199
215
  ```shell
200
216
  omniload ingest \
@@ -204,6 +220,27 @@ omniload ingest \
204
220
  --dest-table 'omniload.some_data'
205
221
  ```
206
222
 
223
+ ### Python API
224
+
225
+ Using `omniload.run_ingest`, you can run the same
226
+ ingestion from your own application. The keyword arguments map one-to-one to the
227
+ CLI options, and it returns the dlt `LoadInfo` for the run (or `None` for a dry run).
228
+
229
+ ```python
230
+ from omniload import run_ingest
231
+
232
+ info = run_ingest(
233
+ source_uri="sqlite:///./source.db",
234
+ dest_uri="duckdb:///./warehouse.duckdb",
235
+ source_table="main.some_table",
236
+ dest_table="public.some_table",
237
+ )
238
+ print(info)
239
+ ```
240
+
241
+ See the [Python API documentation] for dry runs, error handling, and passing
242
+ enum options as strings.
243
+
207
244
  ## Handbook
208
245
 
209
246
  Please visit the [quickstart documentation], or inspect the
@@ -240,6 +277,7 @@ the way down. Kudos.
240
277
 
241
278
  [dlt]: https://github.com/dlt-hub/dlt
242
279
  [quickstart documentation]: https://omniload.readthedocs.io/getting-started/quickstart.html
280
+ [Python API documentation]: https://omniload.readthedocs.io/getting-started/python-api.html
243
281
  [ingestr]: https://bruin-data.github.io/ingestr/
244
282
  [Issues]: https://github.com/panodata/omniload/issues
245
283
  [LICENSE]: https://github.com/panodata/omniload/blob/main/LICENSE
@@ -12,34 +12,49 @@
12
12
 
13
13
  ## About
14
14
 
15
- omniload is a polyglot data loader framework based on dlt.
16
- It allows you to load data from any source into any destination,
17
- either using a concise CLI from your shell,
18
- or the Python API from your own applications.
15
+ omniload is a polyglot data loader framework based on [dlt], the
16
+ open-source Python library for building data pipelines. dlt does the
17
+ heavy lifting (schema inference, normalization, and incremental load
18
+ state); omniload wraps it behind a single CLI and a URI scheme, so you
19
+ can copy data between any source and any destination without writing
20
+ pipeline code, either from your shell or the Python API.
19
21
 
20
22
  omniload provides the same efficient incremental data loading modes
21
- inherited by [dlt]: `append`, `merge`, and `delete+insert`.
23
+ inherited by dlt: `append`, `merge`, and `delete+insert`.
22
24
 
23
25
  ## Install
24
- We recommend using [uv] to install or run `omniload`.
26
+
27
+ ### Container
28
+
29
+ For running `omniload` in a container environment, use the provided OCI
30
+ images.
25
31
 
26
32
  ```shell
27
- pip install uv
33
+ docker run --rm ghcr.io/panodata/omniload:latest version
34
+ ```
35
+
36
+ ### Package
37
+
38
+ For running or installing the `omniload` Python package,
39
+ we are recommending to use [uv]. [^1][^2]
40
+ ```shell
28
41
  uvx omniload
29
42
  ```
30
43
 
31
- Alternatively, if you'd like to install it globally:
44
+ Alternatively, if you like to install it account-wide on your system:
32
45
  ```shell
33
- uv pip install --system omniload
46
+ uv tool install omniload
34
47
  ```
35
48
 
36
- While installation with vanilla `pip` is possible, it's an order of magnitude slower.
49
+ [^1]: You can install `uv` using `pip install uv`, or another method that matches your operating system.
50
+ [^2]: While installing `omniload` with vanilla `pip` is possible, it is an order of magnitude slower.
37
51
 
38
52
  ## Synopsis
39
53
 
40
- The next command instructs omniload to read the table `public.some_data` from
41
- your PostgreSQL instance, and to write the data to your BigQuery warehouse
42
- under the schema `omniload` and table `some_data`.
54
+ ### CLI
55
+
56
+ Instruct omniload to read from the PostgreSQL table `public.some_data`,
57
+ and write to the BigQuery warehouse table `omniload.some_data`.
43
58
 
44
59
  ```shell
45
60
  omniload ingest \
@@ -49,6 +64,27 @@ omniload ingest \
49
64
  --dest-table 'omniload.some_data'
50
65
  ```
51
66
 
67
+ ### Python API
68
+
69
+ Using `omniload.run_ingest`, you can run the same
70
+ ingestion from your own application. The keyword arguments map one-to-one to the
71
+ CLI options, and it returns the dlt `LoadInfo` for the run (or `None` for a dry run).
72
+
73
+ ```python
74
+ from omniload import run_ingest
75
+
76
+ info = run_ingest(
77
+ source_uri="sqlite:///./source.db",
78
+ dest_uri="duckdb:///./warehouse.duckdb",
79
+ source_table="main.some_table",
80
+ dest_table="public.some_table",
81
+ )
82
+ print(info)
83
+ ```
84
+
85
+ See the [Python API documentation] for dry runs, error handling, and passing
86
+ enum options as strings.
87
+
52
88
  ## Handbook
53
89
 
54
90
  Please visit the [quickstart documentation], or inspect the
@@ -85,6 +121,7 @@ the way down. Kudos.
85
121
 
86
122
  [dlt]: https://github.com/dlt-hub/dlt
87
123
  [quickstart documentation]: https://omniload.readthedocs.io/getting-started/quickstart.html
124
+ [Python API documentation]: https://omniload.readthedocs.io/getting-started/python-api.html
88
125
  [ingestr]: https://bruin-data.github.io/ingestr/
89
126
  [Issues]: https://github.com/panodata/omniload/issues
90
127
  [LICENSE]: https://github.com/panodata/omniload/blob/main/LICENSE
@@ -97,6 +97,7 @@ linkcheck_ignore = [
97
97
  r"https://support.appsflyer.com/",
98
98
  r"https://help.docebo.com/",
99
99
  r"https://www.reddit.com/",
100
+ r"https://www.linkedin.com/developers.*",
100
101
  ]
101
102
  linkcheck_anchors_ignore_for_url = [
102
103
  r"https://developers.zoom.us/",
@@ -0,0 +1,37 @@
1
+ from importlib.metadata import PackageNotFoundError, version
2
+ from unittest import mock
3
+
4
+ from omniload.api import (
5
+ IncrementalStrategy,
6
+ LoaderFileFormat,
7
+ Progress,
8
+ SchemaNaming,
9
+ SqlBackend,
10
+ SqlReflectionLevel,
11
+ run_ingest,
12
+ )
13
+ from omniload.error import IngestJobError, ValidationError
14
+
15
+ __appname__ = "omniload"
16
+
17
+
18
+ try:
19
+ __version__ = version(__appname__)
20
+ except PackageNotFoundError: # pragma: no cover
21
+ __version__ = "0.0.0-dev"
22
+
23
+ # Turn off dlt's telemetry to tame three more requests per invocation.
24
+ mock.patch("dlt.common.runtime.telemetry._TELEMETRY_STARTED", True).start()
25
+
26
+ __all__ = [
27
+ "IncrementalStrategy",
28
+ "IngestJobError",
29
+ "LoaderFileFormat",
30
+ "Progress",
31
+ "SchemaNaming",
32
+ "SqlBackend",
33
+ "SqlReflectionLevel",
34
+ "ValidationError",
35
+ "__version__",
36
+ "run_ingest",
37
+ ]