datacontract-cli 0.10.21__tar.gz → 0.10.22__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.

Files changed (214) hide show
  1. {datacontract_cli-0.10.21/datacontract_cli.egg-info → datacontract_cli-0.10.22}/PKG-INFO +139 -166
  2. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/README.md +129 -156
  3. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/breaking/breaking.py +1 -1
  4. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/breaking/breaking_rules.py +1 -1
  5. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/cli.py +5 -5
  6. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/data_contract.py +14 -100
  7. datacontract_cli-0.10.22/datacontract/engines/data_contract_checks.py +735 -0
  8. datacontract_cli-0.10.22/datacontract/engines/data_contract_test.py +51 -0
  9. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/soda/check_soda_execute.py +36 -30
  10. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/soda/connections/kafka.py +8 -3
  11. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/avro_converter.py +2 -0
  12. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/exporter.py +0 -2
  13. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/exporter_factory.py +0 -12
  14. datacontract_cli-0.10.22/datacontract/export/sodacl_converter.py +30 -0
  15. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/sql_type_converter.py +7 -2
  16. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/odcs_importer.py +6 -3
  17. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/odcs_v3_importer.py +2 -0
  18. datacontract_cli-0.10.22/datacontract/imports/sql_importer.py +286 -0
  19. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/model/exceptions.py +4 -1
  20. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/model/run.py +11 -4
  21. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22/datacontract_cli.egg-info}/PKG-INFO +139 -166
  22. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract_cli.egg-info/SOURCES.txt +6 -14
  23. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract_cli.egg-info/requires.txt +10 -10
  24. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/pyproject.toml +12 -12
  25. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_api.py +1 -1
  26. datacontract_cli-0.10.22/tests/test_data_contract_checks.py +10 -0
  27. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_avro.py +11 -0
  28. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_odcs_v3.py +1 -1
  29. datacontract_cli-0.10.22/tests/test_export_sodacl.py +122 -0
  30. datacontract_cli-0.10.21/tests/test_import_sql.py → datacontract_cli-0.10.22/tests/test_import_sql_postgres.py +55 -22
  31. datacontract_cli-0.10.22/tests/test_import_sql_sqlserver.py +178 -0
  32. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_lint.py +1 -1
  33. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_spec_ref.py +1 -1
  34. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_dataframe.py +23 -0
  35. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_postgres.py +17 -1
  36. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_quality.py +9 -6
  37. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_s3_json_multiple_models.py +0 -3
  38. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_s3_json_remote.py +1 -1
  39. datacontract_cli-0.10.21/datacontract/engines/soda/connections/dask.py +0 -28
  40. datacontract_cli-0.10.21/datacontract/export/odcs_v2_exporter.py +0 -124
  41. datacontract_cli-0.10.21/datacontract/export/sodacl_converter.py +0 -302
  42. datacontract_cli-0.10.21/datacontract/imports/odcs_v2_importer.py +0 -177
  43. datacontract_cli-0.10.21/datacontract/imports/sql_importer.py +0 -86
  44. datacontract_cli-0.10.21/datacontract/lint/linters/example_model_linter.py +0 -91
  45. datacontract_cli-0.10.21/tests/test_example_model_linter.py +0 -82
  46. datacontract_cli-0.10.21/tests/test_export_odcs_v2.py +0 -81
  47. datacontract_cli-0.10.21/tests/test_export_sodacl.py +0 -91
  48. datacontract_cli-0.10.21/tests/test_import_odcs_v2.py +0 -50
  49. datacontract_cli-0.10.21/tests/test_test_examples_csv.py +0 -30
  50. datacontract_cli-0.10.21/tests/test_test_examples_formats_valid.py +0 -15
  51. datacontract_cli-0.10.21/tests/test_test_examples_inline.py +0 -20
  52. datacontract_cli-0.10.21/tests/test_test_examples_json.py +0 -29
  53. datacontract_cli-0.10.21/tests/test_test_examples_missing.py +0 -23
  54. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/LICENSE +0 -0
  55. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/MANIFEST.in +0 -0
  56. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/__init__.py +0 -0
  57. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/api.py +0 -0
  58. {datacontract_cli-0.10.21/datacontract/model → datacontract_cli-0.10.22/datacontract/breaking}/breaking_change.py +0 -0
  59. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/catalog/catalog.py +0 -0
  60. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/__init__.py +0 -0
  61. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  62. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  63. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  64. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  65. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/soda/__init__.py +0 -0
  66. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/soda/connections/bigquery.py +0 -0
  67. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/soda/connections/databricks.py +0 -0
  68. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/soda/connections/duckdb.py +0 -0
  69. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/soda/connections/postgres.py +0 -0
  70. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/soda/connections/snowflake.py +0 -0
  71. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  72. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/engines/soda/connections/trino.py +0 -0
  73. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/__init__.py +0 -0
  74. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/avro_idl_converter.py +0 -0
  75. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/bigquery_converter.py +0 -0
  76. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/csv_type_converter.py +0 -0
  77. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/custom_converter.py +0 -0
  78. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/data_caterer_converter.py +0 -0
  79. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/dbml_converter.py +0 -0
  80. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/dbt_converter.py +0 -0
  81. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/dcs_exporter.py +0 -0
  82. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/go_converter.py +0 -0
  83. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/great_expectations_converter.py +0 -0
  84. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/html_export.py +0 -0
  85. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/iceberg_converter.py +0 -0
  86. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/jsonschema_converter.py +0 -0
  87. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/markdown_converter.py +0 -0
  88. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/odcs_v3_exporter.py +0 -0
  89. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/pandas_type_converter.py +0 -0
  90. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/protobuf_converter.py +0 -0
  91. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/pydantic_converter.py +0 -0
  92. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/rdf_converter.py +0 -0
  93. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/spark_converter.py +0 -0
  94. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/sql_converter.py +0 -0
  95. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/sqlalchemy_converter.py +0 -0
  96. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/export/terraform_converter.py +0 -0
  97. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/avro_importer.py +0 -0
  98. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/bigquery_importer.py +0 -0
  99. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/csv_importer.py +0 -0
  100. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/dbml_importer.py +0 -0
  101. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/dbt_importer.py +0 -0
  102. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/glue_importer.py +0 -0
  103. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/iceberg_importer.py +0 -0
  104. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/importer.py +0 -0
  105. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/importer_factory.py +0 -0
  106. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/jsonschema_importer.py +0 -0
  107. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/parquet_importer.py +0 -0
  108. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/spark_importer.py +0 -0
  109. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/imports/unity_importer.py +0 -0
  110. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/init/init_template.py +0 -0
  111. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/integration/datamesh_manager.py +0 -0
  112. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/files.py +0 -0
  113. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/lint.py +0 -0
  114. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/linters/__init__.py +0 -0
  115. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/linters/description_linter.py +0 -0
  116. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/linters/field_pattern_linter.py +0 -0
  117. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/linters/field_reference_linter.py +0 -0
  118. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/linters/notice_period_linter.py +0 -0
  119. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/linters/quality_schema_linter.py +0 -0
  120. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/linters/valid_constraints_linter.py +0 -0
  121. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/resolve.py +0 -0
  122. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/resources.py +0 -0
  123. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/schema.py +0 -0
  124. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/lint/urls.py +0 -0
  125. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/model/data_contract_specification.py +0 -0
  126. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/model/odcs.py +0 -0
  127. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/py.typed +0 -0
  128. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  129. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  130. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  131. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/datacontract.html +0 -0
  132. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/index.html +0 -0
  133. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/partials/datacontract_information.html +0 -0
  134. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  135. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/partials/datacontract_terms.html +0 -0
  136. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/partials/definition.html +0 -0
  137. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/partials/example.html +0 -0
  138. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/partials/model_field.html +0 -0
  139. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/partials/quality.html +0 -0
  140. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/partials/server.html +0 -0
  141. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract/templates/style/output.css +0 -0
  142. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  143. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract_cli.egg-info/entry_points.txt +0 -0
  144. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/datacontract_cli.egg-info/top_level.txt +0 -0
  145. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/setup.cfg +0 -0
  146. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_breaking.py +0 -0
  147. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_catalog.py +0 -0
  148. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_changelog.py +0 -0
  149. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_cli.py +0 -0
  150. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_data_contract_specification.py +0 -0
  151. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_description_linter.py +0 -0
  152. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_documentation_linter.py +0 -0
  153. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_download_datacontract_file.py +0 -0
  154. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_avro_idl.py +0 -0
  155. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_bigquery.py +0 -0
  156. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_complex_data_contract.py +0 -0
  157. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_custom.py +0 -0
  158. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_custom_exporter.py +0 -0
  159. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_data_caterer.py +0 -0
  160. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_dbml.py +0 -0
  161. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_dbt_models.py +0 -0
  162. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_dbt_sources.py +0 -0
  163. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_dbt_staging_sql.py +0 -0
  164. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_go.py +0 -0
  165. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_great_expectations.py +0 -0
  166. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_html.py +0 -0
  167. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_iceberg.py +0 -0
  168. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_jsonschema.py +0 -0
  169. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_markdown.py +0 -0
  170. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_protobuf.py +0 -0
  171. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_pydantic.py +0 -0
  172. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_rdf.py +0 -0
  173. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_spark.py +0 -0
  174. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_sql.py +0 -0
  175. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_sql_query.py +0 -0
  176. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_sqlalchemy.py +0 -0
  177. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_export_terraform.py +0 -0
  178. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_field_constraint_linter.py +0 -0
  179. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_field_pattern_linter.py +0 -0
  180. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_field_reference_linter.py +0 -0
  181. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_avro.py +0 -0
  182. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_bigquery.py +0 -0
  183. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_csv.py +0 -0
  184. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_dbml.py +0 -0
  185. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_dbt.py +0 -0
  186. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_glue.py +0 -0
  187. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_iceberg.py +0 -0
  188. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_jsonschema.py +0 -0
  189. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_odcs_v3.py +0 -0
  190. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_parquet.py +0 -0
  191. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_spark.py +0 -0
  192. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_import_unity_file.py +0 -0
  193. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_integration_datameshmanager.py +0 -0
  194. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_notice_period_linter.py +0 -0
  195. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_quality_schema_linter.py +0 -0
  196. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_resolve.py +0 -0
  197. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_roundtrip_jsonschema.py +0 -0
  198. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_spec_fields_field.py +0 -0
  199. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_azure_remote.py +0 -0
  200. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_bigquery.py +0 -0
  201. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_databricks.py +0 -0
  202. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_delta.py +0 -0
  203. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_gcs_json_remote.py +0 -0
  204. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_kafka.py +0 -0
  205. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_kafka_remote.py +0 -0
  206. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_local_json.py +0 -0
  207. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_parquet.py +0 -0
  208. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_s3_csv.py +0 -0
  209. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_s3_delta.py +0 -0
  210. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_s3_json.py +0 -0
  211. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_s3_json_complex.py +0 -0
  212. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_snowflake.py +0 -0
  213. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_sqlserver.py +0 -0
  214. {datacontract_cli-0.10.21 → datacontract_cli-0.10.22}/tests/test_test_trino.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: datacontract-cli
