dpone 0.1.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 (515) hide show
  1. dpone-0.1.0/PKG-INFO +290 -0
  2. dpone-0.1.0/README.md +225 -0
  3. dpone-0.1.0/pyproject.toml +156 -0
  4. dpone-0.1.0/src/dpone/.env.example +70 -0
  5. dpone-0.1.0/src/dpone/.gitignore +0 -0
  6. dpone-0.1.0/src/dpone/__init__.py +61 -0
  7. dpone-0.1.0/src/dpone/adapters/__init__.py +0 -0
  8. dpone-0.1.0/src/dpone/adapters/fs_local.py +21 -0
  9. dpone-0.1.0/src/dpone/adapters/fs_memory.py +30 -0
  10. dpone-0.1.0/src/dpone/adapters/yaml_pyyaml.py +16 -0
  11. dpone-0.1.0/src/dpone/app/__init__.py +0 -0
  12. dpone-0.1.0/src/dpone/app/cli_reference_source.py +13 -0
  13. dpone-0.1.0/src/dpone/app/context.py +33 -0
  14. dpone-0.1.0/src/dpone/app/logging.py +23 -0
  15. dpone-0.1.0/src/dpone/app/settings.py +68 -0
  16. dpone-0.1.0/src/dpone/cli/__init__.py +7 -0
  17. dpone-0.1.0/src/dpone/cli/legacy.py +74 -0
  18. dpone-0.1.0/src/dpone/cli/main.py +42 -0
  19. dpone-0.1.0/src/dpone/cli/parser.py +15 -0
  20. dpone-0.1.0/src/dpone/cli_render/__init__.py +12 -0
  21. dpone-0.1.0/src/dpone/cli_render/dag/__init__.py +3 -0
  22. dpone-0.1.0/src/dpone/cli_render/dag/common.py +144 -0
  23. dpone-0.1.0/src/dpone/cli_render/dag/deps.py +70 -0
  24. dpone-0.1.0/src/dpone/cli_render/dag/e2e_attribution.py +160 -0
  25. dpone-0.1.0/src/dpone/cli_render/dag/edge.py +95 -0
  26. dpone-0.1.0/src/dpone/cli_render/dag/edge_e2e.py +133 -0
  27. dpone-0.1.0/src/dpone/cli_render/dag/node.py +104 -0
  28. dpone-0.1.0/src/dpone/cli_render/dag/node_e2e.py +134 -0
  29. dpone-0.1.0/src/dpone/cli_render/dag/report.py +55 -0
  30. dpone-0.1.0/src/dpone/cli_render/manifest/__init__.py +19 -0
  31. dpone-0.1.0/src/dpone/cli_render/manifest/common.py +114 -0
  32. dpone-0.1.0/src/dpone/cli_render/manifest/explain.py +273 -0
  33. dpone-0.1.0/src/dpone/cli_render/manifest/list.py +11 -0
  34. dpone-0.1.0/src/dpone/cli_render/manifest/migrate.py +15 -0
  35. dpone-0.1.0/src/dpone/cli_render/manifest/registry_lint.py +15 -0
  36. dpone-0.1.0/src/dpone/cli_render/manifest/render.py +13 -0
  37. dpone-0.1.0/src/dpone/cli_render/manifest/stats.py +23 -0
  38. dpone-0.1.0/src/dpone/cli_render/manifest/validate.py +13 -0
  39. dpone-0.1.0/src/dpone/cli_render/manifest/verify.py +20 -0
  40. dpone-0.1.0/src/dpone/commands/__init__.py +0 -0
  41. dpone-0.1.0/src/dpone/commands/base.py +29 -0
  42. dpone-0.1.0/src/dpone/commands/dag/__init__.py +0 -0
  43. dpone-0.1.0/src/dpone/commands/dag/explain_deps_cmd.py +120 -0
  44. dpone-0.1.0/src/dpone/commands/dag/explain_edge_cmd.py +123 -0
  45. dpone-0.1.0/src/dpone/commands/dag/explain_edge_e2e_cmd.py +134 -0
  46. dpone-0.1.0/src/dpone/commands/dag/explain_node_cmd.py +93 -0
  47. dpone-0.1.0/src/dpone/commands/dag/explain_node_e2e_cmd.py +114 -0
  48. dpone-0.1.0/src/dpone/commands/dag/list_edges_cmd.py +309 -0
  49. dpone-0.1.0/src/dpone/commands/dag/report_cmd.py +255 -0
  50. dpone-0.1.0/src/dpone/commands/dag/subgraph_cmd.py +213 -0
  51. dpone-0.1.0/src/dpone/commands/docs/__init__.py +60 -0
  52. dpone-0.1.0/src/dpone/commands/docs/check_compatibility_cmd.py +52 -0
  53. dpone-0.1.0/src/dpone/commands/docs/check_docs_cmd.py +44 -0
  54. dpone-0.1.0/src/dpone/commands/docs/check_import_rules_cmd.py +37 -0
  55. dpone-0.1.0/src/dpone/commands/docs/check_layer_metrics_cmd.py +97 -0
  56. dpone-0.1.0/src/dpone/commands/docs/check_removal_readiness_cmd.py +36 -0
  57. dpone-0.1.0/src/dpone/commands/docs/update_cli_reference_cmd.py +26 -0
  58. dpone-0.1.0/src/dpone/commands/docs/update_deprecation_roadmap_cmd.py +35 -0
  59. dpone-0.1.0/src/dpone/commands/docs/update_dev_metrics_cmd.py +45 -0
  60. dpone-0.1.0/src/dpone/commands/docs/update_shim_removal_plan_cmd.py +29 -0
  61. dpone-0.1.0/src/dpone/commands/func_command.py +62 -0
  62. dpone-0.1.0/src/dpone/commands/manifest/__init__.py +0 -0
  63. dpone-0.1.0/src/dpone/commands/manifest/explain_cmd.py +145 -0
  64. dpone-0.1.0/src/dpone/commands/manifest/lint_registry_cmd.py +64 -0
  65. dpone-0.1.0/src/dpone/commands/manifest/list_cmd.py +65 -0
  66. dpone-0.1.0/src/dpone/commands/manifest/migrate_cmd.py +87 -0
  67. dpone-0.1.0/src/dpone/commands/manifest/render_cmd.py +55 -0
  68. dpone-0.1.0/src/dpone/commands/manifest/stats_cmd.py +66 -0
  69. dpone-0.1.0/src/dpone/commands/manifest/validate_cmd.py +60 -0
  70. dpone-0.1.0/src/dpone/commands/manifest/verify_cmd.py +86 -0
  71. dpone-0.1.0/src/dpone/commands/registry.py +175 -0
  72. dpone-0.1.0/src/dpone/config/__init__.py +11 -0
  73. dpone-0.1.0/src/dpone/config/env.py +143 -0
  74. dpone-0.1.0/src/dpone/config/load_config.py +166 -0
  75. dpone-0.1.0/src/dpone/contracts/__init__.py +31 -0
  76. dpone-0.1.0/src/dpone/contracts/api_sources.py +86 -0
  77. dpone-0.1.0/src/dpone/contracts/errors.py +11 -0
  78. dpone-0.1.0/src/dpone/contracts/process_types.py +41 -0
  79. dpone-0.1.0/src/dpone/contracts/run_context.py +17 -0
  80. dpone-0.1.0/src/dpone/contracts/technical_columns.py +165 -0
  81. dpone-0.1.0/src/dpone/core/__init__.py +49 -0
  82. dpone-0.1.0/src/dpone/core/artifacts.py +3 -0
  83. dpone-0.1.0/src/dpone/core/dag_builder.py +118 -0
  84. dpone-0.1.0/src/dpone/core/errors.py +3 -0
  85. dpone-0.1.0/src/dpone/core/etl_types.py +3 -0
  86. dpone-0.1.0/src/dpone/core/runtime.py +3 -0
  87. dpone-0.1.0/src/dpone/core/task_group_builder.py +156 -0
  88. dpone-0.1.0/src/dpone/credentials/__init__.py +39 -0
  89. dpone-0.1.0/src/dpone/credentials/config.py +6 -0
  90. dpone-0.1.0/src/dpone/credentials/factory.py +6 -0
  91. dpone-0.1.0/src/dpone/credentials/manager.py +6 -0
  92. dpone-0.1.0/src/dpone/credentials/providers.py +6 -0
  93. dpone-0.1.0/src/dpone/dag/__init__.py +51 -0
  94. dpone-0.1.0/src/dpone/dag/config.py +32 -0
  95. dpone-0.1.0/src/dpone/dag/config_models.py +173 -0
  96. dpone-0.1.0/src/dpone/dag/config_refs.py +64 -0
  97. dpone-0.1.0/src/dpone/dag/dag_report.py +637 -0
  98. dpone-0.1.0/src/dpone/dag/dependency_parser.py +204 -0
  99. dpone-0.1.0/src/dpone/dag/deps_end_to_end_explain.py +453 -0
  100. dpone-0.1.0/src/dpone/dag/edge_end_to_end_explain.py +278 -0
  101. dpone-0.1.0/src/dpone/dag/edge_explain.py +485 -0
  102. dpone-0.1.0/src/dpone/dag/edge_resolver.py +366 -0
  103. dpone-0.1.0/src/dpone/dag/finder.py +164 -0
  104. dpone-0.1.0/src/dpone/dag/graph.py +83 -0
  105. dpone-0.1.0/src/dpone/dag/graph_algorithms.py +87 -0
  106. dpone-0.1.0/src/dpone/dag/graph_relationships.py +59 -0
  107. dpone-0.1.0/src/dpone/dag/load_config_builder.py +353 -0
  108. dpone-0.1.0/src/dpone/dag/loader.py +95 -0
  109. dpone-0.1.0/src/dpone/dag/manager.py +135 -0
  110. dpone-0.1.0/src/dpone/dag/manifest_chain_loader.py +101 -0
  111. dpone-0.1.0/src/dpone/dag/node_end_to_end_explain.py +151 -0
  112. dpone-0.1.0/src/dpone/dag/node_explain.py +140 -0
  113. dpone-0.1.0/src/dpone/dag/node_factory.py +25 -0
  114. dpone-0.1.0/src/dpone/dag/node_registry.py +79 -0
  115. dpone-0.1.0/src/dpone/dag/parse_trace.py +98 -0
  116. dpone-0.1.0/src/dpone/dag/post_parse_explain.py +337 -0
  117. dpone-0.1.0/src/dpone/dag/process.py +42 -0
  118. dpone-0.1.0/src/dpone/dag/process_config_parser.py +138 -0
  119. dpone-0.1.0/src/dpone/dag/resolver.py +68 -0
  120. dpone-0.1.0/src/dpone/dag/subgraph.py +161 -0
  121. dpone-0.1.0/src/dpone/dag/task_group_index.py +49 -0
  122. dpone-0.1.0/src/dpone/dag/yaml_types.py +63 -0
  123. dpone-0.1.0/src/dpone/etl/__init__.py +39 -0
  124. dpone-0.1.0/src/dpone/etl/processor.py +6 -0
  125. dpone-0.1.0/src/dpone/etl_logging/__init__.py +39 -0
  126. dpone-0.1.0/src/dpone/etl_logging/etl_logger.py +6 -0
  127. dpone-0.1.0/src/dpone/lib/connectors/__init__.py +39 -0
  128. dpone-0.1.0/src/dpone/lib/connectors/api/__init__.py +6 -0
  129. dpone-0.1.0/src/dpone/lib/connectors/api/base.py +6 -0
  130. dpone-0.1.0/src/dpone/lib/connectors/api/cbr.py +6 -0
  131. dpone-0.1.0/src/dpone/lib/connectors/api/google_ads.py +6 -0
  132. dpone-0.1.0/src/dpone/lib/connectors/api/google_sheets.py +6 -0
  133. dpone-0.1.0/src/dpone/lib/connectors/api/omnidesk.py +6 -0
  134. dpone-0.1.0/src/dpone/lib/connectors/api/openexchangerates.py +6 -0
  135. dpone-0.1.0/src/dpone/lib/connectors/api/yandex_webmaster.py +6 -0
  136. dpone-0.1.0/src/dpone/lib/connectors/base.py +9 -0
  137. dpone-0.1.0/src/dpone/lib/connectors/bigquery.py +6 -0
  138. dpone-0.1.0/src/dpone/lib/connectors/clickhouse.py +6 -0
  139. dpone-0.1.0/src/dpone/lib/connectors/postgres.py +6 -0
  140. dpone-0.1.0/src/dpone/lib/connectors/proxy.py +6 -0
  141. dpone-0.1.0/src/dpone/lib/technical_columns.py +3 -0
  142. dpone-0.1.0/src/dpone/lib/utils/__init__.py +15 -0
  143. dpone-0.1.0/src/dpone/lib/utils/data_type_mapper.py +3 -0
  144. dpone-0.1.0/src/dpone/lib/utils/dict_config_handler.py +32 -0
  145. dpone-0.1.0/src/dpone/lib/utils/gcs/__init__.py +41 -0
  146. dpone-0.1.0/src/dpone/lib/utils/gcs/cleaner.py +259 -0
  147. dpone-0.1.0/src/dpone/lib/utils/gcs/client.py +73 -0
  148. dpone-0.1.0/src/dpone/lib/utils/gcs/hmac_credentials.py +123 -0
  149. dpone-0.1.0/src/dpone/lib/utils/gcs/path_manager.py +193 -0
  150. dpone-0.1.0/src/dpone/lib/utils/gcs/uri.py +117 -0
  151. dpone-0.1.0/src/dpone/lib/utils/safe_sql_logging.py +37 -0
  152. dpone-0.1.0/src/dpone/lib/utils/security.py +116 -0
  153. dpone-0.1.0/src/dpone/lib/utils/timezone_converter.py +3 -0
  154. dpone-0.1.0/src/dpone/lib/utils/utils.py +6 -0
  155. dpone-0.1.0/src/dpone/manifest/__init__.py +28 -0
  156. dpone-0.1.0/src/dpone/manifest/batch_compiler.py +566 -0
  157. dpone-0.1.0/src/dpone/manifest/batch_loader.py +101 -0
  158. dpone-0.1.0/src/dpone/manifest/conventions.py +251 -0
  159. dpone-0.1.0/src/dpone/manifest/explain.py +204 -0
  160. dpone-0.1.0/src/dpone/manifest/explain_io.py +37 -0
  161. dpone-0.1.0/src/dpone/manifest/explain_merge.py +267 -0
  162. dpone-0.1.0/src/dpone/manifest/explain_models.py +159 -0
  163. dpone-0.1.0/src/dpone/manifest/explain_trace.py +350 -0
  164. dpone-0.1.0/src/dpone/manifest/explain_utils.py +187 -0
  165. dpone-0.1.0/src/dpone/manifest/explain_why.py +210 -0
  166. dpone-0.1.0/src/dpone/manifest/loader.py +107 -0
  167. dpone-0.1.0/src/dpone/manifest/migrate.py +674 -0
  168. dpone-0.1.0/src/dpone/manifest/models.py +40 -0
  169. dpone-0.1.0/src/dpone/manifest/registry.py +408 -0
  170. dpone-0.1.0/src/dpone/manifest/registry_lint.py +192 -0
  171. dpone-0.1.0/src/dpone/manifest/validation.py +729 -0
  172. dpone-0.1.0/src/dpone/manifest/verify.py +322 -0
  173. dpone-0.1.0/src/dpone/metrics/__init__.py +0 -0
  174. dpone-0.1.0/src/dpone/metrics/import_graph.py +170 -0
  175. dpone-0.1.0/src/dpone/metrics/import_rules.py +282 -0
  176. dpone-0.1.0/src/dpone/metrics/layer_metrics.py +172 -0
  177. dpone-0.1.0/src/dpone/metrics/layer_metrics_gate.py +313 -0
  178. dpone-0.1.0/src/dpone/metrics/loc.py +81 -0
  179. dpone-0.1.0/src/dpone/metrics/models.py +71 -0
  180. dpone-0.1.0/src/dpone/metrics/python_imports.py +120 -0
  181. dpone-0.1.0/src/dpone/metrics/render.py +320 -0
  182. dpone-0.1.0/src/dpone/output.py +122 -0
  183. dpone-0.1.0/src/dpone/output_table.py +63 -0
  184. dpone-0.1.0/src/dpone/ports/__init__.py +16 -0
  185. dpone-0.1.0/src/dpone/ports/db_connector.py +169 -0
  186. dpone-0.1.0/src/dpone/ports/filesystem.py +22 -0
  187. dpone-0.1.0/src/dpone/ports/process_runner.py +56 -0
  188. dpone-0.1.0/src/dpone/ports/runtime_hydrator.py +75 -0
  189. dpone-0.1.0/src/dpone/ports/yaml_codec.py +11 -0
  190. dpone-0.1.0/src/dpone/reconciliation/__init__.py +39 -0
  191. dpone-0.1.0/src/dpone/reconciliation/base.py +6 -0
  192. dpone-0.1.0/src/dpone/reconciliation/manager.py +6 -0
  193. dpone-0.1.0/src/dpone/reconciliation/soft_delete/__init__.py +6 -0
  194. dpone-0.1.0/src/dpone/reconciliation/soft_delete/bigquery.py +6 -0
  195. dpone-0.1.0/src/dpone/reconciliation/soft_delete/clickhouse.py +6 -0
  196. dpone-0.1.0/src/dpone/reconciliation/soft_delete/postgres.py +6 -0
  197. dpone-0.1.0/src/dpone/reconciliation/soft_delete/registry.py +6 -0
  198. dpone-0.1.0/src/dpone/reconciliation/tech_tables.py +6 -0
  199. dpone-0.1.0/src/dpone/runtime/__init__.py +13 -0
  200. dpone-0.1.0/src/dpone/runtime/api_registry.py +285 -0
  201. dpone-0.1.0/src/dpone/runtime/artifacts.py +516 -0
  202. dpone-0.1.0/src/dpone/runtime/bootstrap.py +304 -0
  203. dpone-0.1.0/src/dpone/runtime/connectors/__init__.py +53 -0
  204. dpone-0.1.0/src/dpone/runtime/connectors/api/__init__.py +153 -0
  205. dpone-0.1.0/src/dpone/runtime/connectors/api/appsflyer.py +583 -0
  206. dpone-0.1.0/src/dpone/runtime/connectors/api/appsflyer_resources.py +111 -0
  207. dpone-0.1.0/src/dpone/runtime/connectors/api/base.py +840 -0
  208. dpone-0.1.0/src/dpone/runtime/connectors/api/cbr.py +128 -0
  209. dpone-0.1.0/src/dpone/runtime/connectors/api/fasttrack.py +335 -0
  210. dpone-0.1.0/src/dpone/runtime/connectors/api/fasttrack_resources.py +107 -0
  211. dpone-0.1.0/src/dpone/runtime/connectors/api/google_ads.py +318 -0
  212. dpone-0.1.0/src/dpone/runtime/connectors/api/google_ads_resources.py +50 -0
  213. dpone-0.1.0/src/dpone/runtime/connectors/api/google_sheets.py +665 -0
  214. dpone-0.1.0/src/dpone/runtime/connectors/api/google_sheets_resources.py +50 -0
  215. dpone-0.1.0/src/dpone/runtime/connectors/api/mindbox.py +477 -0
  216. dpone-0.1.0/src/dpone/runtime/connectors/api/mindbox_resources.py +109 -0
  217. dpone-0.1.0/src/dpone/runtime/connectors/api/omnidesk.py +692 -0
  218. dpone-0.1.0/src/dpone/runtime/connectors/api/openexchangerates.py +315 -0
  219. dpone-0.1.0/src/dpone/runtime/connectors/api/openexchangerates_resources.py +63 -0
  220. dpone-0.1.0/src/dpone/runtime/connectors/api/similarweb.py +337 -0
  221. dpone-0.1.0/src/dpone/runtime/connectors/api/similarweb_resources.py +76 -0
  222. dpone-0.1.0/src/dpone/runtime/connectors/api/yandex_webmaster.py +496 -0
  223. dpone-0.1.0/src/dpone/runtime/connectors/api/yandex_webmaster_resources.py +117 -0
  224. dpone-0.1.0/src/dpone/runtime/connectors/base.py +12 -0
  225. dpone-0.1.0/src/dpone/runtime/connectors/bigquery.py +584 -0
  226. dpone-0.1.0/src/dpone/runtime/connectors/clickhouse.py +275 -0
  227. dpone-0.1.0/src/dpone/runtime/connectors/clickhouse_gcs_export.py +97 -0
  228. dpone-0.1.0/src/dpone/runtime/connectors/clickhouse_incremental_export.py +239 -0
  229. dpone-0.1.0/src/dpone/runtime/connectors/clickhouse_partitioning.py +191 -0
  230. dpone-0.1.0/src/dpone/runtime/connectors/clickhouse_query_ops.py +177 -0
  231. dpone-0.1.0/src/dpone/runtime/connectors/postgres.py +324 -0
  232. dpone-0.1.0/src/dpone/runtime/connectors/proxy.py +169 -0
  233. dpone-0.1.0/src/dpone/runtime/credentials/__init__.py +40 -0
  234. dpone-0.1.0/src/dpone/runtime/credentials/config.py +39 -0
  235. dpone-0.1.0/src/dpone/runtime/credentials/factory.py +263 -0
  236. dpone-0.1.0/src/dpone/runtime/credentials/manager.py +37 -0
  237. dpone-0.1.0/src/dpone/runtime/credentials/providers.py +189 -0
  238. dpone-0.1.0/src/dpone/runtime/dev_install.py +290 -0
  239. dpone-0.1.0/src/dpone/runtime/etl/__init__.py +5 -0
  240. dpone-0.1.0/src/dpone/runtime/etl/load_config_runtime.py +195 -0
  241. dpone-0.1.0/src/dpone/runtime/etl/processor.py +243 -0
  242. dpone-0.1.0/src/dpone/runtime/etl/reconciliation_service.py +194 -0
  243. dpone-0.1.0/src/dpone/runtime/etl/run_state_tracker.py +101 -0
  244. dpone-0.1.0/src/dpone/runtime/etl_logging/__init__.py +8 -0
  245. dpone-0.1.0/src/dpone/runtime/etl_logging/etl_logger.py +962 -0
  246. dpone-0.1.0/src/dpone/runtime/reconciliation/__init__.py +37 -0
  247. dpone-0.1.0/src/dpone/runtime/reconciliation/base.py +140 -0
  248. dpone-0.1.0/src/dpone/runtime/reconciliation/manager.py +304 -0
  249. dpone-0.1.0/src/dpone/runtime/reconciliation/soft_delete/__init__.py +13 -0
  250. dpone-0.1.0/src/dpone/runtime/reconciliation/soft_delete/bigquery.py +84 -0
  251. dpone-0.1.0/src/dpone/runtime/reconciliation/soft_delete/clickhouse.py +84 -0
  252. dpone-0.1.0/src/dpone/runtime/reconciliation/soft_delete/postgres.py +96 -0
  253. dpone-0.1.0/src/dpone/runtime/reconciliation/soft_delete/registry.py +104 -0
  254. dpone-0.1.0/src/dpone/runtime/reconciliation/tech_tables.py +941 -0
  255. dpone-0.1.0/src/dpone/runtime/sinks/__init__.py +73 -0
  256. dpone-0.1.0/src/dpone/runtime/sinks/base.py +46 -0
  257. dpone-0.1.0/src/dpone/runtime/sinks/bigquery.py +200 -0
  258. dpone-0.1.0/src/dpone/runtime/sinks/bigquery_staging_file_loader.py +180 -0
  259. dpone-0.1.0/src/dpone/runtime/sinks/bigquery_staging_gcs_loader.py +131 -0
  260. dpone-0.1.0/src/dpone/runtime/sinks/bigquery_staging_manager.py +242 -0
  261. dpone-0.1.0/src/dpone/runtime/sinks/postgres.py +86 -0
  262. dpone-0.1.0/src/dpone/runtime/sinks/postgres_staging_manager.py +179 -0
  263. dpone-0.1.0/src/dpone/runtime/sinks/staging.py +36 -0
  264. dpone-0.1.0/src/dpone/runtime/sinks/strategies/__init__.py +60 -0
  265. dpone-0.1.0/src/dpone/runtime/sinks/strategies/base.py +18 -0
  266. dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/bigquery_base.py +199 -0
  267. dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/bigquery_full_refresh.py +215 -0
  268. dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/bigquery_increment_append.py +148 -0
  269. dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/bigquery_increment_merge.py +75 -0
  270. dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/bigquery_replace_strategy.py +73 -0
  271. dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/dml_helper.py +222 -0
  272. dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/exchange_logger.py +114 -0
  273. dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/partition_validation_service.py +93 -0
  274. dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/target_table_manager.py +282 -0
  275. dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/file_export_loader.py +423 -0
  276. dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/internal_query_loader.py +165 -0
  277. dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/postgres_base.py +175 -0
  278. dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/postgres_full_refresh.py +276 -0
  279. dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/postgres_increment_append.py +304 -0
  280. dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/postgres_increment_merge.py +51 -0
  281. dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/postgres_replace_strategy.py +29 -0
  282. dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/staging_sql_helper.py +142 -0
  283. dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/target_table_manager.py +162 -0
  284. dpone-0.1.0/src/dpone/runtime/sources/__init__.py +64 -0
  285. dpone-0.1.0/src/dpone/runtime/sources/api/__init__.py +49 -0
  286. dpone-0.1.0/src/dpone/runtime/sources/api/appsflyer.py +41 -0
  287. dpone-0.1.0/src/dpone/runtime/sources/api/base.py +79 -0
  288. dpone-0.1.0/src/dpone/runtime/sources/api/cbr.py +34 -0
  289. dpone-0.1.0/src/dpone/runtime/sources/api/fasttrack.py +57 -0
  290. dpone-0.1.0/src/dpone/runtime/sources/api/google_ads.py +33 -0
  291. dpone-0.1.0/src/dpone/runtime/sources/api/google_sheets.py +25 -0
  292. dpone-0.1.0/src/dpone/runtime/sources/api/mindbox.py +36 -0
  293. dpone-0.1.0/src/dpone/runtime/sources/api/omnidesk.py +108 -0
  294. dpone-0.1.0/src/dpone/runtime/sources/api/openexchangerates.py +31 -0
  295. dpone-0.1.0/src/dpone/runtime/sources/api/similarweb.py +22 -0
  296. dpone-0.1.0/src/dpone/runtime/sources/api/yandex_webmaster.py +39 -0
  297. dpone-0.1.0/src/dpone/runtime/sources/base.py +32 -0
  298. dpone-0.1.0/src/dpone/runtime/sources/clickhouse.py +77 -0
  299. dpone-0.1.0/src/dpone/runtime/sources/postgres.py +102 -0
  300. dpone-0.1.0/src/dpone/runtime/sources/strategies/__init__.py +83 -0
  301. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/__init__.py +65 -0
  302. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/appsflyer/__init__.py +9 -0
  303. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/appsflyer/common.py +249 -0
  304. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/appsflyer/full_extract.py +24 -0
  305. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/appsflyer/incremental_append_extract.py +25 -0
  306. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/base.py +237 -0
  307. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/cbr/__init__.py +7 -0
  308. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/cbr/full_extract.py +75 -0
  309. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/cbr/incremental_merge_extract.py +90 -0
  310. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/fasttrack/__init__.py +11 -0
  311. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/fasttrack/base.py +181 -0
  312. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/fasttrack/full_extract.py +23 -0
  313. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/fasttrack/incremental_merge_extract.py +28 -0
  314. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_ads/__init__.py +9 -0
  315. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_ads/full_extract.py +110 -0
  316. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_ads/incremental_merge_extract.py +129 -0
  317. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_ads/specs.py +130 -0
  318. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_sheets/__init__.py +5 -0
  319. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_sheets/full_extract.py +90 -0
  320. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/mindbox/__init__.py +11 -0
  321. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/mindbox/base.py +251 -0
  322. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/mindbox/full_extract.py +42 -0
  323. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/mindbox/incremental_merge_extract.py +46 -0
  324. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/mindbox/replace_extract.py +59 -0
  325. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/omnidesk/__init__.py +17 -0
  326. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/omnidesk/dictionary_extract.py +156 -0
  327. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/omnidesk/full_extract.py +254 -0
  328. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/omnidesk/incremental_append_extract.py +514 -0
  329. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/omnidesk/incremental_merge_extract.py +321 -0
  330. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/openexchangerates/__init__.py +9 -0
  331. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/openexchangerates/full_extract.py +78 -0
  332. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/openexchangerates/incremental_merge_extract.py +89 -0
  333. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/similarweb/__init__.py +13 -0
  334. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/similarweb/base.py +108 -0
  335. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/similarweb/incremental_append_extract.py +111 -0
  336. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/similarweb/transformer.py +89 -0
  337. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/similarweb/validator.py +78 -0
  338. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/yandex_webmaster/__init__.py +39 -0
  339. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/yandex_webmaster/common.py +620 -0
  340. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/yandex_webmaster/full_extract.py +71 -0
  341. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/yandex_webmaster/incremental_merge_extract.py +81 -0
  342. dpone-0.1.0/src/dpone/runtime/sources/strategies/api/yandex_webmaster/replace_extract.py +76 -0
  343. dpone-0.1.0/src/dpone/runtime/sources/strategies/base.py +83 -0
  344. dpone-0.1.0/src/dpone/runtime/sources/strategies/clickhouse/__init__.py +15 -0
  345. dpone-0.1.0/src/dpone/runtime/sources/strategies/clickhouse/clickhouse_base.py +258 -0
  346. dpone-0.1.0/src/dpone/runtime/sources/strategies/clickhouse/clickhouse_full_extract.py +370 -0
  347. dpone-0.1.0/src/dpone/runtime/sources/strategies/clickhouse/clickhouse_incremental_extract.py +388 -0
  348. dpone-0.1.0/src/dpone/runtime/sources/strategies/clickhouse/incremental_state_manager.py +118 -0
  349. dpone-0.1.0/src/dpone/runtime/sources/strategies/postgres/__init__.py +37 -0
  350. dpone-0.1.0/src/dpone/runtime/sources/strategies/postgres/postgres_base.py +409 -0
  351. dpone-0.1.0/src/dpone/runtime/sources/strategies/postgres/postgres_full_extract.py +74 -0
  352. dpone-0.1.0/src/dpone/runtime/sources/strategies/postgres/postgres_incremental_extract.py +309 -0
  353. dpone-0.1.0/src/dpone/runtime/sources/strategies/postgres/postgres_xmin_extract.py +287 -0
  354. dpone-0.1.0/src/dpone/runtime/sql_helpers/__init__.py +15 -0
  355. dpone-0.1.0/src/dpone/runtime/sql_helpers/exchange_queries.py +144 -0
  356. dpone-0.1.0/src/dpone/runtime/sql_helpers/reconciliation_queries.py +205 -0
  357. dpone-0.1.0/src/dpone/runtime/sql_helpers/run_state_queries.py +188 -0
  358. dpone-0.1.0/src/dpone/runtime/sql_helpers/technical_columns_queries.py +334 -0
  359. dpone-0.1.0/src/dpone/runtime/sql_helpers/xmin_queries.py +102 -0
  360. dpone-0.1.0/src/dpone/runtime/state/__init__.py +48 -0
  361. dpone-0.1.0/src/dpone/runtime/state/factory.py +138 -0
  362. dpone-0.1.0/src/dpone/runtime/state/models.py +87 -0
  363. dpone-0.1.0/src/dpone/runtime/state/repository.py +27 -0
  364. dpone-0.1.0/src/dpone/runtime/state/run_state.py +275 -0
  365. dpone-0.1.0/src/dpone/runtime/state/xmin_storage.py +187 -0
  366. dpone-0.1.0/src/dpone/runtime/support/__init__.py +42 -0
  367. dpone-0.1.0/src/dpone/runtime/support/cbr_xml_parser.py +106 -0
  368. dpone-0.1.0/src/dpone/runtime/support/data_type_mapper.py +813 -0
  369. dpone-0.1.0/src/dpone/runtime/support/fasttrack_columns.py +81 -0
  370. dpone-0.1.0/src/dpone/runtime/support/fasttrack_dates.py +103 -0
  371. dpone-0.1.0/src/dpone/runtime/support/gcs.py +122 -0
  372. dpone-0.1.0/src/dpone/runtime/support/technical_columns.py +3 -0
  373. dpone-0.1.0/src/dpone/runtime/support/timezone.py +249 -0
  374. dpone-0.1.0/src/dpone/runtime/xmin/__init__.py +5 -0
  375. dpone-0.1.0/src/dpone/runtime/xmin/manager.py +170 -0
  376. dpone-0.1.0/src/dpone/schema/etl-batch-manifest.schema.json +1208 -0
  377. dpone-0.1.0/src/dpone/schema/etl-config.schema.json +859 -0
  378. dpone-0.1.0/src/dpone/services/__init__.py +0 -0
  379. dpone-0.1.0/src/dpone/services/ci/__init__.py +43 -0
  380. dpone-0.1.0/src/dpone/services/ci/argocd_promote.py +277 -0
  381. dpone-0.1.0/src/dpone/services/ci/gitlab_mr.py +132 -0
  382. dpone-0.1.0/src/dpone/services/ci/snapshot_version.py +33 -0
  383. dpone-0.1.0/src/dpone/services/ci/yaml_update.py +102 -0
  384. dpone-0.1.0/src/dpone/services/dag/__init__.py +19 -0
  385. dpone-0.1.0/src/dpone/services/dag/load_context.py +136 -0
  386. dpone-0.1.0/src/dpone/services/dag/path_view.py +83 -0
  387. dpone-0.1.0/src/dpone/services/dag/views/__init__.py +35 -0
  388. dpone-0.1.0/src/dpone/services/dag/views/common.py +95 -0
  389. dpone-0.1.0/src/dpone/services/dag/views/deps.py +45 -0
  390. dpone-0.1.0/src/dpone/services/dag/views/edge.py +95 -0
  391. dpone-0.1.0/src/dpone/services/dag/views/edge_e2e.py +82 -0
  392. dpone-0.1.0/src/dpone/services/dag/views/node.py +35 -0
  393. dpone-0.1.0/src/dpone/services/dag/views/node_e2e.py +54 -0
  394. dpone-0.1.0/src/dpone/services/dag/views/report.py +58 -0
  395. dpone-0.1.0/src/dpone/services/docs/__init__.py +21 -0
  396. dpone-0.1.0/src/dpone/services/docs/check_compatibility_service.py +81 -0
  397. dpone-0.1.0/src/dpone/services/docs/check_docs_service.py +82 -0
  398. dpone-0.1.0/src/dpone/services/docs/check_import_rules_service.py +44 -0
  399. dpone-0.1.0/src/dpone/services/docs/check_layer_metrics_service.py +149 -0
  400. dpone-0.1.0/src/dpone/services/docs/check_removal_readiness_service.py +79 -0
  401. dpone-0.1.0/src/dpone/services/docs/cli_reference.py +161 -0
  402. dpone-0.1.0/src/dpone/services/docs/compatibility_registry.py +235 -0
  403. dpone-0.1.0/src/dpone/services/docs/deprecation_roadmap.py +124 -0
  404. dpone-0.1.0/src/dpone/services/docs/generated_block.py +48 -0
  405. dpone-0.1.0/src/dpone/services/docs/markdown_links.py +242 -0
  406. dpone-0.1.0/src/dpone/services/docs/shim_removal_plan.py +234 -0
  407. dpone-0.1.0/src/dpone/services/docs/update_cli_reference_service.py +44 -0
  408. dpone-0.1.0/src/dpone/services/docs/update_deprecation_roadmap_service.py +53 -0
  409. dpone-0.1.0/src/dpone/services/docs/update_dev_metrics_service.py +145 -0
  410. dpone-0.1.0/src/dpone/services/docs/update_shim_removal_plan_service.py +59 -0
  411. dpone-0.1.0/src/dpone/services/manifest/__init__.py +19 -0
  412. dpone-0.1.0/src/dpone/services/manifest/load_context.py +115 -0
  413. dpone-0.1.0/src/dpone/services/manifest/views/__init__.py +24 -0
  414. dpone-0.1.0/src/dpone/services/manifest/views/common.py +34 -0
  415. dpone-0.1.0/src/dpone/services/manifest/views/explain.py +31 -0
  416. dpone-0.1.0/src/dpone/services/manifest/views/list.py +47 -0
  417. dpone-0.1.0/src/dpone/services/manifest/views/migrate.py +38 -0
  418. dpone-0.1.0/src/dpone/services/manifest/views/registry_lint.py +41 -0
  419. dpone-0.1.0/src/dpone/services/manifest/views/render.py +32 -0
  420. dpone-0.1.0/src/dpone/services/manifest/views/stats.py +30 -0
  421. dpone-0.1.0/src/dpone/services/manifest/views/validate.py +41 -0
  422. dpone-0.1.0/src/dpone/services/manifest/views/verify.py +22 -0
  423. dpone-0.1.0/src/dpone/sink/__init__.py +39 -0
  424. dpone-0.1.0/src/dpone/sink/base.py +6 -0
  425. dpone-0.1.0/src/dpone/sink/bigquery.py +6 -0
  426. dpone-0.1.0/src/dpone/sink/postgres.py +6 -0
  427. dpone-0.1.0/src/dpone/sink/staging.py +6 -0
  428. dpone-0.1.0/src/dpone/sink/strategies/__init__.py +6 -0
  429. dpone-0.1.0/src/dpone/sink/strategies/base.py +6 -0
  430. dpone-0.1.0/src/dpone/sink/strategies/bigquery/bigquery_base.py +6 -0
  431. dpone-0.1.0/src/dpone/sink/strategies/bigquery/bigquery_full_refresh.py +6 -0
  432. dpone-0.1.0/src/dpone/sink/strategies/bigquery/bigquery_increment_append.py +6 -0
  433. dpone-0.1.0/src/dpone/sink/strategies/bigquery/bigquery_increment_merge.py +6 -0
  434. dpone-0.1.0/src/dpone/sink/strategies/bigquery/bigquery_replace_strategy.py +6 -0
  435. dpone-0.1.0/src/dpone/sink/strategies/postgres/postgres_base.py +6 -0
  436. dpone-0.1.0/src/dpone/sink/strategies/postgres/postgres_full_refresh.py +6 -0
  437. dpone-0.1.0/src/dpone/sink/strategies/postgres/postgres_increment_append.py +6 -0
  438. dpone-0.1.0/src/dpone/sink/strategies/postgres/postgres_increment_merge.py +6 -0
  439. dpone-0.1.0/src/dpone/sink/strategies/postgres/postgres_replace_strategy.py +6 -0
  440. dpone-0.1.0/src/dpone/source/__init__.py +39 -0
  441. dpone-0.1.0/src/dpone/source/api/__init__.py +6 -0
  442. dpone-0.1.0/src/dpone/source/api/base.py +6 -0
  443. dpone-0.1.0/src/dpone/source/api/cbr.py +6 -0
  444. dpone-0.1.0/src/dpone/source/api/google_ads.py +6 -0
  445. dpone-0.1.0/src/dpone/source/api/google_sheets.py +6 -0
  446. dpone-0.1.0/src/dpone/source/api/omnidesk.py +6 -0
  447. dpone-0.1.0/src/dpone/source/api/openexchangerates.py +6 -0
  448. dpone-0.1.0/src/dpone/source/api/yandex_webmaster.py +6 -0
  449. dpone-0.1.0/src/dpone/source/base.py +6 -0
  450. dpone-0.1.0/src/dpone/source/clickhouse.py +6 -0
  451. dpone-0.1.0/src/dpone/source/postgres.py +6 -0
  452. dpone-0.1.0/src/dpone/source/strategies/__init__.py +6 -0
  453. dpone-0.1.0/src/dpone/source/strategies/api/__init__.py +6 -0
  454. dpone-0.1.0/src/dpone/source/strategies/api/base.py +6 -0
  455. dpone-0.1.0/src/dpone/source/strategies/api/cbr/__init__.py +6 -0
  456. dpone-0.1.0/src/dpone/source/strategies/api/cbr/full_extract.py +6 -0
  457. dpone-0.1.0/src/dpone/source/strategies/api/cbr/incremental_merge_extract.py +6 -0
  458. dpone-0.1.0/src/dpone/source/strategies/api/google_ads/__init__.py +6 -0
  459. dpone-0.1.0/src/dpone/source/strategies/api/google_ads/full_extract.py +6 -0
  460. dpone-0.1.0/src/dpone/source/strategies/api/google_ads/incremental_merge_extract.py +6 -0
  461. dpone-0.1.0/src/dpone/source/strategies/api/google_ads/specs.py +6 -0
  462. dpone-0.1.0/src/dpone/source/strategies/api/google_sheets/__init__.py +6 -0
  463. dpone-0.1.0/src/dpone/source/strategies/api/google_sheets/full_extract.py +6 -0
  464. dpone-0.1.0/src/dpone/source/strategies/api/omnidesk/__init__.py +6 -0
  465. dpone-0.1.0/src/dpone/source/strategies/api/omnidesk/dictionary_extract.py +6 -0
  466. dpone-0.1.0/src/dpone/source/strategies/api/omnidesk/full_extract.py +6 -0
  467. dpone-0.1.0/src/dpone/source/strategies/api/omnidesk/incremental_append_extract.py +6 -0
  468. dpone-0.1.0/src/dpone/source/strategies/api/omnidesk/incremental_merge_extract.py +6 -0
  469. dpone-0.1.0/src/dpone/source/strategies/api/yandex_webmaster/__init__.py +6 -0
  470. dpone-0.1.0/src/dpone/source/strategies/api/yandex_webmaster/common.py +6 -0
  471. dpone-0.1.0/src/dpone/source/strategies/api/yandex_webmaster/full_extract.py +6 -0
  472. dpone-0.1.0/src/dpone/source/strategies/api/yandex_webmaster/incremental_merge_extract.py +6 -0
  473. dpone-0.1.0/src/dpone/source/strategies/api/yandex_webmaster/replace_extract.py +6 -0
  474. dpone-0.1.0/src/dpone/source/strategies/base.py +6 -0
  475. dpone-0.1.0/src/dpone/source/strategies/clickhouse/__init__.py +6 -0
  476. dpone-0.1.0/src/dpone/source/strategies/clickhouse/clickhouse_base.py +6 -0
  477. dpone-0.1.0/src/dpone/source/strategies/clickhouse/clickhouse_full_extract.py +6 -0
  478. dpone-0.1.0/src/dpone/source/strategies/clickhouse/clickhouse_incremental_extract.py +6 -0
  479. dpone-0.1.0/src/dpone/source/strategies/clickhouse/incremental_state_manager.py +6 -0
  480. dpone-0.1.0/src/dpone/source/strategies/postgres/__init__.py +6 -0
  481. dpone-0.1.0/src/dpone/source/strategies/postgres/postgres_base.py +6 -0
  482. dpone-0.1.0/src/dpone/source/strategies/postgres/postgres_full_extract.py +6 -0
  483. dpone-0.1.0/src/dpone/source/strategies/postgres/postgres_incremental_extract.py +6 -0
  484. dpone-0.1.0/src/dpone/source/strategies/postgres/postgres_xmin_extract.py +6 -0
  485. dpone-0.1.0/src/dpone/sql_helpers/__init__.py +39 -0
  486. dpone-0.1.0/src/dpone/sql_helpers/exchange_queries.py +6 -0
  487. dpone-0.1.0/src/dpone/sql_helpers/reconciliation_queries.py +6 -0
  488. dpone-0.1.0/src/dpone/sql_helpers/run_state_queries.py +6 -0
  489. dpone-0.1.0/src/dpone/sql_helpers/technical_columns_queries.py +6 -0
  490. dpone-0.1.0/src/dpone/sql_helpers/xmin_queries.py +6 -0
  491. dpone-0.1.0/src/dpone/state/__init__.py +39 -0
  492. dpone-0.1.0/src/dpone/state/factory.py +6 -0
  493. dpone-0.1.0/src/dpone/state/repository.py +6 -0
  494. dpone-0.1.0/src/dpone/state/run_state.py +6 -0
  495. dpone-0.1.0/src/dpone/state/xmin_storage.py +6 -0
  496. dpone-0.1.0/src/dpone/xmin/__init__.py +39 -0
  497. dpone-0.1.0/src/dpone/xmin/manager.py +6 -0
  498. dpone-0.1.0/src/dpone/yaml_config_handler/__init__.py +42 -0
  499. dpone-0.1.0/src/dpone/yaml_config_handler/config.py +9 -0
  500. dpone-0.1.0/src/dpone/yaml_config_handler/dag_report.py +9 -0
  501. dpone-0.1.0/src/dpone/yaml_config_handler/deps_end_to_end_explain.py +9 -0
  502. dpone-0.1.0/src/dpone/yaml_config_handler/edge_end_to_end_explain.py +9 -0
  503. dpone-0.1.0/src/dpone/yaml_config_handler/edge_explain.py +9 -0
  504. dpone-0.1.0/src/dpone/yaml_config_handler/finder.py +9 -0
  505. dpone-0.1.0/src/dpone/yaml_config_handler/graph.py +9 -0
  506. dpone-0.1.0/src/dpone/yaml_config_handler/loader.py +9 -0
  507. dpone-0.1.0/src/dpone/yaml_config_handler/manager.py +9 -0
  508. dpone-0.1.0/src/dpone/yaml_config_handler/node_end_to_end_explain.py +9 -0
  509. dpone-0.1.0/src/dpone/yaml_config_handler/node_explain.py +9 -0
  510. dpone-0.1.0/src/dpone/yaml_config_handler/parse_trace.py +9 -0
  511. dpone-0.1.0/src/dpone/yaml_config_handler/post_parse_explain.py +9 -0
  512. dpone-0.1.0/src/dpone/yaml_config_handler/process.py +9 -0
  513. dpone-0.1.0/src/dpone/yaml_config_handler/resolver.py +9 -0
  514. dpone-0.1.0/src/dpone/yaml_config_handler/subgraph.py +9 -0
  515. dpone-0.1.0/src/dpone/yaml_config_handler/yaml_types.py +9 -0
