datacontract-cli 0.10.34__tar.gz → 0.10.36__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.
Potentially problematic release.
This version of datacontract-cli might be problematic. Click here for more details.
- {datacontract_cli-0.10.34/datacontract_cli.egg-info → datacontract_cli-0.10.36}/PKG-INFO +68 -56
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/README.md +59 -47
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/api.py +10 -3
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/cli.py +5 -3
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/data_contract.py +18 -51
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/data_contract_checks.py +280 -19
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/fastjsonschema/check_jsonschema.py +29 -19
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/dbt_converter.py +30 -4
- datacontract_cli-0.10.36/datacontract/export/dqx_converter.py +126 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/excel_exporter.py +3 -3
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/exporter.py +1 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/exporter_factory.py +6 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/markdown_converter.py +35 -16
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/mermaid_exporter.py +24 -11
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/rdf_converter.py +2 -2
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/spark_converter.py +28 -3
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/sql_type_converter.py +6 -4
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/odcs_v3_importer.py +100 -19
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/unity_importer.py +16 -11
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/init/init_template.py +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/lint/resolve.py +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/lint/schema.py +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.1.0.init.yaml +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.2.0.init.yaml +1 -1
- datacontract_cli-0.10.36/datacontract/schemas/datacontract-1.2.1.init.yaml +91 -0
- datacontract_cli-0.10.36/datacontract/schemas/datacontract-1.2.1.schema.json +2058 -0
- datacontract_cli-0.10.36/datacontract/schemas/odcs-3.0.2.schema.json +2382 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/datacontract_odcs.html +60 -41
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36/datacontract_cli.egg-info}/PKG-INFO +68 -56
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/SOURCES.txt +6 -12
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/requires.txt +8 -8
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/pyproject.toml +9 -9
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_api.py +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_duckdb_json.py +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_bigquery.py +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_complex_data_contract.py +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_dbml.py +2 -2
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_dbt_models.py +125 -0
- datacontract_cli-0.10.36/tests/test_export_dqx.py +212 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_rdf.py +6 -6
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_sodacl.py +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_spark.py +3 -2
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_avro.py +18 -18
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_bigquery.py +4 -4
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_csv.py +3 -3
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_dbml.py +3 -3
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_dbt.py +12 -12
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_glue.py +6 -6
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_iceberg.py +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_json.py +6 -6
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_jsonschema.py +6 -6
- datacontract_cli-0.10.36/tests/test_import_odcs_v3.py +123 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_parquet.py +3 -3
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_protobuf.py +3 -3
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_spark.py +5 -5
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_sql_postgres.py +6 -6
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_sql_sqlserver.py +3 -3
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_unity_file.py +5 -5
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_lint.py +2 -2
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_resolve.py +7 -7
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_roundtrip_jsonschema.py +1 -1
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_bigquery.py +14 -0
- datacontract_cli-0.10.36/tests/test_test_dataframe.py +176 -0
- datacontract_cli-0.10.36/tests/test_test_local_json_nd.py +19 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_quality.py +4 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_delta.py +2 -4
- datacontract_cli-0.10.34/datacontract/lint/lint.py +0 -142
- datacontract_cli-0.10.34/datacontract/lint/linters/description_linter.py +0 -33
- datacontract_cli-0.10.34/datacontract/lint/linters/field_pattern_linter.py +0 -34
- datacontract_cli-0.10.34/datacontract/lint/linters/field_reference_linter.py +0 -47
- datacontract_cli-0.10.34/datacontract/lint/linters/notice_period_linter.py +0 -55
- datacontract_cli-0.10.34/datacontract/lint/linters/valid_constraints_linter.py +0 -100
- datacontract_cli-0.10.34/datacontract/output/__init__.py +0 -0
- datacontract_cli-0.10.34/tests/test_documentation_linter.py +0 -48
- datacontract_cli-0.10.34/tests/test_field_constraint_linter.py +0 -68
- datacontract_cli-0.10.34/tests/test_field_pattern_linter.py +0 -42
- datacontract_cli-0.10.34/tests/test_field_reference_linter.py +0 -56
- datacontract_cli-0.10.34/tests/test_import_odcs_v3.py +0 -48
- datacontract_cli-0.10.34/tests/test_notice_period_linter.py +0 -47
- datacontract_cli-0.10.34/tests/test_test_dataframe.py +0 -107
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/LICENSE +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/MANIFEST.in +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/__init__.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/breaking/breaking.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/breaking/breaking_change.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/breaking/breaking_rules.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/catalog/catalog.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/data_contract_test.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/__init__.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/check_soda_execute.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/athena.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/bigquery.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/databricks.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/kafka.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/postgres.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/snowflake.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/sqlserver.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/trino.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/avro_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/avro_idl_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/bigquery_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/custom_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/data_caterer_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/dbml_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/go_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/great_expectations_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/iceberg_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/jsonschema_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/protobuf_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/pydantic_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/sodacl_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/sql_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/sqlalchemy_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/terraform_converter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/avro_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/excel_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/odcs_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/spark_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/integration/datamesh_manager.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/lint/files.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/model/data_contract_specification/__init__.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/model/run.py +0 -0
- {datacontract_cli-0.10.34/datacontract/lint/linters → datacontract_cli-0.10.36/datacontract/output}/__init__.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/output/test_results_writer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/py.typed +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/index.html +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/setup.cfg +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_breaking.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_catalog.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_changelog.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_cli.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_description_linter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_avro.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_custom.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_excel.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_go.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_html.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_sql.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_terraform.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_excel.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_integration_datameshmanager.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_spec_fields_field.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_spec_ref.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_api.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_athena_iceberg.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_delta.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_postgres.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_trino.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.36
|
|
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@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: >=3.10
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: typer<0.
|
|
14
|
+
Requires-Dist: typer<0.20,>=0.15.1
|
|
15
15
|
Requires-Dist: pydantic<2.12.0,>=2.8.2
|
|
16
16
|
Requires-Dist: pyyaml~=6.0.1
|
|
17
17
|
Requires-Dist: requests<2.33,>=2.31
|
|
@@ -28,7 +28,7 @@ Requires-Dist: python-dotenv<2.0.0,>=1.0.0
|
|
|
28
28
|
Requires-Dist: boto3<2.0.0,>=1.34.41
|
|
29
29
|
Requires-Dist: Jinja2<4.0.0,>=3.1.5
|
|
30
30
|
Requires-Dist: jinja_partials<1.0.0,>=0.2.1
|
|
31
|
-
Requires-Dist: datacontract-specification<2.0.0,>=1.2.
|
|
31
|
+
Requires-Dist: datacontract-specification<2.0.0,>=1.2.3
|
|
32
32
|
Requires-Dist: open-data-contract-standard<4.0.0,>=3.0.4
|
|
33
33
|
Provides-Extra: avro
|
|
34
34
|
Requires-Dist: avro==1.12.0; extra == "avro"
|
|
@@ -42,7 +42,7 @@ Provides-Extra: databricks
|
|
|
42
42
|
Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
|
|
43
43
|
Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
|
|
44
44
|
Requires-Dist: databricks-sql-connector<4.1.0,>=3.7.0; extra == "databricks"
|
|
45
|
-
Requires-Dist: databricks-sdk<0.
|
|
45
|
+
Requires-Dist: databricks-sdk<0.68.0; extra == "databricks"
|
|
46
46
|
Requires-Dist: pyspark<4.0.0,>=3.5.5; extra == "databricks"
|
|
47
47
|
Provides-Extra: iceberg
|
|
48
48
|
Requires-Dist: pyiceberg==0.9.1; extra == "iceberg"
|
|
@@ -54,9 +54,9 @@ Provides-Extra: postgres
|
|
|
54
54
|
Requires-Dist: soda-core-postgres<3.6.0,>=3.3.20; extra == "postgres"
|
|
55
55
|
Provides-Extra: s3
|
|
56
56
|
Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
|
|
57
|
-
Requires-Dist: aiobotocore<2.
|
|
57
|
+
Requires-Dist: aiobotocore<2.25.0,>=2.17.0; extra == "s3"
|
|
58
58
|
Provides-Extra: snowflake
|
|
59
|
-
Requires-Dist: snowflake-connector-python[pandas]<
|
|
59
|
+
Requires-Dist: snowflake-connector-python[pandas]<4.1,>=3.6; extra == "snowflake"
|
|
60
60
|
Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
|
|
61
61
|
Provides-Extra: sqlserver
|
|
62
62
|
Requires-Dist: soda-core-sqlserver<3.6.0,>=3.3.20; extra == "sqlserver"
|
|
@@ -83,15 +83,15 @@ Provides-Extra: dev
|
|
|
83
83
|
Requires-Dist: datacontract-cli[all]; extra == "dev"
|
|
84
84
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
85
85
|
Requires-Dist: kafka-python; extra == "dev"
|
|
86
|
-
Requires-Dist: moto==5.1.
|
|
86
|
+
Requires-Dist: moto==5.1.13; extra == "dev"
|
|
87
87
|
Requires-Dist: pandas>=2.1.0; extra == "dev"
|
|
88
|
-
Requires-Dist: pre-commit<4.
|
|
88
|
+
Requires-Dist: pre-commit<4.4.0,>=3.7.1; extra == "dev"
|
|
89
89
|
Requires-Dist: pytest; extra == "dev"
|
|
90
90
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
91
91
|
Requires-Dist: pymssql==2.3.7; extra == "dev"
|
|
92
92
|
Requires-Dist: ruff; extra == "dev"
|
|
93
93
|
Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.12.0; extra == "dev"
|
|
94
|
-
Requires-Dist: trino==0.
|
|
94
|
+
Requires-Dist: trino==0.336.0; extra == "dev"
|
|
95
95
|
Dynamic: license-file
|
|
96
96
|
|
|
97
97
|
# Data Contract CLI
|
|
@@ -119,9 +119,9 @@ We have a _servers_ section with endpoint details to the S3 bucket, _models_ for
|
|
|
119
119
|
|
|
120
120
|
This data contract contains all information to connect to S3 and check that the actual data meets the defined schema and quality requirements. We can use this information to test if the actual data product in S3 is compliant to the data contract.
|
|
121
121
|
|
|
122
|
-
Let's use [
|
|
122
|
+
Let's use [uv](https://docs.astral.sh/uv/) to install the CLI (or use the [Docker image](#docker)),
|
|
123
123
|
```bash
|
|
124
|
-
$
|
|
124
|
+
$ uv tool install --python python3.11 'datacontract-cli[all]'
|
|
125
125
|
```
|
|
126
126
|
|
|
127
127
|
|
|
@@ -257,6 +257,14 @@ if not run.has_passed():
|
|
|
257
257
|
|
|
258
258
|
Choose the most appropriate installation method for your needs:
|
|
259
259
|
|
|
260
|
+
### uv
|
|
261
|
+
|
|
262
|
+
If you have [uv](https://docs.astral.sh/uv/) installed, you can run datacontract-cli directly without installing:
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
uv run --with 'datacontract-cli[all]' datacontract --version
|
|
266
|
+
```
|
|
267
|
+
|
|
260
268
|
### pip
|
|
261
269
|
Python 3.10, 3.11, and 3.12 are supported. We recommend to use Python 3.11.
|
|
262
270
|
|
|
@@ -1011,7 +1019,7 @@ models:
|
|
|
1011
1019
|
│ terraform|avro-idl|sql|sql-query|mer │
|
|
1012
1020
|
│ maid|html|go|bigquery|dbml|spark|sql │
|
|
1013
1021
|
│ alchemy|data-caterer|dcs|markdown|ic │
|
|
1014
|
-
│ eberg|custom|excel] │
|
|
1022
|
+
│ eberg|custom|excel|dqx] │
|
|
1015
1023
|
│ --output PATH Specify the file path where the │
|
|
1016
1024
|
│ exported data will be saved. If no │
|
|
1017
1025
|
│ path is provided, the output will be │
|
|
@@ -1057,35 +1065,36 @@ datacontract export --format html --output datacontract.html
|
|
|
1057
1065
|
|
|
1058
1066
|
Available export options:
|
|
1059
1067
|
|
|
1060
|
-
| Type | Description | Status
|
|
1061
|
-
|
|
1062
|
-
| `html` | Export to HTML | ✅
|
|
1063
|
-
| `jsonschema` | Export to JSON Schema | ✅
|
|
1064
|
-
| `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅
|
|
1065
|
-
| `sodacl` | Export to SodaCL quality checks in YAML format | ✅
|
|
1066
|
-
| `dbt` | Export to dbt models in YAML format | ✅
|
|
1067
|
-
| `dbt-sources` | Export to dbt sources in YAML format | ✅
|
|
1068
|
-
| `dbt-staging-sql` | Export to dbt staging SQL models | ✅
|
|
1069
|
-
| `rdf` | Export data contract to RDF representation in N3 format | ✅
|
|
1070
|
-
| `avro` | Export to AVRO models | ✅
|
|
1071
|
-
| `protobuf` | Export to Protobuf | ✅
|
|
1072
|
-
| `terraform` | Export to terraform resources | ✅
|
|
1073
|
-
| `sql` | Export to SQL DDL | ✅
|
|
1074
|
-
| `sql-query` | Export to SQL Query | ✅
|
|
1075
|
-
| `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅
|
|
1076
|
-
| `bigquery` | Export to BigQuery Schemas | ✅
|
|
1077
|
-
| `go` | Export to Go types | ✅
|
|
1078
|
-
| `pydantic-model` | Export to pydantic models | ✅
|
|
1079
|
-
| `DBML` | Export to a DBML Diagram description | ✅
|
|
1080
|
-
| `spark` | Export to a Spark StructType | ✅
|
|
1081
|
-
| `sqlalchemy` | Export to SQLAlchemy Models | ✅
|
|
1082
|
-
| `data-caterer` | Export to Data Caterer in YAML format | ✅
|
|
1083
|
-
| `dcs` | Export to Data Contract Specification in YAML format | ✅
|
|
1084
|
-
| `markdown` | Export to Markdown | ✅
|
|
1068
|
+
| Type | Description | Status |
|
|
1069
|
+
|----------------------|---------------------------------------------------------|---------|
|
|
1070
|
+
| `html` | Export to HTML | ✅ |
|
|
1071
|
+
| `jsonschema` | Export to JSON Schema | ✅ |
|
|
1072
|
+
| `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅ |
|
|
1073
|
+
| `sodacl` | Export to SodaCL quality checks in YAML format | ✅ |
|
|
1074
|
+
| `dbt` | Export to dbt models in YAML format | ✅ |
|
|
1075
|
+
| `dbt-sources` | Export to dbt sources in YAML format | ✅ |
|
|
1076
|
+
| `dbt-staging-sql` | Export to dbt staging SQL models | ✅ |
|
|
1077
|
+
| `rdf` | Export data contract to RDF representation in N3 format | ✅ |
|
|
1078
|
+
| `avro` | Export to AVRO models | ✅ |
|
|
1079
|
+
| `protobuf` | Export to Protobuf | ✅ |
|
|
1080
|
+
| `terraform` | Export to terraform resources | ✅ |
|
|
1081
|
+
| `sql` | Export to SQL DDL | ✅ |
|
|
1082
|
+
| `sql-query` | Export to SQL Query | ✅ |
|
|
1083
|
+
| `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅ |
|
|
1084
|
+
| `bigquery` | Export to BigQuery Schemas | ✅ |
|
|
1085
|
+
| `go` | Export to Go types | ✅ |
|
|
1086
|
+
| `pydantic-model` | Export to pydantic models | ✅ |
|
|
1087
|
+
| `DBML` | Export to a DBML Diagram description | ✅ |
|
|
1088
|
+
| `spark` | Export to a Spark StructType | ✅ |
|
|
1089
|
+
| `sqlalchemy` | Export to SQLAlchemy Models | ✅ |
|
|
1090
|
+
| `data-caterer` | Export to Data Caterer in YAML format | ✅ |
|
|
1091
|
+
| `dcs` | Export to Data Contract Specification in YAML format | ✅ |
|
|
1092
|
+
| `markdown` | Export to Markdown | ✅ |
|
|
1085
1093
|
| `iceberg` | Export to an Iceberg JSON Schema Definition | partial |
|
|
1086
|
-
| `excel` | Export to ODCS Excel Template | ✅
|
|
1087
|
-
| `custom` | Export to Custom format with Jinja | ✅
|
|
1088
|
-
|
|
|
1094
|
+
| `excel` | Export to ODCS Excel Template | ✅ |
|
|
1095
|
+
| `custom` | Export to Custom format with Jinja | ✅ |
|
|
1096
|
+
| `dqx` | Export to DQX in YAML format | ✅ |
|
|
1097
|
+
| Missing something? | Please create an issue on GitHub | TBD |
|
|
1089
1098
|
|
|
1090
1099
|
#### SQL
|
|
1091
1100
|
|
|
@@ -1531,18 +1540,22 @@ datacontract import --format bigquery --bigquery-project <project_id> --bigquery
|
|
|
1531
1540
|
```
|
|
1532
1541
|
|
|
1533
1542
|
#### Unity Catalog
|
|
1534
|
-
|
|
1535
1543
|
```bash
|
|
1536
1544
|
# Example import from a Unity Catalog JSON file
|
|
1537
1545
|
datacontract import --format unity --source my_unity_table.json
|
|
1538
1546
|
```
|
|
1539
1547
|
|
|
1540
1548
|
```bash
|
|
1541
|
-
# Example import single table from Unity Catalog via HTTP endpoint
|
|
1549
|
+
# Example import single table from Unity Catalog via HTTP endpoint using PAT
|
|
1542
1550
|
export DATACONTRACT_DATABRICKS_SERVER_HOSTNAME="https://xyz.cloud.databricks.com"
|
|
1543
|
-
export DATACONTRACT_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/b053a331fa014fb4"
|
|
1544
1551
|
export DATACONTRACT_DATABRICKS_TOKEN=<token>
|
|
1545
1552
|
datacontract import --format unity --unity-table-full-name <table_full_name>
|
|
1553
|
+
```
|
|
1554
|
+
Please Refer to [Databricks documentation](https://docs.databricks.com/aws/en/dev-tools/auth/unified-auth) on how to set up a profile
|
|
1555
|
+
```bash
|
|
1556
|
+
# Example import single table from Unity Catalog via HTTP endpoint using Profile
|
|
1557
|
+
export DATACONTRACT_DATABRICKS_PROFILE="my-profile"
|
|
1558
|
+
datacontract import --format unity --unity-table-full-name <table_full_name>
|
|
1546
1559
|
```
|
|
1547
1560
|
|
|
1548
1561
|
#### dbt
|
|
@@ -1601,20 +1614,20 @@ datacontract import --format spark --source "users,orders"
|
|
|
1601
1614
|
|
|
1602
1615
|
```bash
|
|
1603
1616
|
# Example: Import Spark table
|
|
1604
|
-
DataContract
|
|
1605
|
-
DataContract
|
|
1617
|
+
DataContract.import_from_source("spark", "users")
|
|
1618
|
+
DataContract.import_from_source(format = "spark", source = "users")
|
|
1606
1619
|
|
|
1607
1620
|
# Example: Import Spark dataframe
|
|
1608
|
-
DataContract
|
|
1609
|
-
DataContract
|
|
1621
|
+
DataContract.import_from_source("spark", "users", dataframe = df_user)
|
|
1622
|
+
DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user)
|
|
1610
1623
|
|
|
1611
1624
|
# Example: Import Spark table + table description
|
|
1612
|
-
DataContract
|
|
1613
|
-
DataContract
|
|
1625
|
+
DataContract.import_from_source("spark", "users", description = "description")
|
|
1626
|
+
DataContract.import_from_source(format = "spark", source = "users", description = "description")
|
|
1614
1627
|
|
|
1615
1628
|
# Example: Import Spark dataframe + table description
|
|
1616
|
-
DataContract
|
|
1617
|
-
DataContract
|
|
1629
|
+
DataContract.import_from_source("spark", "users", dataframe = df_user, description = "description")
|
|
1630
|
+
DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
|
|
1618
1631
|
```
|
|
1619
1632
|
|
|
1620
1633
|
#### DBML
|
|
@@ -1859,8 +1872,7 @@ Create a data contract based on the actual data. This is the fastest way to get
|
|
|
1859
1872
|
$ datacontract test
|
|
1860
1873
|
```
|
|
1861
1874
|
|
|
1862
|
-
3.
|
|
1863
|
-
probably forgot to document some fields and add the terms and conditions.
|
|
1875
|
+
3. Validate that the `datacontract.yaml` is correctly formatted and adheres to the Data Contract Specification.
|
|
1864
1876
|
```bash
|
|
1865
1877
|
$ datacontract lint
|
|
1866
1878
|
```
|
|
@@ -1881,8 +1893,7 @@ Create a data contract based on the requirements from use cases.
|
|
|
1881
1893
|
```
|
|
1882
1894
|
|
|
1883
1895
|
2. Create the model and quality guarantees based on your business requirements. Fill in the terms,
|
|
1884
|
-
descriptions, etc.
|
|
1885
|
-
linter.
|
|
1896
|
+
descriptions, etc. Validate that your `datacontract.yaml` is correctly formatted.
|
|
1886
1897
|
```bash
|
|
1887
1898
|
$ datacontract lint
|
|
1888
1899
|
```
|
|
@@ -2076,7 +2087,7 @@ if __name__ == "__main__":
|
|
|
2076
2087
|
Output
|
|
2077
2088
|
|
|
2078
2089
|
```yaml
|
|
2079
|
-
dataContractSpecification: 1.2.
|
|
2090
|
+
dataContractSpecification: 1.2.1
|
|
2080
2091
|
id: uuid-custom
|
|
2081
2092
|
info:
|
|
2082
2093
|
title: my_custom_imported_data
|
|
@@ -2102,6 +2113,7 @@ models:
|
|
|
2102
2113
|
```bash
|
|
2103
2114
|
# make sure uv is installed
|
|
2104
2115
|
uv python pin 3.11
|
|
2116
|
+
uv venv
|
|
2105
2117
|
uv pip install -e '.[dev]'
|
|
2106
2118
|
uv run ruff check
|
|
2107
2119
|
uv run pytest
|
|
@@ -23,9 +23,9 @@ We have a _servers_ section with endpoint details to the S3 bucket, _models_ for
|
|
|
23
23
|
|
|
24
24
|
This data contract contains all information to connect to S3 and check that the actual data meets the defined schema and quality requirements. We can use this information to test if the actual data product in S3 is compliant to the data contract.
|
|
25
25
|
|
|
26
|
-
Let's use [
|
|
26
|
+
Let's use [uv](https://docs.astral.sh/uv/) to install the CLI (or use the [Docker image](#docker)),
|
|
27
27
|
```bash
|
|
28
|
-
$
|
|
28
|
+
$ uv tool install --python python3.11 'datacontract-cli[all]'
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
|
|
@@ -161,6 +161,14 @@ if not run.has_passed():
|
|
|
161
161
|
|
|
162
162
|
Choose the most appropriate installation method for your needs:
|
|
163
163
|
|
|
164
|
+
### uv
|
|
165
|
+
|
|
166
|
+
If you have [uv](https://docs.astral.sh/uv/) installed, you can run datacontract-cli directly without installing:
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
uv run --with 'datacontract-cli[all]' datacontract --version
|
|
170
|
+
```
|
|
171
|
+
|
|
164
172
|
### pip
|
|
165
173
|
Python 3.10, 3.11, and 3.12 are supported. We recommend to use Python 3.11.
|
|
166
174
|
|
|
@@ -915,7 +923,7 @@ models:
|
|
|
915
923
|
│ terraform|avro-idl|sql|sql-query|mer │
|
|
916
924
|
│ maid|html|go|bigquery|dbml|spark|sql │
|
|
917
925
|
│ alchemy|data-caterer|dcs|markdown|ic │
|
|
918
|
-
│ eberg|custom|excel] │
|
|
926
|
+
│ eberg|custom|excel|dqx] │
|
|
919
927
|
│ --output PATH Specify the file path where the │
|
|
920
928
|
│ exported data will be saved. If no │
|
|
921
929
|
│ path is provided, the output will be │
|
|
@@ -961,35 +969,36 @@ datacontract export --format html --output datacontract.html
|
|
|
961
969
|
|
|
962
970
|
Available export options:
|
|
963
971
|
|
|
964
|
-
| Type | Description | Status
|
|
965
|
-
|
|
966
|
-
| `html` | Export to HTML | ✅
|
|
967
|
-
| `jsonschema` | Export to JSON Schema | ✅
|
|
968
|
-
| `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅
|
|
969
|
-
| `sodacl` | Export to SodaCL quality checks in YAML format | ✅
|
|
970
|
-
| `dbt` | Export to dbt models in YAML format | ✅
|
|
971
|
-
| `dbt-sources` | Export to dbt sources in YAML format | ✅
|
|
972
|
-
| `dbt-staging-sql` | Export to dbt staging SQL models | ✅
|
|
973
|
-
| `rdf` | Export data contract to RDF representation in N3 format | ✅
|
|
974
|
-
| `avro` | Export to AVRO models | ✅
|
|
975
|
-
| `protobuf` | Export to Protobuf | ✅
|
|
976
|
-
| `terraform` | Export to terraform resources | ✅
|
|
977
|
-
| `sql` | Export to SQL DDL | ✅
|
|
978
|
-
| `sql-query` | Export to SQL Query | ✅
|
|
979
|
-
| `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅
|
|
980
|
-
| `bigquery` | Export to BigQuery Schemas | ✅
|
|
981
|
-
| `go` | Export to Go types | ✅
|
|
982
|
-
| `pydantic-model` | Export to pydantic models | ✅
|
|
983
|
-
| `DBML` | Export to a DBML Diagram description | ✅
|
|
984
|
-
| `spark` | Export to a Spark StructType | ✅
|
|
985
|
-
| `sqlalchemy` | Export to SQLAlchemy Models | ✅
|
|
986
|
-
| `data-caterer` | Export to Data Caterer in YAML format | ✅
|
|
987
|
-
| `dcs` | Export to Data Contract Specification in YAML format | ✅
|
|
988
|
-
| `markdown` | Export to Markdown | ✅
|
|
972
|
+
| Type | Description | Status |
|
|
973
|
+
|----------------------|---------------------------------------------------------|---------|
|
|
974
|
+
| `html` | Export to HTML | ✅ |
|
|
975
|
+
| `jsonschema` | Export to JSON Schema | ✅ |
|
|
976
|
+
| `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅ |
|
|
977
|
+
| `sodacl` | Export to SodaCL quality checks in YAML format | ✅ |
|
|
978
|
+
| `dbt` | Export to dbt models in YAML format | ✅ |
|
|
979
|
+
| `dbt-sources` | Export to dbt sources in YAML format | ✅ |
|
|
980
|
+
| `dbt-staging-sql` | Export to dbt staging SQL models | ✅ |
|
|
981
|
+
| `rdf` | Export data contract to RDF representation in N3 format | ✅ |
|
|
982
|
+
| `avro` | Export to AVRO models | ✅ |
|
|
983
|
+
| `protobuf` | Export to Protobuf | ✅ |
|
|
984
|
+
| `terraform` | Export to terraform resources | ✅ |
|
|
985
|
+
| `sql` | Export to SQL DDL | ✅ |
|
|
986
|
+
| `sql-query` | Export to SQL Query | ✅ |
|
|
987
|
+
| `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅ |
|
|
988
|
+
| `bigquery` | Export to BigQuery Schemas | ✅ |
|
|
989
|
+
| `go` | Export to Go types | ✅ |
|
|
990
|
+
| `pydantic-model` | Export to pydantic models | ✅ |
|
|
991
|
+
| `DBML` | Export to a DBML Diagram description | ✅ |
|
|
992
|
+
| `spark` | Export to a Spark StructType | ✅ |
|
|
993
|
+
| `sqlalchemy` | Export to SQLAlchemy Models | ✅ |
|
|
994
|
+
| `data-caterer` | Export to Data Caterer in YAML format | ✅ |
|
|
995
|
+
| `dcs` | Export to Data Contract Specification in YAML format | ✅ |
|
|
996
|
+
| `markdown` | Export to Markdown | ✅ |
|
|
989
997
|
| `iceberg` | Export to an Iceberg JSON Schema Definition | partial |
|
|
990
|
-
| `excel` | Export to ODCS Excel Template | ✅
|
|
991
|
-
| `custom` | Export to Custom format with Jinja | ✅
|
|
992
|
-
|
|
|
998
|
+
| `excel` | Export to ODCS Excel Template | ✅ |
|
|
999
|
+
| `custom` | Export to Custom format with Jinja | ✅ |
|
|
1000
|
+
| `dqx` | Export to DQX in YAML format | ✅ |
|
|
1001
|
+
| Missing something? | Please create an issue on GitHub | TBD |
|
|
993
1002
|
|
|
994
1003
|
#### SQL
|
|
995
1004
|
|
|
@@ -1435,18 +1444,22 @@ datacontract import --format bigquery --bigquery-project <project_id> --bigquery
|
|
|
1435
1444
|
```
|
|
1436
1445
|
|
|
1437
1446
|
#### Unity Catalog
|
|
1438
|
-
|
|
1439
1447
|
```bash
|
|
1440
1448
|
# Example import from a Unity Catalog JSON file
|
|
1441
1449
|
datacontract import --format unity --source my_unity_table.json
|
|
1442
1450
|
```
|
|
1443
1451
|
|
|
1444
1452
|
```bash
|
|
1445
|
-
# Example import single table from Unity Catalog via HTTP endpoint
|
|
1453
|
+
# Example import single table from Unity Catalog via HTTP endpoint using PAT
|
|
1446
1454
|
export DATACONTRACT_DATABRICKS_SERVER_HOSTNAME="https://xyz.cloud.databricks.com"
|
|
1447
|
-
export DATACONTRACT_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/b053a331fa014fb4"
|
|
1448
1455
|
export DATACONTRACT_DATABRICKS_TOKEN=<token>
|
|
1449
1456
|
datacontract import --format unity --unity-table-full-name <table_full_name>
|
|
1457
|
+
```
|
|
1458
|
+
Please Refer to [Databricks documentation](https://docs.databricks.com/aws/en/dev-tools/auth/unified-auth) on how to set up a profile
|
|
1459
|
+
```bash
|
|
1460
|
+
# Example import single table from Unity Catalog via HTTP endpoint using Profile
|
|
1461
|
+
export DATACONTRACT_DATABRICKS_PROFILE="my-profile"
|
|
1462
|
+
datacontract import --format unity --unity-table-full-name <table_full_name>
|
|
1450
1463
|
```
|
|
1451
1464
|
|
|
1452
1465
|
#### dbt
|
|
@@ -1505,20 +1518,20 @@ datacontract import --format spark --source "users,orders"
|
|
|
1505
1518
|
|
|
1506
1519
|
```bash
|
|
1507
1520
|
# Example: Import Spark table
|
|
1508
|
-
DataContract
|
|
1509
|
-
DataContract
|
|
1521
|
+
DataContract.import_from_source("spark", "users")
|
|
1522
|
+
DataContract.import_from_source(format = "spark", source = "users")
|
|
1510
1523
|
|
|
1511
1524
|
# Example: Import Spark dataframe
|
|
1512
|
-
DataContract
|
|
1513
|
-
DataContract
|
|
1525
|
+
DataContract.import_from_source("spark", "users", dataframe = df_user)
|
|
1526
|
+
DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user)
|
|
1514
1527
|
|
|
1515
1528
|
# Example: Import Spark table + table description
|
|
1516
|
-
DataContract
|
|
1517
|
-
DataContract
|
|
1529
|
+
DataContract.import_from_source("spark", "users", description = "description")
|
|
1530
|
+
DataContract.import_from_source(format = "spark", source = "users", description = "description")
|
|
1518
1531
|
|
|
1519
1532
|
# Example: Import Spark dataframe + table description
|
|
1520
|
-
DataContract
|
|
1521
|
-
DataContract
|
|
1533
|
+
DataContract.import_from_source("spark", "users", dataframe = df_user, description = "description")
|
|
1534
|
+
DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
|
|
1522
1535
|
```
|
|
1523
1536
|
|
|
1524
1537
|
#### DBML
|
|
@@ -1763,8 +1776,7 @@ Create a data contract based on the actual data. This is the fastest way to get
|
|
|
1763
1776
|
$ datacontract test
|
|
1764
1777
|
```
|
|
1765
1778
|
|
|
1766
|
-
3.
|
|
1767
|
-
probably forgot to document some fields and add the terms and conditions.
|
|
1779
|
+
3. Validate that the `datacontract.yaml` is correctly formatted and adheres to the Data Contract Specification.
|
|
1768
1780
|
```bash
|
|
1769
1781
|
$ datacontract lint
|
|
1770
1782
|
```
|
|
@@ -1785,8 +1797,7 @@ Create a data contract based on the requirements from use cases.
|
|
|
1785
1797
|
```
|
|
1786
1798
|
|
|
1787
1799
|
2. Create the model and quality guarantees based on your business requirements. Fill in the terms,
|
|
1788
|
-
descriptions, etc.
|
|
1789
|
-
linter.
|
|
1800
|
+
descriptions, etc. Validate that your `datacontract.yaml` is correctly formatted.
|
|
1790
1801
|
```bash
|
|
1791
1802
|
$ datacontract lint
|
|
1792
1803
|
```
|
|
@@ -1980,7 +1991,7 @@ if __name__ == "__main__":
|
|
|
1980
1991
|
Output
|
|
1981
1992
|
|
|
1982
1993
|
```yaml
|
|
1983
|
-
dataContractSpecification: 1.2.
|
|
1994
|
+
dataContractSpecification: 1.2.1
|
|
1984
1995
|
id: uuid-custom
|
|
1985
1996
|
info:
|
|
1986
1997
|
title: my_custom_imported_data
|
|
@@ -2006,6 +2017,7 @@ models:
|
|
|
2006
2017
|
```bash
|
|
2007
2018
|
# make sure uv is installed
|
|
2008
2019
|
uv python pin 3.11
|
|
2020
|
+
uv venv
|
|
2009
2021
|
uv pip install -e '.[dev]'
|
|
2010
2022
|
uv run ruff check
|
|
2011
2023
|
uv run pytest
|
|
@@ -10,7 +10,7 @@ from fastapi.security.api_key import APIKeyHeader
|
|
|
10
10
|
from datacontract.data_contract import DataContract, ExportFormat
|
|
11
11
|
from datacontract.model.run import Run
|
|
12
12
|
|
|
13
|
-
DATA_CONTRACT_EXAMPLE_PAYLOAD = """dataContractSpecification: 1.2.
|
|
13
|
+
DATA_CONTRACT_EXAMPLE_PAYLOAD = """dataContractSpecification: 1.2.1
|
|
14
14
|
id: urn:datacontract:checkout:orders-latest
|
|
15
15
|
info:
|
|
16
16
|
title: Orders Latest
|
|
@@ -162,15 +162,22 @@ async def test(
|
|
|
162
162
|
server: Annotated[
|
|
163
163
|
str | None,
|
|
164
164
|
Query(
|
|
165
|
-
examples=["production"],
|
|
166
165
|
description="The server name to test. Optional, if there is only one server.",
|
|
166
|
+
examples=["production"],
|
|
167
|
+
),
|
|
168
|
+
] = None,
|
|
169
|
+
publish_url: Annotated[
|
|
170
|
+
str | None,
|
|
171
|
+
Query(
|
|
172
|
+
description="URL to publish test results. Optional, if you want to publish the test results to a Data Mesh Manager or Data Contract Manager. Example: https://api.datamesh-manager.com/api/test-results",
|
|
173
|
+
examples=["https://api.datamesh-manager.com/api/test-results"],
|
|
167
174
|
),
|
|
168
175
|
] = None,
|
|
169
176
|
) -> Run:
|
|
170
177
|
check_api_key(api_key)
|
|
171
178
|
logging.info("Testing data contract...")
|
|
172
179
|
logging.info(body)
|
|
173
|
-
return DataContract(data_contract_str=body, server=server).test()
|
|
180
|
+
return DataContract(data_contract_str=body, server=server, publish_url=publish_url).test()
|
|
174
181
|
|
|
175
182
|
|
|
176
183
|
@app.post(
|
|
@@ -126,8 +126,10 @@ def test(
|
|
|
126
126
|
"servers (default)."
|
|
127
127
|
),
|
|
128
128
|
] = "all",
|
|
129
|
-
publish_test_results: Annotated[
|
|
130
|
-
|
|
129
|
+
publish_test_results: Annotated[
|
|
130
|
+
bool, typer.Option(help="Deprecated. Use publish parameter. Publish the results after the test")
|
|
131
|
+
] = False,
|
|
132
|
+
publish: Annotated[str, typer.Option(help="The url to publish the results after the test.")] = None,
|
|
131
133
|
output: Annotated[
|
|
132
134
|
Path,
|
|
133
135
|
typer.Option(
|
|
@@ -329,7 +331,7 @@ def import_(
|
|
|
329
331
|
"""
|
|
330
332
|
Create a data contract from the given source location. Saves to file specified by `output` option if present, otherwise prints to stdout.
|
|
331
333
|
"""
|
|
332
|
-
result = DataContract
|
|
334
|
+
result = DataContract.import_from_source(
|
|
333
335
|
format=format,
|
|
334
336
|
source=source,
|
|
335
337
|
spec=spec,
|