data_dp_ssis2sp 0.12.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.
- data_dp_ssis2sp-0.12.0/.env.example +29 -0
- data_dp_ssis2sp-0.12.0/.gitignore +48 -0
- data_dp_ssis2sp-0.12.0/.pre-commit-config.yaml +53 -0
- data_dp_ssis2sp-0.12.0/.python-version +1 -0
- data_dp_ssis2sp-0.12.0/PKG-INFO +1423 -0
- data_dp_ssis2sp-0.12.0/README.md +1396 -0
- data_dp_ssis2sp-0.12.0/azure-pipelines.yaml +79 -0
- data_dp_ssis2sp-0.12.0/conftest.py +28 -0
- data_dp_ssis2sp-0.12.0/data_dp_global_settings/__init__.py +3 -0
- data_dp_ssis2sp-0.12.0/data_dp_global_settings/settings.py +866 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/__init__.py +21 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/__main__.py +7 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/_naming.py +120 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/__init__.py +1 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/activities.py +468 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/converter.py +536 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/emitter.py +70 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/finalise.py +122 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/flow.py +161 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/notify.py +136 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/par_params.py +107 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/reader.py +91 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/schedule.py +133 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/sharepoint.py +236 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/sql_assets.py +45 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/sql_format.py +158 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/adf/ssis_proc.py +115 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/agent/__init__.py +8 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/agent/command_parser.py +112 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/agent/extractor.py +342 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/agent/json_emitter.py +56 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/agent/manifest.py +217 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/agent/model.py +77 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/batch.py +693 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/cli.py +1244 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/column_rename.py +387 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/component_types.py +112 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/config.py +268 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/connection.py +142 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/control_graph.py +185 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/dialect.py +57 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/errors.py +48 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/export.py +163 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/expressions/__init__.py +49 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/expressions/ast.py +91 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/expressions/lexer.py +158 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/expressions/parser.py +186 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/expressions/translator.py +310 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/fix_tsql.py +313 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/flatten.py +186 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/generator.py +781 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/graph.py +110 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/inventory.py +91 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/linked_services.py +206 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/load_procs.py +79 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/model.py +261 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/observability.py +212 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/packages/__init__.py +23 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/packages/extractor.py +258 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/packages/model.py +40 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/packages/store_msdb.py +56 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/packages/store_ssisdb.py +215 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/parser.py +561 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/proc_render.py +159 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/project.py +130 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/register/__init__.py +3 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/register/linked_service_emitter.py +90 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/register/params.py +144 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/register/pipeline_emitter.py +169 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/register/proc_emitter.py +274 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/register/reader.py +97 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/register/sources.py +148 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/relation.py +65 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/rename_migration.py +139 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/report_server/__init__.py +15 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/report_server/models.py +50 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/report_server/rdl_builder.py +638 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/report_server/rdl_loader.py +579 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/schema_snapshot.py +289 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/sql/__init__.py +6 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/sql/datafactory_create_schema_role.sql +51 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/sql/usp_WaitForSsisExecution.sql +69 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/sql_gate.py +200 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/sqltypes.py +193 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/__init__.py +25 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/base.py +799 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/column_ops.py +91 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/conditional_split.py +73 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/context.py +388 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/destination.py +86 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/flow.py +104 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/grouping.py +124 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/lookup.py +176 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/registry.py +89 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/set_ops.py +296 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/transforms/source.py +294 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/tsql_ident.py +65 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/ui/__init__.py +9 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/ui/app.tcss +38 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/ui/log_style.py +120 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/ui/picker.py +113 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/ui/steps.py +301 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/ui/themes.py +63 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/ui/widgets.py +404 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/util.py +154 -0
- data_dp_ssis2sp-0.12.0/data_dp_ssis2sp/web.py +862 -0
- data_dp_ssis2sp-0.12.0/justfile +97 -0
- data_dp_ssis2sp-0.12.0/pyproject.toml +181 -0
- data_dp_ssis2sp-0.12.0/run.bat +177 -0
- data_dp_ssis2sp-0.12.0/scripts/validate_replication.py +360 -0
- data_dp_ssis2sp-0.12.0/stored_procedures/spEmailExample.sql +59 -0
- data_dp_ssis2sp-0.12.0/tests/__init__.py +0 -0
- data_dp_ssis2sp-0.12.0/tests/conftest.py +25 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/agent_manifest/injected_proc.json +11 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/agent_manifest/invalid_json.json +6 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/agent_manifest/missing_version.json +10 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/agent_manifest/traversal_dtsx.json +11 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/agent_manifest/valid.json +21 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/agent_manifest/wrong_version.json +11 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/agent_step_commands.json +89 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/determinism_tree/subdir/child_a.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/determinism_tree/subdir/child_b.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/determinism_tree/subdir/main.dtsx +34 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/determinism_tree/top_a.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/determinism_tree/top_b.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/expanded_project/@Project.manifest +22 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/expanded_project/LoadDims.dtsx +53 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/expanded_project/LoadSales.dtsx +56 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/expanded_project/Project.params +26 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/expanded_project/Staging.conmgr +10 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/flatfile/flat_file_no_header.dtsx +80 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf/DW_Nightly_Notify_Load.pipeline.json +197 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf/isserver_catalog_job.pipeline.json +112 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf/isserver_with_env_token_job.pipeline.json +367 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf/isserver_with_manifest_job.pipeline.json +360 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf/ls_notify_function.json +18 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf_jobs/branch_on_fail_retry_job.json +51 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf_jobs/cmdexec_job.json +25 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf_jobs/file_not_in_catalog_job.json +25 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf_jobs/isserver_catalog_job.json +39 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf_jobs/isserver_with_env_token_job.json +39 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf_jobs/isserver_with_manifest_job.json +25 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf_jobs/notify_failure_job.json +59 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf_jobs/rewritten_audit_job.json +28 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf_jobs/sql_store_job.json +25 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_adf_jobs/ultracs_daily_job.json +115 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_conn_e2e/LoadSalesJob.pipeline.json +138 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_jobs/example_job.json +59 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_rdl_procs/DW_PRESENTATION.reporting.usp_SalesByDate.StoredProcedure.sql +37 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_register_pipelines/validate_dw_presentation.json +21 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_register_procs/usp_ARF_743_0_param_available.sql +11 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/golden_register_procs/usp_Lendfast_FeeOverrides.sql +12 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first/childa.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first/childb.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first/main.dtsx +34 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_all_dangling/main.dtsx +27 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_collision/main.dtsx +27 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_collision/x1.dtsx +5 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_collision/x2.dtsx +5 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_container/after_child.dtsx +5 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_container/main.dtsx +40 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_container/nested_child.dtsx +5 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_cycle/child_a.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_cycle/child_b.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_cycle/main.dtsx +39 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_dangling/child_a.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_dangling/main.dtsx +24 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_main_with_dataflow/child.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_main_with_dataflow/main.dtsx +77 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_main_with_dataflow_multi/childa.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_main_with_dataflow_multi/childb.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_main_with_dataflow_multi/main.dtsx +75 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_malformed_main/childa.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_malformed_main/main.dtsx +17 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_missing_child/main.dtsx +17 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_nested/grandchild.dtsx +5 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_nested/main.dtsx +17 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_nested/nested_parent.dtsx +17 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_no_children/main.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_no_main/nomainchilda.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_no_main/nomainchildb.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_outside_dir/main.dtsx +17 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_sanitiser_collision/Foo Bar.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_sanitiser_collision/Foo.Bar.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_sanitiser_collision/Foo_Bar.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_sanitiser_collision/main.dtsx +37 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_url_encoded/Child%20A.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_url_encoded/Child%20B.dtsx +48 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_first_url_encoded/main.dtsx +27 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_orch_with_db/childa.dtsx +44 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_orch_with_db/childb.dtsx +32 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/main_orch_with_db/main.dtsx +59 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/manifest/crafted_with_env_token.manifest +44 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/manifest/crafted_with_pkg_param.manifest +41 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/manifest/crafted_with_required_missing.manifest +20 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/manifest/ultracs_main.manifest +1342 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/rdl/conversion_register.csv +4 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/rdl/dax_report.rdl +12 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/rdl/monthly_sales.rdl +26 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/register_sample.csv +7 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/register_sharepoint_sample.csv +12 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/report_params_sample.csv +8 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/sales_etl_baseline.sql +232 -0
- data_dp_ssis2sp-0.12.0/tests/fixtures/sales_etl_flattened_baseline.sql +137 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_activities.py +635 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_connection_param.py +305 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_converter.py +975 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_emitter_determinism.py +154 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_flow.py +490 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_par_params.py +235 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_pipeline_params.py +460 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_review_fixes.py +588 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_schedule.py +245 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_sharepoint.py +393 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_stored_proc_notify.py +323 -0
- data_dp_ssis2sp-0.12.0/tests/test_adf_tsql_connection_concat.py +349 -0
- data_dp_ssis2sp-0.12.0/tests/test_agent_command_parser.py +141 -0
- data_dp_ssis2sp-0.12.0/tests/test_agent_extractor.py +323 -0
- data_dp_ssis2sp-0.12.0/tests/test_agent_json_determinism.py +177 -0
- data_dp_ssis2sp-0.12.0/tests/test_agent_manifest.py +245 -0
- data_dp_ssis2sp-0.12.0/tests/test_agent_manifest_connections.py +87 -0
- data_dp_ssis2sp-0.12.0/tests/test_agent_step_connection_identity.py +131 -0
- data_dp_ssis2sp-0.12.0/tests/test_agent_step_rewriter.py +325 -0
- data_dp_ssis2sp-0.12.0/tests/test_agent_warnings_log.py +85 -0
- data_dp_ssis2sp-0.12.0/tests/test_b1_shared_proc_shell.py +62 -0
- data_dp_ssis2sp-0.12.0/tests/test_batch.py +960 -0
- data_dp_ssis2sp-0.12.0/tests/test_batch_main_first.py +105 -0
- data_dp_ssis2sp-0.12.0/tests/test_batch_main_with_dataflow.py +61 -0
- data_dp_ssis2sp-0.12.0/tests/test_batch_negative_paths.py +161 -0
- data_dp_ssis2sp-0.12.0/tests/test_batch_no_children.py +45 -0
- data_dp_ssis2sp-0.12.0/tests/test_batch_no_main.py +103 -0
- data_dp_ssis2sp-0.12.0/tests/test_batch_proc_manifest.py +110 -0
- data_dp_ssis2sp-0.12.0/tests/test_batch_proc_manifest_connections.py +81 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli.py +572 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_deploy_stored_procedures.py +533 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_emit_adf.py +337 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_emit_adf_from_register.py +170 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_emit_adf_sharepoint.py +151 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_emit_procs_from_register.py +152 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_emit_procs_from_reportserver.py +199 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_exit_codes.py +223 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_extract_agent_jobs_proc_manifest.py +76 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_extract_packages.py +148 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_finalise_adf.py +65 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_generate_linked_services.py +61 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_inventory.py +63 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_load_stored_procedures.py +806 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_pipeline.py +68 -0
- data_dp_ssis2sp-0.12.0/tests/test_cli_proc_commands.py +134 -0
- data_dp_ssis2sp-0.12.0/tests/test_column_rename.py +481 -0
- data_dp_ssis2sp-0.12.0/tests/test_component_types.py +85 -0
- data_dp_ssis2sp-0.12.0/tests/test_config.py +317 -0
- data_dp_ssis2sp-0.12.0/tests/test_conn_cli_default.py +66 -0
- data_dp_ssis2sp-0.12.0/tests/test_conn_e2e.py +214 -0
- data_dp_ssis2sp-0.12.0/tests/test_connection.py +141 -0
- data_dp_ssis2sp-0.12.0/tests/test_connection_identity.py +94 -0
- data_dp_ssis2sp-0.12.0/tests/test_connection_resolution.py +147 -0
- data_dp_ssis2sp-0.12.0/tests/test_control_graph.py +243 -0
- data_dp_ssis2sp-0.12.0/tests/test_convert_project.py +142 -0
- data_dp_ssis2sp-0.12.0/tests/test_dialect.py +64 -0
- data_dp_ssis2sp-0.12.0/tests/test_email_stored_proc_ddl.py +124 -0
- data_dp_ssis2sp-0.12.0/tests/test_ept_path_references.py +80 -0
- data_dp_ssis2sp-0.12.0/tests/test_export.py +106 -0
- data_dp_ssis2sp-0.12.0/tests/test_expressions.py +188 -0
- data_dp_ssis2sp-0.12.0/tests/test_finalise.py +155 -0
- data_dp_ssis2sp-0.12.0/tests/test_finalise_settings.py +48 -0
- data_dp_ssis2sp-0.12.0/tests/test_flatten.py +303 -0
- data_dp_ssis2sp-0.12.0/tests/test_flatten_equivalence.py +164 -0
- data_dp_ssis2sp-0.12.0/tests/test_fqdn_e2e.py +262 -0
- data_dp_ssis2sp-0.12.0/tests/test_generator.py +889 -0
- data_dp_ssis2sp-0.12.0/tests/test_generator_determinism.py +111 -0
- data_dp_ssis2sp-0.12.0/tests/test_generator_proc_name.py +49 -0
- data_dp_ssis2sp-0.12.0/tests/test_global_settings.py +23 -0
- data_dp_ssis2sp-0.12.0/tests/test_graph.py +60 -0
- data_dp_ssis2sp-0.12.0/tests/test_gs1_config_shim.py +180 -0
- data_dp_ssis2sp-0.12.0/tests/test_gs2_cli_flags.py +190 -0
- data_dp_ssis2sp-0.12.0/tests/test_gs3_env_migration.py +201 -0
- data_dp_ssis2sp-0.12.0/tests/test_input_normalization.py +92 -0
- data_dp_ssis2sp-0.12.0/tests/test_inventory.py +75 -0
- data_dp_ssis2sp-0.12.0/tests/test_lexer.py +263 -0
- data_dp_ssis2sp-0.12.0/tests/test_linked_services.py +1054 -0
- data_dp_ssis2sp-0.12.0/tests/test_log3_removal.py +451 -0
- data_dp_ssis2sp-0.12.0/tests/test_log4_1_blob_ls.py +121 -0
- data_dp_ssis2sp-0.12.0/tests/test_log4_2_dynamic_log_settings.py +245 -0
- data_dp_ssis2sp-0.12.0/tests/test_lookup_isnull.py +143 -0
- data_dp_ssis2sp-0.12.0/tests/test_naming.py +138 -0
- data_dp_ssis2sp-0.12.0/tests/test_observability.py +307 -0
- data_dp_ssis2sp-0.12.0/tests/test_orchestrator_only_main.py +207 -0
- data_dp_ssis2sp-0.12.0/tests/test_packages_extractor.py +517 -0
- data_dp_ssis2sp-0.12.0/tests/test_parameter_declarations.py +106 -0
- data_dp_ssis2sp-0.12.0/tests/test_parser.py +390 -0
- data_dp_ssis2sp-0.12.0/tests/test_proc_rdl_style_output.py +273 -0
- data_dp_ssis2sp-0.12.0/tests/test_proc_render.py +84 -0
- data_dp_ssis2sp-0.12.0/tests/test_proc_use_database.py +195 -0
- data_dp_ssis2sp-0.12.0/tests/test_project.py +151 -0
- data_dp_ssis2sp-0.12.0/tests/test_readme.py +114 -0
- data_dp_ssis2sp-0.12.0/tests/test_register_linked_service_emitter.py +113 -0
- data_dp_ssis2sp-0.12.0/tests/test_register_params.py +362 -0
- data_dp_ssis2sp-0.12.0/tests/test_register_pipeline_emitter.py +387 -0
- data_dp_ssis2sp-0.12.0/tests/test_register_proc_emitter.py +424 -0
- data_dp_ssis2sp-0.12.0/tests/test_register_reader.py +199 -0
- data_dp_ssis2sp-0.12.0/tests/test_register_sources.py +282 -0
- data_dp_ssis2sp-0.12.0/tests/test_relation.py +83 -0
- data_dp_ssis2sp-0.12.0/tests/test_rename_migration.py +338 -0
- data_dp_ssis2sp-0.12.0/tests/test_report_server_builder.py +592 -0
- data_dp_ssis2sp-0.12.0/tests/test_report_server_loader.py +667 -0
- data_dp_ssis2sp-0.12.0/tests/test_sales_etl_conversion.py +121 -0
- data_dp_ssis2sp-0.12.0/tests/test_schema_qualified_procs.py +137 -0
- data_dp_ssis2sp-0.12.0/tests/test_schema_snapshot.py +195 -0
- data_dp_ssis2sp-0.12.0/tests/test_sp_migration_settings.py +179 -0
- data_dp_ssis2sp-0.12.0/tests/test_spe1_email_settings.py +303 -0
- data_dp_ssis2sp-0.12.0/tests/test_sql_assets.py +45 -0
- data_dp_ssis2sp-0.12.0/tests/test_sql_format.py +154 -0
- data_dp_ssis2sp-0.12.0/tests/test_sql_gate.py +56 -0
- data_dp_ssis2sp-0.12.0/tests/test_sqltypes.py +148 -0
- data_dp_ssis2sp-0.12.0/tests/test_ssis_proc.py +89 -0
- data_dp_ssis2sp-0.12.0/tests/test_t1_agent_metadata.py +789 -0
- data_dp_ssis2sp-0.12.0/tests/test_t2_pipeline_metadata.py +153 -0
- data_dp_ssis2sp-0.12.0/tests/test_t4_notify.py +58 -0
- data_dp_ssis2sp-0.12.0/tests/test_t5_converter_notify.py +375 -0
- data_dp_ssis2sp-0.12.0/tests/test_textual_serve_dep.py +94 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_base.py +1180 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_column_ops.py +244 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_conditional_split.py +140 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_context.py +361 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_destination.py +156 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_flow.py +177 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_grouping.py +221 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_lookup.py +358 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_registry.py +136 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_set_ops.py +565 -0
- data_dp_ssis2sp-0.12.0/tests/test_transforms_source.py +1007 -0
- data_dp_ssis2sp-0.12.0/tests/test_translator.py +346 -0
- data_dp_ssis2sp-0.12.0/tests/test_ui.py +1385 -0
- data_dp_ssis2sp-0.12.0/tests/test_ui_log_style.py +97 -0
- data_dp_ssis2sp-0.12.0/tests/test_ui_steps.py +258 -0
- data_dp_ssis2sp-0.12.0/tests/test_ui_themes.py +57 -0
- data_dp_ssis2sp-0.12.0/tests/test_ui_widgets.py +451 -0
- data_dp_ssis2sp-0.12.0/tests/test_url_encoded_names.py +98 -0
- data_dp_ssis2sp-0.12.0/tests/test_util.py +91 -0
- data_dp_ssis2sp-0.12.0/tests/test_uv_migration.py +173 -0
- data_dp_ssis2sp-0.12.0/tests/test_visual_replication.py +296 -0
- data_dp_ssis2sp-0.12.0/tests/test_web.py +195 -0
- data_dp_ssis2sp-0.12.0/uv.lock +3016 -0
- data_dp_ssis2sp-0.12.0/validation/__init__.py +15 -0
- data_dp_ssis2sp-0.12.0/validation/_sql_regex.py +17 -0
- data_dp_ssis2sp-0.12.0/validation/capture/RUNBOOK.md +194 -0
- data_dp_ssis2sp-0.12.0/validation/capture/__init__.py +1 -0
- data_dp_ssis2sp-0.12.0/validation/capture/capture.ps1 +136 -0
- data_dp_ssis2sp-0.12.0/validation/capture/capture.py +302 -0
- data_dp_ssis2sp-0.12.0/validation/comparison.py +563 -0
- data_dp_ssis2sp-0.12.0/validation/conftest.py +92 -0
- data_dp_ssis2sp-0.12.0/validation/connection.py +179 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/aggregate_group/golden/.gitkeep +0 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/aggregate_group/ledger.yaml +19 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/aggregate_group/package.dtsx +189 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/aggregate_group/schema.sql +26 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/aggregate_group/seed/src_sales.csv +12 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/conditional_split/golden/.gitkeep +0 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/conditional_split/ledger.yaml +29 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/conditional_split/package.dtsx +159 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/conditional_split/schema.sql +41 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/conditional_split/seed/src_scores.csv +12 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/derived_and_convert/golden/.gitkeep +0 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/derived_and_convert/ledger.yaml +15 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/derived_and_convert/package.dtsx +212 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/derived_and_convert/schema.sql +29 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/derived_and_convert/seed/src_products.csv +8 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/etl_full/golden/.gitkeep +0 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/etl_full/ledger.yaml +29 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/etl_full/package.dtsx +287 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/etl_full/schema.sql +37 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/etl_full/seed/ref_customer_tiers.csv +6 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/etl_full/seed/src_transactions.csv +8 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/lookup_match/golden/.gitkeep +0 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/lookup_match/ledger.yaml +51 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/lookup_match/package.dtsx +154 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/lookup_match/schema.sql +43 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/lookup_match/seed/ref_customers.csv +6 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/lookup_match/seed/src_orders.csv +8 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/merge_join/golden/.gitkeep +0 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/merge_join/ledger.yaml +17 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/merge_join/package.dtsx +147 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/merge_join/schema.sql +31 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/merge_join/seed/src_departments.csv +4 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/merge_join/seed/src_employees.csv +7 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/passthrough_basic/golden/.gitkeep +0 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/passthrough_basic/ledger.yaml +11 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/passthrough_basic/package.dtsx +83 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/passthrough_basic/schema.sql +26 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/passthrough_basic/seed/src_items.csv +6 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/union_multicast/golden/.gitkeep +0 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/union_multicast/ledger.yaml +29 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/union_multicast/package.dtsx +229 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/union_multicast/schema.sql +43 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/union_multicast/seed/src_events_current.csv +5 -0
- data_dp_ssis2sp-0.12.0/validation/corpus/union_multicast/seed/src_events_prior.csv +5 -0
- data_dp_ssis2sp-0.12.0/validation/ledger.py +180 -0
- data_dp_ssis2sp-0.12.0/validation/provisioning.py +303 -0
- data_dp_ssis2sp-0.12.0/validation/reporting.py +90 -0
- data_dp_ssis2sp-0.12.0/validation/schema_parse.py +115 -0
- data_dp_ssis2sp-0.12.0/validation/sql_runner.py +217 -0
- data_dp_ssis2sp-0.12.0/validation/static_checks.py +519 -0
- data_dp_ssis2sp-0.12.0/validation/test_package_smoke.py +72 -0
- data_dp_ssis2sp-0.12.0/validation/test_static.py +140 -0
- data_dp_ssis2sp-0.12.0/validation/test_validation.py +316 -0
- data_dp_ssis2sp-0.12.0/validation/tests/__init__.py +9 -0
- data_dp_ssis2sp-0.12.0/validation/tests/fixtures/tiny_pkg/schema.sql +27 -0
- data_dp_ssis2sp-0.12.0/validation/tests/fixtures/tiny_pkg/seed/src_widgets.csv +5 -0
- data_dp_ssis2sp-0.12.0/validation/tests/test_capture.py +594 -0
- data_dp_ssis2sp-0.12.0/validation/tests/test_comparison.py +754 -0
- data_dp_ssis2sp-0.12.0/validation/tests/test_connection.py +273 -0
- data_dp_ssis2sp-0.12.0/validation/tests/test_corpus.py +260 -0
- data_dp_ssis2sp-0.12.0/validation/tests/test_ledger.py +283 -0
- data_dp_ssis2sp-0.12.0/validation/tests/test_provisioning.py +322 -0
- data_dp_ssis2sp-0.12.0/validation/tests/test_sql_regex.py +72 -0
- data_dp_ssis2sp-0.12.0/validation/tests/test_sql_runner.py +452 -0
- data_dp_ssis2sp-0.12.0/validation/tests/test_static_checks.py +658 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Copy to .env and fill in. .env is gitignored; this file is the contract.
|
|
2
|
+
# data_dp_global_settings.settings loads these via python-dotenv at import.
|
|
3
|
+
SOURCE_SERVER=
|
|
4
|
+
TARGET_SERVER=
|
|
5
|
+
SOURCE_REPORTING_SERVER=
|
|
6
|
+
TARGET_REPORTING_SERVER=
|
|
7
|
+
DEV_AZURE_SUBSCRIPTION_ID=
|
|
8
|
+
PROD_AZURE_SUBSCRIPTION_ID=
|
|
9
|
+
|
|
10
|
+
# Fill with your environment's real values in .env (gitignored). Formats shown below.
|
|
11
|
+
PRIMARY_EMAIL=you@example.com
|
|
12
|
+
EMAIL_RECIPIENTS=you@example.com,team@example.com
|
|
13
|
+
LINKED_SERVICE_SECRET_NAME=svc-account-kv-secret
|
|
14
|
+
LINKED_SERVICE_USER_NAME=DOMAIN\svc-account
|
|
15
|
+
SHAREPOINT_USER_NAME=svc-account
|
|
16
|
+
TICKET_ID=TICKET-000
|
|
17
|
+
# Comma-separated database names (no spaces).
|
|
18
|
+
DEPLOYMENT_DATABASES=DB_ONE,DB_TWO,DB_THREE
|
|
19
|
+
REPORTING_DATABASES=RptDB_ONE,RptDB_TWO
|
|
20
|
+
UNDEFINED_DATABASES=other_source_one,other_source_two
|
|
21
|
+
# JSON object: {"<sharepoint subsite url>": ["List Name", ...], ...}
|
|
22
|
+
SHAREPOINT_LISTS='{"http://sharepoint.example/SubSite": ["List A", "List B"]}'
|
|
23
|
+
SOURCE_SHAREPOINT_URL=http://sharepoint.example/_api/
|
|
24
|
+
# {env} is substituted with the environment name (dev/prod) at runtime.
|
|
25
|
+
RESOURCE_GROUP_TEMPLATE=rg-data-{env}-region-team
|
|
26
|
+
DATA_FACTORY_NAME_TEMPLATE=df-data-{env}-region-team-datafactory
|
|
27
|
+
KEYVAULT_BASE_URL_TEMPLATE=https://kv-data-{env}-region-team.vault.azure.net/
|
|
28
|
+
BLOB_STORAGE_ACCOUNT_TEMPLATE=sadata{env}transient
|
|
29
|
+
ADF_STORAGE_PATH_TEMPLATE=https://sadata{env}datalake.dfs.core.windows.net/
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
.repomix-output.xml
|
|
2
|
+
.claude
|
|
3
|
+
.claude/*
|
|
4
|
+
# python / ssis2sql
|
|
5
|
+
.venv/
|
|
6
|
+
__pycache__/
|
|
7
|
+
*.py[cod]
|
|
8
|
+
*.egg-info/
|
|
9
|
+
.pytest_cache/
|
|
10
|
+
build/
|
|
11
|
+
dist/
|
|
12
|
+
coverage.json
|
|
13
|
+
coverage.xml
|
|
14
|
+
.coverage
|
|
15
|
+
|
|
16
|
+
# desloppify
|
|
17
|
+
.env
|
|
18
|
+
|
|
19
|
+
# team-sprint artifacts
|
|
20
|
+
.team-sprint/
|
|
21
|
+
docs/*
|
|
22
|
+
# scheduled-task harness lock
|
|
23
|
+
|
|
24
|
+
# offline wheel bundle — already-tracked wheels stay in repo;
|
|
25
|
+
# this only blocks future ad-hoc additions from local refreshes
|
|
26
|
+
config.yaml
|
|
27
|
+
|
|
28
|
+
# devcontainer (local dev tooling)
|
|
29
|
+
.devcontainer/
|
|
30
|
+
.github
|
|
31
|
+
.github/*
|
|
32
|
+
.lattice
|
|
33
|
+
# graphify generated output
|
|
34
|
+
graphify-out/
|
|
35
|
+
team-sprint.config.yaml
|
|
36
|
+
# macOS Finder metadata — matches at every depth (bare pattern = recursive)
|
|
37
|
+
.DS_Store
|
|
38
|
+
examples/mssql-ssis-community-samples/*
|
|
39
|
+
examples/mssql-ssis-community-samples
|
|
40
|
+
examples/
|
|
41
|
+
design_handoff
|
|
42
|
+
Python Textual UI Design.zip
|
|
43
|
+
|
|
44
|
+
.claude/repomix/
|
|
45
|
+
.lattice/clv.ndjson
|
|
46
|
+
working_docs/
|
|
47
|
+
.lattice/clv.ndjson
|
|
48
|
+
docs/*
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Pre-commit hooks for data_dp_ssis2sp.
|
|
2
|
+
#
|
|
3
|
+
# Tools run from the project's uv environment (`uv run ...`) so hook versions
|
|
4
|
+
# track pyproject.toml exactly — no separately-pinned, drifting hook installs.
|
|
5
|
+
#
|
|
6
|
+
# Activate once: uv run pre-commit install
|
|
7
|
+
# Run manually: uv run pre-commit run --all-files
|
|
8
|
+
#
|
|
9
|
+
# Autofix vs. detect:
|
|
10
|
+
# * ruff — auto-fixes lint + formatting, re-stages the result.
|
|
11
|
+
# * bandit — security scanner: DETECTS, does not fix. A finding blocks the
|
|
12
|
+
# commit; fix the code (or add a justified `# nosec` on the line).
|
|
13
|
+
# * vulture — dead-code scanner: DETECTS, does not fix. A finding blocks the
|
|
14
|
+
# commit; remove the dead code (or add it to a vulture whitelist).
|
|
15
|
+
repos:
|
|
16
|
+
- repo: local
|
|
17
|
+
hooks:
|
|
18
|
+
# Ruff lint with autofix — fixes what it can, blocks on what it can't.
|
|
19
|
+
- id: ruff-check
|
|
20
|
+
name: ruff check (lint + autofix)
|
|
21
|
+
entry: uv run ruff check --fix --force-exclude
|
|
22
|
+
language: system
|
|
23
|
+
types_or: [python, pyi]
|
|
24
|
+
|
|
25
|
+
# Ruff formatter.
|
|
26
|
+
- id: ruff-format
|
|
27
|
+
name: ruff format
|
|
28
|
+
entry: uv run ruff format --force-exclude
|
|
29
|
+
language: system
|
|
30
|
+
types_or: [python, pyi]
|
|
31
|
+
|
|
32
|
+
# Bandit security scan on every staged Python file — nothing path-excluded,
|
|
33
|
+
# since anything published must be scanned. Most strict: report every
|
|
34
|
+
# severity + confidence, so ANY finding blocks the commit. `-c pyproject.toml`
|
|
35
|
+
# loads [tool.bandit.assert_used], which exempts B101 (assert) in test files
|
|
36
|
+
# ONLY — every other rule still applies to tests. Accepted risk elsewhere is
|
|
37
|
+
# annotated inline as `# nosec <CODE> # <reason>` (double-hash).
|
|
38
|
+
- id: bandit
|
|
39
|
+
name: bandit (security scan)
|
|
40
|
+
entry: uv run bandit -c pyproject.toml
|
|
41
|
+
language: system
|
|
42
|
+
types: [python]
|
|
43
|
+
args: ["-q", "--severity-level", "all", "--confidence-level", "all"]
|
|
44
|
+
|
|
45
|
+
# Vulture dead-code scan. Runs across the whole package on every commit —
|
|
46
|
+
# vulture needs the full tree to tell a genuinely-unused symbol from one
|
|
47
|
+
# that's referenced in a file you didn't touch.
|
|
48
|
+
- id: vulture
|
|
49
|
+
name: vulture (dead code)
|
|
50
|
+
entry: uv run vulture data_dp_ssis2sp --min-confidence 80
|
|
51
|
+
language: system
|
|
52
|
+
pass_filenames: false
|
|
53
|
+
always_run: true
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.14
|