datacontract-cli 1.2.7__tar.gz → 1.2.9__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.
- {datacontract_cli-1.2.7/datacontract_cli.egg-info → datacontract_cli-1.2.9}/PKG-INFO +34 -29
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/README.md +17 -16
- datacontract_cli-1.2.9/datacontract/__init__.py +30 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/api.py +65 -21
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/breaking/rules.py +227 -97
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/catalog/catalog.py +1 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/changelog/changelog.py +7 -19
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/changelog/normalize.py +74 -2
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/cli.py +4 -5
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_api.py +1 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_edit.py +59 -9
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_import.py +58 -5
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/config/settings.py +16 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/data_contract.py +4 -3
- datacontract_cli-1.2.9/datacontract/editor_assets/VERSION +1 -0
- datacontract_cli-1.2.9/datacontract/editor_assets/assets/editor.worker-4.7.0.js +33 -0
- datacontract_cli-1.2.9/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +476 -0
- datacontract_cli-1.2.9/datacontract/editor_assets/datacontract-editor-version.json +1 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/datacontract-editor.css +1 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/datacontract-editor.es.js +16121 -12358
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/index.html +7 -5
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/monaco-4.7.0.js +9597 -10209
- datacontract_cli-1.2.7/datacontract/editor_assets/rolldown-runtime-DY7j01NX.js → datacontract_cli-1.2.9/datacontract/editor_assets/rolldown-runtime-CEFd7nDs.js +2 -2
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/check_spec.py +3 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/create_checks.py +53 -11
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/custom_quality_check.py +207 -122
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/data_contract_test.py +113 -51
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/check_hana_execute.py +7 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/hana_quality_check.py +21 -7
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/connect.py +24 -2
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/duckdb_connection.py +118 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/ibis_check_execute.py +61 -21
- datacontract_cli-1.2.9/datacontract/engines/ibis/snowflake_nested_values.py +149 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/avro_exporter.py +11 -3
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/excel_exporter.py +14 -15
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/markdown_exporter.py +1 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/rdf_exporter.py +1 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/sodacl_check_builder.py +1 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/sql_exporter.py +92 -4
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/avro_importer.py +8 -5
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/excel_importer.py +5 -5
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/odcs_importer.py +2 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/openapi_importer.py +86 -46
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/integration/dbt_sync.py +162 -28
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/integration/dbt_test_mapping.py +2 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/resolve.py +30 -4
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/workbook.py +4 -7
- datacontract_cli-1.2.9/datacontract/templates/excel/odcs-template-v3.2.xlsx +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9/datacontract_cli.egg-info}/PKG-INFO +34 -29
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract_cli.egg-info/SOURCES.txt +6 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract_cli.egg-info/requires.txt +15 -10
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/pyproject.toml +24 -19
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_api.py +213 -3
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_breaking.py +263 -27
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_changelog_engine.py +8 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_changelog_normalize.py +0 -10
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_athena.py +1 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_bigquery.py +54 -2
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_snowflake.py +71 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_sql_placeholders.py +10 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_custom_quality_checks.py +264 -54
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_dbt_sync.py +294 -8
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_docs_ordering.py +2 -2
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_edit.py +20 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_markdown.py +12 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_rdf.py +18 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_sql.py +176 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_sql_clickhouse.py +37 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_hana_quality_check.py +35 -6
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_avro.py +15 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_excel.py +9 -0
- datacontract_cli-1.2.9/tests/test_import_odcs_v3.py +30 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_openapi.py +47 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_snowflake.py +2 -1
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_nested_path_checks.py +44 -2
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_resolve.py +91 -1
- datacontract_cli-1.2.9/tests/test_test_api_endpoints.py +208 -0
- datacontract_cli-1.2.9/tests/test_test_local_xlsx.py +190 -0
- datacontract_cli-1.2.9/tests/test_test_s3_xlsx.py +43 -0
- datacontract_cli-1.2.7/datacontract/__init__.py +0 -17
- datacontract_cli-1.2.7/datacontract/editor_assets/VERSION +0 -1
- datacontract_cli-1.2.7/datacontract/editor_assets/assets/editor.worker-4.7.0.js +0 -33
- datacontract_cli-1.2.7/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +0 -452
- datacontract_cli-1.2.7/datacontract/templates/excel/odcs-template-v3.2.xlsx +0 -0
- datacontract_cli-1.2.7/tests/test_import_odcs_v3.py +0 -11
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/LICENSE +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/MANIFEST.in +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/breaking/__init__.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/breaking/detector.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/changelog/__init__.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_breaking.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_catalog.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_changelog.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_ci.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_dbt.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_export.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_init.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_lint.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_publish.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_test.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/config/__init__.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/config/cli_context.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/config/variables.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/logo_fuchsia_v2.svg +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/odcs.svg +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/robots.txt +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/sitemap.xml +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/__init__.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/check_filter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/dimensions.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/physical_type_match.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/severity.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/sql_guard.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/type_normalize.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/datacontract/check_azure_blob_file.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/__init__.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/hana_check_selection.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/hana_connection.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/hana_schema_check.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/hana_type_mapping.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/http_api.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/__init__.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/__init__.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/athena_patch.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/aws_credentials.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/databricks_patch.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/exasol_patch.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/hive_patch.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/iceberg.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/kafka.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/oracle_patch.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/redshift_credentials.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/redshift_patch.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/dtype_category.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/native_type.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/snowflake_structured_types.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/avro_idl_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/bigquery_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/custom_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/data_caterer_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/dbml_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/dbt_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/dqx_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/exporter_factory.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/go_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/great_expectations_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/iceberg_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/jsonschema_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/protobuf_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/pydantic_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/sodacl_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/spark_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/sql_type_converter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/sqlalchemy_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/xsd_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/athena_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/clickhouse_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/dcs_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/hive_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/mysql_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/object_storage_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/odata_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/odcs_helper.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/oracle_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/postgres_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/powerbi_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/pydantic_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/redshift_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/snowflake_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/spark_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/spark_type_json.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/sqlserver_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/trino_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/unity_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/xsd_importer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/integration/entropy_data.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/constraints.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/files.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/s3.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/breaking.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/changelog.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/enum_values.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/map_type.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/natural_keys.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/run.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/server.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/vector_type.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/__init__.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/ci_output.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/json_test_results.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/test_results_writer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/text_breaking_results.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/text_changelog_results.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/py.typed +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/odcs-3.2.0.init.yaml +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/odcs-3.2.0.schema.json +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/datacontract_odcs.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/excel/odcs-template-v3.0.xlsx +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/excel/odcs-template-v3.1.xlsx +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/index.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/macros/authoritative_definitions.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/macros/context.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/macros/schema.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/macros/server.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/macros/support.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/context.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/custom_properties.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/diagram.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/dialog_yaml.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/footer.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/fundamentals.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/header.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/pricing.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/roles.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/schema.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/servers.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/sla.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/support.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/team.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/term_of_use.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/title.html +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/setup.cfg +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_api_concurrency.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_api_openapi.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_breaking_odcs_3_2.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_catalog.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_changelog.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_changelog_output_text.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_check_quality_provenance.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_ci_output.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_cli.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_command_api.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_command_api_options.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_config.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_config_file.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_config_require.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_config_threading.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_clickhouse.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_databricks.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_exasol.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_hive.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_impala.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_mysql.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_oracle.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_postgres.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_redshift.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_s3_credentials.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_sqlserver.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_trino.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_array_items.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_nested.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_nested_type.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_physical_type.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_primary_key.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_retention_period.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_servicelevel.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_data_contract.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_dbt_test_mapping.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_description_linter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_docs_commands.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_docs_config_options.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_dtype_category.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_enum_values.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_avro.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_custom.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_custom_model.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dbt_models.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dcs.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dqx.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_excel.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_go.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_html.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_large_contract.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_sodacl.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_spark.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_xsd.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_hana_connection.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_hana_schema_check.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_hana_type_mapping.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_ibis_check_execute.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_ibis_mssql_pattern.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_ibis_mssql_schema.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_ibis_oracle_schema.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_athena.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_clickhouse.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_csv.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_dbt.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_glue.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_hive.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_json.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_jsonschema.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_mysql.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_object_storage.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_odata.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_oracle.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_postgres.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_powerbi.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_pydantic_model.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_redshift.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_spark_type_json.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_clickhouse.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_hive.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_oracle.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_snowflake.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_struct.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sqlserver.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_trino.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_unmapped_types.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_xsd.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_install_extras.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_integration_entropydata.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_lint.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_lint_files.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_lint_odcs_3_2_constraints.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_lint_schema.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_lint_urls.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_map_type.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_metadata_fields.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_native_type_schema_scope.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_oracle_patch.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_physical_type_match.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_publish_test_results.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_publish_test_results_payload.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_quality_sql_dialects.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_quality_unrunnable_rules.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_redshift_credentials.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_redshift_patch.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_resolve_definitions.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_resolve_local_definitions.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_roundtrip_pydantic_model.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_roundtrip_xsd.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_row_filter_duplicate_count.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_run_check_deprecated_fields.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_run_check_engine.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_server_overrides.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_server_type_mssql.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_server_type_synonyms.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_servers_3_2_0.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_snowflake_structured_types.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_sql_type_converter_physicaltype.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_api.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_api_openapi_import.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_array_items.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_athena_iceberg.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_azure_blob_file.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_checks_filter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_clickhouse.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_delta.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_diagnostics.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_dimension_filter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_dry_run.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_duckdb.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_failed_samples.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_hana.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_hive.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_iceberg.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_iceberg_rest.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_iceberg_s3tables.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_kafka_decoding.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_local_json_nd.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_local_xml.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_metadata_only.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_mysql.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_nested_checks.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_oracle.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_oracle_xe.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_output_json.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_postgres.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_quality.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_quality_id_and_tag_filter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_quality_local_fallback.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_quality_percent_severity.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_redshift.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_relationships.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_results_writer.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_row_filter.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_json_multiple_files.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_schema_evolution.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_server_not_found.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_soda_connection_error.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_trino.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_variables.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_type_normalize.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_untrusted_contract.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_untrusted_contract_variables.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_variables.py +0 -0
- {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_vector_type.py +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.9
|
|
4
4
|
Summary: The datacontract CLI is an open source command-line tool for working with Data Contracts. It uses data contract YAML files to lint the data contract, connect to data sources and execute schema and quality tests, detect breaking changes, and export to different formats. The tool is written in Python. It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a Python library.
|
|
5
5
|
Author-email: Jochen Christ <jochen.christ@entropy-data.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@entropy-data.com>
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://cli.datacontract.com
|
|
8
|
-
Project-URL: Documentation, https://
|
|
8
|
+
Project-URL: Documentation, https://cli.datacontract.com
|
|
9
9
|
Project-URL: Repository, https://github.com/datacontract/datacontract-cli
|
|
10
10
|
Project-URL: Issues, https://github.com/datacontract/datacontract-cli/issues
|
|
11
|
-
Project-URL: Changelog, https://
|
|
11
|
+
Project-URL: Changelog, https://cli.datacontract.com/release-notes
|
|
12
12
|
Keywords: data-contract,data-contracts,odcs,open-data-contract-standard,data-quality,data-governance,data-mesh,data-product,data-engineering,schema,dbt,snowflake,databricks,bigquery
|
|
13
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
14
|
Classifier: Environment :: Console
|
|
@@ -47,7 +47,7 @@ Requires-Dist: Jinja2<4.0.0,>=3.1.5
|
|
|
47
47
|
Requires-Dist: jinja_partials<1.0.0,>=0.2.1
|
|
48
48
|
Requires-Dist: datacontract-specification<2.0.0,>=1.2.3
|
|
49
49
|
Requires-Dist: open-data-contract-standard<3.3.0,>=3.2.0
|
|
50
|
-
Requires-Dist: deepdiff<10.0.0,>=
|
|
50
|
+
Requires-Dist: deepdiff<10.0.0,>=8.0.0
|
|
51
51
|
Provides-Extra: avro
|
|
52
52
|
Requires-Dist: avro==1.12.2; extra == "avro"
|
|
53
53
|
Provides-Extra: bigquery
|
|
@@ -59,6 +59,9 @@ Provides-Extra: csv
|
|
|
59
59
|
Requires-Dist: datacontract-cli[duckdb]; extra == "csv"
|
|
60
60
|
Provides-Extra: excel
|
|
61
61
|
Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == "excel"
|
|
62
|
+
Provides-Extra: xlsx
|
|
63
|
+
Requires-Dist: datacontract-cli[duckdb]; extra == "xlsx"
|
|
64
|
+
Requires-Dist: duckdb-extension-excel<1.6.0,>=1.5.0; extra == "xlsx"
|
|
62
65
|
Provides-Extra: dataframe
|
|
63
66
|
Requires-Dist: ibis-framework<13.0.0,>=10.0.0; extra == "dataframe"
|
|
64
67
|
Requires-Dist: numpy<3,>=1.23.2; extra == "dataframe"
|
|
@@ -70,7 +73,7 @@ Requires-Dist: rich>=12.4.4; extra == "dataframe"
|
|
|
70
73
|
Provides-Extra: databricks
|
|
71
74
|
Requires-Dist: ibis-framework[databricks]<13.0.0,>=10.0.0; extra == "databricks"
|
|
72
75
|
Requires-Dist: databricks-sql-connector<4.7.0,>=3.7.0; extra == "databricks"
|
|
73
|
-
Requires-Dist: databricks-sdk<0.
|
|
76
|
+
Requires-Dist: databricks-sdk<0.157.0; extra == "databricks"
|
|
74
77
|
Requires-Dist: packaging<27.0,>=21.3; extra == "databricks"
|
|
75
78
|
Provides-Extra: databricks-runtime
|
|
76
79
|
Requires-Dist: datacontract-cli[databricks]; extra == "databricks-runtime"
|
|
@@ -102,10 +105,11 @@ Provides-Extra: azure
|
|
|
102
105
|
Requires-Dist: datacontract-cli[duckdb]; extra == "azure"
|
|
103
106
|
Requires-Dist: duckdb-extension-azure<1.6.0,>=1.5.0; extra == "azure"
|
|
104
107
|
Requires-Dist: azure-identity<1.27,>=1.17.1; extra == "azure"
|
|
105
|
-
Requires-Dist: azure-storage-blob<12.
|
|
108
|
+
Requires-Dist: azure-storage-blob<12.32,>=12.24; extra == "azure"
|
|
106
109
|
Provides-Extra: snowflake
|
|
107
|
-
Requires-Dist: snowflake-connector-python[pandas]<
|
|
110
|
+
Requires-Dist: snowflake-connector-python[pandas]<5.2,>=3.17; extra == "snowflake"
|
|
108
111
|
Requires-Dist: ibis-framework[snowflake]<13.0.0,>=10.0.0; extra == "snowflake"
|
|
112
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "snowflake"
|
|
109
113
|
Provides-Extra: sqlserver
|
|
110
114
|
Requires-Dist: ibis-framework[mssql]<13.0.0,>=10.0.0; extra == "sqlserver"
|
|
111
115
|
Requires-Dist: packaging<27.0,>=21.3; extra == "sqlserver"
|
|
@@ -141,30 +145,30 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
|
|
|
141
145
|
Provides-Extra: rdf
|
|
142
146
|
Requires-Dist: rdflib==7.6.0; extra == "rdf"
|
|
143
147
|
Provides-Extra: api
|
|
144
|
-
Requires-Dist: fastapi<0.
|
|
148
|
+
Requires-Dist: fastapi<0.162.0,>=0.115.0; extra == "api"
|
|
145
149
|
Requires-Dist: uvicorn<0.55.0,>=0.44.0; extra == "api"
|
|
146
150
|
Provides-Extra: protobuf
|
|
147
151
|
Requires-Dist: proto-schema-parser<3.0,>=1.0; extra == "protobuf"
|
|
148
152
|
Provides-Extra: xml
|
|
149
153
|
Requires-Dist: xmlschema<5.0,>=4.0; extra == "xml"
|
|
150
154
|
Provides-Extra: all
|
|
151
|
-
Requires-Dist: datacontract-cli[api,athena,avro,azure,bigquery,clickhouse,csv,databricks,dataframe,dbml,duckdb,exasol,excel,gcs,hive,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino,xml]; extra == "all"
|
|
155
|
+
Requires-Dist: datacontract-cli[api,athena,avro,azure,bigquery,clickhouse,csv,databricks,dataframe,dbml,duckdb,exasol,excel,gcs,hive,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino,xlsx,xml]; extra == "all"
|
|
152
156
|
Provides-Extra: dev
|
|
153
157
|
Requires-Dist: datacontract-cli[all]; extra == "dev"
|
|
154
158
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
155
159
|
Requires-Dist: kafka-python; extra == "dev"
|
|
156
160
|
Requires-Dist: minio==7.2.20; extra == "dev"
|
|
157
|
-
Requires-Dist: moto==5.2.
|
|
161
|
+
Requires-Dist: moto==5.2.4; extra == "dev"
|
|
158
162
|
Requires-Dist: openapi-spec-validator<0.10,>=0.7; extra == "dev"
|
|
159
163
|
Requires-Dist: pandas>=2.1.0; extra == "dev"
|
|
160
164
|
Requires-Dist: pre-commit<4.7.0,>=3.7.1; extra == "dev"
|
|
161
165
|
Requires-Dist: pytest; extra == "dev"
|
|
162
166
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
163
167
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
164
|
-
Requires-Dist: pymssql==2.4.
|
|
168
|
+
Requires-Dist: pymssql==2.4.5; extra == "dev"
|
|
165
169
|
Requires-Dist: psycopg2-binary<3.0,>=2.9; extra == "dev"
|
|
166
|
-
Requires-Dist: mysql-connector-python<26.
|
|
167
|
-
Requires-Dist: ruff==0.
|
|
170
|
+
Requires-Dist: mysql-connector-python<26.11.0,>=8.0.30; extra == "dev"
|
|
171
|
+
Requires-Dist: ruff==0.17.2; extra == "dev"
|
|
168
172
|
Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.15.0; extra == "dev"
|
|
169
173
|
Requires-Dist: trino==0.340.0; extra == "dev"
|
|
170
174
|
Dynamic: license-file
|
|
@@ -191,11 +195,11 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
|
|
|
191
195
|
|
|
192
196
|

|
|
193
197
|
|
|
194
|
-
> 📖 **Full documentation: [
|
|
198
|
+
> 📖 **Full documentation: [cli.datacontract.com](https://cli.datacontract.com)**
|
|
195
199
|
>
|
|
196
|
-
> Quick links: [Quickstart](https://
|
|
200
|
+
> Quick links: [Quickstart](https://cli.datacontract.com/quickstart) · [Commands](https://cli.datacontract.com/commands) · [Best Practices](https://cli.datacontract.com/best-practices) · [Custom Export and Import](https://cli.datacontract.com/extending) · [Release Notes](https://cli.datacontract.com/release-notes) · [Development Setup](#development-setup)
|
|
197
201
|
>
|
|
198
|
-
> For LLMs: [
|
|
202
|
+
> For LLMs: [cli.datacontract.com/llms.txt](https://cli.datacontract.com/llms.txt) · [cli.datacontract.com/llms-full.txt](https://cli.datacontract.com/llms-full.txt) · [Data Contract Skills](https://github.com/datacontract/datacontract-skills) for coding agents
|
|
199
203
|
|
|
200
204
|
## Getting started
|
|
201
205
|
|
|
@@ -269,9 +273,9 @@ $ datacontract import snowflake --source <account> --database ORDER_DB --schema
|
|
|
269
273
|
$ datacontract test datacontract.yaml
|
|
270
274
|
```
|
|
271
275
|
|
|
272
|
-
Copy-paste guides with credentials setup are available for [Snowflake](https://
|
|
276
|
+
Copy-paste guides with credentials setup are available for [Snowflake](https://cli.datacontract.com/testing/snowflake), [BigQuery](https://cli.datacontract.com/testing/bigquery), [Databricks](https://cli.datacontract.com/testing/databricks), and [15+ other sources](https://cli.datacontract.com/testing).
|
|
273
277
|
|
|
274
|
-
We can also use the data contract metadata to export in many [formats](https://
|
|
278
|
+
We can also use the data contract metadata to export in many [formats](https://cli.datacontract.com/exports), e.g., to generate a SQL DDL:
|
|
275
279
|
|
|
276
280
|
```bash
|
|
277
281
|
$ datacontract export sql https://datacontract.com/orders-v1.odcs.yaml
|
|
@@ -357,7 +361,7 @@ if not run.has_passed():
|
|
|
357
361
|
|
|
358
362
|
- [How to integrate Data Contract CLI in your CI/CD pipeline as a GitHub Action](https://github.com/datacontract/datacontract-action/)
|
|
359
363
|
- [How to let your coding agent (Claude Code, Codex, GitHub Copilot) create and test data contracts with the Data Contract Skills](https://github.com/datacontract/datacontract-skills)
|
|
360
|
-
- [How to run the Data Contract CLI API to test data contracts with POST requests](https://
|
|
364
|
+
- [How to run the Data Contract CLI API to test data contracts with POST requests](https://cli.datacontract.com/api)
|
|
361
365
|
- [How to run Data Contract CLI in a Databricks pipeline](https://www.datamesh-architecture.com/howto/build-a-dataproduct-with-databricks#test-the-data-product)
|
|
362
366
|
|
|
363
367
|
|
|
@@ -427,7 +431,7 @@ alias datacontract='docker run --rm -v "${PWD}:/home/datacontract" datacontract/
|
|
|
427
431
|
|
|
428
432
|
_Note:_ The output of Docker command line messages is limited to 80 columns and may include line breaks. Don't pipe docker output to files if you want to export code. Use the `--output` option instead.
|
|
429
433
|
|
|
430
|
-
Released images are signed with [cosign](https://docs.sigstore.dev/cosign/signing/overview/) keyless signing. See [Verifying the image](https://
|
|
434
|
+
Released images are signed with [cosign](https://docs.sigstore.dev/cosign/signing/overview/) keyless signing. See [Verifying the image](https://cli.datacontract.com/installation#verifying-the-image) to check a signature before you run it.
|
|
431
435
|
|
|
432
436
|
|
|
433
437
|
|
|
@@ -455,6 +459,7 @@ A list of available extras:
|
|
|
455
459
|
| DuckDB (local file, CSV import and API response testing) | `pip install datacontract-cli[duckdb]` |
|
|
456
460
|
| Exasol | `pip install datacontract-cli[exasol]` |
|
|
457
461
|
| Excel | `pip install datacontract-cli[excel]` |
|
|
462
|
+
| Excel workbooks (testing) | `pip install datacontract-cli[xlsx]` |
|
|
458
463
|
| GCS | `pip install datacontract-cli[gcs]` |
|
|
459
464
|
| SAP HANA / Datasphere | `pip install datacontract-cli[hana]` (not part of `all`: `hdbcli` is proprietary) |
|
|
460
465
|
| Apache Iceberg (schema import and export, REST catalog testing) | `pip install datacontract-cli[iceberg]` |
|
|
@@ -476,18 +481,18 @@ A list of available extras:
|
|
|
476
481
|
|
|
477
482
|
## Documentation
|
|
478
483
|
|
|
479
|
-
📖 **The full documentation is at [
|
|
484
|
+
📖 **The full documentation is at [cli.datacontract.com](https://cli.datacontract.com).**
|
|
480
485
|
|
|
481
486
|
It covers everything in depth, including the complete command reference:
|
|
482
487
|
|
|
483
|
-
- [Quickstart](https://
|
|
484
|
-
- [Open Data Contract Standard](https://
|
|
485
|
-
- [Test your Data](https://
|
|
486
|
-
- [Define your Quality Rules](https://
|
|
487
|
-
- [Sync with dbt](https://
|
|
488
|
-
- [Imports](https://
|
|
489
|
-
- [API](https://
|
|
490
|
-
- [Command reference](https://
|
|
488
|
+
- [Quickstart](https://cli.datacontract.com/quickstart) — install and run your first test
|
|
489
|
+
- [Open Data Contract Standard](https://cli.datacontract.com/open-data-contract-standard) — the contract format
|
|
490
|
+
- [Test your Data](https://cli.datacontract.com/testing) — schema & quality tests against 18+ data sources
|
|
491
|
+
- [Define your Quality Rules](https://cli.datacontract.com/quality-rules) — SQL, library, text, and custom checks
|
|
492
|
+
- [Sync with dbt](https://cli.datacontract.com/dbt) · [Edit your contract](https://cli.datacontract.com/editor)
|
|
493
|
+
- [Imports](https://cli.datacontract.com/imports) and [Exports](https://cli.datacontract.com/exports) — convert to/from 25+ formats
|
|
494
|
+
- [API](https://cli.datacontract.com/api) and [Python Library](https://cli.datacontract.com/python-library)
|
|
495
|
+
- [Command reference](https://cli.datacontract.com/commands) — `init`, `lint`, `test`, `export`, `import`, `dbt`, `ci`, `catalog`, `publish`, `api`, and more
|
|
491
496
|
|
|
492
497
|
## Development Setup
|
|
493
498
|
|
|
@@ -20,11 +20,11 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
|
|
|
20
20
|
|
|
21
21
|

|
|
22
22
|
|
|
23
|
-
> 📖 **Full documentation: [
|
|
23
|
+
> 📖 **Full documentation: [cli.datacontract.com](https://cli.datacontract.com)**
|
|
24
24
|
>
|
|
25
|
-
> Quick links: [Quickstart](https://
|
|
25
|
+
> Quick links: [Quickstart](https://cli.datacontract.com/quickstart) · [Commands](https://cli.datacontract.com/commands) · [Best Practices](https://cli.datacontract.com/best-practices) · [Custom Export and Import](https://cli.datacontract.com/extending) · [Release Notes](https://cli.datacontract.com/release-notes) · [Development Setup](#development-setup)
|
|
26
26
|
>
|
|
27
|
-
> For LLMs: [
|
|
27
|
+
> For LLMs: [cli.datacontract.com/llms.txt](https://cli.datacontract.com/llms.txt) · [cli.datacontract.com/llms-full.txt](https://cli.datacontract.com/llms-full.txt) · [Data Contract Skills](https://github.com/datacontract/datacontract-skills) for coding agents
|
|
28
28
|
|
|
29
29
|
## Getting started
|
|
30
30
|
|
|
@@ -98,9 +98,9 @@ $ datacontract import snowflake --source <account> --database ORDER_DB --schema
|
|
|
98
98
|
$ datacontract test datacontract.yaml
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
Copy-paste guides with credentials setup are available for [Snowflake](https://
|
|
101
|
+
Copy-paste guides with credentials setup are available for [Snowflake](https://cli.datacontract.com/testing/snowflake), [BigQuery](https://cli.datacontract.com/testing/bigquery), [Databricks](https://cli.datacontract.com/testing/databricks), and [15+ other sources](https://cli.datacontract.com/testing).
|
|
102
102
|
|
|
103
|
-
We can also use the data contract metadata to export in many [formats](https://
|
|
103
|
+
We can also use the data contract metadata to export in many [formats](https://cli.datacontract.com/exports), e.g., to generate a SQL DDL:
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
106
|
$ datacontract export sql https://datacontract.com/orders-v1.odcs.yaml
|
|
@@ -186,7 +186,7 @@ if not run.has_passed():
|
|
|
186
186
|
|
|
187
187
|
- [How to integrate Data Contract CLI in your CI/CD pipeline as a GitHub Action](https://github.com/datacontract/datacontract-action/)
|
|
188
188
|
- [How to let your coding agent (Claude Code, Codex, GitHub Copilot) create and test data contracts with the Data Contract Skills](https://github.com/datacontract/datacontract-skills)
|
|
189
|
-
- [How to run the Data Contract CLI API to test data contracts with POST requests](https://
|
|
189
|
+
- [How to run the Data Contract CLI API to test data contracts with POST requests](https://cli.datacontract.com/api)
|
|
190
190
|
- [How to run Data Contract CLI in a Databricks pipeline](https://www.datamesh-architecture.com/howto/build-a-dataproduct-with-databricks#test-the-data-product)
|
|
191
191
|
|
|
192
192
|
|
|
@@ -256,7 +256,7 @@ alias datacontract='docker run --rm -v "${PWD}:/home/datacontract" datacontract/
|
|
|
256
256
|
|
|
257
257
|
_Note:_ The output of Docker command line messages is limited to 80 columns and may include line breaks. Don't pipe docker output to files if you want to export code. Use the `--output` option instead.
|
|
258
258
|
|
|
259
|
-
Released images are signed with [cosign](https://docs.sigstore.dev/cosign/signing/overview/) keyless signing. See [Verifying the image](https://
|
|
259
|
+
Released images are signed with [cosign](https://docs.sigstore.dev/cosign/signing/overview/) keyless signing. See [Verifying the image](https://cli.datacontract.com/installation#verifying-the-image) to check a signature before you run it.
|
|
260
260
|
|
|
261
261
|
|
|
262
262
|
|
|
@@ -284,6 +284,7 @@ A list of available extras:
|
|
|
284
284
|
| DuckDB (local file, CSV import and API response testing) | `pip install datacontract-cli[duckdb]` |
|
|
285
285
|
| Exasol | `pip install datacontract-cli[exasol]` |
|
|
286
286
|
| Excel | `pip install datacontract-cli[excel]` |
|
|
287
|
+
| Excel workbooks (testing) | `pip install datacontract-cli[xlsx]` |
|
|
287
288
|
| GCS | `pip install datacontract-cli[gcs]` |
|
|
288
289
|
| SAP HANA / Datasphere | `pip install datacontract-cli[hana]` (not part of `all`: `hdbcli` is proprietary) |
|
|
289
290
|
| Apache Iceberg (schema import and export, REST catalog testing) | `pip install datacontract-cli[iceberg]` |
|
|
@@ -305,18 +306,18 @@ A list of available extras:
|
|
|
305
306
|
|
|
306
307
|
## Documentation
|
|
307
308
|
|
|
308
|
-
📖 **The full documentation is at [
|
|
309
|
+
📖 **The full documentation is at [cli.datacontract.com](https://cli.datacontract.com).**
|
|
309
310
|
|
|
310
311
|
It covers everything in depth, including the complete command reference:
|
|
311
312
|
|
|
312
|
-
- [Quickstart](https://
|
|
313
|
-
- [Open Data Contract Standard](https://
|
|
314
|
-
- [Test your Data](https://
|
|
315
|
-
- [Define your Quality Rules](https://
|
|
316
|
-
- [Sync with dbt](https://
|
|
317
|
-
- [Imports](https://
|
|
318
|
-
- [API](https://
|
|
319
|
-
- [Command reference](https://
|
|
313
|
+
- [Quickstart](https://cli.datacontract.com/quickstart) — install and run your first test
|
|
314
|
+
- [Open Data Contract Standard](https://cli.datacontract.com/open-data-contract-standard) — the contract format
|
|
315
|
+
- [Test your Data](https://cli.datacontract.com/testing) — schema & quality tests against 18+ data sources
|
|
316
|
+
- [Define your Quality Rules](https://cli.datacontract.com/quality-rules) — SQL, library, text, and custom checks
|
|
317
|
+
- [Sync with dbt](https://cli.datacontract.com/dbt) · [Edit your contract](https://cli.datacontract.com/editor)
|
|
318
|
+
- [Imports](https://cli.datacontract.com/imports) and [Exports](https://cli.datacontract.com/exports) — convert to/from 25+ formats
|
|
319
|
+
- [API](https://cli.datacontract.com/api) and [Python Library](https://cli.datacontract.com/python-library)
|
|
320
|
+
- [Command reference](https://cli.datacontract.com/commands) — `init`, `lint`, `test`, `export`, `import`, `dbt`, `ci`, `catalog`, `publish`, `api`, and more
|
|
320
321
|
|
|
321
322
|
## Development Setup
|
|
322
323
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Configuration so that yaml.safe_dump dumps strings with line breaks with yaml literal |
|
|
2
|
+
import warnings
|
|
3
|
+
|
|
4
|
+
import yaml
|
|
5
|
+
|
|
6
|
+
yaml.SafeDumper.org_represent_str = yaml.SafeDumper.represent_str
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def repr_str(dumper, data):
|
|
10
|
+
if "\n" in data:
|
|
11
|
+
return dumper.represent_scalar("tag:yaml.org,2002:str", data, style="|")
|
|
12
|
+
return dumper.org_represent_str(data)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
yaml.add_representer(str, repr_str, Dumper=yaml.SafeDumper)
|
|
16
|
+
|
|
17
|
+
# snowflake-connector-python 5.x warns on every connection about a changing logout default, and about the 4.x
|
|
18
|
+
# parameter names we keep passing because Python 3.10 installs still get 4.x.
|
|
19
|
+
warnings.filterwarnings(
|
|
20
|
+
"ignore", message="enable_server_session_keep_alive_auto_detection was not set", category=FutureWarning
|
|
21
|
+
)
|
|
22
|
+
warnings.filterwarnings(
|
|
23
|
+
"ignore",
|
|
24
|
+
message="'(private_key_file_pwd|network_timeout|socket_timeout)' is deprecated",
|
|
25
|
+
category=DeprecationWarning,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
from datacontract.config import Config # noqa: E402
|
|
29
|
+
|
|
30
|
+
__all__ = ["Config"]
|
|
@@ -12,7 +12,7 @@ from fastapi.security.api_key import APIKeyHeader
|
|
|
12
12
|
from pydantic import BaseModel, Field, ValidationError
|
|
13
13
|
|
|
14
14
|
from datacontract.config import Config, known_env_names
|
|
15
|
-
from datacontract.config.variables import CONTRACT_VARIABLES_ENV, allowed_environment,
|
|
15
|
+
from datacontract.config.variables import CONTRACT_VARIABLES_ENV, allowed_environment, resolve_server_variables
|
|
16
16
|
from datacontract.data_contract import DataContract, ExportFormat
|
|
17
17
|
from datacontract.model.breaking import BreakingChangeEntry, Perspective
|
|
18
18
|
from datacontract.model.changelog import ChangelogEntry
|
|
@@ -273,7 +273,7 @@ headers, which are matched case-insensitively and map mechanically to the enviro
|
|
|
273
273
|
Per-request headers are never written to the process environment, so one server can serve several
|
|
274
274
|
tenants. Send them over HTTPS only.
|
|
275
275
|
|
|
276
|
-
See [Configuration](https://
|
|
276
|
+
See [Configuration](https://cli.datacontract.com/configuration) for the full list of options.
|
|
277
277
|
"""
|
|
278
278
|
|
|
279
279
|
# The endpoints are plain `def`, not `async def`: they block on data sources, and FastAPI runs
|
|
@@ -290,7 +290,7 @@ app = FastAPI(
|
|
|
290
290
|
},
|
|
291
291
|
contact={
|
|
292
292
|
"name": "Data Contract CLI",
|
|
293
|
-
"url": "https://
|
|
293
|
+
"url": "https://cli.datacontract.com/",
|
|
294
294
|
},
|
|
295
295
|
# Relative, so the document works for any deployment. A second, absolute entry would
|
|
296
296
|
# show up as a target in the Swagger UI dropdown and invite sending contracts there.
|
|
@@ -301,7 +301,7 @@ app = FastAPI(
|
|
|
301
301
|
"description": "Run the schema and quality tests of a data contract against the actual data.",
|
|
302
302
|
"externalDocs": {
|
|
303
303
|
"description": "Documentation",
|
|
304
|
-
"url": "https://
|
|
304
|
+
"url": "https://cli.datacontract.com/testing/",
|
|
305
305
|
},
|
|
306
306
|
},
|
|
307
307
|
{
|
|
@@ -309,7 +309,7 @@ app = FastAPI(
|
|
|
309
309
|
"description": "Validate that a data contract is syntactically correct and follows the standard.",
|
|
310
310
|
"externalDocs": {
|
|
311
311
|
"description": "Documentation",
|
|
312
|
-
"url": "https://
|
|
312
|
+
"url": "https://cli.datacontract.com/commands/lint",
|
|
313
313
|
},
|
|
314
314
|
},
|
|
315
315
|
{
|
|
@@ -317,7 +317,7 @@ app = FastAPI(
|
|
|
317
317
|
"description": "Convert a data contract into another format, such as SQL DDL, Avro, or dbt.",
|
|
318
318
|
"externalDocs": {
|
|
319
319
|
"description": "Documentation",
|
|
320
|
-
"url": "https://
|
|
320
|
+
"url": "https://cli.datacontract.com/exports/",
|
|
321
321
|
},
|
|
322
322
|
},
|
|
323
323
|
{
|
|
@@ -325,7 +325,7 @@ app = FastAPI(
|
|
|
325
325
|
"description": "Compare two versions of a data contract and list what changed.",
|
|
326
326
|
"externalDocs": {
|
|
327
327
|
"description": "Documentation",
|
|
328
|
-
"url": "https://
|
|
328
|
+
"url": "https://cli.datacontract.com/commands/changelog",
|
|
329
329
|
},
|
|
330
330
|
},
|
|
331
331
|
{
|
|
@@ -333,7 +333,7 @@ app = FastAPI(
|
|
|
333
333
|
"description": "Compare two versions of a data contract and grade each change by compatibility impact.",
|
|
334
334
|
"externalDocs": {
|
|
335
335
|
"description": "Documentation",
|
|
336
|
-
"url": "https://
|
|
336
|
+
"url": "https://cli.datacontract.com/commands/breaking",
|
|
337
337
|
},
|
|
338
338
|
},
|
|
339
339
|
],
|
|
@@ -368,7 +368,7 @@ def _openapi_with_external_docs() -> dict:
|
|
|
368
368
|
"externalDocs",
|
|
369
369
|
{
|
|
370
370
|
"description": "Data Contract CLI documentation",
|
|
371
|
-
"url": "https://
|
|
371
|
+
"url": "https://cli.datacontract.com/api",
|
|
372
372
|
},
|
|
373
373
|
)
|
|
374
374
|
return schema
|
|
@@ -443,6 +443,22 @@ AUTHENTICATION_RESPONSES: dict[int | str, dict] = {
|
|
|
443
443
|
|
|
444
444
|
_CONFIG_HEADER_PREFIX = "datacontract-"
|
|
445
445
|
|
|
446
|
+
# Options naming a file or folder on the server's disk, or the server's own workload identity: the operator's
|
|
447
|
+
# to choose, never the caller's, or a caller could have the server log in as the operator to a host of their choosing.
|
|
448
|
+
_SERVER_ONLY_OPTIONS = frozenset(
|
|
449
|
+
{
|
|
450
|
+
"DATACONTRACT_CUSTOM_QUALITY_CHECKS",
|
|
451
|
+
"DATACONTRACT_SNOWFLAKE_PRIVATE_KEY_FILE",
|
|
452
|
+
"DATACONTRACT_SNOWFLAKE_PRIVATE_KEY_PATH",
|
|
453
|
+
"DATACONTRACT_SNOWFLAKE_TOKEN_FILE_PATH",
|
|
454
|
+
"DATACONTRACT_SNOWFLAKE_WORKLOAD_IDENTITY_PROVIDER",
|
|
455
|
+
"DATACONTRACT_BIGQUERY_ACCOUNT_INFO_JSON_PATH",
|
|
456
|
+
"DATACONTRACT_DATABRICKS_PROFILE",
|
|
457
|
+
"DATACONTRACT_ORACLE_CLIENT_DIR",
|
|
458
|
+
"DATACONTRACT_DUCKDB_DATABASE",
|
|
459
|
+
}
|
|
460
|
+
)
|
|
461
|
+
|
|
446
462
|
|
|
447
463
|
def config_from_headers(headers) -> "Config | None":
|
|
448
464
|
"""Build a per-request Config from configuration option headers.
|
|
@@ -452,8 +468,8 @@ def config_from_headers(headers) -> "Config | None":
|
|
|
452
468
|
→ ``DATACONTRACT_SNOWFLAKE_PASSWORD``, ``entropy-data-api-key`` →
|
|
453
469
|
``ENTROPY_DATA_API_KEY``. Returns None when no config headers are present,
|
|
454
470
|
so env-var-configured deployments behave exactly as before. Unknown
|
|
455
|
-
``datacontract-*`` option names are rejected with a 400, and so
|
|
456
|
-
|
|
471
|
+
``datacontract-*`` option names are rejected with a 400, and so are options
|
|
472
|
+
only the operator may set.
|
|
457
473
|
"""
|
|
458
474
|
known = known_env_names()
|
|
459
475
|
values = {}
|
|
@@ -461,11 +477,10 @@ def config_from_headers(headers) -> "Config | None":
|
|
|
461
477
|
lowered = name.lower()
|
|
462
478
|
env = lowered.upper().replace("-", "_")
|
|
463
479
|
if lowered.startswith(_CONFIG_HEADER_PREFIX) or env in known:
|
|
464
|
-
if env
|
|
465
|
-
# A folder on the server's disk is the operator's to choose, never the caller's.
|
|
480
|
+
if env in _SERVER_ONLY_OPTIONS:
|
|
466
481
|
raise HTTPException(
|
|
467
482
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
468
|
-
detail="
|
|
483
|
+
detail=f"{env} is set on the API server. It is not possible to override it per request.",
|
|
469
484
|
)
|
|
470
485
|
values[env] = value
|
|
471
486
|
if not values:
|
|
@@ -516,12 +531,25 @@ _ENVIRONMENT_CREDENTIAL_TARGETS: dict[str, tuple[str, str | None, tuple[str, ...
|
|
|
516
531
|
"hive": ("host", "hive_host", ("hive_password",)),
|
|
517
532
|
"redshift": ("host", "redshift_host", ("redshift_password",)),
|
|
518
533
|
"sqlserver": ("host", "sqlserver_host", ("sqlserver_password",)),
|
|
534
|
+
"mssql": ("host", "sqlserver_host", ("sqlserver_password",)),
|
|
519
535
|
"snowflake": (
|
|
520
536
|
"account",
|
|
521
537
|
"snowflake_account",
|
|
522
|
-
(
|
|
538
|
+
(
|
|
539
|
+
"snowflake_password",
|
|
540
|
+
"snowflake_token",
|
|
541
|
+
"snowflake_private_key",
|
|
542
|
+
"snowflake_private_key_file",
|
|
543
|
+
"snowflake_private_key_path",
|
|
544
|
+
"snowflake_token_file_path",
|
|
545
|
+
"snowflake_workload_identity_provider",
|
|
546
|
+
),
|
|
547
|
+
),
|
|
548
|
+
"databricks": (
|
|
549
|
+
"host",
|
|
550
|
+
"databricks_server_hostname",
|
|
551
|
+
("databricks_token", "databricks_client_secret", "databricks_profile"),
|
|
523
552
|
),
|
|
524
|
-
"databricks": ("host", "databricks_server_hostname", ("databricks_token", "databricks_client_secret")),
|
|
525
553
|
# Kafka's broker host is always the contract's `server.host` (no environment
|
|
526
554
|
# option pins it), so an environment-held SASL password can never be paired
|
|
527
555
|
# with a posted contract safely -- host_field is None, so it is always rejected.
|
|
@@ -539,13 +567,17 @@ def _selected_server(body: str, server_name: str | None, config):
|
|
|
539
567
|
"""
|
|
540
568
|
from datacontract.engines.data_contract_test import get_server
|
|
541
569
|
from datacontract.lint import resolve
|
|
570
|
+
from datacontract.model.server import get_server_type
|
|
542
571
|
|
|
543
572
|
try:
|
|
544
573
|
data_contract = resolve.resolve_data_contract(data_contract_str=body, config=config)
|
|
545
574
|
server = get_server(data_contract, server_name)
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
575
|
+
if server is None:
|
|
576
|
+
return None
|
|
577
|
+
# Guard the server type the test will connect to: references like ${VAR:-local} resolved, and
|
|
578
|
+
# `custom` + customType or an ODCS synonym such as `postgresql` mapped to the type the CLI dispatches on.
|
|
579
|
+
server = resolve_server_variables(server, allowed_environment(_allowed_contract_variables()))
|
|
580
|
+
return server.model_copy(update={"type": get_server_type(server)})
|
|
549
581
|
except Exception:
|
|
550
582
|
return None
|
|
551
583
|
|
|
@@ -630,11 +662,23 @@ def _reject_environment_credentials_to_untrusted_host(body: str, server_name: st
|
|
|
630
662
|
target_attr, host_field, secret_fields = guard
|
|
631
663
|
if not any(resolved.option_source(field) == "env" for field in secret_fields):
|
|
632
664
|
return # no environment-held secret for this server type; nothing to protect
|
|
633
|
-
if host_field is not None and resolved.option_source(host_field) == "env":
|
|
634
|
-
return # the operator pinned the target host; the contract's host is ignored
|
|
635
665
|
held = [
|
|
636
666
|
env_name(field, Config.model_fields[field]) for field in secret_fields if resolved.option_source(field) == "env"
|
|
637
667
|
]
|
|
668
|
+
if host_field is not None and resolved.option_source(host_field) == "env":
|
|
669
|
+
# Snowflake's host and port override the address the pinned account resolves to.
|
|
670
|
+
redirects = [
|
|
671
|
+
env_name(field, Config.model_fields[field])
|
|
672
|
+
for field in ("snowflake_host", "snowflake_port")
|
|
673
|
+
if server.type == "snowflake" and resolved.option_source(field) == "request"
|
|
674
|
+
]
|
|
675
|
+
if not redirects:
|
|
676
|
+
return # the operator pinned the target host; the contract's host is ignored
|
|
677
|
+
raise HTTPException(
|
|
678
|
+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
|
679
|
+
detail=f"{', '.join(redirects)} cannot be set per request while the API server uses its own Snowflake "
|
|
680
|
+
f"credential ({', '.join(held)}). Remove it, or send all credentials with the request.",
|
|
681
|
+
)
|
|
638
682
|
if host_field is not None:
|
|
639
683
|
env_var = env_name(host_field, Config.model_fields[host_field])
|
|
640
684
|
detail = (
|