datacontract-cli 0.10.35__tar.gz → 0.10.36__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of datacontract-cli might be problematic. Click here for more details.
- {datacontract_cli-0.10.35/datacontract_cli.egg-info → datacontract_cli-0.10.36}/PKG-INFO +27 -24
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/README.md +21 -18
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/api.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/cli.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/data_contract.py +18 -51
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/data_contract_checks.py +280 -19
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/dbt_converter.py +30 -4
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/dqx_converter.py +12 -7
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/excel_exporter.py +3 -3
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/markdown_converter.py +35 -16
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/rdf_converter.py +2 -2
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/sql_type_converter.py +6 -4
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/odcs_v3_importer.py +71 -18
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/unity_importer.py +16 -11
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/init/init_template.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/lint/resolve.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/lint/schema.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.1.0.init.yaml +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.2.0.init.yaml +1 -1
- datacontract_cli-0.10.36/datacontract/schemas/datacontract-1.2.1.init.yaml +91 -0
- datacontract_cli-0.10.36/datacontract/schemas/datacontract-1.2.1.schema.json +2058 -0
- datacontract_cli-0.10.36/datacontract/schemas/odcs-3.0.2.schema.json +2382 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/datacontract_odcs.html +60 -41
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36/datacontract_cli.egg-info}/PKG-INFO +27 -24
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/SOURCES.txt +3 -12
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/requires.txt +5 -5
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/pyproject.toml +6 -6
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_api.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_duckdb_json.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_bigquery.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_complex_data_contract.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_dbml.py +2 -2
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_dbt_models.py +125 -0
- datacontract_cli-0.10.36/tests/test_export_dqx.py +212 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_rdf.py +6 -6
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_sodacl.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_avro.py +18 -18
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_bigquery.py +4 -4
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_csv.py +3 -3
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_dbml.py +3 -3
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_dbt.py +12 -12
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_glue.py +6 -6
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_iceberg.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_json.py +6 -6
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_jsonschema.py +6 -6
- datacontract_cli-0.10.36/tests/test_import_odcs_v3.py +123 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_parquet.py +3 -3
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_protobuf.py +3 -3
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_spark.py +4 -4
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_sql_postgres.py +6 -6
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_sql_sqlserver.py +3 -3
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_unity_file.py +5 -5
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_lint.py +2 -2
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_resolve.py +7 -7
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_roundtrip_jsonschema.py +1 -1
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_bigquery.py +14 -0
- datacontract_cli-0.10.36/tests/test_test_dataframe.py +176 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_quality.py +4 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_delta.py +2 -4
- datacontract_cli-0.10.35/datacontract/lint/lint.py +0 -142
- datacontract_cli-0.10.35/datacontract/lint/linters/description_linter.py +0 -33
- datacontract_cli-0.10.35/datacontract/lint/linters/field_pattern_linter.py +0 -34
- datacontract_cli-0.10.35/datacontract/lint/linters/field_reference_linter.py +0 -47
- datacontract_cli-0.10.35/datacontract/lint/linters/notice_period_linter.py +0 -55
- datacontract_cli-0.10.35/datacontract/lint/linters/valid_constraints_linter.py +0 -100
- datacontract_cli-0.10.35/datacontract/output/__init__.py +0 -0
- datacontract_cli-0.10.35/tests/test_documentation_linter.py +0 -48
- datacontract_cli-0.10.35/tests/test_export_dqx.py +0 -319
- datacontract_cli-0.10.35/tests/test_field_constraint_linter.py +0 -68
- datacontract_cli-0.10.35/tests/test_field_pattern_linter.py +0 -42
- datacontract_cli-0.10.35/tests/test_field_reference_linter.py +0 -56
- datacontract_cli-0.10.35/tests/test_import_odcs_v3.py +0 -48
- datacontract_cli-0.10.35/tests/test_notice_period_linter.py +0 -47
- datacontract_cli-0.10.35/tests/test_test_dataframe.py +0 -107
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/LICENSE +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/MANIFEST.in +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/__init__.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/breaking/breaking.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/breaking/breaking_change.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/breaking/breaking_rules.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/catalog/catalog.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/data_contract_test.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/__init__.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/check_soda_execute.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/athena.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/bigquery.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/databricks.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/kafka.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/postgres.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/snowflake.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/sqlserver.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/trino.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/avro_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/avro_idl_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/bigquery_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/custom_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/data_caterer_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/dbml_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/exporter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/exporter_factory.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/go_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/great_expectations_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/iceberg_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/jsonschema_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/protobuf_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/pydantic_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/sodacl_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/spark_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/sql_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/sqlalchemy_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/terraform_converter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/avro_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/excel_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/odcs_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/spark_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/integration/datamesh_manager.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/lint/files.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/model/data_contract_specification/__init__.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/model/run.py +0 -0
- {datacontract_cli-0.10.35/datacontract/lint/linters → datacontract_cli-0.10.36/datacontract/output}/__init__.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/output/test_results_writer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/py.typed +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/index.html +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/setup.cfg +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_breaking.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_catalog.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_changelog.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_cli.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_description_linter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_avro.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_custom.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_excel.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_go.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_html.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_spark.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_sql.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_terraform.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_excel.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_integration_datameshmanager.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_spec_fields_field.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_spec_ref.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_api.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_athena_iceberg.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_delta.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_local_json_nd.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_postgres.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_trino.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.36
|
|
4
4
|
Summary: The datacontract CLI is an open source command-line tool for working with Data Contracts. It uses data contract YAML files to lint the data contract, connect to data sources and execute schema and quality tests, detect breaking changes, and export to different formats. The tool is written in Python. It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a Python library.
|
|
5
5
|
Author-email: Jochen Christ <jochen.christ@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: >=3.10
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: typer<0.
|
|
14
|
+
Requires-Dist: typer<0.20,>=0.15.1
|
|
15
15
|
Requires-Dist: pydantic<2.12.0,>=2.8.2
|
|
16
16
|
Requires-Dist: pyyaml~=6.0.1
|
|
17
17
|
Requires-Dist: requests<2.33,>=2.31
|
|
@@ -28,7 +28,7 @@ Requires-Dist: python-dotenv<2.0.0,>=1.0.0
|
|
|
28
28
|
Requires-Dist: boto3<2.0.0,>=1.34.41
|
|
29
29
|
Requires-Dist: Jinja2<4.0.0,>=3.1.5
|
|
30
30
|
Requires-Dist: jinja_partials<1.0.0,>=0.2.1
|
|
31
|
-
Requires-Dist: datacontract-specification<2.0.0,>=1.2.
|
|
31
|
+
Requires-Dist: datacontract-specification<2.0.0,>=1.2.3
|
|
32
32
|
Requires-Dist: open-data-contract-standard<4.0.0,>=3.0.4
|
|
33
33
|
Provides-Extra: avro
|
|
34
34
|
Requires-Dist: avro==1.12.0; extra == "avro"
|
|
@@ -42,7 +42,7 @@ Provides-Extra: databricks
|
|
|
42
42
|
Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
|
|
43
43
|
Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
|
|
44
44
|
Requires-Dist: databricks-sql-connector<4.1.0,>=3.7.0; extra == "databricks"
|
|
45
|
-
Requires-Dist: databricks-sdk<0.
|
|
45
|
+
Requires-Dist: databricks-sdk<0.68.0; extra == "databricks"
|
|
46
46
|
Requires-Dist: pyspark<4.0.0,>=3.5.5; extra == "databricks"
|
|
47
47
|
Provides-Extra: iceberg
|
|
48
48
|
Requires-Dist: pyiceberg==0.9.1; extra == "iceberg"
|
|
@@ -56,7 +56,7 @@ Provides-Extra: s3
|
|
|
56
56
|
Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
|
|
57
57
|
Requires-Dist: aiobotocore<2.25.0,>=2.17.0; extra == "s3"
|
|
58
58
|
Provides-Extra: snowflake
|
|
59
|
-
Requires-Dist: snowflake-connector-python[pandas]<
|
|
59
|
+
Requires-Dist: snowflake-connector-python[pandas]<4.1,>=3.6; extra == "snowflake"
|
|
60
60
|
Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
|
|
61
61
|
Provides-Extra: sqlserver
|
|
62
62
|
Requires-Dist: soda-core-sqlserver<3.6.0,>=3.3.20; extra == "sqlserver"
|
|
@@ -83,7 +83,7 @@ Provides-Extra: dev
|
|
|
83
83
|
Requires-Dist: datacontract-cli[all]; extra == "dev"
|
|
84
84
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
85
85
|
Requires-Dist: kafka-python; extra == "dev"
|
|
86
|
-
Requires-Dist: moto==5.1.
|
|
86
|
+
Requires-Dist: moto==5.1.13; extra == "dev"
|
|
87
87
|
Requires-Dist: pandas>=2.1.0; extra == "dev"
|
|
88
88
|
Requires-Dist: pre-commit<4.4.0,>=3.7.1; extra == "dev"
|
|
89
89
|
Requires-Dist: pytest; extra == "dev"
|
|
@@ -119,9 +119,9 @@ We have a _servers_ section with endpoint details to the S3 bucket, _models_ for
|
|
|
119
119
|
|
|
120
120
|
This data contract contains all information to connect to S3 and check that the actual data meets the defined schema and quality requirements. We can use this information to test if the actual data product in S3 is compliant to the data contract.
|
|
121
121
|
|
|
122
|
-
Let's use [
|
|
122
|
+
Let's use [uv](https://docs.astral.sh/uv/) to install the CLI (or use the [Docker image](#docker)),
|
|
123
123
|
```bash
|
|
124
|
-
$
|
|
124
|
+
$ uv tool install --python python3.11 'datacontract-cli[all]'
|
|
125
125
|
```
|
|
126
126
|
|
|
127
127
|
|
|
@@ -1540,18 +1540,22 @@ datacontract import --format bigquery --bigquery-project <project_id> --bigquery
|
|
|
1540
1540
|
```
|
|
1541
1541
|
|
|
1542
1542
|
#### Unity Catalog
|
|
1543
|
-
|
|
1544
1543
|
```bash
|
|
1545
1544
|
# Example import from a Unity Catalog JSON file
|
|
1546
1545
|
datacontract import --format unity --source my_unity_table.json
|
|
1547
1546
|
```
|
|
1548
1547
|
|
|
1549
1548
|
```bash
|
|
1550
|
-
# Example import single table from Unity Catalog via HTTP endpoint
|
|
1549
|
+
# Example import single table from Unity Catalog via HTTP endpoint using PAT
|
|
1551
1550
|
export DATACONTRACT_DATABRICKS_SERVER_HOSTNAME="https://xyz.cloud.databricks.com"
|
|
1552
|
-
export DATACONTRACT_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/b053a331fa014fb4"
|
|
1553
1551
|
export DATACONTRACT_DATABRICKS_TOKEN=<token>
|
|
1554
1552
|
datacontract import --format unity --unity-table-full-name <table_full_name>
|
|
1553
|
+
```
|
|
1554
|
+
Please Refer to [Databricks documentation](https://docs.databricks.com/aws/en/dev-tools/auth/unified-auth) on how to set up a profile
|
|
1555
|
+
```bash
|
|
1556
|
+
# Example import single table from Unity Catalog via HTTP endpoint using Profile
|
|
1557
|
+
export DATACONTRACT_DATABRICKS_PROFILE="my-profile"
|
|
1558
|
+
datacontract import --format unity --unity-table-full-name <table_full_name>
|
|
1555
1559
|
```
|
|
1556
1560
|
|
|
1557
1561
|
#### dbt
|
|
@@ -1610,20 +1614,20 @@ datacontract import --format spark --source "users,orders"
|
|
|
1610
1614
|
|
|
1611
1615
|
```bash
|
|
1612
1616
|
# Example: Import Spark table
|
|
1613
|
-
DataContract
|
|
1614
|
-
DataContract
|
|
1617
|
+
DataContract.import_from_source("spark", "users")
|
|
1618
|
+
DataContract.import_from_source(format = "spark", source = "users")
|
|
1615
1619
|
|
|
1616
1620
|
# Example: Import Spark dataframe
|
|
1617
|
-
DataContract
|
|
1618
|
-
DataContract
|
|
1621
|
+
DataContract.import_from_source("spark", "users", dataframe = df_user)
|
|
1622
|
+
DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user)
|
|
1619
1623
|
|
|
1620
1624
|
# Example: Import Spark table + table description
|
|
1621
|
-
DataContract
|
|
1622
|
-
DataContract
|
|
1625
|
+
DataContract.import_from_source("spark", "users", description = "description")
|
|
1626
|
+
DataContract.import_from_source(format = "spark", source = "users", description = "description")
|
|
1623
1627
|
|
|
1624
1628
|
# Example: Import Spark dataframe + table description
|
|
1625
|
-
DataContract
|
|
1626
|
-
DataContract
|
|
1629
|
+
DataContract.import_from_source("spark", "users", dataframe = df_user, description = "description")
|
|
1630
|
+
DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
|
|
1627
1631
|
```
|
|
1628
1632
|
|
|
1629
1633
|
#### DBML
|
|
@@ -1868,8 +1872,7 @@ Create a data contract based on the actual data. This is the fastest way to get
|
|
|
1868
1872
|
$ datacontract test
|
|
1869
1873
|
```
|
|
1870
1874
|
|
|
1871
|
-
3.
|
|
1872
|
-
probably forgot to document some fields and add the terms and conditions.
|
|
1875
|
+
3. Validate that the `datacontract.yaml` is correctly formatted and adheres to the Data Contract Specification.
|
|
1873
1876
|
```bash
|
|
1874
1877
|
$ datacontract lint
|
|
1875
1878
|
```
|
|
@@ -1890,8 +1893,7 @@ Create a data contract based on the requirements from use cases.
|
|
|
1890
1893
|
```
|
|
1891
1894
|
|
|
1892
1895
|
2. Create the model and quality guarantees based on your business requirements. Fill in the terms,
|
|
1893
|
-
descriptions, etc.
|
|
1894
|
-
linter.
|
|
1896
|
+
descriptions, etc. Validate that your `datacontract.yaml` is correctly formatted.
|
|
1895
1897
|
```bash
|
|
1896
1898
|
$ datacontract lint
|
|
1897
1899
|
```
|
|
@@ -2085,7 +2087,7 @@ if __name__ == "__main__":
|
|
|
2085
2087
|
Output
|
|
2086
2088
|
|
|
2087
2089
|
```yaml
|
|
2088
|
-
dataContractSpecification: 1.2.
|
|
2090
|
+
dataContractSpecification: 1.2.1
|
|
2089
2091
|
id: uuid-custom
|
|
2090
2092
|
info:
|
|
2091
2093
|
title: my_custom_imported_data
|
|
@@ -2111,6 +2113,7 @@ models:
|
|
|
2111
2113
|
```bash
|
|
2112
2114
|
# make sure uv is installed
|
|
2113
2115
|
uv python pin 3.11
|
|
2116
|
+
uv venv
|
|
2114
2117
|
uv pip install -e '.[dev]'
|
|
2115
2118
|
uv run ruff check
|
|
2116
2119
|
uv run pytest
|
|
@@ -23,9 +23,9 @@ We have a _servers_ section with endpoint details to the S3 bucket, _models_ for
|
|
|
23
23
|
|
|
24
24
|
This data contract contains all information to connect to S3 and check that the actual data meets the defined schema and quality requirements. We can use this information to test if the actual data product in S3 is compliant to the data contract.
|
|
25
25
|
|
|
26
|
-
Let's use [
|
|
26
|
+
Let's use [uv](https://docs.astral.sh/uv/) to install the CLI (or use the [Docker image](#docker)),
|
|
27
27
|
```bash
|
|
28
|
-
$
|
|
28
|
+
$ uv tool install --python python3.11 'datacontract-cli[all]'
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
|
|
@@ -1444,18 +1444,22 @@ datacontract import --format bigquery --bigquery-project <project_id> --bigquery
|
|
|
1444
1444
|
```
|
|
1445
1445
|
|
|
1446
1446
|
#### Unity Catalog
|
|
1447
|
-
|
|
1448
1447
|
```bash
|
|
1449
1448
|
# Example import from a Unity Catalog JSON file
|
|
1450
1449
|
datacontract import --format unity --source my_unity_table.json
|
|
1451
1450
|
```
|
|
1452
1451
|
|
|
1453
1452
|
```bash
|
|
1454
|
-
# Example import single table from Unity Catalog via HTTP endpoint
|
|
1453
|
+
# Example import single table from Unity Catalog via HTTP endpoint using PAT
|
|
1455
1454
|
export DATACONTRACT_DATABRICKS_SERVER_HOSTNAME="https://xyz.cloud.databricks.com"
|
|
1456
|
-
export DATACONTRACT_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/b053a331fa014fb4"
|
|
1457
1455
|
export DATACONTRACT_DATABRICKS_TOKEN=<token>
|
|
1458
1456
|
datacontract import --format unity --unity-table-full-name <table_full_name>
|
|
1457
|
+
```
|
|
1458
|
+
Please Refer to [Databricks documentation](https://docs.databricks.com/aws/en/dev-tools/auth/unified-auth) on how to set up a profile
|
|
1459
|
+
```bash
|
|
1460
|
+
# Example import single table from Unity Catalog via HTTP endpoint using Profile
|
|
1461
|
+
export DATACONTRACT_DATABRICKS_PROFILE="my-profile"
|
|
1462
|
+
datacontract import --format unity --unity-table-full-name <table_full_name>
|
|
1459
1463
|
```
|
|
1460
1464
|
|
|
1461
1465
|
#### dbt
|
|
@@ -1514,20 +1518,20 @@ datacontract import --format spark --source "users,orders"
|
|
|
1514
1518
|
|
|
1515
1519
|
```bash
|
|
1516
1520
|
# Example: Import Spark table
|
|
1517
|
-
DataContract
|
|
1518
|
-
DataContract
|
|
1521
|
+
DataContract.import_from_source("spark", "users")
|
|
1522
|
+
DataContract.import_from_source(format = "spark", source = "users")
|
|
1519
1523
|
|
|
1520
1524
|
# Example: Import Spark dataframe
|
|
1521
|
-
DataContract
|
|
1522
|
-
DataContract
|
|
1525
|
+
DataContract.import_from_source("spark", "users", dataframe = df_user)
|
|
1526
|
+
DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user)
|
|
1523
1527
|
|
|
1524
1528
|
# Example: Import Spark table + table description
|
|
1525
|
-
DataContract
|
|
1526
|
-
DataContract
|
|
1529
|
+
DataContract.import_from_source("spark", "users", description = "description")
|
|
1530
|
+
DataContract.import_from_source(format = "spark", source = "users", description = "description")
|
|
1527
1531
|
|
|
1528
1532
|
# Example: Import Spark dataframe + table description
|
|
1529
|
-
DataContract
|
|
1530
|
-
DataContract
|
|
1533
|
+
DataContract.import_from_source("spark", "users", dataframe = df_user, description = "description")
|
|
1534
|
+
DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
|
|
1531
1535
|
```
|
|
1532
1536
|
|
|
1533
1537
|
#### DBML
|
|
@@ -1772,8 +1776,7 @@ Create a data contract based on the actual data. This is the fastest way to get
|
|
|
1772
1776
|
$ datacontract test
|
|
1773
1777
|
```
|
|
1774
1778
|
|
|
1775
|
-
3.
|
|
1776
|
-
probably forgot to document some fields and add the terms and conditions.
|
|
1779
|
+
3. Validate that the `datacontract.yaml` is correctly formatted and adheres to the Data Contract Specification.
|
|
1777
1780
|
```bash
|
|
1778
1781
|
$ datacontract lint
|
|
1779
1782
|
```
|
|
@@ -1794,8 +1797,7 @@ Create a data contract based on the requirements from use cases.
|
|
|
1794
1797
|
```
|
|
1795
1798
|
|
|
1796
1799
|
2. Create the model and quality guarantees based on your business requirements. Fill in the terms,
|
|
1797
|
-
descriptions, etc.
|
|
1798
|
-
linter.
|
|
1800
|
+
descriptions, etc. Validate that your `datacontract.yaml` is correctly formatted.
|
|
1799
1801
|
```bash
|
|
1800
1802
|
$ datacontract lint
|
|
1801
1803
|
```
|
|
@@ -1989,7 +1991,7 @@ if __name__ == "__main__":
|
|
|
1989
1991
|
Output
|
|
1990
1992
|
|
|
1991
1993
|
```yaml
|
|
1992
|
-
dataContractSpecification: 1.2.
|
|
1994
|
+
dataContractSpecification: 1.2.1
|
|
1993
1995
|
id: uuid-custom
|
|
1994
1996
|
info:
|
|
1995
1997
|
title: my_custom_imported_data
|
|
@@ -2015,6 +2017,7 @@ models:
|
|
|
2015
2017
|
```bash
|
|
2016
2018
|
# make sure uv is installed
|
|
2017
2019
|
uv python pin 3.11
|
|
2020
|
+
uv venv
|
|
2018
2021
|
uv pip install -e '.[dev]'
|
|
2019
2022
|
uv run ruff check
|
|
2020
2023
|
uv run pytest
|
|
@@ -10,7 +10,7 @@ from fastapi.security.api_key import APIKeyHeader
|
|
|
10
10
|
from datacontract.data_contract import DataContract, ExportFormat
|
|
11
11
|
from datacontract.model.run import Run
|
|
12
12
|
|
|
13
|
-
DATA_CONTRACT_EXAMPLE_PAYLOAD = """dataContractSpecification: 1.2.
|
|
13
|
+
DATA_CONTRACT_EXAMPLE_PAYLOAD = """dataContractSpecification: 1.2.1
|
|
14
14
|
id: urn:datacontract:checkout:orders-latest
|
|
15
15
|
info:
|
|
16
16
|
title: Orders Latest
|
|
@@ -331,7 +331,7 @@ def import_(
|
|
|
331
331
|
"""
|
|
332
332
|
Create a data contract from the given source location. Saves to file specified by `output` option if present, otherwise prints to stdout.
|
|
333
333
|
"""
|
|
334
|
-
result = DataContract
|
|
334
|
+
result = DataContract.import_from_source(
|
|
335
335
|
format=format,
|
|
336
336
|
source=source,
|
|
337
337
|
spec=spec,
|
|
@@ -26,11 +26,6 @@ from datacontract.imports.importer_factory import importer_factory
|
|
|
26
26
|
from datacontract.init.init_template import get_init_template
|
|
27
27
|
from datacontract.integration.datamesh_manager import publish_test_results_to_datamesh_manager
|
|
28
28
|
from datacontract.lint import resolve
|
|
29
|
-
from datacontract.lint.linters.description_linter import DescriptionLinter
|
|
30
|
-
from datacontract.lint.linters.field_pattern_linter import FieldPatternLinter
|
|
31
|
-
from datacontract.lint.linters.field_reference_linter import FieldReferenceLinter
|
|
32
|
-
from datacontract.lint.linters.notice_period_linter import NoticePeriodLinter
|
|
33
|
-
from datacontract.lint.linters.valid_constraints_linter import ValidFieldConstraintsLinter
|
|
34
29
|
from datacontract.model.data_contract_specification import DataContractSpecification, Info
|
|
35
30
|
from datacontract.model.exceptions import DataContractException
|
|
36
31
|
from datacontract.model.run import Check, ResultEnum, Run
|
|
@@ -64,24 +59,14 @@ class DataContract:
|
|
|
64
59
|
self._inline_definitions = inline_definitions
|
|
65
60
|
self._inline_quality = inline_quality
|
|
66
61
|
self._ssl_verification = ssl_verification
|
|
67
|
-
self.all_linters = {
|
|
68
|
-
FieldPatternLinter(),
|
|
69
|
-
FieldReferenceLinter(),
|
|
70
|
-
NoticePeriodLinter(),
|
|
71
|
-
ValidFieldConstraintsLinter(),
|
|
72
|
-
DescriptionLinter(),
|
|
73
|
-
}
|
|
74
62
|
|
|
75
63
|
@classmethod
|
|
76
64
|
def init(cls, template: typing.Optional[str], schema: typing.Optional[str] = None) -> DataContractSpecification:
|
|
77
65
|
template_str = get_init_template(template)
|
|
78
66
|
return resolve.resolve_data_contract(data_contract_str=template_str, schema_location=schema)
|
|
79
67
|
|
|
80
|
-
def lint(self
|
|
81
|
-
"""Lint the data contract by
|
|
82
|
-
|
|
83
|
-
enabled_linters can be either "all" or "none", or a set of linter IDs. The "schema" linter is always enabled, even with enabled_linters="none".
|
|
84
|
-
"""
|
|
68
|
+
def lint(self) -> Run:
|
|
69
|
+
"""Lint the data contract by validating it against the JSON schema."""
|
|
85
70
|
run = Run.create_run()
|
|
86
71
|
try:
|
|
87
72
|
run.log_info("Linting data contract")
|
|
@@ -101,27 +86,6 @@ class DataContract:
|
|
|
101
86
|
engine="datacontract",
|
|
102
87
|
)
|
|
103
88
|
)
|
|
104
|
-
if enabled_linters == "none":
|
|
105
|
-
linters_to_check = set()
|
|
106
|
-
elif enabled_linters == "all":
|
|
107
|
-
linters_to_check = self.all_linters
|
|
108
|
-
elif isinstance(enabled_linters, set):
|
|
109
|
-
linters_to_check = {linter for linter in self.all_linters if linter.id in enabled_linters}
|
|
110
|
-
else:
|
|
111
|
-
raise RuntimeError(f"Unknown argument enabled_linters={enabled_linters} for lint()")
|
|
112
|
-
for linter in linters_to_check:
|
|
113
|
-
try:
|
|
114
|
-
run.checks.extend(linter.lint(data_contract))
|
|
115
|
-
except Exception as e:
|
|
116
|
-
run.checks.append(
|
|
117
|
-
Check(
|
|
118
|
-
type="general",
|
|
119
|
-
result=ResultEnum.error,
|
|
120
|
-
name=f"Linter '{linter.name}'",
|
|
121
|
-
reason=str(e),
|
|
122
|
-
engine="datacontract",
|
|
123
|
-
)
|
|
124
|
-
)
|
|
125
89
|
run.dataContractId = data_contract.id
|
|
126
90
|
run.dataContractVersion = data_contract.info.version
|
|
127
91
|
except DataContractException as e:
|
|
@@ -292,10 +256,9 @@ class DataContract:
|
|
|
292
256
|
export_args=kwargs,
|
|
293
257
|
)
|
|
294
258
|
|
|
295
|
-
|
|
296
|
-
# could be a class method, not using anything from the instance
|
|
259
|
+
@classmethod
|
|
297
260
|
def import_from_source(
|
|
298
|
-
|
|
261
|
+
cls,
|
|
299
262
|
format: str,
|
|
300
263
|
source: typing.Optional[str] = None,
|
|
301
264
|
template: typing.Optional[str] = None,
|
|
@@ -307,7 +270,7 @@ class DataContract:
|
|
|
307
270
|
owner = kwargs.get("owner")
|
|
308
271
|
|
|
309
272
|
if spec == Spec.odcs or format == ImportFormat.excel:
|
|
310
|
-
data_contract_specification_initial =
|
|
273
|
+
data_contract_specification_initial = cls.init(template=template, schema=schema)
|
|
311
274
|
|
|
312
275
|
odcs_imported = importer_factory.create(format).import_source(
|
|
313
276
|
data_contract_specification=data_contract_specification_initial, source=source, import_args=kwargs
|
|
@@ -317,12 +280,12 @@ class DataContract:
|
|
|
317
280
|
# convert automatically
|
|
318
281
|
odcs_imported = to_odcs_v3(odcs_imported)
|
|
319
282
|
|
|
320
|
-
|
|
321
|
-
|
|
283
|
+
cls._overwrite_id_in_odcs(odcs_imported, id)
|
|
284
|
+
cls._overwrite_owner_in_odcs(odcs_imported, owner)
|
|
322
285
|
|
|
323
286
|
return odcs_imported
|
|
324
287
|
elif spec == Spec.datacontract_specification:
|
|
325
|
-
data_contract_specification_initial =
|
|
288
|
+
data_contract_specification_initial = cls.init(template=template, schema=schema)
|
|
326
289
|
|
|
327
290
|
data_contract_specification_imported = importer_factory.create(format).import_source(
|
|
328
291
|
data_contract_specification=data_contract_specification_initial, source=source, import_args=kwargs
|
|
@@ -334,8 +297,8 @@ class DataContract:
|
|
|
334
297
|
data_contract_specification_initial, data_contract_specification_imported
|
|
335
298
|
)
|
|
336
299
|
|
|
337
|
-
|
|
338
|
-
|
|
300
|
+
cls._overwrite_id_in_data_contract_specification(data_contract_specification_imported, id)
|
|
301
|
+
cls._overwrite_owner_in_data_contract_specification(data_contract_specification_imported, owner)
|
|
339
302
|
|
|
340
303
|
return data_contract_specification_imported
|
|
341
304
|
else:
|
|
@@ -347,16 +310,18 @@ class DataContract:
|
|
|
347
310
|
engine="datacontract",
|
|
348
311
|
)
|
|
349
312
|
|
|
313
|
+
@staticmethod
|
|
350
314
|
def _overwrite_id_in_data_contract_specification(
|
|
351
|
-
|
|
315
|
+
data_contract_specification: DataContractSpecification, id: str | None
|
|
352
316
|
):
|
|
353
317
|
if not id:
|
|
354
318
|
return
|
|
355
319
|
|
|
356
320
|
data_contract_specification.id = id
|
|
357
321
|
|
|
322
|
+
@staticmethod
|
|
358
323
|
def _overwrite_owner_in_data_contract_specification(
|
|
359
|
-
|
|
324
|
+
data_contract_specification: DataContractSpecification, owner: str | None
|
|
360
325
|
):
|
|
361
326
|
if not owner:
|
|
362
327
|
return
|
|
@@ -365,7 +330,8 @@ class DataContract:
|
|
|
365
330
|
data_contract_specification.info = Info()
|
|
366
331
|
data_contract_specification.info.owner = owner
|
|
367
332
|
|
|
368
|
-
|
|
333
|
+
@staticmethod
|
|
334
|
+
def _overwrite_owner_in_odcs(odcs: OpenDataContractStandard, owner: str | None):
|
|
369
335
|
if not owner:
|
|
370
336
|
return
|
|
371
337
|
|
|
@@ -377,7 +343,8 @@ class DataContract:
|
|
|
377
343
|
return
|
|
378
344
|
odcs.customProperties.append(CustomProperty(property="owner", value=owner))
|
|
379
345
|
|
|
380
|
-
|
|
346
|
+
@staticmethod
|
|
347
|
+
def _overwrite_id_in_odcs(odcs: OpenDataContractStandard, id: str | None):
|
|
381
348
|
if not id:
|
|
382
349
|
return
|
|
383
350
|
|