datacontract-cli 1.2.2__tar.gz → 1.2.4__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.2/datacontract_cli.egg-info → datacontract_cli-1.2.4}/PKG-INFO +58 -44
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/README.md +40 -34
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/api.py +10 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/cli.py +20 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_ci.py +5 -2
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_edit.py +1 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_export.py +18 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_import.py +110 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_test.py +4 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/config/settings.py +79 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/config/variables.py +38 -8
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/data_contract.py +2 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/check_spec.py +6 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/create_checks.py +218 -34
- datacontract_cli-1.2.4/datacontract/engines/checks/custom_quality_check.py +552 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/dimensions.py +2 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/physical_type_match.py +33 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/sql_guard.py +6 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/data_contract_test.py +30 -11
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/fastjsonschema/check_jsonschema.py +77 -50
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +6 -8
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/check_hana_execute.py +2 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/hana_quality_check.py +126 -16
- datacontract_cli-1.2.4/datacontract/engines/ibis/__init__.py +16 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/aws_credentials.py +12 -3
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/connect.py +63 -9
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/duckdb_connection.py +187 -71
- datacontract_cli-1.2.4/datacontract/engines/ibis/connections/hive_patch.py +53 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/ibis_check_execute.py +74 -6
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/native_type.py +32 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/dbt_exporter.py +14 -5
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/exporter.py +1 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/exporter_factory.py +4 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/jsonschema_exporter.py +10 -4
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/pydantic_exporter.py +37 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/sodacl_check_builder.py +77 -14
- datacontract_cli-1.2.4/datacontract/export/xsd_exporter.py +337 -0
- datacontract_cli-1.2.4/datacontract/imports/clickhouse_importer.py +262 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/dbt_importer.py +12 -0
- datacontract_cli-1.2.4/datacontract/imports/hive_importer.py +196 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/importer.py +4 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/importer_factory.py +20 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/jsonschema_importer.py +184 -20
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/mysql_importer.py +2 -3
- datacontract_cli-1.2.4/datacontract/imports/openapi_importer.py +187 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/sql_importer.py +20 -2
- datacontract_cli-1.2.4/datacontract/imports/xsd_importer.py +432 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/integration/dbt_sync.py +24 -5
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/integration/dbt_test_mapping.py +23 -13
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/integration/entropy_data.py +11 -9
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/resolve.py +109 -26
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/run.py +3 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/server.py +3 -2
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/ci_output.py +11 -7
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/test_results_writer.py +12 -6
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/macros/schema.html +12 -13
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/schema.html +7 -8
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4/datacontract_cli.egg-info}/PKG-INFO +58 -44
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract_cli.egg-info/SOURCES.txt +25 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract_cli.egg-info/requires.txt +20 -9
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/pyproject.toml +31 -11
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_api.py +154 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_ci_output.py +36 -7
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_config_threading.py +5 -5
- datacontract_cli-1.2.4/tests/test_connect_clickhouse.py +112 -0
- datacontract_cli-1.2.4/tests/test_connect_hive.py +117 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_mysql.py +15 -4
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_s3_credentials.py +38 -4
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_sql_placeholders.py +22 -17
- datacontract_cli-1.2.4/tests/test_custom_quality_checks.py +531 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_dbt_sync.py +63 -12
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_dbt_test_mapping.py +24 -14
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dbt_models.py +89 -36
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dbt_sources.py +39 -28
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_html.py +56 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_jsonschema.py +26 -0
- datacontract_cli-1.2.4/tests/test_export_pydantic.py +361 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_sodacl.py +40 -0
- datacontract_cli-1.2.4/tests/test_export_xsd.py +594 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_hana_quality_check.py +39 -0
- datacontract_cli-1.2.4/tests/test_import_clickhouse.py +184 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_dbt.py +68 -0
- datacontract_cli-1.2.4/tests/test_import_hive.py +172 -0
- datacontract_cli-1.2.4/tests/test_import_jsonschema.py +340 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_mysql.py +30 -0
- datacontract_cli-1.2.4/tests/test_import_openapi.py +138 -0
- datacontract_cli-1.2.4/tests/test_import_sql_clickhouse.py +42 -0
- datacontract_cli-1.2.4/tests/test_import_sql_hive.py +61 -0
- datacontract_cli-1.2.4/tests/test_import_sql_struct.py +20 -0
- datacontract_cli-1.2.4/tests/test_import_xsd.py +583 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_install_extras.py +2 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_lint.py +1 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_nested_path_checks.py +32 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_physical_type_match.py +103 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_quality_sql_dialects.py +4 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_resolve_definitions.py +40 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_roundtrip_pydantic_model.py +6 -3
- datacontract_cli-1.2.4/tests/test_roundtrip_xsd.py +256 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_servers_3_2_0.py +52 -0
- datacontract_cli-1.2.4/tests/test_test_api_openapi_import.py +151 -0
- datacontract_cli-1.2.4/tests/test_test_array_items.py +193 -0
- datacontract_cli-1.2.4/tests/test_test_clickhouse.py +147 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_diagnostics.py +72 -0
- datacontract_cli-1.2.4/tests/test_test_hive.py +156 -0
- datacontract_cli-1.2.4/tests/test_test_local_json.py +159 -0
- datacontract_cli-1.2.4/tests/test_test_local_xml.py +463 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_metadata_only.py +2 -2
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_oracle.py +22 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_postgres.py +32 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_quality_id_and_tag_filter.py +16 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_redshift.py +19 -0
- datacontract_cli-1.2.4/tests/test_test_relationships.py +270 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_results_writer.py +33 -0
- datacontract_cli-1.2.4/tests/test_test_s3_json_multiple_files.py +84 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_schema_evolution.py +3 -9
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_untrusted_contract.py +1 -1
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_variables.py +19 -0
- datacontract_cli-1.2.2/datacontract/output/__init__.py +0 -0
- datacontract_cli-1.2.2/tests/test_export_pydantic.py +0 -188
- datacontract_cli-1.2.2/tests/test_import_jsonschema.py +0 -151
- datacontract_cli-1.2.2/tests/test_test_array_items.py +0 -109
- datacontract_cli-1.2.2/tests/test_test_local_json.py +0 -21
- datacontract_cli-1.2.2/tests/test_test_s3_json_remote.py +0 -23
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/LICENSE +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/MANIFEST.in +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/__init__.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/breaking/__init__.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/breaking/detector.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/breaking/rules.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/catalog/catalog.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/changelog/__init__.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/changelog/changelog.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/changelog/normalize.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_api.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_breaking.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_catalog.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_changelog.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_dbt.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_init.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_lint.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_publish.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/config/__init__.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/config/cli_context.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/VERSION +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/assets/editor.worker-4.7.0.js +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/datacontract-editor.css +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/datacontract-editor.es.js +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/index.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/logo_fuchsia_v2.svg +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/monaco-4.7.0.js +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/odcs.svg +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/robots.txt +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/rolldown-runtime-DY7j01NX.js +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/sitemap.xml +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/__init__.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/check_filter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/severity.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/type_normalize.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/datacontract/check_azure_blob_file.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/__init__.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/hana_check_selection.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/hana_connection.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/hana_schema_check.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/hana_type_mapping.py +0 -0
- {datacontract_cli-1.2.2/datacontract/engines/ibis → datacontract_cli-1.2.4/datacontract/engines/ibis/connections}/__init__.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/databricks_patch.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/exasol_patch.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/iceberg.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/kafka.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/oracle_patch.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/redshift_credentials.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/redshift_patch.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/dtype_category.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/snowflake_structured_types.py +0 -0
- {datacontract_cli-1.2.2/datacontract/engines/ibis/connections → datacontract_cli-1.2.4/datacontract/export}/__init__.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/avro_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/avro_idl_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/bigquery_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/custom_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/data_caterer_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/dbml_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/dqx_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/excel_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/go_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/great_expectations_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/iceberg_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/markdown_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/protobuf_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/rdf_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/sodacl_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/spark_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/sql_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/sql_type_converter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/sqlalchemy_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/athena_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/avro_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/dcs_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/excel_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/object_storage_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/odata_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/odcs_helper.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/odcs_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/oracle_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/postgres_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/powerbi_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/pydantic_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/redshift_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/snowflake_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/spark_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/spark_type_json.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/sqlserver_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/trino_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/unity_importer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/constraints.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/files.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/s3.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/breaking.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/changelog.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/enum_values.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/map_type.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/natural_keys.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/vector_type.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/workbook.py +0 -0
- {datacontract_cli-1.2.2/datacontract/export → datacontract_cli-1.2.4/datacontract/output}/__init__.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/json_test_results.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/text_breaking_results.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/text_changelog_results.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/py.typed +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/odcs-3.2.0.init.yaml +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/odcs-3.2.0.schema.json +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/datacontract_odcs.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/excel/odcs-template-v3.0.xlsx +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/excel/odcs-template-v3.1.xlsx +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/excel/odcs-template-v3.2.xlsx +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/index.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/macros/authoritative_definitions.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/macros/context.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/macros/server.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/macros/support.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/context.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/custom_properties.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/diagram.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/dialog_yaml.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/footer.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/fundamentals.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/header.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/pricing.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/roles.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/servers.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/sla.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/support.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/team.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/term_of_use.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/title.html +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/setup.cfg +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_api_openapi.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_breaking.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_breaking_odcs_3_2.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_catalog.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_changelog.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_changelog_engine.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_changelog_normalize.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_changelog_output_text.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_check_quality_provenance.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_cli.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_command_api.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_command_api_options.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_config.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_config_file.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_config_require.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_athena.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_bigquery.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_databricks.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_exasol.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_impala.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_oracle.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_postgres.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_redshift.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_snowflake.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_sqlserver.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_trino.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_array_items.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_nested.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_nested_type.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_physical_type.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_primary_key.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_retention_period.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_servicelevel.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_data_contract.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_description_linter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_docs_commands.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_docs_config_options.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_docs_ordering.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_dtype_category.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_edit.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_enum_values.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_avro.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_custom.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_custom_model.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dcs.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dqx.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_excel.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_go.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_large_contract.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_rdf.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_spark.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_sql.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_sql_clickhouse.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_hana_connection.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_hana_schema_check.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_hana_type_mapping.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_ibis_check_execute.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_ibis_mssql_pattern.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_ibis_mssql_schema.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_ibis_oracle_schema.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_athena.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_avro.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_csv.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_excel.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_glue.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_json.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_object_storage.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_odata.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_odcs_v3.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_oracle.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_postgres.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_powerbi.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_pydantic_model.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_redshift.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_snowflake.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_spark_type_json.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_sql_oracle.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_sql_snowflake.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_sqlserver.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_trino.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_unmapped_types.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_integration_entropydata.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_lint_files.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_lint_odcs_3_2_constraints.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_lint_schema.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_lint_urls.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_map_type.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_metadata_fields.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_native_type_schema_scope.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_oracle_patch.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_publish_test_results.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_publish_test_results_payload.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_quality_unrunnable_rules.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_redshift_credentials.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_redshift_patch.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_resolve.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_resolve_local_definitions.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_row_filter_duplicate_count.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_run_check_deprecated_fields.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_run_check_engine.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_server_overrides.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_server_type_mssql.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_server_type_synonyms.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_snowflake_structured_types.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_sql_type_converter_physicaltype.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_api.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_athena_iceberg.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_azure_blob_file.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_checks_filter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_delta.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_dimension_filter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_dry_run.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_duckdb.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_failed_samples.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_hana.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_iceberg.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_iceberg_rest.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_iceberg_s3tables.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_kafka_decoding.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_local_json_nd.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_mysql.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_nested_checks.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_oracle_xe.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_output_json.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_quality.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_quality_local_fallback.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_quality_percent_severity.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_row_filter.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_server_not_found.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_soda_connection_error.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_trino.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_variables.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_type_normalize.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_untrusted_contract_variables.py +0 -0
- {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_vector_type.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.4
|
|
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
|
|
@@ -40,7 +40,7 @@ Requires-Dist: jsonschema<5.0.0,>=4.23.0
|
|
|
40
40
|
Requires-Dist: pytz>=2024.1
|
|
41
41
|
Requires-Dist: python-multipart<1.0.0,>=0.0.20
|
|
42
42
|
Requires-Dist: rich<16.0,>=13.7
|
|
43
|
-
Requires-Dist: sqlglot<
|
|
43
|
+
Requires-Dist: sqlglot<31.0.0,>=26.6.0
|
|
44
44
|
Requires-Dist: python-dotenv<2.0.0,>=1.0.0
|
|
45
45
|
Requires-Dist: boto3<2.0.0,>=1.34.41
|
|
46
46
|
Requires-Dist: Jinja2<4.0.0,>=3.1.5
|
|
@@ -52,6 +52,9 @@ Provides-Extra: avro
|
|
|
52
52
|
Requires-Dist: avro==1.12.2; extra == "avro"
|
|
53
53
|
Provides-Extra: bigquery
|
|
54
54
|
Requires-Dist: ibis-framework[bigquery]<13.0.0,>=10.0.0; extra == "bigquery"
|
|
55
|
+
Provides-Extra: clickhouse
|
|
56
|
+
Requires-Dist: ibis-framework[clickhouse]<13.0.0,>=10.0.0; extra == "clickhouse"
|
|
57
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "clickhouse"
|
|
55
58
|
Provides-Extra: csv
|
|
56
59
|
Requires-Dist: datacontract-cli[duckdb]; extra == "csv"
|
|
57
60
|
Provides-Extra: excel
|
|
@@ -66,8 +69,8 @@ Requires-Dist: pyarrow-hotfix>=0.4; extra == "dataframe"
|
|
|
66
69
|
Requires-Dist: rich>=12.4.4; extra == "dataframe"
|
|
67
70
|
Provides-Extra: databricks
|
|
68
71
|
Requires-Dist: ibis-framework[databricks]<13.0.0,>=10.0.0; extra == "databricks"
|
|
69
|
-
Requires-Dist: databricks-sql-connector<4.
|
|
70
|
-
Requires-Dist: databricks-sdk<0.
|
|
72
|
+
Requires-Dist: databricks-sql-connector<4.7.0,>=3.7.0; extra == "databricks"
|
|
73
|
+
Requires-Dist: databricks-sdk<0.143.0; extra == "databricks"
|
|
71
74
|
Requires-Dist: packaging<27.0,>=21.3; extra == "databricks"
|
|
72
75
|
Provides-Extra: databricks-runtime
|
|
73
76
|
Requires-Dist: datacontract-cli[databricks]; extra == "databricks-runtime"
|
|
@@ -101,7 +104,7 @@ Requires-Dist: duckdb-extension-azure<1.6.0,>=1.5.0; extra == "azure"
|
|
|
101
104
|
Requires-Dist: azure-identity<1.26,>=1.17.1; extra == "azure"
|
|
102
105
|
Requires-Dist: azure-storage-blob<12.31,>=12.24; extra == "azure"
|
|
103
106
|
Provides-Extra: snowflake
|
|
104
|
-
Requires-Dist: snowflake-connector-python[pandas]<4.
|
|
107
|
+
Requires-Dist: snowflake-connector-python[pandas]<4.9,>=3.6; extra == "snowflake"
|
|
105
108
|
Requires-Dist: ibis-framework[snowflake]<13.0.0,>=10.0.0; extra == "snowflake"
|
|
106
109
|
Provides-Extra: sqlserver
|
|
107
110
|
Requires-Dist: ibis-framework[mssql]<13.0.0,>=10.0.0; extra == "sqlserver"
|
|
@@ -125,6 +128,9 @@ Requires-Dist: packaging<27.0,>=21.3; extra == "trino"
|
|
|
125
128
|
Provides-Extra: impala
|
|
126
129
|
Requires-Dist: ibis-framework[impala]<13.0.0,>=10.0.0; extra == "impala"
|
|
127
130
|
Requires-Dist: packaging<27.0,>=21.3; extra == "impala"
|
|
131
|
+
Provides-Extra: hive
|
|
132
|
+
Requires-Dist: ibis-framework[impala]<13.0.0,>=10.0.0; extra == "hive"
|
|
133
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "hive"
|
|
128
134
|
Provides-Extra: dbml
|
|
129
135
|
Requires-Dist: pydbml>=1.1.1; extra == "dbml"
|
|
130
136
|
Provides-Extra: duckdb
|
|
@@ -135,12 +141,14 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
|
|
|
135
141
|
Provides-Extra: rdf
|
|
136
142
|
Requires-Dist: rdflib==7.6.0; extra == "rdf"
|
|
137
143
|
Provides-Extra: api
|
|
138
|
-
Requires-Dist: fastapi<0.
|
|
139
|
-
Requires-Dist: uvicorn<0.
|
|
144
|
+
Requires-Dist: fastapi<0.143.0,>=0.115.0; extra == "api"
|
|
145
|
+
Requires-Dist: uvicorn<0.55.0,>=0.44.0; extra == "api"
|
|
140
146
|
Provides-Extra: protobuf
|
|
141
147
|
Requires-Dist: proto-schema-parser<3.0,>=1.0; extra == "protobuf"
|
|
148
|
+
Provides-Extra: xml
|
|
149
|
+
Requires-Dist: xmlschema<5.0,>=4.0; extra == "xml"
|
|
142
150
|
Provides-Extra: all
|
|
143
|
-
Requires-Dist: datacontract-cli[api,athena,avro,azure,bigquery,csv,databricks,dataframe,dbml,duckdb,exasol,excel,gcs,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino]; 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"
|
|
144
152
|
Provides-Extra: dev
|
|
145
153
|
Requires-Dist: datacontract-cli[all]; extra == "dev"
|
|
146
154
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
@@ -153,10 +161,10 @@ Requires-Dist: pre-commit<4.7.0,>=3.7.1; extra == "dev"
|
|
|
153
161
|
Requires-Dist: pytest; extra == "dev"
|
|
154
162
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
155
163
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
156
|
-
Requires-Dist: pymssql==2.4.
|
|
164
|
+
Requires-Dist: pymssql==2.4.2; extra == "dev"
|
|
157
165
|
Requires-Dist: psycopg2-binary<3.0,>=2.9; extra == "dev"
|
|
158
166
|
Requires-Dist: mysql-connector-python<26.8.0,>=8.0.30; extra == "dev"
|
|
159
|
-
Requires-Dist: ruff==0.16.
|
|
167
|
+
Requires-Dist: ruff==0.16.10; extra == "dev"
|
|
160
168
|
Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.15.0; extra == "dev"
|
|
161
169
|
Requires-Dist: trino==0.339.0; extra == "dev"
|
|
162
170
|
Dynamic: license-file
|
|
@@ -186,7 +194,7 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
|
|
|
186
194
|
>
|
|
187
195
|
> Quick links: [Quickstart](https://docs.datacontract.com/quickstart) · [Commands](https://docs.datacontract.com/commands) · [Best Practices](https://docs.datacontract.com/best-practices) · [Custom Export and Import](https://docs.datacontract.com/extending) · [Release Notes](https://docs.datacontract.com/release-notes) · [Development Setup](#development-setup)
|
|
188
196
|
>
|
|
189
|
-
> For LLMs: [
|
|
197
|
+
> For LLMs: [docs.datacontract.com/llms.txt](https://docs.datacontract.com/llms.txt) · [docs.datacontract.com/llms-full.txt](https://docs.datacontract.com/llms-full.txt)
|
|
190
198
|
|
|
191
199
|
## Getting started
|
|
192
200
|
|
|
@@ -214,36 +222,41 @@ $ datacontract test https://datacontract.com/orders-v1.odcs.yaml
|
|
|
214
222
|
# returns:
|
|
215
223
|
Testing https://datacontract.com/orders-v1.odcs.yaml
|
|
216
224
|
Server: production (type=postgres, host=aws-1-eu-central-2.pooler.supabase.com, port=6543, database=postgres, schema=dp_orders_v1)
|
|
217
|
-
|
|
218
|
-
│ Result │ Check
|
|
219
|
-
|
|
220
|
-
│ passed │ Check that field 'line_item_id' is present
|
|
221
|
-
│ passed │ Check that field line_item_id has type UUID │ line_items.line_item_id │ │
|
|
222
|
-
│ passed │ Check that field line_item_id has no missing values
|
|
223
|
-
│ passed │ Check that field
|
|
224
|
-
│ passed │ Check that field order_id
|
|
225
|
-
│ passed │ Check that field
|
|
226
|
-
│ passed │ Check that field price
|
|
227
|
-
│ passed │ Check that field price has
|
|
228
|
-
│ passed │ Check that field
|
|
229
|
-
│ passed │ Check that field sku
|
|
230
|
-
│ passed │ Check that field sku has
|
|
231
|
-
│ passed │ Check that field
|
|
232
|
-
│ passed │ Check that
|
|
233
|
-
│ passed │ Check that field customer_id
|
|
234
|
-
│ passed │ Check that field
|
|
235
|
-
│ passed │ Check that field
|
|
236
|
-
│ passed │ Check that field
|
|
237
|
-
│ passed │ Check that
|
|
238
|
-
│ passed │ Check that field '
|
|
239
|
-
│ passed │ Check that field
|
|
240
|
-
│ passed │ Check that field
|
|
241
|
-
│ passed │ Check that field
|
|
242
|
-
│ passed │ Check that field '
|
|
243
|
-
│ passed │ Check that field
|
|
244
|
-
│ passed │ Check that field
|
|
245
|
-
|
|
246
|
-
|
|
225
|
+
╭────────┬───────────────────────────────────────────────────────────────────┬─────────────────────────┬─────────╮
|
|
226
|
+
│ Result │ Check │ Field │ Details │
|
|
227
|
+
├────────┼───────────────────────────────────────────────────────────────────┼─────────────────────────┼─────────┤
|
|
228
|
+
│ passed │ Check that field 'line_item_id' is present │ line_items.line_item_id │ │
|
|
229
|
+
│ passed │ Check that field line_item_id has physical type UUID │ line_items.line_item_id │ │
|
|
230
|
+
│ passed │ Check that field line_item_id has no missing values │ line_items.line_item_id │ │
|
|
231
|
+
│ passed │ Check that primary key field line_item_id has no duplicate values │ line_items.line_item_id │ │
|
|
232
|
+
│ passed │ Check that field 'order_id' is present │ line_items.order_id │ │
|
|
233
|
+
│ passed │ Check that field order_id has physical type UUID │ line_items.order_id │ │
|
|
234
|
+
│ passed │ Check that field 'price' is present │ line_items.price │ │
|
|
235
|
+
│ passed │ Check that field price has physical type INTEGER │ line_items.price │ │
|
|
236
|
+
│ passed │ Check that field price has no missing values │ line_items.price │ │
|
|
237
|
+
│ passed │ Check that field 'sku' is present │ line_items.sku │ │
|
|
238
|
+
│ passed │ Check that field sku has physical type TEXT │ line_items.sku │ │
|
|
239
|
+
│ passed │ Check that field sku has no missing values │ line_items.sku │ │
|
|
240
|
+
│ passed │ Check that model orders has row_count > 100000 │ orders │ │
|
|
241
|
+
│ passed │ Check that field 'customer_id' is present │ orders.customer_id │ │
|
|
242
|
+
│ passed │ Check that field customer_id has physical type TEXT │ orders.customer_id │ │
|
|
243
|
+
│ passed │ Check that field customer_id has no missing values │ orders.customer_id │ │
|
|
244
|
+
│ passed │ Check that field customer_id has a min length of 10 │ orders.customer_id │ │
|
|
245
|
+
│ passed │ Check that field customer_id has a max length of 10 │ orders.customer_id │ │
|
|
246
|
+
│ passed │ Check that field 'order_id' is present │ orders.order_id │ │
|
|
247
|
+
│ passed │ Check that field order_id has physical type UUID │ orders.order_id │ │
|
|
248
|
+
│ passed │ Check that field order_id has no missing values │ orders.order_id │ │
|
|
249
|
+
│ passed │ Check that unique field order_id has no duplicate values │ orders.order_id │ │
|
|
250
|
+
│ passed │ Check that field 'order_status' is present │ orders.order_status │ │
|
|
251
|
+
│ passed │ Check that field order_status has physical type TEXT │ orders.order_status │ │
|
|
252
|
+
│ passed │ Check that field order_status has invalid_count = 0 │ orders.order_status │ │
|
|
253
|
+
│ passed │ Check that field 'order_timestamp' is present │ orders.order_timestamp │ │
|
|
254
|
+
│ passed │ Check that field order_timestamp has physical type TIMESTAMPTZ │ orders.order_timestamp │ │
|
|
255
|
+
│ passed │ Check that field 'order_total' is present │ orders.order_total │ │
|
|
256
|
+
│ passed │ Check that field order_total has physical type INTEGER │ orders.order_total │ │
|
|
257
|
+
│ passed │ Check that field order_total has no missing values │ orders.order_total │ │
|
|
258
|
+
╰────────┴───────────────────────────────────────────────────────────────────┴─────────────────────────┴─────────╯
|
|
259
|
+
🟢 Data contract is valid. Ran 30 checks. Took 2.504495 seconds.
|
|
247
260
|
```
|
|
248
261
|
|
|
249
262
|
Voilà, the CLI tested that the YAML itself is valid, all records comply with the schema, and all quality attributes are met.
|
|
@@ -342,7 +355,7 @@ if not run.has_passed():
|
|
|
342
355
|
## How to
|
|
343
356
|
|
|
344
357
|
- [How to integrate Data Contract CLI in your CI/CD pipeline as a GitHub Action](https://github.com/datacontract/datacontract-action/)
|
|
345
|
-
- [How to run the Data Contract CLI API to test data contracts with POST requests](https://
|
|
358
|
+
- [How to run the Data Contract CLI API to test data contracts with POST requests](https://docs.datacontract.com/api)
|
|
346
359
|
- [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)
|
|
347
360
|
|
|
348
361
|
|
|
@@ -363,11 +376,11 @@ uv tool install --python python3.11 --upgrade 'datacontract-cli[all]'
|
|
|
363
376
|
If you have [uv](https://docs.astral.sh/uv/) installed, you can run datacontract-cli directly without installing:
|
|
364
377
|
|
|
365
378
|
```
|
|
366
|
-
|
|
379
|
+
uvx --from 'datacontract-cli[all]' datacontract --version
|
|
367
380
|
```
|
|
368
381
|
|
|
369
382
|
### pip
|
|
370
|
-
Python 3.10
|
|
383
|
+
Python 3.10–3.14 are supported. We recommend using Python 3.11.
|
|
371
384
|
|
|
372
385
|
```bash
|
|
373
386
|
python3 -m pip install 'datacontract-cli[all]'
|
|
@@ -456,6 +469,7 @@ A list of available extras:
|
|
|
456
469
|
| Snowflake | `pip install datacontract-cli[snowflake]` |
|
|
457
470
|
| Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
|
|
458
471
|
| Trino | `pip install datacontract-cli[trino]` |
|
|
472
|
+
| XML Schema (import) | `pip install datacontract-cli[xml]` |
|
|
459
473
|
|
|
460
474
|
|
|
461
475
|
## Documentation
|
|
@@ -23,7 +23,7 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
|
|
|
23
23
|
>
|
|
24
24
|
> Quick links: [Quickstart](https://docs.datacontract.com/quickstart) · [Commands](https://docs.datacontract.com/commands) · [Best Practices](https://docs.datacontract.com/best-practices) · [Custom Export and Import](https://docs.datacontract.com/extending) · [Release Notes](https://docs.datacontract.com/release-notes) · [Development Setup](#development-setup)
|
|
25
25
|
>
|
|
26
|
-
> For LLMs: [
|
|
26
|
+
> For LLMs: [docs.datacontract.com/llms.txt](https://docs.datacontract.com/llms.txt) · [docs.datacontract.com/llms-full.txt](https://docs.datacontract.com/llms-full.txt)
|
|
27
27
|
|
|
28
28
|
## Getting started
|
|
29
29
|
|
|
@@ -51,36 +51,41 @@ $ datacontract test https://datacontract.com/orders-v1.odcs.yaml
|
|
|
51
51
|
# returns:
|
|
52
52
|
Testing https://datacontract.com/orders-v1.odcs.yaml
|
|
53
53
|
Server: production (type=postgres, host=aws-1-eu-central-2.pooler.supabase.com, port=6543, database=postgres, schema=dp_orders_v1)
|
|
54
|
-
|
|
55
|
-
│ Result │ Check
|
|
56
|
-
|
|
57
|
-
│ passed │ Check that field 'line_item_id' is present
|
|
58
|
-
│ passed │ Check that field line_item_id has type UUID │ line_items.line_item_id │ │
|
|
59
|
-
│ passed │ Check that field line_item_id has no missing values
|
|
60
|
-
│ passed │ Check that field
|
|
61
|
-
│ passed │ Check that field order_id
|
|
62
|
-
│ passed │ Check that field
|
|
63
|
-
│ passed │ Check that field price
|
|
64
|
-
│ passed │ Check that field price has
|
|
65
|
-
│ passed │ Check that field
|
|
66
|
-
│ passed │ Check that field sku
|
|
67
|
-
│ passed │ Check that field sku has
|
|
68
|
-
│ passed │ Check that field
|
|
69
|
-
│ passed │ Check that
|
|
70
|
-
│ passed │ Check that field customer_id
|
|
71
|
-
│ passed │ Check that field
|
|
72
|
-
│ passed │ Check that field
|
|
73
|
-
│ passed │ Check that field
|
|
74
|
-
│ passed │ Check that
|
|
75
|
-
│ passed │ Check that field '
|
|
76
|
-
│ passed │ Check that field
|
|
77
|
-
│ passed │ Check that field
|
|
78
|
-
│ passed │ Check that field
|
|
79
|
-
│ passed │ Check that field '
|
|
80
|
-
│ passed │ Check that field
|
|
81
|
-
│ passed │ Check that field
|
|
82
|
-
|
|
83
|
-
|
|
54
|
+
╭────────┬───────────────────────────────────────────────────────────────────┬─────────────────────────┬─────────╮
|
|
55
|
+
│ Result │ Check │ Field │ Details │
|
|
56
|
+
├────────┼───────────────────────────────────────────────────────────────────┼─────────────────────────┼─────────┤
|
|
57
|
+
│ passed │ Check that field 'line_item_id' is present │ line_items.line_item_id │ │
|
|
58
|
+
│ passed │ Check that field line_item_id has physical type UUID │ line_items.line_item_id │ │
|
|
59
|
+
│ passed │ Check that field line_item_id has no missing values │ line_items.line_item_id │ │
|
|
60
|
+
│ passed │ Check that primary key field line_item_id has no duplicate values │ line_items.line_item_id │ │
|
|
61
|
+
│ passed │ Check that field 'order_id' is present │ line_items.order_id │ │
|
|
62
|
+
│ passed │ Check that field order_id has physical type UUID │ line_items.order_id │ │
|
|
63
|
+
│ passed │ Check that field 'price' is present │ line_items.price │ │
|
|
64
|
+
│ passed │ Check that field price has physical type INTEGER │ line_items.price │ │
|
|
65
|
+
│ passed │ Check that field price has no missing values │ line_items.price │ │
|
|
66
|
+
│ passed │ Check that field 'sku' is present │ line_items.sku │ │
|
|
67
|
+
│ passed │ Check that field sku has physical type TEXT │ line_items.sku │ │
|
|
68
|
+
│ passed │ Check that field sku has no missing values │ line_items.sku │ │
|
|
69
|
+
│ passed │ Check that model orders has row_count > 100000 │ orders │ │
|
|
70
|
+
│ passed │ Check that field 'customer_id' is present │ orders.customer_id │ │
|
|
71
|
+
│ passed │ Check that field customer_id has physical type TEXT │ orders.customer_id │ │
|
|
72
|
+
│ passed │ Check that field customer_id has no missing values │ orders.customer_id │ │
|
|
73
|
+
│ passed │ Check that field customer_id has a min length of 10 │ orders.customer_id │ │
|
|
74
|
+
│ passed │ Check that field customer_id has a max length of 10 │ orders.customer_id │ │
|
|
75
|
+
│ passed │ Check that field 'order_id' is present │ orders.order_id │ │
|
|
76
|
+
│ passed │ Check that field order_id has physical type UUID │ orders.order_id │ │
|
|
77
|
+
│ passed │ Check that field order_id has no missing values │ orders.order_id │ │
|
|
78
|
+
│ passed │ Check that unique field order_id has no duplicate values │ orders.order_id │ │
|
|
79
|
+
│ passed │ Check that field 'order_status' is present │ orders.order_status │ │
|
|
80
|
+
│ passed │ Check that field order_status has physical type TEXT │ orders.order_status │ │
|
|
81
|
+
│ passed │ Check that field order_status has invalid_count = 0 │ orders.order_status │ │
|
|
82
|
+
│ passed │ Check that field 'order_timestamp' is present │ orders.order_timestamp │ │
|
|
83
|
+
│ passed │ Check that field order_timestamp has physical type TIMESTAMPTZ │ orders.order_timestamp │ │
|
|
84
|
+
│ passed │ Check that field 'order_total' is present │ orders.order_total │ │
|
|
85
|
+
│ passed │ Check that field order_total has physical type INTEGER │ orders.order_total │ │
|
|
86
|
+
│ passed │ Check that field order_total has no missing values │ orders.order_total │ │
|
|
87
|
+
╰────────┴───────────────────────────────────────────────────────────────────┴─────────────────────────┴─────────╯
|
|
88
|
+
🟢 Data contract is valid. Ran 30 checks. Took 2.504495 seconds.
|
|
84
89
|
```
|
|
85
90
|
|
|
86
91
|
Voilà, the CLI tested that the YAML itself is valid, all records comply with the schema, and all quality attributes are met.
|
|
@@ -179,7 +184,7 @@ if not run.has_passed():
|
|
|
179
184
|
## How to
|
|
180
185
|
|
|
181
186
|
- [How to integrate Data Contract CLI in your CI/CD pipeline as a GitHub Action](https://github.com/datacontract/datacontract-action/)
|
|
182
|
-
- [How to run the Data Contract CLI API to test data contracts with POST requests](https://
|
|
187
|
+
- [How to run the Data Contract CLI API to test data contracts with POST requests](https://docs.datacontract.com/api)
|
|
183
188
|
- [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)
|
|
184
189
|
|
|
185
190
|
|
|
@@ -200,11 +205,11 @@ uv tool install --python python3.11 --upgrade 'datacontract-cli[all]'
|
|
|
200
205
|
If you have [uv](https://docs.astral.sh/uv/) installed, you can run datacontract-cli directly without installing:
|
|
201
206
|
|
|
202
207
|
```
|
|
203
|
-
|
|
208
|
+
uvx --from 'datacontract-cli[all]' datacontract --version
|
|
204
209
|
```
|
|
205
210
|
|
|
206
211
|
### pip
|
|
207
|
-
Python 3.10
|
|
212
|
+
Python 3.10–3.14 are supported. We recommend using Python 3.11.
|
|
208
213
|
|
|
209
214
|
```bash
|
|
210
215
|
python3 -m pip install 'datacontract-cli[all]'
|
|
@@ -293,6 +298,7 @@ A list of available extras:
|
|
|
293
298
|
| Snowflake | `pip install datacontract-cli[snowflake]` |
|
|
294
299
|
| Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
|
|
295
300
|
| Trino | `pip install datacontract-cli[trino]` |
|
|
301
|
+
| XML Schema (import) | `pip install datacontract-cli[xml]` |
|
|
296
302
|
|
|
297
303
|
|
|
298
304
|
## Documentation
|
|
@@ -449,7 +449,8 @@ def config_from_headers(headers) -> "Config | None":
|
|
|
449
449
|
→ ``DATACONTRACT_SNOWFLAKE_PASSWORD``, ``entropy-data-api-key`` →
|
|
450
450
|
``ENTROPY_DATA_API_KEY``. Returns None when no config headers are present,
|
|
451
451
|
so env-var-configured deployments behave exactly as before. Unknown
|
|
452
|
-
``datacontract-*`` option names are rejected with a 400
|
|
452
|
+
``datacontract-*`` option names are rejected with a 400, and so is the
|
|
453
|
+
custom quality checks folder.
|
|
453
454
|
"""
|
|
454
455
|
known = known_env_names()
|
|
455
456
|
values = {}
|
|
@@ -457,6 +458,12 @@ def config_from_headers(headers) -> "Config | None":
|
|
|
457
458
|
lowered = name.lower()
|
|
458
459
|
env = lowered.upper().replace("-", "_")
|
|
459
460
|
if lowered.startswith(_CONFIG_HEADER_PREFIX) or env in known:
|
|
461
|
+
if env == "DATACONTRACT_CUSTOM_QUALITY_CHECKS":
|
|
462
|
+
# A folder on the server's disk is the operator's to choose, never the caller's.
|
|
463
|
+
raise HTTPException(
|
|
464
|
+
status_code=status.HTTP_400_BAD_REQUEST,
|
|
465
|
+
detail="The custom quality checks folder is configured by the API server, not per request.",
|
|
466
|
+
)
|
|
460
467
|
values[env] = value
|
|
461
468
|
if not values:
|
|
462
469
|
return None
|
|
@@ -502,6 +509,8 @@ _ENVIRONMENT_CREDENTIAL_TARGETS: dict[str, tuple[str, str | None, tuple[str, ...
|
|
|
502
509
|
"impala": ("host", "impala_host", ("impala_password",)),
|
|
503
510
|
"trino": ("host", "trino_host", ("trino_password",)),
|
|
504
511
|
"exasol": ("host", "exasol_host", ("exasol_password",)),
|
|
512
|
+
"clickhouse": ("host", "clickhouse_host", ("clickhouse_password",)),
|
|
513
|
+
"hive": ("host", "hive_host", ("hive_password",)),
|
|
505
514
|
"redshift": ("host", "redshift_host", ("redshift_password",)),
|
|
506
515
|
"sqlserver": ("host", "sqlserver_host", ("sqlserver_password",)),
|
|
507
516
|
"snowflake": (
|
|
@@ -15,7 +15,7 @@ from rich.markup import escape
|
|
|
15
15
|
from typer.core import TyperGroup
|
|
16
16
|
from typing_extensions import Annotated
|
|
17
17
|
|
|
18
|
-
from datacontract.config import Config, set_cli_config
|
|
18
|
+
from datacontract.config import Config, cli_config, set_cli_config
|
|
19
19
|
from datacontract.output.output_format import OutputFormat
|
|
20
20
|
|
|
21
21
|
console = Console()
|
|
@@ -31,6 +31,23 @@ inline_references_option = Annotated[
|
|
|
31
31
|
),
|
|
32
32
|
]
|
|
33
33
|
|
|
34
|
+
custom_quality_checks_option = Annotated[
|
|
35
|
+
Optional[Path],
|
|
36
|
+
typer.Option(
|
|
37
|
+
metavar="DIR",
|
|
38
|
+
help="Folder with the custom quality checks the contract's quality rules use, one YAML file per check. "
|
|
39
|
+
"Defaults to DATACONTRACT_CUSTOM_QUALITY_CHECKS.",
|
|
40
|
+
),
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def config_with_custom_quality_checks(custom_quality_checks: Optional[Path]) -> Config | None:
|
|
45
|
+
"""The --config-file config, with the --custom-quality-checks folder if one was given."""
|
|
46
|
+
config = cli_config()
|
|
47
|
+
if custom_quality_checks is None:
|
|
48
|
+
return config
|
|
49
|
+
return Config.resolve(config).model_copy(update={"custom_quality_checks": str(custom_quality_checks)})
|
|
50
|
+
|
|
34
51
|
|
|
35
52
|
# Order in which top-level commands appear in `datacontract --help` (cf. README.md)
|
|
36
53
|
COMMAND_ORDER = [
|
|
@@ -130,6 +147,8 @@ app = typer.Typer(
|
|
|
130
147
|
cls=OrderedCommandsWithMigrationHints,
|
|
131
148
|
no_args_is_help=True,
|
|
132
149
|
add_completion=False,
|
|
150
|
+
# the locals of a --debug traceback can hold credentials
|
|
151
|
+
pretty_exceptions_show_locals=False,
|
|
133
152
|
help="CLI to manage data contracts. Documentation: https://docs.datacontract.com",
|
|
134
153
|
epilog="Read the full documentation at https://docs.datacontract.com",
|
|
135
154
|
)
|
|
@@ -10,14 +10,15 @@ from datacontract.cli import (
|
|
|
10
10
|
_print_logs,
|
|
11
11
|
_print_publish_failure,
|
|
12
12
|
app,
|
|
13
|
+
config_with_custom_quality_checks,
|
|
13
14
|
console,
|
|
15
|
+
custom_quality_checks_option,
|
|
14
16
|
debug_option,
|
|
15
17
|
enable_debug_logging,
|
|
16
18
|
inline_references_option,
|
|
17
19
|
resolve_output_format,
|
|
18
20
|
validate_publish_url,
|
|
19
21
|
)
|
|
20
|
-
from datacontract.config import cli_config
|
|
21
22
|
from datacontract.data_contract import DataContract
|
|
22
23
|
from datacontract.output.ci_output import write_ci_output, write_ci_summary, write_json_results
|
|
23
24
|
from datacontract.output.output_format import OutputFormat
|
|
@@ -80,6 +81,7 @@ def ci(
|
|
|
80
81
|
bool,
|
|
81
82
|
typer.Option(help="SSL verification when publishing the data contract."),
|
|
82
83
|
] = True,
|
|
84
|
+
custom_quality_checks: custom_quality_checks_option = None,
|
|
83
85
|
inline_references: inline_references_option = True,
|
|
84
86
|
debug: debug_option = None,
|
|
85
87
|
):
|
|
@@ -104,6 +106,7 @@ def ci(
|
|
|
104
106
|
# Plain text output for CI logs; --json sends human output to stderr.
|
|
105
107
|
out = Console(stderr=True, no_color=True) if json_output else Console(no_color=True)
|
|
106
108
|
|
|
109
|
+
config = config_with_custom_quality_checks(custom_quality_checks)
|
|
107
110
|
results = []
|
|
108
111
|
fail_results = {
|
|
109
112
|
"warning": {"warning", "failed", "error"},
|
|
@@ -115,7 +118,7 @@ def ci(
|
|
|
115
118
|
for location in locations:
|
|
116
119
|
out.print(f"Testing {location}")
|
|
117
120
|
run = DataContract(
|
|
118
|
-
config=
|
|
121
|
+
config=config,
|
|
119
122
|
data_contract_file=location,
|
|
120
123
|
schema_location=schema,
|
|
121
124
|
publish_url=publish,
|
|
@@ -336,7 +336,7 @@ def edit(
|
|
|
336
336
|
The server also acts as the editor's test runner: "Run test" in the editor executes
|
|
337
337
|
the data contract tests locally against the servers defined in the data contract.
|
|
338
338
|
Credentials for the data sources must be provided as environment variables, see
|
|
339
|
-
https://
|
|
339
|
+
https://docs.datacontract.com/testing
|
|
340
340
|
"""
|
|
341
341
|
enable_debug_logging(debug)
|
|
342
342
|
|
|
@@ -306,6 +306,24 @@ def export_jsonschema(
|
|
|
306
306
|
_export(ExportFormat.jsonschema, location, output, server, schema_name, schema, inline_references=inline_references)
|
|
307
307
|
|
|
308
308
|
|
|
309
|
+
@export_app.command(
|
|
310
|
+
name="xsd",
|
|
311
|
+
epilog="Example: datacontract export xsd datacontract.yaml --output schema.xsd",
|
|
312
|
+
)
|
|
313
|
+
def export_xsd(
|
|
314
|
+
location: location_arg = "datacontract.yaml",
|
|
315
|
+
output: output_option = None,
|
|
316
|
+
server: server_option = None,
|
|
317
|
+
schema_name: schema_name_option = "all",
|
|
318
|
+
schema: schema_option = None,
|
|
319
|
+
inline_references: inline_references_option = True,
|
|
320
|
+
debug: debug_option = None,
|
|
321
|
+
):
|
|
322
|
+
"""Export a data contract to an XML Schema (XSD)."""
|
|
323
|
+
enable_debug_logging(debug)
|
|
324
|
+
_export(ExportFormat.xsd, location, output, server, schema_name, schema, inline_references=inline_references)
|
|
325
|
+
|
|
326
|
+
|
|
309
327
|
@export_app.command(
|
|
310
328
|
name="pydantic-model",
|
|
311
329
|
epilog="Example: datacontract export pydantic-model datacontract.yaml --output models.py",
|
|
@@ -316,6 +316,26 @@ def import_jsonschema(
|
|
|
316
316
|
_write_result(result, output)
|
|
317
317
|
|
|
318
318
|
|
|
319
|
+
@import_app.command(
|
|
320
|
+
name="xsd",
|
|
321
|
+
epilog="Example: datacontract import xsd --source schema.xsd --output datacontract.yaml",
|
|
322
|
+
)
|
|
323
|
+
def import_xsd(
|
|
324
|
+
source: Annotated[Optional[str], typer.Option(help="Path to the XML Schema (XSD) file.")] = None,
|
|
325
|
+
output: output_option = None,
|
|
326
|
+
schema: schema_option = None,
|
|
327
|
+
owner: owner_option = None,
|
|
328
|
+
id: id_option = None,
|
|
329
|
+
debug: debug_option = None,
|
|
330
|
+
):
|
|
331
|
+
"""Import a data contract from an XML Schema (XSD) file."""
|
|
332
|
+
enable_debug_logging(debug)
|
|
333
|
+
result = DataContract.import_from_source(
|
|
334
|
+
config=cli_config(), format="xsd", source=source, schema=schema, owner=owner, id=id
|
|
335
|
+
)
|
|
336
|
+
_write_result(result, output)
|
|
337
|
+
|
|
338
|
+
|
|
319
339
|
@import_app.command(
|
|
320
340
|
name="json",
|
|
321
341
|
epilog="Example: datacontract import json --source data.json --output datacontract.yaml",
|
|
@@ -835,6 +855,70 @@ def import_mysql(
|
|
|
835
855
|
_write_result(result, output)
|
|
836
856
|
|
|
837
857
|
|
|
858
|
+
@import_app.command(
|
|
859
|
+
name="clickhouse",
|
|
860
|
+
epilog="Example: datacontract import clickhouse --source localhost --database default --output datacontract.yaml",
|
|
861
|
+
)
|
|
862
|
+
def import_clickhouse(
|
|
863
|
+
source: Annotated[Optional[str], typer.Option(help="The host of the ClickHouse server.")] = None,
|
|
864
|
+
port: Annotated[Optional[int], typer.Option(help="The ClickHouse HTTP port (default 8123).")] = None,
|
|
865
|
+
database: database_option = None,
|
|
866
|
+
table: Annotated[
|
|
867
|
+
Optional[List[str]],
|
|
868
|
+
typer.Option(help="Name of a table to import (repeat for multiple tables, omit for all tables)."),
|
|
869
|
+
] = None,
|
|
870
|
+
output: output_option = None,
|
|
871
|
+
owner: owner_option = None,
|
|
872
|
+
id: id_option = None,
|
|
873
|
+
debug: debug_option = None,
|
|
874
|
+
):
|
|
875
|
+
"""Import a data contract from a ClickHouse database."""
|
|
876
|
+
enable_debug_logging(debug)
|
|
877
|
+
result = DataContract.import_from_source(
|
|
878
|
+
config=cli_config(),
|
|
879
|
+
format="clickhouse",
|
|
880
|
+
source=source,
|
|
881
|
+
port=port,
|
|
882
|
+
database=database,
|
|
883
|
+
clickhouse_table=table,
|
|
884
|
+
owner=owner,
|
|
885
|
+
id=id,
|
|
886
|
+
)
|
|
887
|
+
_write_result(result, output)
|
|
888
|
+
|
|
889
|
+
|
|
890
|
+
@import_app.command(
|
|
891
|
+
name="hive",
|
|
892
|
+
epilog="Example: datacontract import hive --source localhost --database default --output datacontract.yaml",
|
|
893
|
+
)
|
|
894
|
+
def import_hive(
|
|
895
|
+
source: Annotated[Optional[str], typer.Option(help="The host of the HiveServer2.")] = None,
|
|
896
|
+
port: Annotated[Optional[int], typer.Option(help="The HiveServer2 port (default 10000).")] = None,
|
|
897
|
+
database: database_option = None,
|
|
898
|
+
table: Annotated[
|
|
899
|
+
Optional[List[str]],
|
|
900
|
+
typer.Option(help="Name of a table to import (repeat for multiple tables, omit for all tables)."),
|
|
901
|
+
] = None,
|
|
902
|
+
output: output_option = None,
|
|
903
|
+
owner: owner_option = None,
|
|
904
|
+
id: id_option = None,
|
|
905
|
+
debug: debug_option = None,
|
|
906
|
+
):
|
|
907
|
+
"""Import a data contract from a Hive database."""
|
|
908
|
+
enable_debug_logging(debug)
|
|
909
|
+
result = DataContract.import_from_source(
|
|
910
|
+
config=cli_config(),
|
|
911
|
+
format="hive",
|
|
912
|
+
source=source,
|
|
913
|
+
port=port,
|
|
914
|
+
database=database,
|
|
915
|
+
hive_table=table,
|
|
916
|
+
owner=owner,
|
|
917
|
+
id=id,
|
|
918
|
+
)
|
|
919
|
+
_write_result(result, output)
|
|
920
|
+
|
|
921
|
+
|
|
838
922
|
@import_app.command(
|
|
839
923
|
name="s3",
|
|
840
924
|
epilog="Example: datacontract import s3 --source s3://my-bucket/orders/*.json --output datacontract.yaml",
|
|
@@ -958,3 +1042,29 @@ def import_odata(
|
|
|
958
1042
|
id=id,
|
|
959
1043
|
)
|
|
960
1044
|
_write_result(result, output)
|
|
1045
|
+
|
|
1046
|
+
|
|
1047
|
+
@import_app.command(
|
|
1048
|
+
name="openapi",
|
|
1049
|
+
epilog="Example: datacontract import openapi --source openapi.yaml --operation listOrders --output datacontract.yaml",
|
|
1050
|
+
)
|
|
1051
|
+
def import_openapi(
|
|
1052
|
+
source: Annotated[Optional[str], typer.Option(help="Path to the OpenAPI 3.x document (YAML or JSON).")] = None,
|
|
1053
|
+
operation: Annotated[
|
|
1054
|
+
Optional[str],
|
|
1055
|
+
typer.Option(
|
|
1056
|
+
help="The GET operation to import, by operationId or path (e.g. listOrders or /orders). "
|
|
1057
|
+
"Required when the document has more than one GET operation."
|
|
1058
|
+
),
|
|
1059
|
+
] = None,
|
|
1060
|
+
output: output_option = None,
|
|
1061
|
+
owner: owner_option = None,
|
|
1062
|
+
id: id_option = None,
|
|
1063
|
+
debug: debug_option = None,
|
|
1064
|
+
):
|
|
1065
|
+
"""Import a data contract from the response of a GET operation in an OpenAPI 3.x document."""
|
|
1066
|
+
enable_debug_logging(debug)
|
|
1067
|
+
result = DataContract.import_from_source(
|
|
1068
|
+
config=cli_config(), format="openapi", source=source, openapi_operation=operation, owner=owner, id=id
|
|
1069
|
+
)
|
|
1070
|
+
_write_result(result, output)
|
|
@@ -10,7 +10,9 @@ from datacontract.cli import (
|
|
|
10
10
|
_print_logs,
|
|
11
11
|
_print_publish_failure,
|
|
12
12
|
app,
|
|
13
|
+
config_with_custom_quality_checks,
|
|
13
14
|
console,
|
|
15
|
+
custom_quality_checks_option,
|
|
14
16
|
debug_option,
|
|
15
17
|
enable_debug_logging,
|
|
16
18
|
inline_references_option,
|
|
@@ -200,6 +202,7 @@ def test(
|
|
|
200
202
|
bool,
|
|
201
203
|
typer.Option(help="SSL verification when publishing the data contract."),
|
|
202
204
|
] = True,
|
|
205
|
+
custom_quality_checks: custom_quality_checks_option = None,
|
|
203
206
|
inline_references: inline_references_option = True,
|
|
204
207
|
debug: debug_option = None,
|
|
205
208
|
):
|
|
@@ -231,7 +234,7 @@ def test(
|
|
|
231
234
|
if server == "all":
|
|
232
235
|
server = None
|
|
233
236
|
run = DataContract(
|
|
234
|
-
config=
|
|
237
|
+
config=config_with_custom_quality_checks(custom_quality_checks),
|
|
235
238
|
data_contract_file=location,
|
|
236
239
|
schema_location=schema,
|
|
237
240
|
publish_test_results=publish_test_results,
|