dpone-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,290 @@
1
+ Metadata-Version: 2.4
2
+ Name: dpone
3
+ Version: 0.1.0
4
+ Summary: Declarative ETL framework for YAML-driven data pipelines
5
+ Keywords: etl,data-platform,data-engineering,yaml,dag,bigquery,postgres,clickhouse
6
+ Author: PaulKov
7
+ License-Expression: Apache-2.0
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Intended Audience :: Information Technology
11
+ Classifier: License :: OSI Approved :: Apache Software License
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Topic :: Database
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Classifier: Topic :: System :: Distributed Computing
21
+ Classifier: Typing :: Typed
22
+ Requires-Dist: pyyaml>=6.0.1
23
+ Requires-Dist: jinja2>=3.1.0
24
+ Requires-Dist: sqlglot==27.13.2
25
+ Requires-Dist: pendulum==3.1.0
26
+ Requires-Dist: prettytable==3.17.0
27
+ Requires-Dist: pytz>=2023.3
28
+ Requires-Dist: requests>=2.32.5
29
+ Requires-Dist: ijson>=3.3.0
30
+ Requires-Dist: clickhouse-connect==0.6.22 ; extra == 'clickhouse'
31
+ Requires-Dist: clickhouse-driver==0.2.9 ; extra == 'clickhouse'
32
+ Requires-Dist: clickhouse-cityhash==1.0.2.5 ; extra == 'clickhouse'
33
+ Requires-Dist: psycopg[binary]==3.2.9 ; extra == 'full'
34
+ Requires-Dist: clickhouse-connect==0.6.22 ; extra == 'full'
35
+ Requires-Dist: clickhouse-driver==0.2.9 ; extra == 'full'
36
+ Requires-Dist: clickhouse-cityhash==1.0.2.5 ; extra == 'full'
37
+ Requires-Dist: google-cloud-bigquery==3.38.0 ; extra == 'full'
38
+ Requires-Dist: google-cloud-storage==3.7.0 ; extra == 'full'
39
+ Requires-Dist: pandas==2.1.4 ; extra == 'full'
40
+ Requires-Dist: numpy==1.26.4 ; extra == 'full'
41
+ Requires-Dist: vault-kv-client>=0.1.0,<0.2.0 ; extra == 'full'
42
+ Requires-Dist: google-ads>=28.0.0,<29.0.0 ; extra == 'full'
43
+ Requires-Dist: google-cloud-bigquery==3.38.0 ; extra == 'gcp'
44
+ Requires-Dist: google-cloud-storage==3.7.0 ; extra == 'gcp'
45
+ Requires-Dist: google-ads>=28.0.0,<29.0.0 ; extra == 'google-ads'
46
+ Requires-Dist: pandas==2.1.4 ; extra == 'pandas'
47
+ Requires-Dist: numpy==1.26.4 ; extra == 'pandas'
48
+ Requires-Dist: psycopg[binary]==3.2.9 ; extra == 'postgres'
49
+ Requires-Dist: vault-kv-client>=0.1.0,<0.2.0 ; extra == 'vault'
50
+ Maintainer: PaulKov
51
+ Requires-Python: >=3.11
52
+ Project-URL: Changelog, https://github.com/PaulKov/dpone/blob/main/CHANGELOG.md
53
+ Project-URL: Documentation, https://github.com/PaulKov/dpone#readme
54
+ Project-URL: Homepage, https://github.com/PaulKov/dpone
55
+ Project-URL: Issues, https://github.com/PaulKov/dpone/issues
56
+ Project-URL: Repository, https://github.com/PaulKov/dpone
57
+ Provides-Extra: clickhouse
58
+ Provides-Extra: full
59
+ Provides-Extra: gcp
60
+ Provides-Extra: google-ads
61
+ Provides-Extra: pandas
62
+ Provides-Extra: postgres
63
+ Provides-Extra: vault
64
+ Description-Content-Type: text/markdown
65
+
66
+ # dpone
67
+
68
+ `dpone` is a Python ETL framework for declarative, YAML-driven data pipelines. It helps data teams describe sources, sinks, load strategies, dependencies, conventions, and operational checks as reusable configuration instead of one-off scripts.
69
+
70
+ The public package name, import name, GitHub repository name, and CLI name are all intentionally short: `dpone`.
71
+
72
+ Repository: https://github.com/PaulKov/dpone
73
+
74
+ ## What dpone gives you
75
+
76
+ - YAML manifests for single-process and batch ETL definitions.
77
+ - Built-in DAG/dependency inspection for pipeline debugging.
78
+ - Runtime abstractions for sources, sinks, connectors, state, reconciliation, and safe SQL logging.
79
+ - Optional integrations for PostgreSQL, ClickHouse, BigQuery/GCS, pandas, Google Ads, and HashiCorp Vault.
80
+ - A CLI designed for self-service validation, rendering, explainability, and documentation checks.
81
+ - Compatibility shims for older import paths while the canonical package layout continues to stabilize.
82
+
83
+ ## Installation
84
+
85
+ Install the core package from PyPI:
86
+
87
+ ```bash
88
+ pip install dpone
89
+ ```
90
+
91
+ Install common extras for local ETL development:
92
+
93
+ ```bash
94
+ pip install "dpone[postgres,clickhouse,gcp,pandas,vault]"
95
+ ```
96
+
97
+ Install everything currently published by the project:
98
+
99
+ ```bash
100
+ pip install "dpone[full]"
101
+ ```
102
+
103
+ With `uv`:
104
+
105
+ ```bash
106
+ uv add dpone
107
+ uv add "dpone[full]"
108
+ ```
109
+
110
+ ## Optional extras
111
+
112
+ | Extra | Purpose |
113
+ | --- | --- |
114
+ | `postgres` | PostgreSQL connectivity via `psycopg` |
115
+ | `clickhouse` | ClickHouse connectivity |
116
+ | `gcp` | Google BigQuery and Google Cloud Storage support |
117
+ | `pandas` | DataFrame-based extract/load helpers |
118
+ | `vault` | HashiCorp Vault integration via public `vault-kv-client` |
119
+ | `google_ads` | Google Ads API support |
120
+ | `full` | All public extras above |
121
+
122
+ Vault support uses [`vault-kv-client`](https://github.com/PaulKov/vault-kv-client), published on PyPI as `vault-kv-client`. New code should use `vault_kv_client`; the historical `vault_client` import path remains supported by that package as a compatibility layer.
123
+
124
+ ## Quick start
125
+
126
+ Create a batch manifest, for example `examples/batch/landing_postgres_to_bq.batch.yaml`:
127
+
128
+ ```yaml
129
+ # yaml-language-server: $schema=../../src/dpone/schema/etl-batch-manifest.schema.json
130
+ kind: dpone.batch.v1
131
+ convention: landing_raw_v1
132
+ registry: ../registry/sources.yaml
133
+
134
+ vars:
135
+ src_system: demo_source
136
+ src_database: demo_db
137
+ owner_team: data-platform
138
+ owner_contact: data-platform@example.com
139
+ sla: daily
140
+
141
+ defaults:
142
+ source:
143
+ type: postgres
144
+ connection_type: vault
145
+ connection_id: postgres-demo
146
+ vault_path: postgres/demo-source
147
+ options:
148
+ batch_size: 100000
149
+ export_format: csv
150
+
151
+ sink:
152
+ type: bigquery
153
+ connection_type: vault
154
+ connection_id: bigquery-demo
155
+ vault_path: gcp/demo-project-prod/bq/service-account
156
+ staging:
157
+ schema: stg
158
+ strategy:
159
+ mode: full_refresh
160
+ overwrite_type: exchange
161
+
162
+ schemas:
163
+ public:
164
+ tables:
165
+ - core_city
166
+ ```
167
+
168
+ Validate and render it:
169
+
170
+ ```bash
171
+ dpone manifest validate examples/batch/landing_postgres_to_bq.batch.yaml \
172
+ --profile landing_raw_v1 \
173
+ --registry examples/registry/sources.yaml
174
+
175
+ dpone manifest render examples/batch/landing_postgres_to_bq.batch.yaml \
176
+ --selector public.core_city \
177
+ --registry examples/registry/sources.yaml
178
+ ```
179
+
180
+ Inspect pipeline dependencies:
181
+
182
+ ```bash
183
+ dpone dag report examples/batch/landing_postgres_to_bq.batch.yaml \
184
+ --base-path . \
185
+ --format json \
186
+ --preset ci \
187
+ --registry examples/registry/sources.yaml
188
+ ```
189
+
190
+ ## CLI overview
191
+
192
+ ```bash
193
+ dpone --help
194
+ dpone manifest --help
195
+ dpone dag --help
196
+ dpone docs --help
197
+ ```
198
+
199
+ Common commands:
200
+
201
+ ```bash
202
+ dpone manifest list examples/batch/landing_postgres_to_bq.batch.yaml
203
+ dpone manifest validate examples/batch/landing_postgres_to_bq.batch.yaml --recursive
204
+ dpone manifest render examples/batch/landing_postgres_to_bq.batch.yaml --selector public.core_city
205
+ dpone manifest explain examples/batch/landing_postgres_to_bq.batch.yaml --selector public.core_city --why sink.table.schema
206
+ dpone dag list-edges examples/batch/landing_postgres_to_bq.batch.yaml --with-groups --with-refs
207
+ dpone dag explain-node examples/batch/landing_postgres_to_bq.batch.yaml --task public.core_city
208
+ dpone dag report examples/batch/landing_postgres_to_bq.batch.yaml --preset ci --format md
209
+ ```
210
+
211
+ ## Repository layout
212
+
213
+ ```text
214
+ src/dpone/ Python package source code
215
+ docs/ User and developer documentation
216
+ examples/ Public example manifests and registries
217
+ tests/ Unit and integration tests
218
+ tools/ Local smoke and release helper scripts
219
+ ```
220
+
221
+ Canonical imports live under:
222
+
223
+ - `dpone.manifest.*`
224
+ - `dpone.dag.*`
225
+ - `dpone.runtime.*`
226
+ - `dpone.contracts.*`
227
+ - `dpone.ports.*`
228
+ - `dpone.adapters.*`
229
+
230
+ Legacy paths such as `dpone.core.*`, `dpone.lib.*`, `dpone.source.*`, and `dpone.sink.*` are compatibility shims. Prefer canonical imports for new code.
231
+
232
+ ## Local development
233
+
234
+ ```bash
235
+ uv sync --all-extras
236
+ uv run ruff check .
237
+ uv run ruff format --check .
238
+ uv run mypy --config-file mypy.ini
239
+ uv run pytest -m "not integration_live"
240
+ ```
241
+
242
+ Build package artifacts:
243
+
244
+ ```bash
245
+ uv build
246
+ ```
247
+
248
+ Run the package smoke script from an installed environment:
249
+
250
+ ```bash
251
+ python tools/package_smoke.py --project-root . --dpone-cmd dpone
252
+ ```
253
+
254
+ ## CI and releases
255
+
256
+ The OSS repository uses GitHub Actions as the primary automation path:
257
+
258
+ - `.github/workflows/ci.yml` runs linting, formatting checks, type checks, tests, and package build.
259
+ - `.github/workflows/release.yml` builds and publishes tagged releases to PyPI.
260
+
261
+ Release tags use the format `vX.Y.Z`, for example:
262
+
263
+ ```bash
264
+ git tag -a v0.1.0 -m "Release v0.1.0"
265
+ git push origin v0.1.0
266
+ ```
267
+
268
+ Prefer PyPI Trusted Publishing for releases. Token-based publishing should only be used as a fallback with short-lived, scoped tokens.
269
+
270
+ ## Security
271
+
272
+ Never commit API tokens, PyPI tokens, GitHub tokens, Vault credentials, service-account JSON, or live vendor credentials. If a secret is ever pasted into an issue, chat, commit, or CI log, revoke it before publishing or pushing public history.
273
+
274
+ See [SECURITY.md](SECURITY.md) for the vulnerability reporting process.
275
+
276
+ ## Documentation
277
+
278
+ Start with [docs/README.md](docs/README.md). Key pages:
279
+
280
+ - [Architecture](docs/ARCHITECTURE.md)
281
+ - [CLI reference](docs/CLI_REFERENCE.md)
282
+ - [CLI examples](docs/CLI_EXAMPLES.md)
283
+ - [Manifest conventions](docs/CONVENTIONS.md)
284
+ - [DAG debugging](docs/DAG_DEBUGGING.md)
285
+ - [Testing](docs/TESTING.md)
286
+ - [Release](docs/RELEASE.md)
287
+
288
+ ## License
289
+
290
+ `dpone` is licensed under the Apache License 2.0. See [LICENSE](LICENSE).
dpone-0.1.0/README.md ADDED
@@ -0,0 +1,225 @@
1
+ # dpone
2
+
3
+ `dpone` is a Python ETL framework for declarative, YAML-driven data pipelines. It helps data teams describe sources, sinks, load strategies, dependencies, conventions, and operational checks as reusable configuration instead of one-off scripts.
4
+
5
+ The public package name, import name, GitHub repository name, and CLI name are all intentionally short: `dpone`.
6
+
7
+ Repository: https://github.com/PaulKov/dpone
8
+
9
+ ## What dpone gives you
10
+
11
+ - YAML manifests for single-process and batch ETL definitions.
12
+ - Built-in DAG/dependency inspection for pipeline debugging.
13
+ - Runtime abstractions for sources, sinks, connectors, state, reconciliation, and safe SQL logging.
14
+ - Optional integrations for PostgreSQL, ClickHouse, BigQuery/GCS, pandas, Google Ads, and HashiCorp Vault.
15
+ - A CLI designed for self-service validation, rendering, explainability, and documentation checks.
16
+ - Compatibility shims for older import paths while the canonical package layout continues to stabilize.
17
+
18
+ ## Installation
19
+
20
+ Install the core package from PyPI:
21
+
22
+ ```bash
23
+ pip install dpone
24
+ ```
25
+
26
+ Install common extras for local ETL development:
27
+
28
+ ```bash
29
+ pip install "dpone[postgres,clickhouse,gcp,pandas,vault]"
30
+ ```
31
+
32
+ Install everything currently published by the project:
33
+
34
+ ```bash
35
+ pip install "dpone[full]"
36
+ ```
37
+
38
+ With `uv`:
39
+
40
+ ```bash
41
+ uv add dpone
42
+ uv add "dpone[full]"
43
+ ```
44
+
45
+ ## Optional extras
46
+
47
+ | Extra | Purpose |
48
+ | --- | --- |
49
+ | `postgres` | PostgreSQL connectivity via `psycopg` |
50
+ | `clickhouse` | ClickHouse connectivity |
51
+ | `gcp` | Google BigQuery and Google Cloud Storage support |
52
+ | `pandas` | DataFrame-based extract/load helpers |
53
+ | `vault` | HashiCorp Vault integration via public `vault-kv-client` |
54
+ | `google_ads` | Google Ads API support |
55
+ | `full` | All public extras above |
56
+
57
+ Vault support uses [`vault-kv-client`](https://github.com/PaulKov/vault-kv-client), published on PyPI as `vault-kv-client`. New code should use `vault_kv_client`; the historical `vault_client` import path remains supported by that package as a compatibility layer.
58
+
59
+ ## Quick start
60
+
61
+ Create a batch manifest, for example `examples/batch/landing_postgres_to_bq.batch.yaml`:
62
+
63
+ ```yaml
64
+ # yaml-language-server: $schema=../../src/dpone/schema/etl-batch-manifest.schema.json
65
+ kind: dpone.batch.v1
66
+ convention: landing_raw_v1
67
+ registry: ../registry/sources.yaml
68
+
69
+ vars:
70
+ src_system: demo_source
71
+ src_database: demo_db
72
+ owner_team: data-platform
73
+ owner_contact: data-platform@example.com
74
+ sla: daily
75
+
76
+ defaults:
77
+ source:
78
+ type: postgres
79
+ connection_type: vault
80
+ connection_id: postgres-demo
81
+ vault_path: postgres/demo-source
82
+ options:
83
+ batch_size: 100000
84
+ export_format: csv
85
+
86
+ sink:
87
+ type: bigquery
88
+ connection_type: vault
89
+ connection_id: bigquery-demo
90
+ vault_path: gcp/demo-project-prod/bq/service-account
91
+ staging:
92
+ schema: stg
93
+ strategy:
94
+ mode: full_refresh
95
+ overwrite_type: exchange
96
+
97
+ schemas:
98
+ public:
99
+ tables:
100
+ - core_city
101
+ ```
102
+
103
+ Validate and render it:
104
+
105
+ ```bash
106
+ dpone manifest validate examples/batch/landing_postgres_to_bq.batch.yaml \
107
+ --profile landing_raw_v1 \
108
+ --registry examples/registry/sources.yaml
109
+
110
+ dpone manifest render examples/batch/landing_postgres_to_bq.batch.yaml \
111
+ --selector public.core_city \
112
+ --registry examples/registry/sources.yaml
113
+ ```
114
+
115
+ Inspect pipeline dependencies:
116
+
117
+ ```bash
118
+ dpone dag report examples/batch/landing_postgres_to_bq.batch.yaml \
119
+ --base-path . \
120
+ --format json \
121
+ --preset ci \
122
+ --registry examples/registry/sources.yaml
123
+ ```
124
+
125
+ ## CLI overview
126
+
127
+ ```bash
128
+ dpone --help
129
+ dpone manifest --help
130
+ dpone dag --help
131
+ dpone docs --help
132
+ ```
133
+
134
+ Common commands:
135
+
136
+ ```bash
137
+ dpone manifest list examples/batch/landing_postgres_to_bq.batch.yaml
138
+ dpone manifest validate examples/batch/landing_postgres_to_bq.batch.yaml --recursive
139
+ dpone manifest render examples/batch/landing_postgres_to_bq.batch.yaml --selector public.core_city
140
+ dpone manifest explain examples/batch/landing_postgres_to_bq.batch.yaml --selector public.core_city --why sink.table.schema
141
+ dpone dag list-edges examples/batch/landing_postgres_to_bq.batch.yaml --with-groups --with-refs
142
+ dpone dag explain-node examples/batch/landing_postgres_to_bq.batch.yaml --task public.core_city
143
+ dpone dag report examples/batch/landing_postgres_to_bq.batch.yaml --preset ci --format md
144
+ ```
145
+
146
+ ## Repository layout
147
+
148
+ ```text
149
+ src/dpone/ Python package source code
150
+ docs/ User and developer documentation
151
+ examples/ Public example manifests and registries
152
+ tests/ Unit and integration tests
153
+ tools/ Local smoke and release helper scripts
154
+ ```
155
+
156
+ Canonical imports live under:
157
+
158
+ - `dpone.manifest.*`
159
+ - `dpone.dag.*`
160
+ - `dpone.runtime.*`
161
+ - `dpone.contracts.*`
162
+ - `dpone.ports.*`
163
+ - `dpone.adapters.*`
164
+
165
+ Legacy paths such as `dpone.core.*`, `dpone.lib.*`, `dpone.source.*`, and `dpone.sink.*` are compatibility shims. Prefer canonical imports for new code.
166
+
167
+ ## Local development
168
+
169
+ ```bash
170
+ uv sync --all-extras
171
+ uv run ruff check .
172
+ uv run ruff format --check .
173
+ uv run mypy --config-file mypy.ini
174
+ uv run pytest -m "not integration_live"
175
+ ```
176
+
177
+ Build package artifacts:
178
+
179
+ ```bash
180
+ uv build
181
+ ```
182
+
183
+ Run the package smoke script from an installed environment:
184
+
185
+ ```bash
186
+ python tools/package_smoke.py --project-root . --dpone-cmd dpone
187
+ ```
188
+
189
+ ## CI and releases
190
+
191
+ The OSS repository uses GitHub Actions as the primary automation path:
192
+
193
+ - `.github/workflows/ci.yml` runs linting, formatting checks, type checks, tests, and package build.
194
+ - `.github/workflows/release.yml` builds and publishes tagged releases to PyPI.
195
+
196
+ Release tags use the format `vX.Y.Z`, for example:
197
+
198
+ ```bash
199
+ git tag -a v0.1.0 -m "Release v0.1.0"
200
+ git push origin v0.1.0
201
+ ```
202
+
203
+ Prefer PyPI Trusted Publishing for releases. Token-based publishing should only be used as a fallback with short-lived, scoped tokens.
204
+
205
+ ## Security
206
+
207
+ Never commit API tokens, PyPI tokens, GitHub tokens, Vault credentials, service-account JSON, or live vendor credentials. If a secret is ever pasted into an issue, chat, commit, or CI log, revoke it before publishing or pushing public history.
208
+
209
+ See [SECURITY.md](SECURITY.md) for the vulnerability reporting process.
210
+
211
+ ## Documentation
212
+
213
+ Start with [docs/README.md](docs/README.md). Key pages:
214
+
215
+ - [Architecture](docs/ARCHITECTURE.md)
216
+ - [CLI reference](docs/CLI_REFERENCE.md)
217
+ - [CLI examples](docs/CLI_EXAMPLES.md)
218
+ - [Manifest conventions](docs/CONVENTIONS.md)
219
+ - [DAG debugging](docs/DAG_DEBUGGING.md)
220
+ - [Testing](docs/TESTING.md)
221
+ - [Release](docs/RELEASE.md)
222
+
223
+ ## License
224
+
225
+ `dpone` is licensed under the Apache License 2.0. See [LICENSE](LICENSE).
@@ -0,0 +1,156 @@
1
+ [build-system]
2
+ requires = ["uv_build>=0.9.18,<0.10.0"]
3
+ build-backend = "uv_build"
4
+
5
+ [project]
6
+ name = "dpone"
7
+ version = "0.1.0"
8
+ description = "Declarative ETL framework for YAML-driven data pipelines"
9
+ readme = "README.md"
10
+ requires-python = ">=3.11"
11
+ license = "Apache-2.0"
12
+ authors = [{ name = "PaulKov" }]
13
+ maintainers = [{ name = "PaulKov" }]
14
+ keywords = [
15
+ "etl",
16
+ "data-platform",
17
+ "data-engineering",
18
+ "yaml",
19
+ "dag",
20
+ "bigquery",
21
+ "postgres",
22
+ "clickhouse",
23
+ ]
24
+ classifiers = [
25
+ "Development Status :: 3 - Alpha",
26
+ "Intended Audience :: Developers",
27
+ "Intended Audience :: Information Technology",
28
+ "License :: OSI Approved :: Apache Software License",
29
+ "Operating System :: OS Independent",
30
+ "Programming Language :: Python :: 3",
31
+ "Programming Language :: Python :: 3.11",
32
+ "Programming Language :: Python :: 3.12",
33
+ "Programming Language :: Python :: 3.13",
34
+ "Programming Language :: Python :: 3.14",
35
+ "Topic :: Database",
36
+ "Topic :: Software Development :: Libraries :: Python Modules",
37
+ "Topic :: System :: Distributed Computing",
38
+ "Typing :: Typed",
39
+ ]
40
+ dependencies = [
41
+ "pyyaml>=6.0.1",
42
+ "jinja2>=3.1.0",
43
+ "sqlglot==27.13.2",
44
+ "pendulum==3.1.0",
45
+ "prettytable==3.17.0",
46
+ "pytz>=2023.3",
47
+ "requests>=2.32.5",
48
+ "ijson>=3.3.0"
49
+ ]
50
+
51
+ [project.scripts]
52
+ dpone = "dpone.cli.main:main"
53
+ dpone-runtime-install = "dpone.runtime.dev_install:main_install"
54
+ dpone-runtime-exec = "dpone.runtime.dev_install:main_exec"
55
+
56
+ [project.urls]
57
+ Homepage = "https://github.com/PaulKov/dpone"
58
+ Repository = "https://github.com/PaulKov/dpone"
59
+ Issues = "https://github.com/PaulKov/dpone/issues"
60
+ Documentation = "https://github.com/PaulKov/dpone#readme"
61
+ Changelog = "https://github.com/PaulKov/dpone/blob/main/CHANGELOG.md"
62
+
63
+ [project.optional-dependencies]
64
+ postgres = ["psycopg[binary]==3.2.9"]
65
+ clickhouse = ["clickhouse-connect==0.6.22", "clickhouse-driver==0.2.9", "clickhouse-cityhash==1.0.2.5"]
66
+ gcp = ["google-cloud-bigquery==3.38.0", "google-cloud-storage==3.7.0"]
67
+ pandas = ["pandas==2.1.4", "numpy==1.26.4"]
68
+ vault = ["vault-kv-client>=0.1.0,<0.2.0"]
69
+ google_ads = ["google-ads>=28.0.0,<29.0.0"]
70
+ full = [
71
+ "psycopg[binary]==3.2.9",
72
+ "clickhouse-connect==0.6.22",
73
+ "clickhouse-driver==0.2.9",
74
+ "clickhouse-cityhash==1.0.2.5",
75
+ "google-cloud-bigquery==3.38.0",
76
+ "google-cloud-storage==3.7.0",
77
+ "pandas==2.1.4",
78
+ "numpy==1.26.4",
79
+ "vault-kv-client>=0.1.0,<0.2.0",
80
+ "google-ads>=28.0.0,<29.0.0",
81
+ ]
82
+
83
+ [dependency-groups]
84
+ dev = [
85
+ "pytest>=8.0.0",
86
+ "pytest-cov>=5.0.0",
87
+ "ruff>=0.6.9",
88
+ "mypy>=1.11.2",
89
+ "pre-commit>=3.8.0",
90
+ "types-PyYAML>=6.0.12.20240917",
91
+ "types-requests>=2.32.0.20240914",
92
+ "minio>=7.2.9",
93
+ ]
94
+
95
+ [tool.uv]
96
+ default-groups = ["dev"]
97
+
98
+ [tool.pytest.ini_options]
99
+ testpaths = ["tests"]
100
+ addopts = "-q"
101
+ markers = [
102
+ "integration: tests that require external services (PostgreSQL/ClickHouse)",
103
+ "integration_extended: extended/nightly integration tests (MinIO/GCS-export and installed-package scenarios)",
104
+ "integration_live: manual/nightly live integration tests against real vendor APIs",
105
+ "nightly: tests intended for scheduled or manual nightly-like pipelines",
106
+ "packaging: tests that validate installed package artifacts",
107
+ ]
108
+
109
+ [tool.ruff]
110
+ target-version = "py311"
111
+ line-length = 120
112
+ src = ["src", "tests", "tools"]
113
+ extend-exclude = [".cache"]
114
+
115
+ [tool.ruff.lint]
116
+ select = ["E4", "E7", "E9", "F", "I", "UP"]
117
+ ignore = ["E501"]
118
+
119
+ [tool.ruff.format]
120
+ quote-style = "double"
121
+ indent-style = "space"
122
+ line-ending = "lf"
123
+
124
+ [tool.coverage.run]
125
+ source = ["src/dpone"]
126
+ omit = [
127
+ # Legacy compatibility import shims are covered through their canonical runtime modules.
128
+ "src/dpone/credentials/*",
129
+ "src/dpone/etl/*",
130
+ "src/dpone/etl_logging/*",
131
+ "src/dpone/reconciliation/**",
132
+ "src/dpone/sink/**",
133
+ "src/dpone/source/**",
134
+ "src/dpone/sql_helpers/**",
135
+ "src/dpone/state/**",
136
+ "src/dpone/xmin/**",
137
+ "src/dpone/yaml_config_handler/**",
138
+
139
+ # Live adapters require external services or vendor credentials and are
140
+ # exercised by explicit integration profiles, not by the public OSS CI gate.
141
+ "src/dpone/runtime/connectors/api/*",
142
+ "src/dpone/runtime/connectors/bigquery.py",
143
+ "src/dpone/runtime/connectors/postgres.py",
144
+ "src/dpone/runtime/connectors/clickhouse*.py",
145
+ "src/dpone/runtime/sources/strategies/api/**",
146
+ "src/dpone/runtime/sources/strategies/clickhouse/**",
147
+ "src/dpone/runtime/sources/strategies/postgres/**",
148
+ "src/dpone/runtime/sinks/bigquery*.py",
149
+ "src/dpone/runtime/sinks/postgres*.py",
150
+ "src/dpone/runtime/sinks/strategies/**",
151
+ ]
152
+
153
+ [tool.coverage.report]
154
+ fail_under = 70
155
+ show_missing = true
156
+ skip_covered = true