3
- Version: 0.10.21
3
+ Version: 0.10.22
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
  Project-URL: Homepage, https://cli.datacontract.com
@@ -20,13 +20,13 @@ Requires-Dist: fastparquet==2024.11.0
20
20
  Requires-Dist: numpy<2.0.0,>=1.26.4
21
21
  Requires-Dist: python-multipart==0.0.20
22
22
  Requires-Dist: rich<13.10,>=13.7
23
- Requires-Dist: simple-ddl-parser==1.7.1
23
+ Requires-Dist: sqlglot<27.0.0,>=26.6.0
24
24
  Requires-Dist: duckdb==1.1.2
25
- Requires-Dist: soda-core-duckdb<3.4.0,>=3.3.20
25
+ Requires-Dist: soda-core-duckdb<3.5.0,>=3.3.20
26
26
  Requires-Dist: setuptools>=60
27
27
  Requires-Dist: python-dotenv~=1.0.0
28
- Requires-Dist: rdflib==7.0.0
29
- Requires-Dist: boto3<1.35.98,>=1.34.41
28
+ Requires-Dist: boto3<1.36.12,>=1.34.41
29
+ Requires-Dist: Jinja2>=3.1.5
30
30
  Requires-Dist: jinja_partials>=0.2.1
31
31
  Provides-Extra: avro
