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.
- dpone-0.1.0/PKG-INFO +290 -0
- dpone-0.1.0/README.md +225 -0
- dpone-0.1.0/pyproject.toml +156 -0
- dpone-0.1.0/src/dpone/.env.example +70 -0
- dpone-0.1.0/src/dpone/.gitignore +0 -0
- dpone-0.1.0/src/dpone/__init__.py +61 -0
- dpone-0.1.0/src/dpone/adapters/__init__.py +0 -0
- dpone-0.1.0/src/dpone/adapters/fs_local.py +21 -0
- dpone-0.1.0/src/dpone/adapters/fs_memory.py +30 -0
- dpone-0.1.0/src/dpone/adapters/yaml_pyyaml.py +16 -0
- dpone-0.1.0/src/dpone/app/__init__.py +0 -0
- dpone-0.1.0/src/dpone/app/cli_reference_source.py +13 -0
- dpone-0.1.0/src/dpone/app/context.py +33 -0
- dpone-0.1.0/src/dpone/app/logging.py +23 -0
- dpone-0.1.0/src/dpone/app/settings.py +68 -0
- dpone-0.1.0/src/dpone/cli/__init__.py +7 -0
- dpone-0.1.0/src/dpone/cli/legacy.py +74 -0
- dpone-0.1.0/src/dpone/cli/main.py +42 -0
- dpone-0.1.0/src/dpone/cli/parser.py +15 -0
- dpone-0.1.0/src/dpone/cli_render/__init__.py +12 -0
- dpone-0.1.0/src/dpone/cli_render/dag/__init__.py +3 -0
- dpone-0.1.0/src/dpone/cli_render/dag/common.py +144 -0
- dpone-0.1.0/src/dpone/cli_render/dag/deps.py +70 -0
- dpone-0.1.0/src/dpone/cli_render/dag/e2e_attribution.py +160 -0
- dpone-0.1.0/src/dpone/cli_render/dag/edge.py +95 -0
- dpone-0.1.0/src/dpone/cli_render/dag/edge_e2e.py +133 -0
- dpone-0.1.0/src/dpone/cli_render/dag/node.py +104 -0
- dpone-0.1.0/src/dpone/cli_render/dag/node_e2e.py +134 -0
- dpone-0.1.0/src/dpone/cli_render/dag/report.py +55 -0
- dpone-0.1.0/src/dpone/cli_render/manifest/__init__.py +19 -0
- dpone-0.1.0/src/dpone/cli_render/manifest/common.py +114 -0
- dpone-0.1.0/src/dpone/cli_render/manifest/explain.py +273 -0
- dpone-0.1.0/src/dpone/cli_render/manifest/list.py +11 -0
- dpone-0.1.0/src/dpone/cli_render/manifest/migrate.py +15 -0
- dpone-0.1.0/src/dpone/cli_render/manifest/registry_lint.py +15 -0
- dpone-0.1.0/src/dpone/cli_render/manifest/render.py +13 -0
- dpone-0.1.0/src/dpone/cli_render/manifest/stats.py +23 -0
- dpone-0.1.0/src/dpone/cli_render/manifest/validate.py +13 -0
- dpone-0.1.0/src/dpone/cli_render/manifest/verify.py +20 -0
- dpone-0.1.0/src/dpone/commands/__init__.py +0 -0
- dpone-0.1.0/src/dpone/commands/base.py +29 -0
- dpone-0.1.0/src/dpone/commands/dag/__init__.py +0 -0
- dpone-0.1.0/src/dpone/commands/dag/explain_deps_cmd.py +120 -0
- dpone-0.1.0/src/dpone/commands/dag/explain_edge_cmd.py +123 -0
- dpone-0.1.0/src/dpone/commands/dag/explain_edge_e2e_cmd.py +134 -0
- dpone-0.1.0/src/dpone/commands/dag/explain_node_cmd.py +93 -0
- dpone-0.1.0/src/dpone/commands/dag/explain_node_e2e_cmd.py +114 -0
- dpone-0.1.0/src/dpone/commands/dag/list_edges_cmd.py +309 -0
- dpone-0.1.0/src/dpone/commands/dag/report_cmd.py +255 -0
- dpone-0.1.0/src/dpone/commands/dag/subgraph_cmd.py +213 -0
- dpone-0.1.0/src/dpone/commands/docs/__init__.py +60 -0
- dpone-0.1.0/src/dpone/commands/docs/check_compatibility_cmd.py +52 -0
- dpone-0.1.0/src/dpone/commands/docs/check_docs_cmd.py +44 -0
- dpone-0.1.0/src/dpone/commands/docs/check_import_rules_cmd.py +37 -0
- dpone-0.1.0/src/dpone/commands/docs/check_layer_metrics_cmd.py +97 -0
- dpone-0.1.0/src/dpone/commands/docs/check_removal_readiness_cmd.py +36 -0
- dpone-0.1.0/src/dpone/commands/docs/update_cli_reference_cmd.py +26 -0
- dpone-0.1.0/src/dpone/commands/docs/update_deprecation_roadmap_cmd.py +35 -0
- dpone-0.1.0/src/dpone/commands/docs/update_dev_metrics_cmd.py +45 -0
- dpone-0.1.0/src/dpone/commands/docs/update_shim_removal_plan_cmd.py +29 -0
- dpone-0.1.0/src/dpone/commands/func_command.py +62 -0
- dpone-0.1.0/src/dpone/commands/manifest/__init__.py +0 -0
- dpone-0.1.0/src/dpone/commands/manifest/explain_cmd.py +145 -0
- dpone-0.1.0/src/dpone/commands/manifest/lint_registry_cmd.py +64 -0
- dpone-0.1.0/src/dpone/commands/manifest/list_cmd.py +65 -0
- dpone-0.1.0/src/dpone/commands/manifest/migrate_cmd.py +87 -0
- dpone-0.1.0/src/dpone/commands/manifest/render_cmd.py +55 -0
- dpone-0.1.0/src/dpone/commands/manifest/stats_cmd.py +66 -0
- dpone-0.1.0/src/dpone/commands/manifest/validate_cmd.py +60 -0
- dpone-0.1.0/src/dpone/commands/manifest/verify_cmd.py +86 -0
- dpone-0.1.0/src/dpone/commands/registry.py +175 -0
- dpone-0.1.0/src/dpone/config/__init__.py +11 -0
- dpone-0.1.0/src/dpone/config/env.py +143 -0
- dpone-0.1.0/src/dpone/config/load_config.py +166 -0
- dpone-0.1.0/src/dpone/contracts/__init__.py +31 -0
- dpone-0.1.0/src/dpone/contracts/api_sources.py +86 -0
- dpone-0.1.0/src/dpone/contracts/errors.py +11 -0
- dpone-0.1.0/src/dpone/contracts/process_types.py +41 -0
- dpone-0.1.0/src/dpone/contracts/run_context.py +17 -0
- dpone-0.1.0/src/dpone/contracts/technical_columns.py +165 -0
- dpone-0.1.0/src/dpone/core/__init__.py +49 -0
- dpone-0.1.0/src/dpone/core/artifacts.py +3 -0
- dpone-0.1.0/src/dpone/core/dag_builder.py +118 -0
- dpone-0.1.0/src/dpone/core/errors.py +3 -0
- dpone-0.1.0/src/dpone/core/etl_types.py +3 -0
- dpone-0.1.0/src/dpone/core/runtime.py +3 -0
- dpone-0.1.0/src/dpone/core/task_group_builder.py +156 -0
- dpone-0.1.0/src/dpone/credentials/__init__.py +39 -0
- dpone-0.1.0/src/dpone/credentials/config.py +6 -0
- dpone-0.1.0/src/dpone/credentials/factory.py +6 -0
- dpone-0.1.0/src/dpone/credentials/manager.py +6 -0
- dpone-0.1.0/src/dpone/credentials/providers.py +6 -0
- dpone-0.1.0/src/dpone/dag/__init__.py +51 -0
- dpone-0.1.0/src/dpone/dag/config.py +32 -0
- dpone-0.1.0/src/dpone/dag/config_models.py +173 -0
- dpone-0.1.0/src/dpone/dag/config_refs.py +64 -0
- dpone-0.1.0/src/dpone/dag/dag_report.py +637 -0
- dpone-0.1.0/src/dpone/dag/dependency_parser.py +204 -0
- dpone-0.1.0/src/dpone/dag/deps_end_to_end_explain.py +453 -0
- dpone-0.1.0/src/dpone/dag/edge_end_to_end_explain.py +278 -0
- dpone-0.1.0/src/dpone/dag/edge_explain.py +485 -0
- dpone-0.1.0/src/dpone/dag/edge_resolver.py +366 -0
- dpone-0.1.0/src/dpone/dag/finder.py +164 -0
- dpone-0.1.0/src/dpone/dag/graph.py +83 -0
- dpone-0.1.0/src/dpone/dag/graph_algorithms.py +87 -0
- dpone-0.1.0/src/dpone/dag/graph_relationships.py +59 -0
- dpone-0.1.0/src/dpone/dag/load_config_builder.py +353 -0
- dpone-0.1.0/src/dpone/dag/loader.py +95 -0
- dpone-0.1.0/src/dpone/dag/manager.py +135 -0
- dpone-0.1.0/src/dpone/dag/manifest_chain_loader.py +101 -0
- dpone-0.1.0/src/dpone/dag/node_end_to_end_explain.py +151 -0
- dpone-0.1.0/src/dpone/dag/node_explain.py +140 -0
- dpone-0.1.0/src/dpone/dag/node_factory.py +25 -0
- dpone-0.1.0/src/dpone/dag/node_registry.py +79 -0
- dpone-0.1.0/src/dpone/dag/parse_trace.py +98 -0
- dpone-0.1.0/src/dpone/dag/post_parse_explain.py +337 -0
- dpone-0.1.0/src/dpone/dag/process.py +42 -0
- dpone-0.1.0/src/dpone/dag/process_config_parser.py +138 -0
- dpone-0.1.0/src/dpone/dag/resolver.py +68 -0
- dpone-0.1.0/src/dpone/dag/subgraph.py +161 -0
- dpone-0.1.0/src/dpone/dag/task_group_index.py +49 -0
- dpone-0.1.0/src/dpone/dag/yaml_types.py +63 -0
- dpone-0.1.0/src/dpone/etl/__init__.py +39 -0
- dpone-0.1.0/src/dpone/etl/processor.py +6 -0
- dpone-0.1.0/src/dpone/etl_logging/__init__.py +39 -0
- dpone-0.1.0/src/dpone/etl_logging/etl_logger.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/__init__.py +39 -0
- dpone-0.1.0/src/dpone/lib/connectors/api/__init__.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/api/base.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/api/cbr.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/api/google_ads.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/api/google_sheets.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/api/omnidesk.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/api/openexchangerates.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/api/yandex_webmaster.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/base.py +9 -0
- dpone-0.1.0/src/dpone/lib/connectors/bigquery.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/clickhouse.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/postgres.py +6 -0
- dpone-0.1.0/src/dpone/lib/connectors/proxy.py +6 -0
- dpone-0.1.0/src/dpone/lib/technical_columns.py +3 -0
- dpone-0.1.0/src/dpone/lib/utils/__init__.py +15 -0
- dpone-0.1.0/src/dpone/lib/utils/data_type_mapper.py +3 -0
- dpone-0.1.0/src/dpone/lib/utils/dict_config_handler.py +32 -0
- dpone-0.1.0/src/dpone/lib/utils/gcs/__init__.py +41 -0
- dpone-0.1.0/src/dpone/lib/utils/gcs/cleaner.py +259 -0
- dpone-0.1.0/src/dpone/lib/utils/gcs/client.py +73 -0
- dpone-0.1.0/src/dpone/lib/utils/gcs/hmac_credentials.py +123 -0
- dpone-0.1.0/src/dpone/lib/utils/gcs/path_manager.py +193 -0
- dpone-0.1.0/src/dpone/lib/utils/gcs/uri.py +117 -0
- dpone-0.1.0/src/dpone/lib/utils/safe_sql_logging.py +37 -0
- dpone-0.1.0/src/dpone/lib/utils/security.py +116 -0
- dpone-0.1.0/src/dpone/lib/utils/timezone_converter.py +3 -0
- dpone-0.1.0/src/dpone/lib/utils/utils.py +6 -0
- dpone-0.1.0/src/dpone/manifest/__init__.py +28 -0
- dpone-0.1.0/src/dpone/manifest/batch_compiler.py +566 -0
- dpone-0.1.0/src/dpone/manifest/batch_loader.py +101 -0
- dpone-0.1.0/src/dpone/manifest/conventions.py +251 -0
- dpone-0.1.0/src/dpone/manifest/explain.py +204 -0
- dpone-0.1.0/src/dpone/manifest/explain_io.py +37 -0
- dpone-0.1.0/src/dpone/manifest/explain_merge.py +267 -0
- dpone-0.1.0/src/dpone/manifest/explain_models.py +159 -0
- dpone-0.1.0/src/dpone/manifest/explain_trace.py +350 -0
- dpone-0.1.0/src/dpone/manifest/explain_utils.py +187 -0
- dpone-0.1.0/src/dpone/manifest/explain_why.py +210 -0
- dpone-0.1.0/src/dpone/manifest/loader.py +107 -0
- dpone-0.1.0/src/dpone/manifest/migrate.py +674 -0
- dpone-0.1.0/src/dpone/manifest/models.py +40 -0
- dpone-0.1.0/src/dpone/manifest/registry.py +408 -0
- dpone-0.1.0/src/dpone/manifest/registry_lint.py +192 -0
- dpone-0.1.0/src/dpone/manifest/validation.py +729 -0
- dpone-0.1.0/src/dpone/manifest/verify.py +322 -0
- dpone-0.1.0/src/dpone/metrics/__init__.py +0 -0
- dpone-0.1.0/src/dpone/metrics/import_graph.py +170 -0
- dpone-0.1.0/src/dpone/metrics/import_rules.py +282 -0
- dpone-0.1.0/src/dpone/metrics/layer_metrics.py +172 -0
- dpone-0.1.0/src/dpone/metrics/layer_metrics_gate.py +313 -0
- dpone-0.1.0/src/dpone/metrics/loc.py +81 -0
- dpone-0.1.0/src/dpone/metrics/models.py +71 -0
- dpone-0.1.0/src/dpone/metrics/python_imports.py +120 -0
- dpone-0.1.0/src/dpone/metrics/render.py +320 -0
- dpone-0.1.0/src/dpone/output.py +122 -0
- dpone-0.1.0/src/dpone/output_table.py +63 -0
- dpone-0.1.0/src/dpone/ports/__init__.py +16 -0
- dpone-0.1.0/src/dpone/ports/db_connector.py +169 -0
- dpone-0.1.0/src/dpone/ports/filesystem.py +22 -0
- dpone-0.1.0/src/dpone/ports/process_runner.py +56 -0
- dpone-0.1.0/src/dpone/ports/runtime_hydrator.py +75 -0
- dpone-0.1.0/src/dpone/ports/yaml_codec.py +11 -0
- dpone-0.1.0/src/dpone/reconciliation/__init__.py +39 -0
- dpone-0.1.0/src/dpone/reconciliation/base.py +6 -0
- dpone-0.1.0/src/dpone/reconciliation/manager.py +6 -0
- dpone-0.1.0/src/dpone/reconciliation/soft_delete/__init__.py +6 -0
- dpone-0.1.0/src/dpone/reconciliation/soft_delete/bigquery.py +6 -0
- dpone-0.1.0/src/dpone/reconciliation/soft_delete/clickhouse.py +6 -0
- dpone-0.1.0/src/dpone/reconciliation/soft_delete/postgres.py +6 -0
- dpone-0.1.0/src/dpone/reconciliation/soft_delete/registry.py +6 -0
- dpone-0.1.0/src/dpone/reconciliation/tech_tables.py +6 -0
- dpone-0.1.0/src/dpone/runtime/__init__.py +13 -0
- dpone-0.1.0/src/dpone/runtime/api_registry.py +285 -0
- dpone-0.1.0/src/dpone/runtime/artifacts.py +516 -0
- dpone-0.1.0/src/dpone/runtime/bootstrap.py +304 -0
- dpone-0.1.0/src/dpone/runtime/connectors/__init__.py +53 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/__init__.py +153 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/appsflyer.py +583 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/appsflyer_resources.py +111 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/base.py +840 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/cbr.py +128 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/fasttrack.py +335 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/fasttrack_resources.py +107 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/google_ads.py +318 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/google_ads_resources.py +50 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/google_sheets.py +665 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/google_sheets_resources.py +50 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/mindbox.py +477 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/mindbox_resources.py +109 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/omnidesk.py +692 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/openexchangerates.py +315 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/openexchangerates_resources.py +63 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/similarweb.py +337 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/similarweb_resources.py +76 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/yandex_webmaster.py +496 -0
- dpone-0.1.0/src/dpone/runtime/connectors/api/yandex_webmaster_resources.py +117 -0
- dpone-0.1.0/src/dpone/runtime/connectors/base.py +12 -0
- dpone-0.1.0/src/dpone/runtime/connectors/bigquery.py +584 -0
- dpone-0.1.0/src/dpone/runtime/connectors/clickhouse.py +275 -0
- dpone-0.1.0/src/dpone/runtime/connectors/clickhouse_gcs_export.py +97 -0
- dpone-0.1.0/src/dpone/runtime/connectors/clickhouse_incremental_export.py +239 -0
- dpone-0.1.0/src/dpone/runtime/connectors/clickhouse_partitioning.py +191 -0
- dpone-0.1.0/src/dpone/runtime/connectors/clickhouse_query_ops.py +177 -0
- dpone-0.1.0/src/dpone/runtime/connectors/postgres.py +324 -0
- dpone-0.1.0/src/dpone/runtime/connectors/proxy.py +169 -0
- dpone-0.1.0/src/dpone/runtime/credentials/__init__.py +40 -0
- dpone-0.1.0/src/dpone/runtime/credentials/config.py +39 -0
- dpone-0.1.0/src/dpone/runtime/credentials/factory.py +263 -0
- dpone-0.1.0/src/dpone/runtime/credentials/manager.py +37 -0
- dpone-0.1.0/src/dpone/runtime/credentials/providers.py +189 -0
- dpone-0.1.0/src/dpone/runtime/dev_install.py +290 -0
- dpone-0.1.0/src/dpone/runtime/etl/__init__.py +5 -0
- dpone-0.1.0/src/dpone/runtime/etl/load_config_runtime.py +195 -0
- dpone-0.1.0/src/dpone/runtime/etl/processor.py +243 -0
- dpone-0.1.0/src/dpone/runtime/etl/reconciliation_service.py +194 -0
- dpone-0.1.0/src/dpone/runtime/etl/run_state_tracker.py +101 -0
- dpone-0.1.0/src/dpone/runtime/etl_logging/__init__.py +8 -0
- dpone-0.1.0/src/dpone/runtime/etl_logging/etl_logger.py +962 -0
- dpone-0.1.0/src/dpone/runtime/reconciliation/__init__.py +37 -0
- dpone-0.1.0/src/dpone/runtime/reconciliation/base.py +140 -0
- dpone-0.1.0/src/dpone/runtime/reconciliation/manager.py +304 -0
- dpone-0.1.0/src/dpone/runtime/reconciliation/soft_delete/__init__.py +13 -0
- dpone-0.1.0/src/dpone/runtime/reconciliation/soft_delete/bigquery.py +84 -0
- dpone-0.1.0/src/dpone/runtime/reconciliation/soft_delete/clickhouse.py +84 -0
- dpone-0.1.0/src/dpone/runtime/reconciliation/soft_delete/postgres.py +96 -0
- dpone-0.1.0/src/dpone/runtime/reconciliation/soft_delete/registry.py +104 -0
- dpone-0.1.0/src/dpone/runtime/reconciliation/tech_tables.py +941 -0
- dpone-0.1.0/src/dpone/runtime/sinks/__init__.py +73 -0
- dpone-0.1.0/src/dpone/runtime/sinks/base.py +46 -0
- dpone-0.1.0/src/dpone/runtime/sinks/bigquery.py +200 -0
- dpone-0.1.0/src/dpone/runtime/sinks/bigquery_staging_file_loader.py +180 -0
- dpone-0.1.0/src/dpone/runtime/sinks/bigquery_staging_gcs_loader.py +131 -0
- dpone-0.1.0/src/dpone/runtime/sinks/bigquery_staging_manager.py +242 -0
- dpone-0.1.0/src/dpone/runtime/sinks/postgres.py +86 -0
- dpone-0.1.0/src/dpone/runtime/sinks/postgres_staging_manager.py +179 -0
- dpone-0.1.0/src/dpone/runtime/sinks/staging.py +36 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/__init__.py +60 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/base.py +18 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/bigquery_base.py +199 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/bigquery_full_refresh.py +215 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/bigquery_increment_append.py +148 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/bigquery_increment_merge.py +75 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/bigquery_replace_strategy.py +73 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/dml_helper.py +222 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/exchange_logger.py +114 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/partition_validation_service.py +93 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/bigquery/target_table_manager.py +282 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/file_export_loader.py +423 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/internal_query_loader.py +165 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/postgres_base.py +175 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/postgres_full_refresh.py +276 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/postgres_increment_append.py +304 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/postgres_increment_merge.py +51 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/postgres_replace_strategy.py +29 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/staging_sql_helper.py +142 -0
- dpone-0.1.0/src/dpone/runtime/sinks/strategies/postgres/target_table_manager.py +162 -0
- dpone-0.1.0/src/dpone/runtime/sources/__init__.py +64 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/__init__.py +49 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/appsflyer.py +41 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/base.py +79 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/cbr.py +34 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/fasttrack.py +57 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/google_ads.py +33 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/google_sheets.py +25 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/mindbox.py +36 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/omnidesk.py +108 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/openexchangerates.py +31 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/similarweb.py +22 -0
- dpone-0.1.0/src/dpone/runtime/sources/api/yandex_webmaster.py +39 -0
- dpone-0.1.0/src/dpone/runtime/sources/base.py +32 -0
- dpone-0.1.0/src/dpone/runtime/sources/clickhouse.py +77 -0
- dpone-0.1.0/src/dpone/runtime/sources/postgres.py +102 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/__init__.py +83 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/__init__.py +65 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/appsflyer/__init__.py +9 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/appsflyer/common.py +249 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/appsflyer/full_extract.py +24 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/appsflyer/incremental_append_extract.py +25 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/base.py +237 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/cbr/__init__.py +7 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/cbr/full_extract.py +75 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/cbr/incremental_merge_extract.py +90 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/fasttrack/__init__.py +11 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/fasttrack/base.py +181 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/fasttrack/full_extract.py +23 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/fasttrack/incremental_merge_extract.py +28 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_ads/__init__.py +9 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_ads/full_extract.py +110 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_ads/incremental_merge_extract.py +129 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_ads/specs.py +130 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_sheets/__init__.py +5 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/google_sheets/full_extract.py +90 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/mindbox/__init__.py +11 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/mindbox/base.py +251 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/mindbox/full_extract.py +42 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/mindbox/incremental_merge_extract.py +46 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/mindbox/replace_extract.py +59 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/omnidesk/__init__.py +17 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/omnidesk/dictionary_extract.py +156 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/omnidesk/full_extract.py +254 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/omnidesk/incremental_append_extract.py +514 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/omnidesk/incremental_merge_extract.py +321 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/openexchangerates/__init__.py +9 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/openexchangerates/full_extract.py +78 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/openexchangerates/incremental_merge_extract.py +89 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/similarweb/__init__.py +13 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/similarweb/base.py +108 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/similarweb/incremental_append_extract.py +111 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/similarweb/transformer.py +89 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/similarweb/validator.py +78 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/yandex_webmaster/__init__.py +39 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/yandex_webmaster/common.py +620 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/yandex_webmaster/full_extract.py +71 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/yandex_webmaster/incremental_merge_extract.py +81 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/api/yandex_webmaster/replace_extract.py +76 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/base.py +83 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/clickhouse/__init__.py +15 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/clickhouse/clickhouse_base.py +258 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/clickhouse/clickhouse_full_extract.py +370 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/clickhouse/clickhouse_incremental_extract.py +388 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/clickhouse/incremental_state_manager.py +118 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/postgres/__init__.py +37 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/postgres/postgres_base.py +409 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/postgres/postgres_full_extract.py +74 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/postgres/postgres_incremental_extract.py +309 -0
- dpone-0.1.0/src/dpone/runtime/sources/strategies/postgres/postgres_xmin_extract.py +287 -0
- dpone-0.1.0/src/dpone/runtime/sql_helpers/__init__.py +15 -0
- dpone-0.1.0/src/dpone/runtime/sql_helpers/exchange_queries.py +144 -0
- dpone-0.1.0/src/dpone/runtime/sql_helpers/reconciliation_queries.py +205 -0
- dpone-0.1.0/src/dpone/runtime/sql_helpers/run_state_queries.py +188 -0
- dpone-0.1.0/src/dpone/runtime/sql_helpers/technical_columns_queries.py +334 -0
- dpone-0.1.0/src/dpone/runtime/sql_helpers/xmin_queries.py +102 -0
- dpone-0.1.0/src/dpone/runtime/state/__init__.py +48 -0
- dpone-0.1.0/src/dpone/runtime/state/factory.py +138 -0
- dpone-0.1.0/src/dpone/runtime/state/models.py +87 -0
- dpone-0.1.0/src/dpone/runtime/state/repository.py +27 -0
- dpone-0.1.0/src/dpone/runtime/state/run_state.py +275 -0
- dpone-0.1.0/src/dpone/runtime/state/xmin_storage.py +187 -0
- dpone-0.1.0/src/dpone/runtime/support/__init__.py +42 -0
- dpone-0.1.0/src/dpone/runtime/support/cbr_xml_parser.py +106 -0
- dpone-0.1.0/src/dpone/runtime/support/data_type_mapper.py +813 -0
- dpone-0.1.0/src/dpone/runtime/support/fasttrack_columns.py +81 -0
- dpone-0.1.0/src/dpone/runtime/support/fasttrack_dates.py +103 -0
- dpone-0.1.0/src/dpone/runtime/support/gcs.py +122 -0
- dpone-0.1.0/src/dpone/runtime/support/technical_columns.py +3 -0
- dpone-0.1.0/src/dpone/runtime/support/timezone.py +249 -0
- dpone-0.1.0/src/dpone/runtime/xmin/__init__.py +5 -0
- dpone-0.1.0/src/dpone/runtime/xmin/manager.py +170 -0
- dpone-0.1.0/src/dpone/schema/etl-batch-manifest.schema.json +1208 -0
- dpone-0.1.0/src/dpone/schema/etl-config.schema.json +859 -0
- dpone-0.1.0/src/dpone/services/__init__.py +0 -0
- dpone-0.1.0/src/dpone/services/ci/__init__.py +43 -0
- dpone-0.1.0/src/dpone/services/ci/argocd_promote.py +277 -0
- dpone-0.1.0/src/dpone/services/ci/gitlab_mr.py +132 -0
- dpone-0.1.0/src/dpone/services/ci/snapshot_version.py +33 -0
- dpone-0.1.0/src/dpone/services/ci/yaml_update.py +102 -0
- dpone-0.1.0/src/dpone/services/dag/__init__.py +19 -0
- dpone-0.1.0/src/dpone/services/dag/load_context.py +136 -0
- dpone-0.1.0/src/dpone/services/dag/path_view.py +83 -0
- dpone-0.1.0/src/dpone/services/dag/views/__init__.py +35 -0
- dpone-0.1.0/src/dpone/services/dag/views/common.py +95 -0
- dpone-0.1.0/src/dpone/services/dag/views/deps.py +45 -0
- dpone-0.1.0/src/dpone/services/dag/views/edge.py +95 -0
- dpone-0.1.0/src/dpone/services/dag/views/edge_e2e.py +82 -0
- dpone-0.1.0/src/dpone/services/dag/views/node.py +35 -0
- dpone-0.1.0/src/dpone/services/dag/views/node_e2e.py +54 -0
- dpone-0.1.0/src/dpone/services/dag/views/report.py +58 -0
- dpone-0.1.0/src/dpone/services/docs/__init__.py +21 -0
- dpone-0.1.0/src/dpone/services/docs/check_compatibility_service.py +81 -0
- dpone-0.1.0/src/dpone/services/docs/check_docs_service.py +82 -0
- dpone-0.1.0/src/dpone/services/docs/check_import_rules_service.py +44 -0
- dpone-0.1.0/src/dpone/services/docs/check_layer_metrics_service.py +149 -0
- dpone-0.1.0/src/dpone/services/docs/check_removal_readiness_service.py +79 -0
- dpone-0.1.0/src/dpone/services/docs/cli_reference.py +161 -0
- dpone-0.1.0/src/dpone/services/docs/compatibility_registry.py +235 -0
- dpone-0.1.0/src/dpone/services/docs/deprecation_roadmap.py +124 -0
- dpone-0.1.0/src/dpone/services/docs/generated_block.py +48 -0
- dpone-0.1.0/src/dpone/services/docs/markdown_links.py +242 -0
- dpone-0.1.0/src/dpone/services/docs/shim_removal_plan.py +234 -0
- dpone-0.1.0/src/dpone/services/docs/update_cli_reference_service.py +44 -0
- dpone-0.1.0/src/dpone/services/docs/update_deprecation_roadmap_service.py +53 -0
- dpone-0.1.0/src/dpone/services/docs/update_dev_metrics_service.py +145 -0
- dpone-0.1.0/src/dpone/services/docs/update_shim_removal_plan_service.py +59 -0
- dpone-0.1.0/src/dpone/services/manifest/__init__.py +19 -0
- dpone-0.1.0/src/dpone/services/manifest/load_context.py +115 -0
- dpone-0.1.0/src/dpone/services/manifest/views/__init__.py +24 -0
- dpone-0.1.0/src/dpone/services/manifest/views/common.py +34 -0
- dpone-0.1.0/src/dpone/services/manifest/views/explain.py +31 -0
- dpone-0.1.0/src/dpone/services/manifest/views/list.py +47 -0
- dpone-0.1.0/src/dpone/services/manifest/views/migrate.py +38 -0
- dpone-0.1.0/src/dpone/services/manifest/views/registry_lint.py +41 -0
- dpone-0.1.0/src/dpone/services/manifest/views/render.py +32 -0
- dpone-0.1.0/src/dpone/services/manifest/views/stats.py +30 -0
- dpone-0.1.0/src/dpone/services/manifest/views/validate.py +41 -0
- dpone-0.1.0/src/dpone/services/manifest/views/verify.py +22 -0
- dpone-0.1.0/src/dpone/sink/__init__.py +39 -0
- dpone-0.1.0/src/dpone/sink/base.py +6 -0
- dpone-0.1.0/src/dpone/sink/bigquery.py +6 -0
- dpone-0.1.0/src/dpone/sink/postgres.py +6 -0
- dpone-0.1.0/src/dpone/sink/staging.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/__init__.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/base.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/bigquery/bigquery_base.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/bigquery/bigquery_full_refresh.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/bigquery/bigquery_increment_append.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/bigquery/bigquery_increment_merge.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/bigquery/bigquery_replace_strategy.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/postgres/postgres_base.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/postgres/postgres_full_refresh.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/postgres/postgres_increment_append.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/postgres/postgres_increment_merge.py +6 -0
- dpone-0.1.0/src/dpone/sink/strategies/postgres/postgres_replace_strategy.py +6 -0
- dpone-0.1.0/src/dpone/source/__init__.py +39 -0
- dpone-0.1.0/src/dpone/source/api/__init__.py +6 -0
- dpone-0.1.0/src/dpone/source/api/base.py +6 -0
- dpone-0.1.0/src/dpone/source/api/cbr.py +6 -0
- dpone-0.1.0/src/dpone/source/api/google_ads.py +6 -0
- dpone-0.1.0/src/dpone/source/api/google_sheets.py +6 -0
- dpone-0.1.0/src/dpone/source/api/omnidesk.py +6 -0
- dpone-0.1.0/src/dpone/source/api/openexchangerates.py +6 -0
- dpone-0.1.0/src/dpone/source/api/yandex_webmaster.py +6 -0
- dpone-0.1.0/src/dpone/source/base.py +6 -0
- dpone-0.1.0/src/dpone/source/clickhouse.py +6 -0
- dpone-0.1.0/src/dpone/source/postgres.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/__init__.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/__init__.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/base.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/cbr/__init__.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/cbr/full_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/cbr/incremental_merge_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/google_ads/__init__.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/google_ads/full_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/google_ads/incremental_merge_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/google_ads/specs.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/google_sheets/__init__.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/google_sheets/full_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/omnidesk/__init__.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/omnidesk/dictionary_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/omnidesk/full_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/omnidesk/incremental_append_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/omnidesk/incremental_merge_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/yandex_webmaster/__init__.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/yandex_webmaster/common.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/yandex_webmaster/full_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/yandex_webmaster/incremental_merge_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/api/yandex_webmaster/replace_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/base.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/clickhouse/__init__.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/clickhouse/clickhouse_base.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/clickhouse/clickhouse_full_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/clickhouse/clickhouse_incremental_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/clickhouse/incremental_state_manager.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/postgres/__init__.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/postgres/postgres_base.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/postgres/postgres_full_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/postgres/postgres_incremental_extract.py +6 -0
- dpone-0.1.0/src/dpone/source/strategies/postgres/postgres_xmin_extract.py +6 -0
- dpone-0.1.0/src/dpone/sql_helpers/__init__.py +39 -0
- dpone-0.1.0/src/dpone/sql_helpers/exchange_queries.py +6 -0
- dpone-0.1.0/src/dpone/sql_helpers/reconciliation_queries.py +6 -0
- dpone-0.1.0/src/dpone/sql_helpers/run_state_queries.py +6 -0
- dpone-0.1.0/src/dpone/sql_helpers/technical_columns_queries.py +6 -0
- dpone-0.1.0/src/dpone/sql_helpers/xmin_queries.py +6 -0
- dpone-0.1.0/src/dpone/state/__init__.py +39 -0
- dpone-0.1.0/src/dpone/state/factory.py +6 -0
- dpone-0.1.0/src/dpone/state/repository.py +6 -0
- dpone-0.1.0/src/dpone/state/run_state.py +6 -0
- dpone-0.1.0/src/dpone/state/xmin_storage.py +6 -0
- dpone-0.1.0/src/dpone/xmin/__init__.py +39 -0
- dpone-0.1.0/src/dpone/xmin/manager.py +6 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/__init__.py +42 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/config.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/dag_report.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/deps_end_to_end_explain.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/edge_end_to_end_explain.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/edge_explain.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/finder.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/graph.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/loader.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/manager.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/node_end_to_end_explain.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/node_explain.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/parse_trace.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/post_parse_explain.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/process.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/resolver.py +9 -0
- dpone-0.1.0/src/dpone/yaml_config_handler/subgraph.py +9 -0
- 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
|