datacontract-cli 0.10.33__tar.gz → 0.10.35__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.33 → datacontract_cli-0.10.35}/LICENSE +1 -1
- {datacontract_cli-0.10.33/datacontract_cli.egg-info → datacontract_cli-0.10.35}/PKG-INFO +126 -42
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/README.md +114 -32
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/api.py +9 -2
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/cli.py +4 -2
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/data_contract_checks.py +102 -59
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/data_contract_test.py +37 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/fastjsonschema/check_jsonschema.py +37 -19
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/check_soda_execute.py +6 -0
- datacontract_cli-0.10.35/datacontract/engines/soda/connections/athena.py +79 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/duckdb_connection.py +3 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/avro_converter.py +12 -2
- datacontract_cli-0.10.35/datacontract/export/dqx_converter.py +121 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/exporter.py +1 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/exporter_factory.py +6 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/markdown_converter.py +115 -5
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/mermaid_exporter.py +24 -11
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/spark_converter.py +28 -3
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/sql_type_converter.py +4 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/avro_importer.py +33 -7
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/odcs_v3_importer.py +30 -1
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/spark_importer.py +12 -1
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35/datacontract_cli.egg-info}/PKG-INFO +126 -42
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract_cli.egg-info/SOURCES.txt +6 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract_cli.egg-info/requires.txt +12 -9
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/pyproject.toml +14 -10
- datacontract_cli-0.10.35/tests/test_export_dqx.py +319 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_spark.py +3 -2
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_avro.py +38 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_spark.py +4 -2
- datacontract_cli-0.10.35/tests/test_test_api.py +55 -0
- datacontract_cli-0.10.35/tests/test_test_athena_iceberg.py +26 -0
- datacontract_cli-0.10.35/tests/test_test_local_json_nd.py +19 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_postgres.py +1 -1
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_quality.py +1 -1
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_sqlserver.py +1 -1
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_trino.py +1 -1
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/MANIFEST.in +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/__init__.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/breaking/breaking.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/breaking/breaking_change.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/breaking/breaking_rules.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/catalog/catalog.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/data_contract.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/__init__.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/bigquery.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/databricks.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/kafka.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/postgres.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/snowflake.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/sqlserver.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/trino.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/avro_idl_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/bigquery_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/custom_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/data_caterer_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/dbml_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/dbt_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/excel_exporter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/go_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/great_expectations_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/iceberg_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/jsonschema_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/protobuf_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/pydantic_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/rdf_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/sodacl_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/sql_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/sqlalchemy_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/terraform_converter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/excel_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/odcs_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/unity_importer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/integration/datamesh_manager.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/files.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/lint.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/__init__.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/description_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/field_pattern_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/field_reference_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/notice_period_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/valid_constraints_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/resolve.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/model/data_contract_specification/__init__.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/model/run.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/output/__init__.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/output/test_results_writer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/py.typed +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/datacontract_odcs.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/index.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/setup.cfg +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_api.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_breaking.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_catalog.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_changelog.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_cli.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_description_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_documentation_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_avro.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_custom.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_dbt_models.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_excel.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_go.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_html.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_rdf.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_sodacl.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_sql.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_terraform.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_field_constraint_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_field_pattern_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_field_reference_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_csv.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_dbt.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_excel.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_glue.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_json.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_jsonschema.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_odcs_v3.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_integration_datameshmanager.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_lint.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_notice_period_linter.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_resolve.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_spec_fields_field.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_spec_ref.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_dataframe.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_delta.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_snowflake.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.35
|
|
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
|
|
@@ -20,7 +20,7 @@ Requires-Dist: fastparquet<2025.0.0,>=2024.5.0
|
|
|
20
20
|
Requires-Dist: numpy<2.0.0,>=1.26.4
|
|
21
21
|
Requires-Dist: python-multipart<1.0.0,>=0.0.20
|
|
22
22
|
Requires-Dist: rich<15.0,>=13.7
|
|
23
|
-
Requires-Dist: sqlglot<
|
|
23
|
+
Requires-Dist: sqlglot<28.0.0,>=26.6.0
|
|
24
24
|
Requires-Dist: duckdb<2.0.0,>=1.0.0
|
|
25
25
|
Requires-Dist: soda-core-duckdb<3.6.0,>=3.3.20
|
|
26
26
|
Requires-Dist: setuptools>=60
|
|
@@ -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.64.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,12 +54,14 @@ 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]<3.
|
|
59
|
+
Requires-Dist: snowflake-connector-python[pandas]<3.17,>=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"
|
|
63
|
+
Provides-Extra: athena
|
|
64
|
+
Requires-Dist: soda-core-athena<3.6.0,>=3.3.20; extra == "athena"
|
|
63
65
|
Provides-Extra: trino
|
|
64
66
|
Requires-Dist: soda-core-trino<3.6.0,>=3.3.20; extra == "trino"
|
|
65
67
|
Provides-Extra: dbt
|
|
@@ -76,20 +78,20 @@ Requires-Dist: uvicorn==0.35.0; extra == "api"
|
|
|
76
78
|
Provides-Extra: protobuf
|
|
77
79
|
Requires-Dist: grpcio-tools>=1.53; extra == "protobuf"
|
|
78
80
|
Provides-Extra: all
|
|
79
|
-
Requires-Dist: datacontract-cli[api,bigquery,csv,databricks,dbml,dbt,excel,iceberg,kafka,parquet,postgres,protobuf,rdf,s3,snowflake,sqlserver,trino]; extra == "all"
|
|
81
|
+
Requires-Dist: datacontract-cli[api,athena,bigquery,csv,databricks,dbml,dbt,excel,iceberg,kafka,parquet,postgres,protobuf,rdf,s3,snowflake,sqlserver,trino]; extra == "all"
|
|
80
82
|
Provides-Extra: dev
|
|
81
83
|
Requires-Dist: datacontract-cli[all]; extra == "dev"
|
|
82
84
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
83
85
|
Requires-Dist: kafka-python; extra == "dev"
|
|
84
|
-
Requires-Dist: moto==5.1.
|
|
86
|
+
Requires-Dist: moto==5.1.10; extra == "dev"
|
|
85
87
|
Requires-Dist: pandas>=2.1.0; extra == "dev"
|
|
86
|
-
Requires-Dist: pre-commit<4.
|
|
88
|
+
Requires-Dist: pre-commit<4.4.0,>=3.7.1; extra == "dev"
|
|
87
89
|
Requires-Dist: pytest; extra == "dev"
|
|
88
90
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
89
91
|
Requires-Dist: pymssql==2.3.7; extra == "dev"
|
|
90
92
|
Requires-Dist: ruff; extra == "dev"
|
|
91
|
-
Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.
|
|
92
|
-
Requires-Dist: trino==0.
|
|
93
|
+
Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.12.0; extra == "dev"
|
|
94
|
+
Requires-Dist: trino==0.336.0; extra == "dev"
|
|
93
95
|
Dynamic: license-file
|
|
94
96
|
|
|
95
97
|
# Data Contract CLI
|
|
@@ -255,6 +257,14 @@ if not run.has_passed():
|
|
|
255
257
|
|
|
256
258
|
Choose the most appropriate installation method for your needs:
|
|
257
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
|
+
|
|
258
268
|
### pip
|
|
259
269
|
Python 3.10, 3.11, and 3.12 are supported. We recommend to use Python 3.11.
|
|
260
270
|
|
|
@@ -316,6 +326,7 @@ A list of available extras:
|
|
|
316
326
|
|
|
317
327
|
| Dependency | Installation Command |
|
|
318
328
|
|-------------------------|--------------------------------------------|
|
|
329
|
+
| Amazon Athena | `pip install datacontract-cli[athena]` |
|
|
319
330
|
| Avro Support | `pip install datacontract-cli[avro]` |
|
|
320
331
|
| Google BigQuery | `pip install datacontract-cli[bigquery]` |
|
|
321
332
|
| Databricks Integration | `pip install datacontract-cli[databricks]` |
|
|
@@ -460,6 +471,7 @@ Credentials are provided with environment variables.
|
|
|
460
471
|
Supported server types:
|
|
461
472
|
|
|
462
473
|
- [s3](#S3)
|
|
474
|
+
- [athena](#athena)
|
|
463
475
|
- [bigquery](#bigquery)
|
|
464
476
|
- [azure](#azure)
|
|
465
477
|
- [sqlserver](#sqlserver)
|
|
@@ -470,6 +482,7 @@ Supported server types:
|
|
|
470
482
|
- [kafka](#kafka)
|
|
471
483
|
- [postgres](#postgres)
|
|
472
484
|
- [trino](#trino)
|
|
485
|
+
- [api](#api)
|
|
473
486
|
- [local](#local)
|
|
474
487
|
|
|
475
488
|
Supported formats:
|
|
@@ -529,6 +542,41 @@ servers:
|
|
|
529
542
|
| `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
|
|
530
543
|
|
|
531
544
|
|
|
545
|
+
#### Athena
|
|
546
|
+
|
|
547
|
+
Data Contract CLI can test data in AWS Athena stored in S3.
|
|
548
|
+
Supports different file formats, such as Iceberg, Parquet, JSON, CSV...
|
|
549
|
+
|
|
550
|
+
##### Example
|
|
551
|
+
|
|
552
|
+
datacontract.yaml
|
|
553
|
+
```yaml
|
|
554
|
+
servers:
|
|
555
|
+
athena:
|
|
556
|
+
type: athena
|
|
557
|
+
catalog: awsdatacatalog # awsdatacatalog is the default setting
|
|
558
|
+
schema: icebergdemodb # in Athena, this is called "database"
|
|
559
|
+
regionName: eu-central-1
|
|
560
|
+
stagingDir: s3://my-bucket/athena-results/
|
|
561
|
+
models:
|
|
562
|
+
my_table: # corresponds to a table of view name
|
|
563
|
+
type: table
|
|
564
|
+
fields:
|
|
565
|
+
my_column_1: # corresponds to a column
|
|
566
|
+
type: string
|
|
567
|
+
config:
|
|
568
|
+
physicalType: varchar
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
##### Environment Variables
|
|
572
|
+
|
|
573
|
+
| Environment Variable | Example | Description |
|
|
574
|
+
|-------------------------------------|---------------------------------|----------------------------------------|
|
|
575
|
+
| `DATACONTRACT_S3_REGION` | `eu-central-1` | Region of Athena service |
|
|
576
|
+
| `DATACONTRACT_S3_ACCESS_KEY_ID` | `AKIAXV5Q5QABCDEFGH` | AWS Access Key ID |
|
|
577
|
+
| `DATACONTRACT_S3_SECRET_ACCESS_KEY` | `93S7LRrJcqLaaaa/XXXXXXXXXXXXX` | AWS Secret Access Key |
|
|
578
|
+
| `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
|
|
579
|
+
|
|
532
580
|
|
|
533
581
|
#### Google Cloud Storage (GCS)
|
|
534
582
|
|
|
@@ -896,6 +944,38 @@ models:
|
|
|
896
944
|
| `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
|
|
897
945
|
|
|
898
946
|
|
|
947
|
+
#### API
|
|
948
|
+
|
|
949
|
+
Data Contract CLI can test APIs that return data in JSON format.
|
|
950
|
+
Currently, only GET requests are supported.
|
|
951
|
+
|
|
952
|
+
##### Example
|
|
953
|
+
|
|
954
|
+
datacontract.yaml
|
|
955
|
+
```yaml
|
|
956
|
+
servers:
|
|
957
|
+
api:
|
|
958
|
+
type: "api"
|
|
959
|
+
location: "https://api.example.com/path"
|
|
960
|
+
delimiter: none # new_line, array, or none (default)
|
|
961
|
+
|
|
962
|
+
models:
|
|
963
|
+
my_object: # corresponds to the root element of the JSON response
|
|
964
|
+
type: object
|
|
965
|
+
fields:
|
|
966
|
+
field1:
|
|
967
|
+
type: string
|
|
968
|
+
fields2:
|
|
969
|
+
type: number
|
|
970
|
+
```
|
|
971
|
+
|
|
972
|
+
##### Environment Variables
|
|
973
|
+
|
|
974
|
+
| Environment Variable | Example | Description |
|
|
975
|
+
|-----------------------------------------|------------------|---------------------------------------------------|
|
|
976
|
+
| `DATACONTRACT_API_HEADER_AUTHORIZATION` | `Bearer <token>` | The value for the `authorization` header. Optional. |
|
|
977
|
+
|
|
978
|
+
|
|
899
979
|
#### Local
|
|
900
980
|
|
|
901
981
|
Data Contract CLI can test local files in parquet, json, csv, or delta format.
|
|
@@ -939,7 +1019,7 @@ models:
|
|
|
939
1019
|
│ terraform|avro-idl|sql|sql-query|mer │
|
|
940
1020
|
│ maid|html|go|bigquery|dbml|spark|sql │
|
|
941
1021
|
│ alchemy|data-caterer|dcs|markdown|ic │
|
|
942
|
-
│ eberg|custom|excel] │
|
|
1022
|
+
│ eberg|custom|excel|dqx] │
|
|
943
1023
|
│ --output PATH Specify the file path where the │
|
|
944
1024
|
│ exported data will be saved. If no │
|
|
945
1025
|
│ path is provided, the output will be │
|
|
@@ -959,8 +1039,10 @@ models:
|
|
|
959
1039
|
│ --engine TEXT [engine] The engine used for great │
|
|
960
1040
|
│ expection run. │
|
|
961
1041
|
│ [default: None] │
|
|
962
|
-
│ --template PATH
|
|
963
|
-
│
|
|
1042
|
+
│ --template PATH The file path or URL of a template. │
|
|
1043
|
+
│ For Excel format: path/URL to custom │
|
|
1044
|
+
│ Excel template. For custom format: │
|
|
1045
|
+
│ path to Jinja template. │
|
|
964
1046
|
│ [default: None] │
|
|
965
1047
|
│ --help Show this message and exit. │
|
|
966
1048
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
@@ -983,35 +1065,36 @@ datacontract export --format html --output datacontract.html
|
|
|
983
1065
|
|
|
984
1066
|
Available export options:
|
|
985
1067
|
|
|
986
|
-
| Type | Description | Status
|
|
987
|
-
|
|
988
|
-
| `html` | Export to HTML | ✅
|
|
989
|
-
| `jsonschema` | Export to JSON Schema | ✅
|
|
990
|
-
| `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅
|
|
991
|
-
| `sodacl` | Export to SodaCL quality checks in YAML format | ✅
|
|
992
|
-
| `dbt` | Export to dbt models in YAML format | ✅
|
|
993
|
-
| `dbt-sources` | Export to dbt sources in YAML format | ✅
|
|
994
|
-
| `dbt-staging-sql` | Export to dbt staging SQL models | ✅
|
|
995
|
-
| `rdf` | Export data contract to RDF representation in N3 format | ✅
|
|
996
|
-
| `avro` | Export to AVRO models | ✅
|
|
997
|
-
| `protobuf` | Export to Protobuf | ✅
|
|
998
|
-
| `terraform` | Export to terraform resources | ✅
|
|
999
|
-
| `sql` | Export to SQL DDL | ✅
|
|
1000
|
-
| `sql-query` | Export to SQL Query | ✅
|
|
1001
|
-
| `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅
|
|
1002
|
-
| `bigquery` | Export to BigQuery Schemas | ✅
|
|
1003
|
-
| `go` | Export to Go types | ✅
|
|
1004
|
-
| `pydantic-model` | Export to pydantic models | ✅
|
|
1005
|
-
| `DBML` | Export to a DBML Diagram description | ✅
|
|
1006
|
-
| `spark` | Export to a Spark StructType | ✅
|
|
1007
|
-
| `sqlalchemy` | Export to SQLAlchemy Models | ✅
|
|
1008
|
-
| `data-caterer` | Export to Data Caterer in YAML format | ✅
|
|
1009
|
-
| `dcs` | Export to Data Contract Specification in YAML format | ✅
|
|
1010
|
-
| `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 | ✅ |
|
|
1011
1093
|
| `iceberg` | Export to an Iceberg JSON Schema Definition | partial |
|
|
1012
|
-
| `excel` | Export to ODCS Excel Template | ✅
|
|
1013
|
-
| `custom` | Export to Custom format with Jinja | ✅
|
|
1014
|
-
|
|
|
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 |
|
|
1015
1098
|
|
|
1016
1099
|
#### SQL
|
|
1017
1100
|
|
|
@@ -2102,6 +2185,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2102
2185
|
|
|
2103
2186
|
## Companies using this tool
|
|
2104
2187
|
|
|
2188
|
+
- [Entropy Data](https://www.entropy-data.com)
|
|
2105
2189
|
- [INNOQ](https://innoq.com)
|
|
2106
2190
|
- [Data Catering](https://data.catering/)
|
|
2107
2191
|
- [Oliver Wyman](https://www.oliverwyman.com/)
|
|
@@ -2120,7 +2204,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2120
2204
|
|
|
2121
2205
|
## Credits
|
|
2122
2206
|
|
|
2123
|
-
Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/)
|
|
2207
|
+
Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/), [Jochen Christ](https://www.linkedin.com/in/jochenchrist/), and [Simon Harrer]().
|
|
2124
2208
|
|
|
2125
2209
|
|
|
2126
2210
|
|
|
@@ -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
|
|
|
@@ -222,6 +230,7 @@ A list of available extras:
|
|
|
222
230
|
|
|
223
231
|
| Dependency | Installation Command |
|
|
224
232
|
|-------------------------|--------------------------------------------|
|
|
233
|
+
| Amazon Athena | `pip install datacontract-cli[athena]` |
|
|
225
234
|
| Avro Support | `pip install datacontract-cli[avro]` |
|
|
226
235
|
| Google BigQuery | `pip install datacontract-cli[bigquery]` |
|
|
227
236
|
| Databricks Integration | `pip install datacontract-cli[databricks]` |
|
|
@@ -366,6 +375,7 @@ Credentials are provided with environment variables.
|
|
|
366
375
|
Supported server types:
|
|
367
376
|
|
|
368
377
|
- [s3](#S3)
|
|
378
|
+
- [athena](#athena)
|
|
369
379
|
- [bigquery](#bigquery)
|
|
370
380
|
- [azure](#azure)
|
|
371
381
|
- [sqlserver](#sqlserver)
|
|
@@ -376,6 +386,7 @@ Supported server types:
|
|
|
376
386
|
- [kafka](#kafka)
|
|
377
387
|
- [postgres](#postgres)
|
|
378
388
|
- [trino](#trino)
|
|
389
|
+
- [api](#api)
|
|
379
390
|
- [local](#local)
|
|
380
391
|
|
|
381
392
|
Supported formats:
|
|
@@ -435,6 +446,41 @@ servers:
|
|
|
435
446
|
| `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
|
|
436
447
|
|
|
437
448
|
|
|
449
|
+
#### Athena
|
|
450
|
+
|
|
451
|
+
Data Contract CLI can test data in AWS Athena stored in S3.
|
|
452
|
+
Supports different file formats, such as Iceberg, Parquet, JSON, CSV...
|
|
453
|
+
|
|
454
|
+
##### Example
|
|
455
|
+
|
|
456
|
+
datacontract.yaml
|
|
457
|
+
```yaml
|
|
458
|
+
servers:
|
|
459
|
+
athena:
|
|
460
|
+
type: athena
|
|
461
|
+
catalog: awsdatacatalog # awsdatacatalog is the default setting
|
|
462
|
+
schema: icebergdemodb # in Athena, this is called "database"
|
|
463
|
+
regionName: eu-central-1
|
|
464
|
+
stagingDir: s3://my-bucket/athena-results/
|
|
465
|
+
models:
|
|
466
|
+
my_table: # corresponds to a table of view name
|
|
467
|
+
type: table
|
|
468
|
+
fields:
|
|
469
|
+
my_column_1: # corresponds to a column
|
|
470
|
+
type: string
|
|
471
|
+
config:
|
|
472
|
+
physicalType: varchar
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
##### Environment Variables
|
|
476
|
+
|
|
477
|
+
| Environment Variable | Example | Description |
|
|
478
|
+
|-------------------------------------|---------------------------------|----------------------------------------|
|
|
479
|
+
| `DATACONTRACT_S3_REGION` | `eu-central-1` | Region of Athena service |
|
|
480
|
+
| `DATACONTRACT_S3_ACCESS_KEY_ID` | `AKIAXV5Q5QABCDEFGH` | AWS Access Key ID |
|
|
481
|
+
| `DATACONTRACT_S3_SECRET_ACCESS_KEY` | `93S7LRrJcqLaaaa/XXXXXXXXXXXXX` | AWS Secret Access Key |
|
|
482
|
+
| `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
|
|
483
|
+
|
|
438
484
|
|
|
439
485
|
#### Google Cloud Storage (GCS)
|
|
440
486
|
|
|
@@ -802,6 +848,38 @@ models:
|
|
|
802
848
|
| `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
|
|
803
849
|
|
|
804
850
|
|
|
851
|
+
#### API
|
|
852
|
+
|
|
853
|
+
Data Contract CLI can test APIs that return data in JSON format.
|
|
854
|
+
Currently, only GET requests are supported.
|
|
855
|
+
|
|
856
|
+
##### Example
|
|
857
|
+
|
|
858
|
+
datacontract.yaml
|
|
859
|
+
```yaml
|
|
860
|
+
servers:
|
|
861
|
+
api:
|
|
862
|
+
type: "api"
|
|
863
|
+
location: "https://api.example.com/path"
|
|
864
|
+
delimiter: none # new_line, array, or none (default)
|
|
865
|
+
|
|
866
|
+
models:
|
|
867
|
+
my_object: # corresponds to the root element of the JSON response
|
|
868
|
+
type: object
|
|
869
|
+
fields:
|
|
870
|
+
field1:
|
|
871
|
+
type: string
|
|
872
|
+
fields2:
|
|
873
|
+
type: number
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
##### Environment Variables
|
|
877
|
+
|
|
878
|
+
| Environment Variable | Example | Description |
|
|
879
|
+
|-----------------------------------------|------------------|---------------------------------------------------|
|
|
880
|
+
| `DATACONTRACT_API_HEADER_AUTHORIZATION` | `Bearer <token>` | The value for the `authorization` header. Optional. |
|
|
881
|
+
|
|
882
|
+
|
|
805
883
|
#### Local
|
|
806
884
|
|
|
807
885
|
Data Contract CLI can test local files in parquet, json, csv, or delta format.
|
|
@@ -845,7 +923,7 @@ models:
|
|
|
845
923
|
│ terraform|avro-idl|sql|sql-query|mer │
|
|
846
924
|
│ maid|html|go|bigquery|dbml|spark|sql │
|
|
847
925
|
│ alchemy|data-caterer|dcs|markdown|ic │
|
|
848
|
-
│ eberg|custom|excel] │
|
|
926
|
+
│ eberg|custom|excel|dqx] │
|
|
849
927
|
│ --output PATH Specify the file path where the │
|
|
850
928
|
│ exported data will be saved. If no │
|
|
851
929
|
│ path is provided, the output will be │
|
|
@@ -865,8 +943,10 @@ models:
|
|
|
865
943
|
│ --engine TEXT [engine] The engine used for great │
|
|
866
944
|
│ expection run. │
|
|
867
945
|
│ [default: None] │
|
|
868
|
-
│ --template PATH
|
|
869
|
-
│
|
|
946
|
+
│ --template PATH The file path or URL of a template. │
|
|
947
|
+
│ For Excel format: path/URL to custom │
|
|
948
|
+
│ Excel template. For custom format: │
|
|
949
|
+
│ path to Jinja template. │
|
|
870
950
|
│ [default: None] │
|
|
871
951
|
│ --help Show this message and exit. │
|
|
872
952
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
@@ -889,35 +969,36 @@ datacontract export --format html --output datacontract.html
|
|
|
889
969
|
|
|
890
970
|
Available export options:
|
|
891
971
|
|
|
892
|
-
| Type | Description | Status
|
|
893
|
-
|
|
894
|
-
| `html` | Export to HTML | ✅
|
|
895
|
-
| `jsonschema` | Export to JSON Schema | ✅
|
|
896
|
-
| `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅
|
|
897
|
-
| `sodacl` | Export to SodaCL quality checks in YAML format | ✅
|
|
898
|
-
| `dbt` | Export to dbt models in YAML format | ✅
|
|
899
|
-
| `dbt-sources` | Export to dbt sources in YAML format | ✅
|
|
900
|
-
| `dbt-staging-sql` | Export to dbt staging SQL models | ✅
|
|
901
|
-
| `rdf` | Export data contract to RDF representation in N3 format | ✅
|
|
902
|
-
| `avro` | Export to AVRO models | ✅
|
|
903
|
-
| `protobuf` | Export to Protobuf | ✅
|
|
904
|
-
| `terraform` | Export to terraform resources | ✅
|
|
905
|
-
| `sql` | Export to SQL DDL | ✅
|
|
906
|
-
| `sql-query` | Export to SQL Query | ✅
|
|
907
|
-
| `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅
|
|
908
|
-
| `bigquery` | Export to BigQuery Schemas | ✅
|
|
909
|
-
| `go` | Export to Go types | ✅
|
|
910
|
-
| `pydantic-model` | Export to pydantic models | ✅
|
|
911
|
-
| `DBML` | Export to a DBML Diagram description | ✅
|
|
912
|
-
| `spark` | Export to a Spark StructType | ✅
|
|
913
|
-
| `sqlalchemy` | Export to SQLAlchemy Models | ✅
|
|
914
|
-
| `data-caterer` | Export to Data Caterer in YAML format | ✅
|
|
915
|
-
| `dcs` | Export to Data Contract Specification in YAML format | ✅
|
|
916
|
-
| `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 | ✅ |
|
|
917
997
|
| `iceberg` | Export to an Iceberg JSON Schema Definition | partial |
|
|
918
|
-
| `excel` | Export to ODCS Excel Template | ✅
|
|
919
|
-
| `custom` | Export to Custom format with Jinja | ✅
|
|
920
|
-
|
|
|
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 |
|
|
921
1002
|
|
|
922
1003
|
#### SQL
|
|
923
1004
|
|
|
@@ -2008,6 +2089,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2008
2089
|
|
|
2009
2090
|
## Companies using this tool
|
|
2010
2091
|
|
|
2092
|
+
- [Entropy Data](https://www.entropy-data.com)
|
|
2011
2093
|
- [INNOQ](https://innoq.com)
|
|
2012
2094
|
- [Data Catering](https://data.catering/)
|
|
2013
2095
|
- [Oliver Wyman](https://www.oliverwyman.com/)
|
|
@@ -2026,7 +2108,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2026
2108
|
|
|
2027
2109
|
## Credits
|
|
2028
2110
|
|
|
2029
|
-
Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/)
|
|
2111
|
+
Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/), [Jochen Christ](https://www.linkedin.com/in/jochenchrist/), and [Simon Harrer]().
|
|
2030
2112
|
|
|
2031
2113
|
|
|
2032
2114
|
|
|
@@ -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(
|