32
32
  Requires-Dist: avro==1.12.0; extra == "avro"
@@ -51,8 +51,8 @@ Provides-Extra: s3
51
51
  Requires-Dist: s3fs==2024.12.0; extra == "s3"
52
52
  Requires-Dist: aiobotocore<2.20.0,>=2.17.0; extra == "s3"
53
53
  Provides-Extra: snowflake
54
- Requires-Dist: snowflake-connector-python[pandas]<3.13,>=3.6; extra == "snowflake"
55
- Requires-Dist: soda-core-snowflake<3.4.0,>=3.3.20; extra == "snowflake"
54
+ Requires-Dist: snowflake-connector-python[pandas]<3.14,>=3.6; extra == "snowflake"
55
+ Requires-Dist: soda-core-snowflake<3.5.0,>=3.3.20; extra == "snowflake"
56
56
  Provides-Extra: sqlserver
57
57
  Requires-Dist: soda-core-sqlserver<3.4.0,>=3.3.20; extra == "sqlserver"
58
58
  Provides-Extra: trino
@@ -63,13 +63,13 @@ Provides-Extra: dbml
63
63
  Requires-Dist: pydbml>=1.1.1; extra == "dbml"
64
64
  Provides-Extra: parquet
65
65
  Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
66
+ Provides-Extra: rdf
67
+ Requires-Dist: rdflib==7.0.0; extra == "rdf"
66
68
  Provides-Extra: api
