datacontract-cli 0.10.29__tar.gz → 0.10.31__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.29/datacontract_cli.egg-info → datacontract_cli-0.10.31}/PKG-INFO +6 -9
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/README.md +0 -3
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/data_contract.py +2 -2
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/great_expectations_converter.py +6 -3
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/markdown_converter.py +1 -1
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/spark_converter.py +3 -1
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/excel_importer.py +5 -5
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/sql_importer.py +2 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/unity_importer.py +2 -1
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31/datacontract_cli.egg-info}/PKG-INFO +6 -9
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/SOURCES.txt +1 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/requires.txt +5 -5
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/pyproject.toml +6 -6
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_excel.py +1 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_spark.py +1 -1
- datacontract_cli-0.10.31/tests/test_test_gcs_csv_remote.py +45 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_csv.py +1 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/LICENSE +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/MANIFEST.in +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/__init__.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/api.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/breaking/breaking.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/breaking/breaking_change.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/breaking/breaking_rules.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/catalog/catalog.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/cli.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/data_contract_checks.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/data_contract_test.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/__init__.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/check_soda_execute.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/bigquery.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/databricks.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/kafka.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/postgres.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/snowflake.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/sqlserver.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/trino.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/avro_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/avro_idl_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/bigquery_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/custom_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/data_caterer_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/dbml_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/dbt_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/exporter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/exporter_factory.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/go_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/iceberg_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/jsonschema_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/protobuf_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/pydantic_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/rdf_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sodacl_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sql_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sql_type_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sqlalchemy_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/terraform_converter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/avro_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/odcs_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/odcs_v3_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/spark_importer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/integration/datamesh_manager.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/files.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/lint.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/__init__.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/description_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/field_pattern_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/field_reference_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/notice_period_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/valid_constraints_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/resolve.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/model/data_contract_specification/__init__.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/model/run.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/output/__init__.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/output/test_results_writer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/py.typed +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/datacontract_odcs.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/index.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/setup.cfg +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_api.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_breaking.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_catalog.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_changelog.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_cli.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_description_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_documentation_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_avro.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_custom.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_dbt_models.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_go.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_html.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_rdf.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_sodacl.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_spark.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_sql.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_terraform.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_field_constraint_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_field_pattern_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_field_reference_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_avro.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_csv.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_dbt.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_glue.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_json.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_jsonschema.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_odcs_v3.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_integration_datameshmanager.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_lint.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_notice_period_linter.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_resolve.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_spec_fields_field.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_spec_ref.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_dataframe.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_delta.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_postgres.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_quality.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/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.31
|
|
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.17,>=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
|
|
@@ -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.59.0; extra == "databricks"
|
|
46
46
|
Requires-Dist: pyspark<4.0.0,>=3.5.5; extra == "databricks"
|
|
47
47
|
Provides-Extra: iceberg
|
|
48
48
|
Requires-Dist: pyiceberg==0.9.1; extra == "iceberg"
|
|
@@ -54,7 +54,7 @@ Provides-Extra: postgres
|
|
|
54
54
|
Requires-Dist: soda-core-postgres<3.6.0,>=3.3.20; extra == "postgres"
|
|
55
55
|
Provides-Extra: s3
|
|
56
56
|
Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
|
|
57
|
-
Requires-Dist: aiobotocore<2.
|
|
57
|
+
Requires-Dist: aiobotocore<2.24.0,>=2.17.0; extra == "s3"
|
|
58
58
|
Provides-Extra: snowflake
|
|
59
59
|
Requires-Dist: snowflake-connector-python[pandas]<3.16,>=3.6; extra == "snowflake"
|
|
60
60
|
Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
|
|
@@ -71,7 +71,7 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
|
|
|
71
71
|
Provides-Extra: rdf
|
|
72
72
|
Requires-Dist: rdflib==7.0.0; extra == "rdf"
|
|
73
73
|
Provides-Extra: api
|
|
74
|
-
Requires-Dist: fastapi==0.
|
|
74
|
+
Requires-Dist: fastapi==0.116.1; extra == "api"
|
|
75
75
|
Requires-Dist: uvicorn==0.35.0; extra == "api"
|
|
76
76
|
Provides-Extra: protobuf
|
|
77
77
|
Requires-Dist: grpcio-tools>=1.53; extra == "protobuf"
|
|
@@ -86,7 +86,7 @@ Requires-Dist: pandas>=2.1.0; extra == "dev"
|
|
|
86
86
|
Requires-Dist: pre-commit<4.3.0,>=3.7.1; extra == "dev"
|
|
87
87
|
Requires-Dist: pytest; extra == "dev"
|
|
88
88
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
89
|
-
Requires-Dist: pymssql==2.3.
|
|
89
|
+
Requires-Dist: pymssql==2.3.7; extra == "dev"
|
|
90
90
|
Requires-Dist: ruff; extra == "dev"
|
|
91
91
|
Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.10.0; extra == "dev"
|
|
92
92
|
Requires-Dist: trino==0.335.0; extra == "dev"
|
|
@@ -1018,8 +1018,6 @@ If using Databricks, and an error is thrown when trying to deploy the SQL DDLs w
|
|
|
1018
1018
|
|
|
1019
1019
|
```shell
|
|
1020
1020
|
spark.conf.set(“spark.databricks.delta.schema.typeCheck.enabled”, “false”)
|
|
1021
|
-
from datacontract.model import data_contract_specification
|
|
1022
|
-
data_contract_specification.DATACONTRACT_TYPES.append(“variant”)
|
|
1023
1021
|
```
|
|
1024
1022
|
|
|
1025
1023
|
#### Great Expectations
|
|
@@ -2083,7 +2081,6 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2083
2081
|
- [INNOQ](https://innoq.com)
|
|
2084
2082
|
- [Data Catering](https://data.catering/)
|
|
2085
2083
|
- [Oliver Wyman](https://www.oliverwyman.com/)
|
|
2086
|
-
- [dmTECH](https://www.dmtech.tech/de)
|
|
2087
2084
|
- And many more. To add your company, please create a pull request.
|
|
2088
2085
|
|
|
2089
2086
|
## Related Tools
|
|
@@ -924,8 +924,6 @@ If using Databricks, and an error is thrown when trying to deploy the SQL DDLs w
|
|
|
924
924
|
|
|
925
925
|
```shell
|
|
926
926
|
spark.conf.set(“spark.databricks.delta.schema.typeCheck.enabled”, “false”)
|
|
927
|
-
from datacontract.model import data_contract_specification
|
|
928
|
-
data_contract_specification.DATACONTRACT_TYPES.append(“variant”)
|
|
929
927
|
```
|
|
930
928
|
|
|
931
929
|
#### Great Expectations
|
|
@@ -1989,7 +1987,6 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
1989
1987
|
- [INNOQ](https://innoq.com)
|
|
1990
1988
|
- [Data Catering](https://data.catering/)
|
|
1991
1989
|
- [Oliver Wyman](https://www.oliverwyman.com/)
|
|
1992
|
-
- [dmTECH](https://www.dmtech.tech/de)
|
|
1993
1990
|
- And many more. To add your company, please create a pull request.
|
|
1994
1991
|
|
|
1995
1992
|
## Related Tools
|
|
@@ -4,7 +4,7 @@ import typing
|
|
|
4
4
|
from open_data_contract_standard.model import CustomProperty, OpenDataContractStandard
|
|
5
5
|
|
|
6
6
|
from datacontract.export.odcs_v3_exporter import to_odcs_v3
|
|
7
|
-
from datacontract.imports.importer import Spec
|
|
7
|
+
from datacontract.imports.importer import ImportFormat, Spec
|
|
8
8
|
from datacontract.imports.odcs_v3_importer import import_from_odcs
|
|
9
9
|
|
|
10
10
|
if typing.TYPE_CHECKING:
|
|
@@ -300,7 +300,7 @@ class DataContract:
|
|
|
300
300
|
id = kwargs.get("id")
|
|
301
301
|
owner = kwargs.get("owner")
|
|
302
302
|
|
|
303
|
-
if spec == Spec.odcs:
|
|
303
|
+
if spec == Spec.odcs or format == ImportFormat.excel:
|
|
304
304
|
data_contract_specification_initial = DataContract.init(template=template, schema=schema)
|
|
305
305
|
|
|
306
306
|
odcs_imported = importer_factory.create(format).import_source(
|
|
@@ -14,9 +14,6 @@ from datacontract.export.exporter import (
|
|
|
14
14
|
Exporter,
|
|
15
15
|
_check_models_for_export,
|
|
16
16
|
)
|
|
17
|
-
from datacontract.export.pandas_type_converter import convert_to_pandas_type
|
|
18
|
-
from datacontract.export.spark_converter import to_spark_data_type
|
|
19
|
-
from datacontract.export.sql_type_converter import convert_to_sql_type
|
|
20
17
|
from datacontract.model.data_contract_specification import (
|
|
21
18
|
DataContractSpecification,
|
|
22
19
|
DeprecatedQuality,
|
|
@@ -167,10 +164,16 @@ def add_field_expectations(
|
|
|
167
164
|
"""
|
|
168
165
|
if field.type is not None:
|
|
169
166
|
if engine == GreatExpectationsEngine.spark.value:
|
|
167
|
+
from datacontract.export.spark_converter import to_spark_data_type
|
|
168
|
+
|
|
170
169
|
field_type = to_spark_data_type(field).__class__.__name__
|
|
171
170
|
elif engine == GreatExpectationsEngine.pandas.value:
|
|
171
|
+
from datacontract.export.pandas_type_converter import convert_to_pandas_type
|
|
172
|
+
|
|
172
173
|
field_type = convert_to_pandas_type(field)
|
|
173
174
|
elif engine == GreatExpectationsEngine.sql.value:
|
|
175
|
+
from datacontract.export.sql_type_converter import convert_to_sql_type
|
|
176
|
+
|
|
174
177
|
field_type = convert_to_sql_type(field, sql_server_type)
|
|
175
178
|
else:
|
|
176
179
|
field_type = field.type
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/markdown_converter.py
RENAMED
|
@@ -153,7 +153,7 @@ def field_to_markdown(field_name: str, field: Field, level: int = 0) -> str:
|
|
|
153
153
|
Returns:
|
|
154
154
|
str: A Markdown table rows for the field.
|
|
155
155
|
"""
|
|
156
|
-
tabs = "
|
|
156
|
+
tabs = " " * level
|
|
157
157
|
arrow = "↳" if level > 0 else ""
|
|
158
158
|
column_name = f"{tabs}{arrow} {field_name}"
|
|
159
159
|
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/spark_converter.py
RENAMED
|
@@ -126,6 +126,8 @@ def to_spark_data_type(field: Field) -> types.DataType:
|
|
|
126
126
|
return types.StructType(to_struct_type(field.fields))
|
|
127
127
|
if field_type == "map":
|
|
128
128
|
return types.MapType(to_spark_data_type(field.keys), to_spark_data_type(field.values))
|
|
129
|
+
if field_type == "variant":
|
|
130
|
+
return types.VariantType()
|
|
129
131
|
if field_type in ["string", "varchar", "text"]:
|
|
130
132
|
return types.StringType()
|
|
131
133
|
if field_type in ["number", "decimal", "numeric"]:
|
|
@@ -150,7 +152,7 @@ def to_spark_data_type(field: Field) -> types.DataType:
|
|
|
150
152
|
return types.DateType()
|
|
151
153
|
if field_type == "bytes":
|
|
152
154
|
return types.BinaryType()
|
|
153
|
-
return types.
|
|
155
|
+
return types.StringType() # default if no condition is met
|
|
154
156
|
|
|
155
157
|
|
|
156
158
|
def print_schema(dtype: types.DataType) -> str:
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/excel_importer.py
RENAMED
|
@@ -680,7 +680,7 @@ def import_servers(workbook) -> Optional[List[Server]]:
|
|
|
680
680
|
elif server_type == "databricks":
|
|
681
681
|
server.catalog = get_server_cell_value(workbook, sheet, "servers.databricks.catalog", index)
|
|
682
682
|
server.host = get_server_cell_value(workbook, sheet, "servers.databricks.host", index)
|
|
683
|
-
server.
|
|
683
|
+
server.schema_ = get_server_cell_value(workbook, sheet, "servers.databricks.schema", index)
|
|
684
684
|
elif server_type == "glue":
|
|
685
685
|
server.account = get_server_cell_value(workbook, sheet, "servers.glue.account", index)
|
|
686
686
|
server.database = get_server_cell_value(workbook, sheet, "servers.glue.database", index)
|
|
@@ -694,7 +694,7 @@ def import_servers(workbook) -> Optional[List[Server]]:
|
|
|
694
694
|
server.database = get_server_cell_value(workbook, sheet, "servers.postgres.database", index)
|
|
695
695
|
server.host = get_server_cell_value(workbook, sheet, "servers.postgres.host", index)
|
|
696
696
|
server.port = get_server_cell_value(workbook, sheet, "servers.postgres.port", index)
|
|
697
|
-
server.
|
|
697
|
+
server.schema_ = get_server_cell_value(workbook, sheet, "servers.postgres.schema", index)
|
|
698
698
|
elif server_type == "s3":
|
|
699
699
|
server.delimiter = get_server_cell_value(workbook, sheet, "servers.s3.delimiter", index)
|
|
700
700
|
server.endpointUrl = get_server_cell_value(workbook, sheet, "servers.s3.endpointUrl", index)
|
|
@@ -705,13 +705,13 @@ def import_servers(workbook) -> Optional[List[Server]]:
|
|
|
705
705
|
server.database = get_server_cell_value(workbook, sheet, "servers.snowflake.database", index)
|
|
706
706
|
server.host = get_server_cell_value(workbook, sheet, "servers.snowflake.host", index)
|
|
707
707
|
server.port = get_server_cell_value(workbook, sheet, "servers.snowflake.port", index)
|
|
708
|
-
server.
|
|
708
|
+
server.schema_ = get_server_cell_value(workbook, sheet, "servers.snowflake.schema", index)
|
|
709
709
|
server.warehouse = get_server_cell_value(workbook, sheet, "servers.snowflake.warehouse", index)
|
|
710
710
|
elif server_type == "sqlserver":
|
|
711
711
|
server.database = get_server_cell_value(workbook, sheet, "servers.sqlserver.database", index)
|
|
712
712
|
server.host = get_server_cell_value(workbook, sheet, "servers.sqlserver.host", index)
|
|
713
713
|
server.port = get_server_cell_value(workbook, sheet, "servers.sqlserver.port", index)
|
|
714
|
-
server.
|
|
714
|
+
server.schema_ = get_server_cell_value(workbook, sheet, "servers.sqlserver.schema", index)
|
|
715
715
|
else:
|
|
716
716
|
# Custom server type - grab all possible fields
|
|
717
717
|
server.account = get_server_cell_value(workbook, sheet, "servers.custom.account", index)
|
|
@@ -726,7 +726,7 @@ def import_servers(workbook) -> Optional[List[Server]]:
|
|
|
726
726
|
server.path = get_server_cell_value(workbook, sheet, "servers.custom.path", index)
|
|
727
727
|
server.port = get_server_cell_value(workbook, sheet, "servers.custom.port", index)
|
|
728
728
|
server.project = get_server_cell_value(workbook, sheet, "servers.custom.project", index)
|
|
729
|
-
server.
|
|
729
|
+
server.schema_ = get_server_cell_value(workbook, sheet, "servers.custom.schema", index)
|
|
730
730
|
server.stagingDir = get_server_cell_value(workbook, sheet, "servers.custom.stagingDir", index)
|
|
731
731
|
server.table = get_server_cell_value(workbook, sheet, "servers.custom.table", index)
|
|
732
732
|
server.view = get_server_cell_value(workbook, sheet, "servers.custom.view", index)
|
|
@@ -230,6 +230,8 @@ def map_type_from_sql(sql_type: str) -> str | None:
|
|
|
230
230
|
return "int"
|
|
231
231
|
elif sql_type_normed.startswith("float"):
|
|
232
232
|
return "float"
|
|
233
|
+
elif sql_type_normed.startswith("double"):
|
|
234
|
+
return "double"
|
|
233
235
|
elif sql_type_normed.startswith("decimal"):
|
|
234
236
|
return "decimal"
|
|
235
237
|
elif sql_type_normed.startswith("numeric"):
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/unity_importer.py
RENAMED
|
@@ -200,7 +200,8 @@ def import_table_fields(columns: List[ColumnInfo]) -> dict[str, Field]:
|
|
|
200
200
|
|
|
201
201
|
def _to_field(column: ColumnInfo) -> Field:
|
|
202
202
|
field = Field()
|
|
203
|
-
|
|
203
|
+
# The second condition evaluates for complex types (e.g. variant)
|
|
204
|
+
if column.type_name is not None or (column.type_name is None and column.type_text is not None):
|
|
204
205
|
sql_type = str(column.type_text)
|
|
205
206
|
field.type = map_type_from_sql(sql_type)
|
|
206
207
|
physical_type_key = to_physical_type_key("databricks")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.31
|
|
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.17,>=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
|
|
@@ -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.59.0; extra == "databricks"
|
|
46
46
|
Requires-Dist: pyspark<4.0.0,>=3.5.5; extra == "databricks"
|
|
47
47
|
Provides-Extra: iceberg
|
|
48
48
|
Requires-Dist: pyiceberg==0.9.1; extra == "iceberg"
|
|
@@ -54,7 +54,7 @@ Provides-Extra: postgres
|
|
|
54
54
|
Requires-Dist: soda-core-postgres<3.6.0,>=3.3.20; extra == "postgres"
|
|
55
55
|
Provides-Extra: s3
|
|
56
56
|
Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
|
|
57
|
-
Requires-Dist: aiobotocore<2.
|
|
57
|
+
Requires-Dist: aiobotocore<2.24.0,>=2.17.0; extra == "s3"
|
|
58
58
|
Provides-Extra: snowflake
|
|
59
59
|
Requires-Dist: snowflake-connector-python[pandas]<3.16,>=3.6; extra == "snowflake"
|
|
60
60
|
Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
|
|
@@ -71,7 +71,7 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
|
|
|
71
71
|
Provides-Extra: rdf
|
|
72
72
|
Requires-Dist: rdflib==7.0.0; extra == "rdf"
|
|
73
73
|
Provides-Extra: api
|
|
74
|
-
Requires-Dist: fastapi==0.
|
|
74
|
+
Requires-Dist: fastapi==0.116.1; extra == "api"
|
|
75
75
|
Requires-Dist: uvicorn==0.35.0; extra == "api"
|
|
76
76
|
Provides-Extra: protobuf
|
|
77
77
|
Requires-Dist: grpcio-tools>=1.53; extra == "protobuf"
|
|
@@ -86,7 +86,7 @@ Requires-Dist: pandas>=2.1.0; extra == "dev"
|
|
|
86
86
|
Requires-Dist: pre-commit<4.3.0,>=3.7.1; extra == "dev"
|
|
87
87
|
Requires-Dist: pytest; extra == "dev"
|
|
88
88
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
89
|
-
Requires-Dist: pymssql==2.3.
|
|
89
|
+
Requires-Dist: pymssql==2.3.7; extra == "dev"
|
|
90
90
|
Requires-Dist: ruff; extra == "dev"
|
|
91
91
|
Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.10.0; extra == "dev"
|
|
92
92
|
Requires-Dist: trino==0.335.0; extra == "dev"
|
|
@@ -1018,8 +1018,6 @@ If using Databricks, and an error is thrown when trying to deploy the SQL DDLs w
|
|
|
1018
1018
|
|
|
1019
1019
|
```shell
|
|
1020
1020
|
spark.conf.set(“spark.databricks.delta.schema.typeCheck.enabled”, “false”)
|
|
1021
|
-
from datacontract.model import data_contract_specification
|
|
1022
|
-
data_contract_specification.DATACONTRACT_TYPES.append(“variant”)
|
|
1023
1021
|
```
|
|
1024
1022
|
|
|
1025
1023
|
#### Great Expectations
|
|
@@ -2083,7 +2081,6 @@ We are happy to receive your contributions. Propose your change in an issue or d
|
|
|
2083
2081
|
- [INNOQ](https://innoq.com)
|
|
2084
2082
|
- [Data Catering](https://data.catering/)
|
|
2085
2083
|
- [Oliver Wyman](https://www.oliverwyman.com/)
|
|
2086
|
-
- [dmTECH](https://www.dmtech.tech/de)
|
|
2087
2084
|
- And many more. To add your company, please create a pull request.
|
|
2088
2085
|
|
|
2089
2086
|
## Related Tools
|
|
@@ -193,6 +193,7 @@ tests/test_test_bigquery.py
|
|
|
193
193
|
tests/test_test_databricks.py
|
|
194
194
|
tests/test_test_dataframe.py
|
|
195
195
|
tests/test_test_delta.py
|
|
196
|
+
tests/test_test_gcs_csv_remote.py
|
|
196
197
|
tests/test_test_gcs_json_remote.py
|
|
197
198
|
tests/test_test_kafka.py
|
|
198
199
|
tests/test_test_kafka_remote.py
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/requires.txt
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
typer<0.
|
|
1
|
+
typer<0.17,>=0.15.1
|
|
2
2
|
pydantic<2.12.0,>=2.8.2
|
|
3
3
|
pyyaml~=6.0.1
|
|
4
4
|
requests<2.33,>=2.31
|
|
@@ -22,7 +22,7 @@ open-data-contract-standard<4.0.0,>=3.0.4
|
|
|
22
22
|
datacontract-cli[api,bigquery,csv,databricks,dbml,dbt,excel,iceberg,kafka,parquet,postgres,protobuf,rdf,s3,snowflake,sqlserver,trino]
|
|
23
23
|
|
|
24
24
|
[api]
|
|
25
|
-
fastapi==0.
|
|
25
|
+
fastapi==0.116.1
|
|
26
26
|
uvicorn==0.35.0
|
|
27
27
|
|
|
28
28
|
[avro]
|
|
@@ -38,7 +38,7 @@ pandas>=2.0.0
|
|
|
38
38
|
soda-core-spark-df<3.6.0,>=3.3.20
|
|
39
39
|
soda-core-spark[databricks]<3.6.0,>=3.3.20
|
|
40
40
|
databricks-sql-connector<4.1.0,>=3.7.0
|
|
41
|
-
databricks-sdk<0.
|
|
41
|
+
databricks-sdk<0.59.0
|
|
42
42
|
pyspark<4.0.0,>=3.5.5
|
|
43
43
|
|
|
44
44
|
[dbml]
|
|
@@ -56,7 +56,7 @@ pandas>=2.1.0
|
|
|
56
56
|
pre-commit<4.3.0,>=3.7.1
|
|
57
57
|
pytest
|
|
58
58
|
pytest-xdist
|
|
59
|
-
pymssql==2.3.
|
|
59
|
+
pymssql==2.3.7
|
|
60
60
|
ruff
|
|
61
61
|
testcontainers[kafka,minio,mssql,postgres]==4.10.0
|
|
62
62
|
trino==0.335.0
|
|
@@ -86,7 +86,7 @@ rdflib==7.0.0
|
|
|
86
86
|
|
|
87
87
|
[s3]
|
|
88
88
|
s3fs<2026.0.0,>=2025.2.0
|
|
89
|
-
aiobotocore<2.
|
|
89
|
+
aiobotocore<2.24.0,>=2.17.0
|
|
90
90
|
|
|
91
91
|
[snowflake]
|
|
92
92
|
snowflake-connector-python[pandas]<3.16,>=3.6
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "datacontract-cli"
|
|
3
|
-
version = "0.10.
|
|
3
|
+
version = "0.10.31"
|
|
4
4
|
description = "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
|
license = "MIT"
|
|
6
6
|
readme = "README.md"
|
|
@@ -15,7 +15,7 @@ classifiers = [
|
|
|
15
15
|
]
|
|
16
16
|
requires-python = ">=3.10"
|
|
17
17
|
dependencies = [
|
|
18
|
-
"typer>=0.15.1,<0.
|
|
18
|
+
"typer>=0.15.1,<0.17",
|
|
19
19
|
"pydantic>=2.8.2,<2.12.0",
|
|
20
20
|
"pyyaml~=6.0.1",
|
|
21
21
|
"requests>=2.31,<2.33",
|
|
@@ -60,7 +60,7 @@ databricks = [
|
|
|
60
60
|
"soda-core-spark-df>=3.3.20,<3.6.0",
|
|
61
61
|
"soda-core-spark[databricks]>=3.3.20,<3.6.0",
|
|
62
62
|
"databricks-sql-connector>=3.7.0,<4.1.0",
|
|
63
|
-
"databricks-sdk<0.
|
|
63
|
+
"databricks-sdk<0.59.0",
|
|
64
64
|
"pyspark>=3.5.5,<4.0.0",
|
|
65
65
|
]
|
|
66
66
|
|
|
@@ -80,7 +80,7 @@ postgres = [
|
|
|
80
80
|
|
|
81
81
|
s3 = [
|
|
82
82
|
"s3fs>=2025.2.0,<2026.0.0",
|
|
83
|
-
"aiobotocore>=2.17.0,<2.
|
|
83
|
+
"aiobotocore>=2.17.0,<2.24.0",
|
|
84
84
|
]
|
|
85
85
|
|
|
86
86
|
snowflake = [
|
|
@@ -113,7 +113,7 @@ rdf = [
|
|
|
113
113
|
]
|
|
114
114
|
|
|
115
115
|
api = [
|
|
116
|
-
"fastapi==0.
|
|
116
|
+
"fastapi==0.116.1",
|
|
117
117
|
"uvicorn==0.35.0",
|
|
118
118
|
]
|
|
119
119
|
|
|
@@ -135,7 +135,7 @@ dev = [
|
|
|
135
135
|
"pre-commit>=3.7.1,<4.3.0",
|
|
136
136
|
"pytest",
|
|
137
137
|
"pytest-xdist",
|
|
138
|
-
"pymssql==2.3.
|
|
138
|
+
"pymssql==2.3.7",
|
|
139
139
|
"ruff",
|
|
140
140
|
"testcontainers[minio,postgres,kafka,mssql]==4.10.0",
|
|
141
141
|
"trino==0.335.0",
|
|
@@ -162,4 +162,4 @@ def test_prog(spark: SparkSession, df_user, user_datacontract_no_desc, user_data
|
|
|
162
162
|
|
|
163
163
|
# does include a table level description (dataframe object method)
|
|
164
164
|
result4 = DataContract().import_from_source("spark", "users", dataframe=df_user, description="description")
|
|
165
|
-
assert yaml.safe_load(result4.to_yaml()) == yaml.safe_load(expected_desc)
|
|
165
|
+
assert yaml.safe_load(result4.to_yaml()) == yaml.safe_load(expected_desc)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
from dotenv import load_dotenv
|
|
5
|
+
|
|
6
|
+
from datacontract.data_contract import DataContract
|
|
7
|
+
|
|
8
|
+
datacontract = "fixtures/gcs-csv-remote/datacontract.yaml"
|
|
9
|
+
load_dotenv(override=True)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@pytest.mark.skipif(
|
|
13
|
+
os.environ.get("DATACONTRACT_GCS_KEY_ID") is None or os.environ.get("DATACONTRACT_GCS_SECRET") is None,
|
|
14
|
+
reason="Requires DATACONTRACT_GCS_KEY_ID, and DATACONTRACT_GCS_SECRET to be set",
|
|
15
|
+
)
|
|
16
|
+
def test_test_gcs_csv_remote_gcs_url():
|
|
17
|
+
data_contract = DataContract(
|
|
18
|
+
data_contract_file=datacontract,
|
|
19
|
+
server="gcs-url",
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
run = data_contract.test()
|
|
23
|
+
|
|
24
|
+
print(run)
|
|
25
|
+
assert run.result == "passed"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@pytest.mark.skipif(
|
|
29
|
+
os.environ.get("DATACONTRACT_GCS_KEY_ID") is None or os.environ.get("DATACONTRACT_GCS_SECRET") is None,
|
|
30
|
+
reason="Requires DATACONTRACT_GCS_KEY_ID, and DATACONTRACT_GCS_SECRET to be set",
|
|
31
|
+
)
|
|
32
|
+
def test_test_gcs_csv_remote_s3_style(monkeypatch):
|
|
33
|
+
monkeypatch.setenv("DATACONTRACT_S3_ACCESS_KEY_ID", os.environ.get("DATACONTRACT_GCS_KEY_ID"))
|
|
34
|
+
monkeypatch.setenv("DATACONTRACT_S3_SECRET_ACCESS_KEY", os.environ.get("DATACONTRACT_GCS_SECRET"))
|
|
35
|
+
|
|
36
|
+
data_contract = DataContract(
|
|
37
|
+
data_contract_file=datacontract,
|
|
38
|
+
server="s3-style",
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
run = data_contract.test()
|
|
42
|
+
|
|
43
|
+
print(run)
|
|
44
|
+
assert run.result == "passed"
|
|
45
|
+
assert all(check.result == "passed" for check in run.checks)
|
|
@@ -33,6 +33,7 @@ def test_test_s3_csv(minio_container, monkeypatch):
|
|
|
33
33
|
print(run)
|
|
34
34
|
assert run.result == "passed"
|
|
35
35
|
assert all(check.result == "passed" for check in run.checks)
|
|
36
|
+
assert 8 == len(run.checks), "Expected 5 checks to be executed"
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
def _prepare_s3_files(minio_container):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/breaking/breaking_change.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/breaking/breaking_rules.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/data_contract_checks.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/data_contract_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/kafka.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/trino.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/avro_idl_converter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/bigquery_converter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/custom_converter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/data_caterer_converter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/duckdb_type_converter.py
RENAMED
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/exporter_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/iceberg_converter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/jsonschema_converter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/mermaid_exporter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/odcs_v3_exporter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/pandas_type_converter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/protobuf_converter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/pydantic_converter.py
RENAMED
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sodacl_converter.py
RENAMED
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sql_type_converter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sqlalchemy_converter.py
RENAMED
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/terraform_converter.py
RENAMED
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/bigquery_importer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/iceberg_importer.py
RENAMED
|
File without changes
|
|
File without changes
|
{datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/importer_factory.py
RENAMED
|
File without changes
|