datacontract-cli 0.10.32__tar.gz → 0.10.34__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.32 → datacontract_cli-0.10.34}/LICENSE +1 -1
- {datacontract_cli-0.10.32/datacontract_cli.egg-info → datacontract_cli-0.10.34}/PKG-INFO +111 -12
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/README.md +102 -5
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/cli.py +20 -5
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/data_contract.py +8 -2
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/data_contract_checks.py +102 -59
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/data_contract_test.py +37 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/fastjsonschema/check_jsonschema.py +8 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/soda/check_soda_execute.py +6 -0
- datacontract_cli-0.10.34/datacontract/engines/soda/connections/athena.py +79 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/soda/connections/duckdb_connection.py +3 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/avro_converter.py +12 -2
- datacontract_cli-0.10.34/datacontract/export/excel_exporter.py +922 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/exporter.py +1 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/exporter_factory.py +4 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/markdown_converter.py +115 -5
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/sql_type_converter.py +4 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/avro_importer.py +33 -7
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/excel_importer.py +13 -5
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/odcs_v3_importer.py +1 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/spark_importer.py +12 -1
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34/datacontract_cli.egg-info}/PKG-INFO +111 -12
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract_cli.egg-info/SOURCES.txt +5 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract_cli.egg-info/requires.txt +9 -6
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/pyproject.toml +11 -7
- datacontract_cli-0.10.34/tests/test_export_excel.py +104 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_avro.py +38 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_spark.py +3 -1
- datacontract_cli-0.10.34/tests/test_test_api.py +55 -0
- datacontract_cli-0.10.34/tests/test_test_athena_iceberg.py +26 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_postgres.py +1 -1
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_quality.py +1 -1
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_sqlserver.py +1 -1
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_trino.py +1 -1
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/MANIFEST.in +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/__init__.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/api.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/breaking/breaking.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/breaking/breaking_change.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/breaking/breaking_rules.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/catalog/catalog.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/soda/__init__.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/soda/connections/bigquery.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/soda/connections/databricks.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/soda/connections/kafka.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/soda/connections/postgres.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/soda/connections/snowflake.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/soda/connections/sqlserver.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/engines/soda/connections/trino.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/avro_idl_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/bigquery_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/custom_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/data_caterer_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/dbml_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/dbt_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/go_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/great_expectations_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/iceberg_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/jsonschema_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/protobuf_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/pydantic_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/rdf_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/sodacl_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/spark_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/sql_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/sqlalchemy_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/export/terraform_converter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/odcs_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/imports/unity_importer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/integration/datamesh_manager.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/files.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/lint.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/linters/__init__.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/linters/description_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/linters/field_pattern_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/linters/field_reference_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/linters/notice_period_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/linters/valid_constraints_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/resolve.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/model/data_contract_specification/__init__.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/model/run.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/output/__init__.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/output/test_results_writer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/py.typed +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/datacontract_odcs.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/index.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/setup.cfg +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_api.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_breaking.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_catalog.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_changelog.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_cli.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_description_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_documentation_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_avro.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_custom.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_dbt_models.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_go.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_html.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_rdf.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_sodacl.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_spark.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_sql.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_export_terraform.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_field_constraint_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_field_pattern_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_field_reference_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_csv.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_dbt.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_excel.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_glue.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_json.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_jsonschema.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_odcs_v3.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_integration_datameshmanager.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_lint.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_notice_period_linter.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_resolve.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_spec_fields_field.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_spec_ref.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_dataframe.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_delta.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-0.10.32 → datacontract_cli-0.10.34}/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.34
|
|
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.61.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"
|
|
@@ -56,10 +56,12 @@ Provides-Extra: s3
|
|
|
56
56
|
Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
|
|
57
57
|
Requires-Dist: aiobotocore<2.24.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,19 +78,19 @@ 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.8; extra == "dev"
|
|
85
87
|
Requires-Dist: pandas>=2.1.0; extra == "dev"
|
|
86
88
|
Requires-Dist: pre-commit<4.3.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.
|
|
93
|
+
Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.12.0; extra == "dev"
|
|
92
94
|
Requires-Dist: trino==0.335.0; extra == "dev"
|
|
93
95
|
Dynamic: license-file
|
|
94
96
|
|
|
@@ -214,9 +216,15 @@ $ datacontract export --format odcs datacontract.yaml --output odcs.yaml
|
|
|
214
216
|
# import ODCS to data contract
|
|
215
217
|
$ datacontract import --format odcs odcs.yaml --output datacontract.yaml
|
|
216
218
|
|
|
217
|
-
# import sql (other formats: avro, glue, bigquery, jsonschema ...)
|
|
219
|
+
# import sql (other formats: avro, glue, bigquery, jsonschema, excel ...)
|
|
218
220
|
$ datacontract import --format sql --source my-ddl.sql --dialect postgres --output datacontract.yaml
|
|
219
221
|
|
|
222
|
+
# import from Excel template
|
|
223
|
+
$ datacontract import --format excel --source odcs.xlsx --output datacontract.yaml
|
|
224
|
+
|
|
225
|
+
# export to Excel template
|
|
226
|
+
$ datacontract export --format excel --output odcs.xlsx datacontract.yaml
|
|
227
|
+
|
|
220
228
|
# find differences between two data contracts
|
|
221
229
|
$ datacontract diff datacontract-v1.yaml datacontract-v2.yaml
|
|
222
230
|
|
|
@@ -310,6 +318,7 @@ A list of available extras:
|
|
|
310
318
|
|
|
311
319
|
| Dependency | Installation Command |
|
|
312
320
|
|-------------------------|--------------------------------------------|
|
|
321
|
+
| Amazon Athena | `pip install datacontract-cli[athena]` |
|
|
313
322
|
| Avro Support | `pip install datacontract-cli[avro]` |
|
|
314
323
|
| Google BigQuery | `pip install datacontract-cli[bigquery]` |
|
|
315
324
|
| Databricks Integration | `pip install datacontract-cli[databricks]` |
|
|
@@ -454,6 +463,7 @@ Credentials are provided with environment variables.
|
|
|
454
463
|
Supported server types:
|
|
455
464
|
|
|
456
465
|
- [s3](#S3)
|
|
466
|
+
- [athena](#athena)
|
|
457
467
|
- [bigquery](#bigquery)
|
|
458
468
|
- [azure](#azure)
|
|
459
469
|
- [sqlserver](#sqlserver)
|
|
@@ -464,6 +474,7 @@ Supported server types:
|
|
|
464
474
|
- [kafka](#kafka)
|
|
465
475
|
- [postgres](#postgres)
|
|
466
476
|
- [trino](#trino)
|
|
477
|
+
- [api](#api)
|
|
467
478
|
- [local](#local)
|
|
468
479
|
|
|
469
480
|
Supported formats:
|
|
@@ -523,6 +534,41 @@ servers:
|
|
|
523
534
|
| `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
|
|
524
535
|
|
|
525
536
|
|
|
537
|
+
#### Athena
|
|
538
|
+
|
|
539
|
+
Data Contract CLI can test data in AWS Athena stored in S3.
|
|
540
|
+
Supports different file formats, such as Iceberg, Parquet, JSON, CSV...
|
|
541
|
+
|
|
542
|
+
##### Example
|
|
543
|
+
|
|
544
|
+
datacontract.yaml
|
|
545
|
+
```yaml
|
|
546
|
+
servers:
|
|
547
|
+
athena:
|
|
548
|
+
type: athena
|
|
549
|
+
catalog: awsdatacatalog # awsdatacatalog is the default setting
|
|
550
|
+
schema: icebergdemodb # in Athena, this is called "database"
|
|
551
|
+
regionName: eu-central-1
|
|
552
|
+
stagingDir: s3://my-bucket/athena-results/
|
|
553
|
+
models:
|
|
554
|
+
my_table: # corresponds to a table of view name
|
|
555
|
+
type: table
|
|
556
|
+
fields:
|
|
557
|
+
my_column_1: # corresponds to a column
|
|
558
|
+
type: string
|
|
559
|
+
config:
|
|
560
|
+
physicalType: varchar
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
##### Environment Variables
|
|
564
|
+
|
|
565
|
+
| Environment Variable | Example | Description |
|
|
566
|
+
|-------------------------------------|---------------------------------|----------------------------------------|
|
|
567
|
+
| `DATACONTRACT_S3_REGION` | `eu-central-1` | Region of Athena service |
|
|
568
|
+
| `DATACONTRACT_S3_ACCESS_KEY_ID` | `AKIAXV5Q5QABCDEFGH` | AWS Access Key ID |
|
|
569
|
+
| `DATACONTRACT_S3_SECRET_ACCESS_KEY` | `93S7LRrJcqLaaaa/XXXXXXXXXXXXX` | AWS Secret Access Key |
|
|
570
|
+
| `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
|
|
571
|
+
|
|
526
572
|
|
|
527
573
|
#### Google Cloud Storage (GCS)
|
|
528
574
|
|
|
@@ -890,6 +936,38 @@ models:
|
|
|
890
936
|
| `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
|
|
891
937
|
|
|
892
938
|
|
|
939
|
+
#### API
|
|
940
|
+
|
|
941
|
+
Data Contract CLI can test APIs that return data in JSON format.
|
|
942
|
+
Currently, only GET requests are supported.
|
|
943
|
+
|
|
944
|
+
##### Example
|
|
945
|
+
|
|
946
|
+
datacontract.yaml
|
|
947
|
+
```yaml
|
|
948
|
+
servers:
|
|
949
|
+
api:
|
|
950
|
+
type: "api"
|
|
951
|
+
location: "https://api.example.com/path"
|
|
952
|
+
delimiter: none # new_line, array, or none (default)
|
|
953
|
+
|
|
954
|
+
models:
|
|
955
|
+
my_object: # corresponds to the root element of the JSON response
|
|
956
|
+
type: object
|
|
957
|
+
fields:
|
|
958
|
+
field1:
|
|
959
|
+
type: string
|
|
960
|
+
fields2:
|
|
961
|
+
type: number
|
|
962
|
+
```
|
|
963
|
+
|
|
964
|
+
##### Environment Variables
|
|
965
|
+
|
|
966
|
+
| Environment Variable | Example | Description |
|
|
967
|
+
|-----------------------------------------|------------------|---------------------------------------------------|
|
|
968
|
+
| `DATACONTRACT_API_HEADER_AUTHORIZATION` | `Bearer <token>` | The value for the `authorization` header. Optional. |
|
|
969
|
+
|
|
970
|
+
|
|
893
971
|
#### Local
|
|
894
972
|
|
|
895
973
|
Data Contract CLI can test local files in parquet, json, csv, or delta format.
|
|
@@ -933,7 +1011,7 @@ models:
|
|
|
933
1011
|
│ terraform|avro-idl|sql|sql-query|mer │
|
|
934
1012
|
│ maid|html|go|bigquery|dbml|spark|sql │
|
|
935
1013
|
│ alchemy|data-caterer|dcs|markdown|ic │
|
|
936
|
-
│ eberg|custom]
|
|
1014
|
+
│ eberg|custom|excel] │
|
|
937
1015
|
│ --output PATH Specify the file path where the │
|
|
938
1016
|
│ exported data will be saved. If no │
|
|
939
1017
|
│ path is provided, the output will be │
|
|
@@ -953,8 +1031,10 @@ models:
|
|
|
953
1031
|
│ --engine TEXT [engine] The engine used for great │
|
|
954
1032
|
│ expection run. │
|
|
955
1033
|
│ [default: None] │
|
|
956
|
-
│ --template PATH
|
|
957
|
-
│
|
|
1034
|
+
│ --template PATH The file path or URL of a template. │
|
|
1035
|
+
│ For Excel format: path/URL to custom │
|
|
1036
|
+
│ Excel template. For custom format: │
|
|
1037
|
+
│ path to Jinja template. │
|
|
958
1038
|
│ [default: None] │
|
|
959
1039
|
│ --help Show this message and exit. │
|
|
960
1040
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
@@ -1003,6 +1083,7 @@ Available export options:
|
|
|
1003
1083
|
| `dcs` | Export to Data Contract Specification in YAML format | ✅ |
|
|
1004
1084
|
| `markdown` | Export to Markdown | ✅ |
|
|
1005
1085
|
| `iceberg` | Export to an Iceberg JSON Schema Definition | partial |
|
|
1086
|
+
| `excel` | Export to ODCS Excel Template | ✅ |
|
|
1006
1087
|
| `custom` | Export to Custom format with Jinja | ✅ |
|
|
1007
1088
|
| Missing something? | Please create an issue on GitHub | TBD |
|
|
1008
1089
|
|
|
@@ -1274,6 +1355,22 @@ FROM
|
|
|
1274
1355
|
{{ ref('orders') }}
|
|
1275
1356
|
```
|
|
1276
1357
|
|
|
1358
|
+
#### ODCS Excel Templace
|
|
1359
|
+
|
|
1360
|
+
The `export` function converts a data contract into an ODCS (Open Data Contract Standard) Excel template. This creates a user-friendly Excel spreadsheet that can be used for authoring, sharing, and managing data contracts using the familiar Excel interface.
|
|
1361
|
+
|
|
1362
|
+
```shell
|
|
1363
|
+
datacontract export --format excel --output datacontract.xlsx datacontract.yaml
|
|
1364
|
+
```
|
|
1365
|
+
|
|
1366
|
+
The Excel format enables:
|
|
1367
|
+
- **User-friendly authoring**: Create and edit data contracts in Excel's familiar interface
|
|
1368
|
+
- **Easy sharing**: Distribute data contracts as standard Excel files
|
|
1369
|
+
- **Collaboration**: Enable non-technical stakeholders to contribute to data contract definitions
|
|
1370
|
+
- **Round-trip conversion**: Import Excel templates back to YAML data contracts
|
|
1371
|
+
|
|
1372
|
+
For more information about the Excel template structure, visit the [ODCS Excel Template repository](https://github.com/datacontract/open-data-contract-standard-excel-template).
|
|
1373
|
+
|
|
1277
1374
|
### import
|
|
1278
1375
|
```
|
|
1279
1376
|
|
|
@@ -1392,6 +1489,7 @@ Available import options:
|
|
|
1392
1489
|
| `spark` | Import from Spark StructTypes, Variant | ✅ |
|
|
1393
1490
|
| `sql` | Import from SQL DDL | ✅ |
|
|
1394
1491
|
| `unity` | Import from Databricks Unity Catalog | partial |
|
|
1492
|
+
| `excel` | Import from ODCS Excel Template | ✅ |
|
|
1395
1493
|
| Missing something? | Please create an issue on GitHub | TBD |
|
|
1396
1494
|
|
|
1397
1495
|
|
|
@@ -2078,6 +2176,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2078
2176
|
|
|
2079
2177
|
## Companies using this tool
|
|
2080
2178
|
|
|
2179
|
+
- [Entropy Data](https://www.entropy-data.com)
|
|
2081
2180
|
- [INNOQ](https://innoq.com)
|
|
2082
2181
|
- [Data Catering](https://data.catering/)
|
|
2083
2182
|
- [Oliver Wyman](https://www.oliverwyman.com/)
|
|
@@ -2096,7 +2195,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2096
2195
|
|
|
2097
2196
|
## Credits
|
|
2098
2197
|
|
|
2099
|
-
Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/)
|
|
2198
|
+
Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/), [Jochen Christ](https://www.linkedin.com/in/jochenchrist/), and [Simon Harrer]().
|
|
2100
2199
|
|
|
2101
2200
|
|
|
2102
2201
|
|
|
@@ -120,9 +120,15 @@ $ datacontract export --format odcs datacontract.yaml --output odcs.yaml
|
|
|
120
120
|
# import ODCS to data contract
|
|
121
121
|
$ datacontract import --format odcs odcs.yaml --output datacontract.yaml
|
|
122
122
|
|
|
123
|
-
# import sql (other formats: avro, glue, bigquery, jsonschema ...)
|
|
123
|
+
# import sql (other formats: avro, glue, bigquery, jsonschema, excel ...)
|
|
124
124
|
$ datacontract import --format sql --source my-ddl.sql --dialect postgres --output datacontract.yaml
|
|
125
125
|
|
|
126
|
+
# import from Excel template
|
|
127
|
+
$ datacontract import --format excel --source odcs.xlsx --output datacontract.yaml
|
|
128
|
+
|
|
129
|
+
# export to Excel template
|
|
130
|
+
$ datacontract export --format excel --output odcs.xlsx datacontract.yaml
|
|
131
|
+
|
|
126
132
|
# find differences between two data contracts
|
|
127
133
|
$ datacontract diff datacontract-v1.yaml datacontract-v2.yaml
|
|
128
134
|
|
|
@@ -216,6 +222,7 @@ A list of available extras:
|
|
|
216
222
|
|
|
217
223
|
| Dependency | Installation Command |
|
|
218
224
|
|-------------------------|--------------------------------------------|
|
|
225
|
+
| Amazon Athena | `pip install datacontract-cli[athena]` |
|
|
219
226
|
| Avro Support | `pip install datacontract-cli[avro]` |
|
|
220
227
|
| Google BigQuery | `pip install datacontract-cli[bigquery]` |
|
|
221
228
|
| Databricks Integration | `pip install datacontract-cli[databricks]` |
|
|
@@ -360,6 +367,7 @@ Credentials are provided with environment variables.
|
|
|
360
367
|
Supported server types:
|
|
361
368
|
|
|
362
369
|
- [s3](#S3)
|
|
370
|
+
- [athena](#athena)
|
|
363
371
|
- [bigquery](#bigquery)
|
|
364
372
|
- [azure](#azure)
|
|
365
373
|
- [sqlserver](#sqlserver)
|
|
@@ -370,6 +378,7 @@ Supported server types:
|
|
|
370
378
|
- [kafka](#kafka)
|
|
371
379
|
- [postgres](#postgres)
|
|
372
380
|
- [trino](#trino)
|
|
381
|
+
- [api](#api)
|
|
373
382
|
- [local](#local)
|
|
374
383
|
|
|
375
384
|
Supported formats:
|
|
@@ -429,6 +438,41 @@ servers:
|
|
|
429
438
|
| `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
|
|
430
439
|
|
|
431
440
|
|
|
441
|
+
#### Athena
|
|
442
|
+
|
|
443
|
+
Data Contract CLI can test data in AWS Athena stored in S3.
|
|
444
|
+
Supports different file formats, such as Iceberg, Parquet, JSON, CSV...
|
|
445
|
+
|
|
446
|
+
##### Example
|
|
447
|
+
|
|
448
|
+
datacontract.yaml
|
|
449
|
+
```yaml
|
|
450
|
+
servers:
|
|
451
|
+
athena:
|
|
452
|
+
type: athena
|
|
453
|
+
catalog: awsdatacatalog # awsdatacatalog is the default setting
|
|
454
|
+
schema: icebergdemodb # in Athena, this is called "database"
|
|
455
|
+
regionName: eu-central-1
|
|
456
|
+
stagingDir: s3://my-bucket/athena-results/
|
|
457
|
+
models:
|
|
458
|
+
my_table: # corresponds to a table of view name
|
|
459
|
+
type: table
|
|
460
|
+
fields:
|
|
461
|
+
my_column_1: # corresponds to a column
|
|
462
|
+
type: string
|
|
463
|
+
config:
|
|
464
|
+
physicalType: varchar
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
##### Environment Variables
|
|
468
|
+
|
|
469
|
+
| Environment Variable | Example | Description |
|
|
470
|
+
|-------------------------------------|---------------------------------|----------------------------------------|
|
|
471
|
+
| `DATACONTRACT_S3_REGION` | `eu-central-1` | Region of Athena service |
|
|
472
|
+
| `DATACONTRACT_S3_ACCESS_KEY_ID` | `AKIAXV5Q5QABCDEFGH` | AWS Access Key ID |
|
|
473
|
+
| `DATACONTRACT_S3_SECRET_ACCESS_KEY` | `93S7LRrJcqLaaaa/XXXXXXXXXXXXX` | AWS Secret Access Key |
|
|
474
|
+
| `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
|
|
475
|
+
|
|
432
476
|
|
|
433
477
|
#### Google Cloud Storage (GCS)
|
|
434
478
|
|
|
@@ -796,6 +840,38 @@ models:
|
|
|
796
840
|
| `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
|
|
797
841
|
|
|
798
842
|
|
|
843
|
+
#### API
|
|
844
|
+
|
|
845
|
+
Data Contract CLI can test APIs that return data in JSON format.
|
|
846
|
+
Currently, only GET requests are supported.
|
|
847
|
+
|
|
848
|
+
##### Example
|
|
849
|
+
|
|
850
|
+
datacontract.yaml
|
|
851
|
+
```yaml
|
|
852
|
+
servers:
|
|
853
|
+
api:
|
|
854
|
+
type: "api"
|
|
855
|
+
location: "https://api.example.com/path"
|
|
856
|
+
delimiter: none # new_line, array, or none (default)
|
|
857
|
+
|
|
858
|
+
models:
|
|
859
|
+
my_object: # corresponds to the root element of the JSON response
|
|
860
|
+
type: object
|
|
861
|
+
fields:
|
|
862
|
+
field1:
|
|
863
|
+
type: string
|
|
864
|
+
fields2:
|
|
865
|
+
type: number
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
##### Environment Variables
|
|
869
|
+
|
|
870
|
+
| Environment Variable | Example | Description |
|
|
871
|
+
|-----------------------------------------|------------------|---------------------------------------------------|
|
|
872
|
+
| `DATACONTRACT_API_HEADER_AUTHORIZATION` | `Bearer <token>` | The value for the `authorization` header. Optional. |
|
|
873
|
+
|
|
874
|
+
|
|
799
875
|
#### Local
|
|
800
876
|
|
|
801
877
|
Data Contract CLI can test local files in parquet, json, csv, or delta format.
|
|
@@ -839,7 +915,7 @@ models:
|
|
|
839
915
|
│ terraform|avro-idl|sql|sql-query|mer │
|
|
840
916
|
│ maid|html|go|bigquery|dbml|spark|sql │
|
|
841
917
|
│ alchemy|data-caterer|dcs|markdown|ic │
|
|
842
|
-
│ eberg|custom]
|
|
918
|
+
│ eberg|custom|excel] │
|
|
843
919
|
│ --output PATH Specify the file path where the │
|
|
844
920
|
│ exported data will be saved. If no │
|
|
845
921
|
│ path is provided, the output will be │
|
|
@@ -859,8 +935,10 @@ models:
|
|
|
859
935
|
│ --engine TEXT [engine] The engine used for great │
|
|
860
936
|
│ expection run. │
|
|
861
937
|
│ [default: None] │
|
|
862
|
-
│ --template PATH
|
|
863
|
-
│
|
|
938
|
+
│ --template PATH The file path or URL of a template. │
|
|
939
|
+
│ For Excel format: path/URL to custom │
|
|
940
|
+
│ Excel template. For custom format: │
|
|
941
|
+
│ path to Jinja template. │
|
|
864
942
|
│ [default: None] │
|
|
865
943
|
│ --help Show this message and exit. │
|
|
866
944
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
@@ -909,6 +987,7 @@ Available export options:
|
|
|
909
987
|
| `dcs` | Export to Data Contract Specification in YAML format | ✅ |
|
|
910
988
|
| `markdown` | Export to Markdown | ✅ |
|
|
911
989
|
| `iceberg` | Export to an Iceberg JSON Schema Definition | partial |
|
|
990
|
+
| `excel` | Export to ODCS Excel Template | ✅ |
|
|
912
991
|
| `custom` | Export to Custom format with Jinja | ✅ |
|
|
913
992
|
| Missing something? | Please create an issue on GitHub | TBD |
|
|
914
993
|
|
|
@@ -1180,6 +1259,22 @@ FROM
|
|
|
1180
1259
|
{{ ref('orders') }}
|
|
1181
1260
|
```
|
|
1182
1261
|
|
|
1262
|
+
#### ODCS Excel Templace
|
|
1263
|
+
|
|
1264
|
+
The `export` function converts a data contract into an ODCS (Open Data Contract Standard) Excel template. This creates a user-friendly Excel spreadsheet that can be used for authoring, sharing, and managing data contracts using the familiar Excel interface.
|
|
1265
|
+
|
|
1266
|
+
```shell
|
|
1267
|
+
datacontract export --format excel --output datacontract.xlsx datacontract.yaml
|
|
1268
|
+
```
|
|
1269
|
+
|
|
1270
|
+
The Excel format enables:
|
|
1271
|
+
- **User-friendly authoring**: Create and edit data contracts in Excel's familiar interface
|
|
1272
|
+
- **Easy sharing**: Distribute data contracts as standard Excel files
|
|
1273
|
+
- **Collaboration**: Enable non-technical stakeholders to contribute to data contract definitions
|
|
1274
|
+
- **Round-trip conversion**: Import Excel templates back to YAML data contracts
|
|
1275
|
+
|
|
1276
|
+
For more information about the Excel template structure, visit the [ODCS Excel Template repository](https://github.com/datacontract/open-data-contract-standard-excel-template).
|
|
1277
|
+
|
|
1183
1278
|
### import
|
|
1184
1279
|
```
|
|
1185
1280
|
|
|
@@ -1298,6 +1393,7 @@ Available import options:
|
|
|
1298
1393
|
| `spark` | Import from Spark StructTypes, Variant | ✅ |
|
|
1299
1394
|
| `sql` | Import from SQL DDL | ✅ |
|
|
1300
1395
|
| `unity` | Import from Databricks Unity Catalog | partial |
|
|
1396
|
+
| `excel` | Import from ODCS Excel Template | ✅ |
|
|
1301
1397
|
| Missing something? | Please create an issue on GitHub | TBD |
|
|
1302
1398
|
|
|
1303
1399
|
|
|
@@ -1984,6 +2080,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
1984
2080
|
|
|
1985
2081
|
## Companies using this tool
|
|
1986
2082
|
|
|
2083
|
+
- [Entropy Data](https://www.entropy-data.com)
|
|
1987
2084
|
- [INNOQ](https://innoq.com)
|
|
1988
2085
|
- [Data Catering](https://data.catering/)
|
|
1989
2086
|
- [Oliver Wyman](https://www.oliverwyman.com/)
|
|
@@ -2002,7 +2099,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2002
2099
|
|
|
2003
2100
|
## Credits
|
|
2004
2101
|
|
|
2005
|
-
Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/)
|
|
2102
|
+
Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/), [Jochen Christ](https://www.linkedin.com/in/jochenchrist/), and [Simon Harrer]().
|
|
2006
2103
|
|
|
2007
2104
|
|
|
2008
2105
|
|
|
@@ -210,12 +210,21 @@ def export(
|
|
|
210
210
|
# TODO: this should be a subcommand
|
|
211
211
|
template: Annotated[
|
|
212
212
|
Optional[Path],
|
|
213
|
-
typer.Option(
|
|
213
|
+
typer.Option(
|
|
214
|
+
help="The file path or URL of a template. For Excel format: path/URL to custom Excel template. For custom format: path to Jinja template."
|
|
215
|
+
),
|
|
214
216
|
] = None,
|
|
215
217
|
):
|
|
216
218
|
"""
|
|
217
219
|
Convert data contract to a specific format. Saves to file specified by `output` option if present, otherwise prints to stdout.
|
|
218
220
|
"""
|
|
221
|
+
# Validate that Excel format requires an output file path
|
|
222
|
+
if format == ExportFormat.excel and output is None:
|
|
223
|
+
console.print("❌ Error: Excel export requires an output file path.")
|
|
224
|
+
console.print("💡 Hint: Use --output to specify where to save the Excel file, e.g.:")
|
|
225
|
+
console.print(" datacontract export --format excel --output datacontract.xlsx")
|
|
226
|
+
raise typer.Exit(code=1)
|
|
227
|
+
|
|
219
228
|
# TODO exception handling
|
|
220
229
|
result = DataContract(data_contract_file=location, schema_location=schema, server=server).export(
|
|
221
230
|
export_format=format,
|
|
@@ -230,8 +239,13 @@ def export(
|
|
|
230
239
|
if output is None:
|
|
231
240
|
console.print(result, markup=False, soft_wrap=True)
|
|
232
241
|
else:
|
|
233
|
-
|
|
234
|
-
|
|
242
|
+
if isinstance(result, bytes):
|
|
243
|
+
# If the result is bytes, we assume it's a binary file (e.g., Excel, PDF)
|
|
244
|
+
with output.open(mode="wb") as f:
|
|
245
|
+
f.write(result)
|
|
246
|
+
else:
|
|
247
|
+
with output.open(mode="w", encoding="utf-8") as f:
|
|
248
|
+
f.write(result)
|
|
235
249
|
console.print(f"Written result to {output}")
|
|
236
250
|
|
|
237
251
|
|
|
@@ -482,13 +496,14 @@ def _get_uvicorn_arguments(port: int, host: str, context: typer.Context) -> dict
|
|
|
482
496
|
}
|
|
483
497
|
|
|
484
498
|
# Create a list of the extra arguments, remove the leading -- from the cli arguments
|
|
485
|
-
trimmed_keys = list(map(lambda x
|
|
499
|
+
trimmed_keys = list(map(lambda x: str(x).replace("--", ""), context.args[::2]))
|
|
486
500
|
# Merge the two dicts and return them as one dict
|
|
487
501
|
return default_args | dict(zip(trimmed_keys, context.args[1::2]))
|
|
488
502
|
|
|
503
|
+
|
|
489
504
|
@app.command(context_settings={"allow_extra_args": True, "ignore_unknown_options": True})
|
|
490
505
|
def api(
|
|
491
|
-
ctx: Annotated[typer.Context, typer.Option(help="Extra arguments to pass to uvicorn.run().")],
|
|
506
|
+
ctx: Annotated[typer.Context, typer.Option(help="Extra arguments to pass to uvicorn.run().")],
|
|
492
507
|
port: Annotated[int, typer.Option(help="Bind socket to this port.")] = 4242,
|
|
493
508
|
host: Annotated[
|
|
494
509
|
str, typer.Option(help="Bind socket to this host. Hint: For running in docker, set it to 0.0.0.0")
|
|
@@ -250,8 +250,14 @@ class DataContract:
|
|
|
250
250
|
inline_quality=self._inline_quality,
|
|
251
251
|
)
|
|
252
252
|
|
|
253
|
-
def export(
|
|
254
|
-
|
|
253
|
+
def export(
|
|
254
|
+
self, export_format: ExportFormat, model: str = "all", sql_server_type: str = "auto", **kwargs
|
|
255
|
+
) -> str | bytes:
|
|
256
|
+
if (
|
|
257
|
+
export_format == ExportFormat.html
|
|
258
|
+
or export_format == ExportFormat.mermaid
|
|
259
|
+
or export_format == ExportFormat.excel
|
|
260
|
+
):
|
|
255
261
|
data_contract = resolve.resolve_data_contract_v2(
|
|
256
262
|
self._data_contract_file,
|
|
257
263
|
self._data_contract_str,
|