67
69
  Requires-Dist: fastapi==0.115.6; extra == "api"
68
70
  Requires-Dist: uvicorn==0.34.0; extra == "api"
69
- Provides-Extra: custom
70
- Requires-Dist: Jinja2>=3.1.5; extra == "custom"
71
71
  Provides-Extra: all
72
- Requires-Dist: datacontract-cli[api,bigquery,csv,custom,databricks,dbml,dbt,iceberg,kafka,parquet,postgres,s3,snowflake,sqlserver,trino]; extra == "all"
72
+ Requires-Dist: datacontract-cli[api,bigquery,csv,databricks,dbml,dbt,iceberg,kafka,parquet,postgres,rdf,s3,snowflake,sqlserver,trino]; extra == "all"
73
73
  Provides-Extra: dev
74
74
  Requires-Dist: datacontract-cli[all]; extra == "dev"
75
75
  Requires-Dist: httpx==0.28.1; extra == "dev"
@@ -194,17 +194,20 @@ $ datacontract init datacontract.yaml
194
194
  # lint the datacontract.yaml
195
195
  $ datacontract lint datacontract.yaml
196
196
 
197
- # execute schema and quality checks
197
+ # execute schema and quality checks (define credentials as environment variables)
198
198
  $ datacontract test datacontract.yaml
199
199
 
200
- # execute schema and quality checks on the examples within the contract
201
- $ datacontract test --examples datacontract.yaml
200
+ # export data contract as html (other formats: avro, dbt, dbt-sources, dbt-staging-sql, jsonschema, odcs, rdf, sql, sodacl, terraform, ...)
201
+ $ datacontract export --format html datacontract.yaml --output datacontract.html
202
202
 
203
- # export data contract as html (other formats: avro, dbt, dbt-sources, dbt-staging-sql, jsonschema, odcs_v2, odcs_v3, rdf, sql, sodacl, terraform, ...)
204
- $ datacontract export --format html datacontract.yaml > datacontract.html
203
+ # export data contract to ODCS
204
+ $ datacontract export --format odcs datacontract.yaml --output odcs.yaml
205
205
 
206
- # import avro (other formats: sql, glue, bigquery...)
207
- $ datacontract import --format avro --source avro_schema.avsc
206
+ # import ODCS to data contract
207
+ $ datacontract import --format odcs odcs.yaml --output datacontract.yaml
208
+
209
+ # import sql (other formats: avro, glue, bigquery, jsonschema ...)
210
+ $ datacontract import --format sql --source my-ddl.sql --dialect postgres --output datacontract.yaml
208
211
 
209
212
  # find differences between two data contracts
210
213
  $ datacontract diff datacontract-v1.yaml datacontract-v2.yaml
@@ -237,12 +240,28 @@ Python 3.10, 3.11, and 3.12 are supported. We recommend to use Python 3.11.
237
240
 
238
241
  ```bash
239
242
  python3 -m pip install 'datacontract-cli[all]'
243
+ datacontract --version
244
+ ```
245
+
246
+ ### pip with venv
247
+
248
+ Typically it is better to install the application in a virtual environment for your projects:
249
+
250
+ ```bash
251
+ cd my-project
252
+ python3.11 -m venv venv
253
+ source venv/bin/activate
254
+ pip install 'datacontract-cli[all]'
255
+ datacontract --version
240
256
  ```
241
257
 
242
258
  ### pipx
259
+
243
260
  pipx installs into an isolated environment.
261
+
244
262
  ```bash
245
263
  pipx install 'datacontract-cli[all]'
264
+ datacontract --version
246
265
  ```
247
266
 
248
267
  ### Docker
@@ -264,7 +283,7 @@ _Note:_ The output of Docker command line messages is limited to 80 columns and
264
283
 
265
284
 
266
285
 
267
- ## Optional Dependencies
286
+ ## Optional Dependencies (Extras)
268
287
 
269
288
  The CLI tool defines several optional dependencies (also known as extras) that can be installed for using with specific servers types.
270
289
  With _all_, all server dependencies are included.
@@ -275,21 +294,23 @@ pip install datacontract-cli[all]
275
294
 
276
295
  A list of available extras:
277
296
 
278
- | Dependency | Installation Command |
279
- |------------------------|--------------------------------------------|
280
- | Avro Support | `pip install datacontract-cli[avro]` |
281
- | Google BigQuery | `pip install datacontract-cli[bigquery]` |
282
- | Databricks Integration | `pip install datacontract-cli[databricks]` |
283
- | Iceberg | `pip install datacontract-cli[iceberg]` |
284
- | Kafka Integration | `pip install datacontract-cli[kafka]` |
285
- | PostgreSQL Integration | `pip install datacontract-cli[postgres]` |
286
- | S3 Integration | `pip install datacontract-cli[s3]` |
287
- | Snowflake Integration | `pip install datacontract-cli[snowflake]` |
288
- | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
289
- | Trino | `pip install datacontract-cli[trino]` |
290
- | Dbt | `pip install datacontract-cli[dbt]` |
291
- | Dbml | `pip install datacontract-cli[dbml]` |
292
- | Parquet | `pip install datacontract-cli[parquet]` |
297
+ | Dependency | Installation Command |
298
+ |-------------------------|--------------------------------------------|
299
+ | Avro Support | `pip install datacontract-cli[avro]` |
300
+ | Google BigQuery | `pip install datacontract-cli[bigquery]` |
301
+ | Databricks Integration | `pip install datacontract-cli[databricks]` |
302
+ | Iceberg | `pip install datacontract-cli[iceberg]` |
303
+ | Kafka Integration | `pip install datacontract-cli[kafka]` |
304
+ | PostgreSQL Integration | `pip install datacontract-cli[postgres]` |
305
+ | S3 Integration | `pip install datacontract-cli[s3]` |
306
+ | Snowflake Integration | `pip install datacontract-cli[snowflake]` |
307
+ | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
308
+ | Trino | `pip install datacontract-cli[trino]` |
309
+ | dbt | `pip install datacontract-cli[dbt]` |
310
+ | DBML | `pip install datacontract-cli[dbml]` |
311
+ | Parquet | `pip install datacontract-cli[parquet]` |
312
+ | RDF | `pip install datacontract-cli[rdf]` |
313
+ | API (run as web server) | `pip install datacontract-cli[api]` |
293
314
 
294
315
 
295
316
 
@@ -386,11 +407,6 @@ Commands
386
407
  │ for all servers │
387
408
  │ (default). │
388
409
  │ [default: all] │
389
- │ --examples --no-examples Run the schema and │
390
- │ quality tests on the │
391
- │ example data within the │
392
- │ data contract. │
393
- │ [default: no-examples] │
394
410
  │ --publish TEXT The url to publish the │
395
411
  │ results after the test │
396
412
  │ [default: None] │
@@ -877,8 +893,8 @@ models:
877
893
  ╭─ Options ────────────────────────────────────────────────────────────────────╮
878
894
  │ * --format [jsonschema|pydantic-model| The export format. │
879
895
  │ sodacl|dbt|dbt-sources|dbt- [default: None] │
880
- │ staging-sql|odcs|odcs_v2|od [required] │
881
- cs_v3|rdf|avro|protobuf|gre
896
+ │ staging-sql|odcs| [required] │
897
+ │ rdf|avro|protobuf|gre
882
898
  │ at-expectations|terraform|a │
883
899
  │ vro-idl|sql|sql-query|html| │
884
900
  │ go|bigquery|dbml|spark|sqla │
@@ -936,8 +952,6 @@ Available export options:
936
952
  |----------------------|---------------------------------------------------------|--------|
937
953
  | `html` | Export to HTML | ✅ |
938
954
  | `jsonschema` | Export to JSON Schema | ✅ |
939
- | `odcs_v2` | Export to Open Data Contract Standard (ODCS) V2 | ✅ |
940
- | `odcs_v3` | Export to Open Data Contract Standard (ODCS) V3 | ✅ |
941
955
  | `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅ |
942
956
  | `sodacl` | Export to SodaCL quality checks in YAML format | ✅ |
943
957
  | `dbt` | Export to dbt models in YAML format | ✅ |
@@ -1214,107 +1228,80 @@ FROM
1214
1228
 
1215
1229
  ### import
1216
1230
  ```
1217
-
1218
- Usage: datacontract import [OPTIONS]
1219
-
1220
- Create a data contract from the given source location. Saves to file specified
1221
- by `output` option if present, otherwise prints to stdout.
1222
-
1223
- ╭─ Options ────────────────────────────────────────────────────────────────────╮
1224
- * --format [sql|avro|dbt|dbml|gl The format of the
1225
- ue|jsonschema|bigquer source file.
1226
- y|odcs|unity|spark|ic [default: None]
1227
- eberg|parquet|csv] [required]
1228
- --output PATH Specify the file path
1229
- where the Data
1230
- Contract will be
1231
- saved. If no path is
1232
- provided, the output
1233
- will be printed to
1234
- stdout.
1235
- [default: None]
1236
- --source TEXT The path to the file
1237
- or Glue Database that
1238
- should be imported.
1239
- [default: None]
1240
- --glue-table TEXT List of table ids to
1241
- import from the Glue
1242
- Database (repeat for
1243
- multiple table ids,
1244
- leave empty for all
1245
- tables in the
1246
- dataset).
1247
- [default: None]
1248
- --bigquery-project TEXT The bigquery project
1249
- id.
1250
- [default: None]
1251
- --bigquery-dataset TEXT The bigquery dataset
1252
- id.
1253
- [default: None]
1254
- --bigquery-table TEXT List of table ids to
1255
- import from the
1256
- bigquery API (repeat
1257
- for multiple table
1258
- ids, leave empty for
1259
- all tables in the
1260
- dataset).
1261
- [default: None]
1262
- --unity-table-full-n… TEXT Full name of a table
1263
- in the unity catalog
1264
- [default: None]
1265
- │ --dbt-model TEXT List of models names
1266
- to import from the
1267
- dbt manifest file
1268
- (repeat for multiple
1269
- models names, leave
1270
- empty for all models
1271
- in the dataset). │
1272
- [default: None]
1273
- │ --dbml-schema TEXT List of schema names
1274
- to import from the
1275
- DBML file (repeat for
1276
- multiple schema
1277
- names, leave empty
1278
- for all tables in the
1279
- file).
1280
- [default: None]
1281
- │ --dbml-table TEXT List of table names │
1282
- │ to import from the │
1283
- │ DBML file (repeat for │
1284
- │ multiple table names, │
1285
- │ leave empty for all │
1286
- │ tables in the file). │
1287
- │ [default: None] │
1288
- │ --iceberg-table TEXT Table name to assign │
1289
- │ to the model created │
1290
- │ from the Iceberg │
1291
- │ schema. │
1292
- │ [default: None] │
1293
- │ --template TEXT The location (url or │
1294
- │ path) of the Data │
1295
- │ Contract │
1296
- │ Specification │
1297
- │ Template │
1298
- │ [default: None] │
1299
- │ --schema TEXT The location (url or │
1300
- │ path) of the Data │
1301
- │ Contract │
1302
- │ Specification JSON │
1303
- │ Schema │
1304
- │ [default: │
1305
- │ https://datacontract… │
1306
- │ --help Show this message and │
1307
- │ exit. │
1308
- ╰──────────────────────────────────────────────────────────────────────────────╯
1231
+ Usage: datacontract import [OPTIONS]
1232
+
1233
+ Create a data contract from the given source location. Saves to file specified by `output` option if present,
1234
+ otherwise prints to stdout.
1235
+
1236
+ ╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────╮
1237
+ * --format [sql|avro|dbt|dbml|glue|jsonschema|bi The format of the source file. │
1238
+ gquery|odcs|unity|spark|iceberg|parqu [default: None]
1239
+ et|csv] [required]
1240
+ --output PATH Specify the file path where the Data
1241
+ Contract will be saved. If no path is
1242
+ provided, the output will be printed
1243
+ to stdout.
1244
+ [default: None]
1245
+ --source TEXT The path to the file or Glue Database
1246
+ that should be imported.
1247
+ [default: None]
1248
+ --dialect TEXT The SQL dialect to use when importing
1249
+ SQL files, e.g., postgres, tsql,
1250
+ bigquery.
1251
+ [default: None]
1252
+ --glue-table TEXT List of table ids to import from the
1253
+ Glue Database (repeat for multiple
1254
+ table ids, leave empty for all tables
1255
+ in the dataset).
1256
+ [default: None]
1257
+ --bigquery-project TEXT The bigquery project id.
1258
+ [default: None]
1259
+ --bigquery-dataset TEXT The bigquery dataset id.
1260
+ [default: None]
1261
+ --bigquery-table TEXT List of table ids to import from the
1262
+ bigquery API (repeat for multiple
1263
+ table ids, leave empty for all tables
1264
+ in the dataset).
1265
+ [default: None]
1266
+ --unity-table-full-name TEXT Full name of a table in the unity
1267
+ catalog
1268
+ [default: None]
1269
+ --dbt-model TEXT List of models names to import from
1270
+ the dbt manifest file (repeat for
1271
+ multiple models names, leave empty
1272
+ for all models in the dataset).
1273
+ [default: None]
1274
+ --dbml-schema TEXT List of schema names to import from
1275
+ the DBML file (repeat for multiple
1276
+ schema names, leave empty for all
1277
+ tables in the file).
1278
+ [default: None]
1279
+ │ --dbml-table TEXT List of table names to import from
1280
+ the DBML file (repeat for multiple
1281
+ table names, leave empty for all
1282
+ tables in the file).
1283
+ [default: None]
1284
+ --iceberg-table TEXT Table name to assign to the model
1285
+ created from the Iceberg schema. │
1286
+ [default: None]
1287
+ │ --template TEXT The location (url or path) of the
1288
+ Data Contract Specification Template
1289
+ [default: None]
1290
+ --schema TEXT The location (url or path) of the
1291
+ Data Contract Specification JSON
1292
+ Schema
1293
+ [default: None]
1294
+ --help Show this message and exit.
1295
+ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
1309
1296
 
1310
1297
  ```
1311
1298
 
1312
1299
  Example:
1313
1300
  ```bash
1314
1301
  # Example import from SQL DDL
1315
- datacontract import --format sql --source my_ddl.sql
1302
+ datacontract import --format sql --source my_ddl.sql --dialect postgres
1316
1303
  # To save to file
1317
- datacontract import --format sql --source my_ddl.sql --output datacontract.yaml
1304
+ datacontract import --format sql --source my_ddl.sql --dialect postgres --output datacontract.yaml
1318
1305
  ```
1319
1306
 
1320
1307
  Available import options:
@@ -1669,24 +1656,20 @@ Create a data contract based on the actual data. This is the fastest way to get
1669
1656
  $ datacontract test
1670
1657
  ```
1671
1658
 
1672
- 2. Add examples to the `datacontract.yaml`. If you can, use actual data and anonymize. Make sure that the examples match the imported logical data model.
1659
+ 2. Add quality checks and additional type constraints one by one to the contract and make sure the
1660
+ data still adheres to the contract.
1673
1661
  ```bash
1674
- $ datacontract test --examples
1675
- ```
1676
-
1677
-
1678
- 3. Add quality checks and additional type constraints one by one to the contract and make sure the examples and the actual data still adheres to the contract. Check against examples for a very fast feedback loop.
1679
- ```bash
1680
- $ datacontract test --examples
1681
1662
  $ datacontract test
1682
1663
  ```
1683
1664
 
1684
- 4. Make sure that all the best practices for a `datacontract.yaml` are met using the linter. You probably forgot to document some fields and add the terms and conditions.
1665
+ 3. Make sure that all the best practices for a `datacontract.yaml` are met using the linter. You
1666
+ probably forgot to document some fields and add the terms and conditions.
1685
1667
  ```bash
1686
1668
  $ datacontract lint
1687
1669
  ```
1688
1670
 
1689
- 5. Set up a CI pipeline that executes daily for continuous quality checks. You can also report the test results to tools like [Data Mesh Manager](https://datamesh-manager.com)
1671
+ 4. Set up a CI pipeline that executes daily for continuous quality checks. You can also report the
1672
+ test results to tools like [Data Mesh Manager](https://datamesh-manager.com)
1690
1673
  ```bash
1691
1674
  $ datacontract test --publish https://api.datamesh-manager.com/api/test-results
1692
1675
  ```
@@ -1700,30 +1683,15 @@ Create a data contract based on the requirements from use cases.
1700
1683
  $ datacontract init
1701
1684
  ```
1702
1685
 
1703
- 2. Add examples to the `datacontract.yaml`. Do not start with the data model, although you are probably tempted to do that. Examples are the fastest way to get feedback from everybody and not loose someone in the discussion.
1704
-
1705
- 3. Create the model based on the examples. Test the model against the examples to double-check whether the model matches the examples.
1706
- ```bash
1707
- $ datacontract test --examples
1708
- ```
1709
-
1710
- 4. Add quality checks and additional type constraints one by one to the contract and make sure the examples and the actual data still adheres to the contract. Check against examples for a very fast feedback loop.
1711
- ```bash
1712
- $ datacontract test --examples
1713
- ```
1714
-
1715
- 5. Fill in the terms, descriptions, etc. Make sure you follow all best practices for a `datacontract.yaml` using the linter.
1686
+ 2. Create the model and quality guarantees based on your business requirements. Fill in the terms,
1687
+ descriptions, etc. Make sure you follow all best practices for a `datacontract.yaml` using the
1688
+ linter.
1716
1689
  ```bash
1717
1690
  $ datacontract lint
1718
1691
  ```
1719
1692
 
1720
- 6. Set up a CI pipeline that lints and tests the examples so you make sure that any changes later do not decrease the quality of the contract.
1721
- ```bash
1722
- $ datacontract lint
1723
- $ datacontract test --examples
1724
- ```
1725
-
1726
- 7. Use the export function to start building the providing data product as well as the integration into the consuming data products.
1693
+ 3. Use the export function to start building the providing data product as well as the integration
1694
+ into the consuming data products.
1727
1695
  ```bash
1728
1696
  # data provider
1729
1697
  $ datacontract export --format dbt
@@ -1732,6 +1700,11 @@ Create a data contract based on the requirements from use cases.
1732
1700
  $ datacontract export --format dbt-staging-sql
1733
1701
  ```
1734
1702
 
1703
+ 4. Test that your data product implementation adheres to the contract.
1704
+ ```bash
1705
+ $ datacontract test
1706
+ ```
1707
+
1735
1708
  ### Schema Evolution
1736
1709
 
1737
1710
  #### Non-breaking Changes