datacontract-cli 0.12.1__tar.gz → 0.12.3__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.
Files changed (256) hide show
  1. {datacontract_cli-0.12.1/datacontract_cli.egg-info → datacontract_cli-0.12.3}/PKG-INFO +182 -30
  2. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/README.md +163 -13
  3. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/cli.py +42 -3
  4. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_changelog.py +2 -2
  5. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_ci.py +2 -1
  6. datacontract_cli-0.12.3/datacontract/command_dbt.py +161 -0
  7. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_test.py +2 -1
  8. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/data_contract_checks.py +46 -15
  9. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/check_soda_execute.py +18 -3
  10. datacontract_cli-0.12.3/datacontract/engines/soda/connections/redshift.py +29 -0
  11. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/dbt_exporter.py +15 -146
  12. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/sql_type_converter.py +98 -34
  13. datacontract_cli-0.12.3/datacontract/imports/dbt_importer.py +366 -0
  14. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/protobuf_importer.py +56 -6
  15. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/spark_importer.py +2 -2
  16. datacontract_cli-0.12.3/datacontract/integration/dbt_sync.py +1215 -0
  17. datacontract_cli-0.12.3/datacontract/integration/dbt_test_mapping.py +165 -0
  18. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/integration/entropy_data.py +5 -2
  19. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/test_results_writer.py +4 -4
  20. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3/datacontract_cli.egg-info}/PKG-INFO +182 -30
  21. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract_cli.egg-info/SOURCES.txt +8 -0
  22. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract_cli.egg-info/requires.txt +20 -17
  23. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/pyproject.toml +36 -22
  24. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_data_contract_checks.py +85 -1
  25. datacontract_cli-0.12.3/tests/test_dbt_sync.py +1333 -0
  26. datacontract_cli-0.12.3/tests/test_dbt_test_mapping.py +169 -0
  27. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_dbt.py +1 -1
  28. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_spark.py +54 -0
  29. datacontract_cli-0.12.3/tests/test_redshift_soda_configuration.py +75 -0
  30. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_sql_type_converter_physicaltype.py +25 -2
  31. datacontract_cli-0.12.3/tests/test_test_soda_connection_error.py +32 -0
  32. datacontract_cli-0.12.1/datacontract/imports/dbt_importer.py +0 -289
  33. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/LICENSE +0 -0
  34. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/MANIFEST.in +0 -0
  35. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/__init__.py +0 -0
  36. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/api.py +0 -0
  37. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/catalog/catalog.py +0 -0
  38. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/changelog/__init__.py +0 -0
  39. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/changelog/changelog.py +0 -0
  40. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/changelog/normalize.py +0 -0
  41. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_api.py +0 -0
  42. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_catalog.py +0 -0
  43. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_export.py +0 -0
  44. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_import.py +0 -0
  45. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_init.py +0 -0
  46. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_lint.py +0 -0
  47. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/command_publish.py +0 -0
  48. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/data_contract.py +0 -0
  49. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/__init__.py +0 -0
  50. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/data_contract_test.py +0 -0
  51. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  52. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  53. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  54. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  55. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/__init__.py +0 -0
  56. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/athena.py +0 -0
  57. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/bigquery.py +0 -0
  58. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/databricks.py +0 -0
  59. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
  60. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/impala.py +0 -0
  61. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/kafka.py +0 -0
  62. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/mysql.py +0 -0
  63. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/oracle.py +0 -0
  64. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/postgres.py +0 -0
  65. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/snowflake.py +0 -0
  66. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  67. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/engines/soda/connections/trino.py +0 -0
  68. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/__init__.py +0 -0
  69. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/avro_exporter.py +0 -0
  70. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/avro_idl_exporter.py +0 -0
  71. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/bigquery_exporter.py +0 -0
  72. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/custom_exporter.py +0 -0
  73. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/data_caterer_exporter.py +0 -0
  74. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/dbml_exporter.py +0 -0
  75. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/dcs_exporter.py +0 -0
  76. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/dqx_exporter.py +0 -0
  77. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/duckdb_type_converter.py +0 -0
  78. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/excel_exporter.py +0 -0
  79. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/exporter.py +0 -0
  80. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/exporter_factory.py +0 -0
  81. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/go_exporter.py +0 -0
  82. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/great_expectations_exporter.py +0 -0
  83. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/html_exporter.py +0 -0
  84. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/iceberg_exporter.py +0 -0
  85. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/jsonschema_exporter.py +0 -0
  86. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/markdown_exporter.py +0 -0
  87. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/mermaid_exporter.py +0 -0
  88. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/odcs_export_helper.py +0 -0
  89. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/odcs_v3_exporter.py +0 -0
  90. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/pandas_type_converter.py +0 -0
  91. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/protobuf_exporter.py +0 -0
  92. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/pydantic_exporter.py +0 -0
  93. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/rdf_exporter.py +0 -0
  94. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/sodacl_exporter.py +0 -0
  95. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/spark_exporter.py +0 -0
  96. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/sql_exporter.py +0 -0
  97. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/export/sqlalchemy_exporter.py +0 -0
  98. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/avro_importer.py +0 -0
  99. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/bigquery_importer.py +0 -0
  100. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/csv_importer.py +0 -0
  101. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/dbml_importer.py +0 -0
  102. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/dcs_importer.py +0 -0
  103. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/excel_importer.py +0 -0
  104. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/glue_importer.py +0 -0
  105. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/iceberg_importer.py +0 -0
  106. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/importer.py +0 -0
  107. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/importer_factory.py +0 -0
  108. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/json_importer.py +0 -0
  109. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/jsonschema_importer.py +0 -0
  110. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/odcs_helper.py +0 -0
  111. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/odcs_importer.py +0 -0
  112. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/parquet_importer.py +0 -0
  113. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/sql_importer.py +0 -0
  114. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/imports/unity_importer.py +0 -0
  115. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/init/init_template.py +0 -0
  116. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/lint/files.py +0 -0
  117. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/lint/resolve.py +0 -0
  118. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/lint/resources.py +0 -0
  119. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/lint/schema.py +0 -0
  120. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/lint/urls.py +0 -0
  121. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/model/changelog.py +0 -0
  122. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/model/exceptions.py +0 -0
  123. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/model/odcs.py +0 -0
  124. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/model/run.py +0 -0
  125. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/__init__.py +0 -0
  126. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/ci_output.py +0 -0
  127. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/json_test_results.py +0 -0
  128. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/junit_test_results.py +0 -0
  129. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/output_format.py +0 -0
  130. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/output/text_changelog_results.py +0 -0
  131. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/py.typed +0 -0
  132. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  133. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  134. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
  135. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  136. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
  137. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
  138. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  139. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
  140. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/odcs-3.1.0.init.yaml +0 -0
  141. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
  142. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/datacontract.html +0 -0
  143. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/datacontract_odcs.html +0 -0
  144. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/index.html +0 -0
  145. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/datacontract_information.html +0 -0
  146. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  147. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/datacontract_terms.html +0 -0
  148. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/definition.html +0 -0
  149. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/example.html +0 -0
  150. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/model_field.html +0 -0
  151. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/quality.html +0 -0
  152. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/partials/server.html +0 -0
  153. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract/templates/style/output.css +0 -0
  154. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  155. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract_cli.egg-info/entry_points.txt +0 -0
  156. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/datacontract_cli.egg-info/top_level.txt +0 -0
  157. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/setup.cfg +0 -0
  158. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_api.py +0 -0
  159. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_bigquery_soda_connection.py +0 -0
  160. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_catalog.py +0 -0
  161. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_changelog.py +0 -0
  162. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_changelog_engine.py +0 -0
  163. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_changelog_normalize.py +0 -0
  164. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_changelog_output_text.py +0 -0
  165. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_ci_output.py +0 -0
  166. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_cli.py +0 -0
  167. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_data_contract.py +0 -0
  168. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_data_contract_specification.py +0 -0
  169. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_description_linter.py +0 -0
  170. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_download_datacontract_file.py +0 -0
  171. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_duckdb_json.py +0 -0
  172. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_avro.py +0 -0
  173. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_avro_idl.py +0 -0
  174. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_bigquery.py +0 -0
  175. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_complex_data_contract.py +0 -0
  176. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_custom.py +0 -0
  177. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_custom_exporter.py +0 -0
  178. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_custom_model.py +0 -0
  179. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_data_caterer.py +0 -0
  180. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_dbml.py +0 -0
  181. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_dbt_models.py +0 -0
  182. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_dbt_sources.py +0 -0
  183. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_dbt_staging_sql.py +0 -0
  184. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_dqx.py +0 -0
  185. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_excel.py +0 -0
  186. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_go.py +0 -0
  187. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_great_expectations.py +0 -0
  188. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_html.py +0 -0
  189. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_iceberg.py +0 -0
  190. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_jsonschema.py +0 -0
  191. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_markdown.py +0 -0
  192. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_mermaid.py +0 -0
  193. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_odcs_v3.py +0 -0
  194. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_protobuf.py +0 -0
  195. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_pydantic.py +0 -0
  196. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_rdf.py +0 -0
  197. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_sodacl.py +0 -0
  198. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_spark.py +0 -0
  199. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_sql.py +0 -0
  200. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_sql_query.py +0 -0
  201. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_export_sqlalchemy.py +0 -0
  202. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_avro.py +0 -0
  203. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_bigquery.py +0 -0
  204. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_csv.py +0 -0
  205. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_dbml.py +0 -0
  206. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_excel.py +0 -0
  207. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_glue.py +0 -0
  208. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_iceberg.py +0 -0
  209. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_json.py +0 -0
  210. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_jsonschema.py +0 -0
  211. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_odcs_v3.py +0 -0
  212. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_parquet.py +0 -0
  213. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_protobuf.py +0 -0
  214. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_sql_oracle.py +0 -0
  215. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_sql_postgres.py +0 -0
  216. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_sql_snowflake.py +0 -0
  217. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_sql_sqlserver.py +0 -0
  218. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_import_unity_file.py +0 -0
  219. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_integration_entropydata.py +0 -0
  220. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_lint.py +0 -0
  221. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_require_env.py +0 -0
  222. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_resolve.py +0 -0
  223. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_roundtrip_jsonschema.py +0 -0
  224. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_sqlserver_soda_connection.py +0 -0
  225. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_api.py +0 -0
  226. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_athena_iceberg.py +0 -0
  227. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_azure_remote.py +0 -0
  228. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_bigquery.py +0 -0
  229. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_checks_filter.py +0 -0
  230. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_databricks.py +0 -0
  231. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_dataframe.py +0 -0
  232. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_delta.py +0 -0
  233. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_gcs_csv_remote.py +0 -0
  234. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_gcs_json_remote.py +0 -0
  235. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_kafka.py +0 -0
  236. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_kafka_remote.py +0 -0
  237. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_local_json.py +0 -0
  238. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_local_json_nd.py +0 -0
  239. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_mysql.py +0 -0
  240. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_oracle.py +0 -0
  241. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_output_json.py +0 -0
  242. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_output_junit.py +0 -0
  243. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_parquet.py +0 -0
  244. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_postgres.py +0 -0
  245. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_quality.py +0 -0
  246. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_csv.py +0 -0
  247. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_delta.py +0 -0
  248. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_json.py +0 -0
  249. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_json_complex.py +0 -0
  250. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_json_multiple_models.py +0 -0
  251. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_s3_json_remote.py +0 -0
  252. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_schema_evolution.py +0 -0
  253. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_server_not_found.py +0 -0
  254. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_snowflake.py +0 -0
  255. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/tests/test_test_sqlserver.py +0 -0
  256. {datacontract_cli-0.12.1 → datacontract_cli-0.12.3}/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.12.1
3
+ Version: 0.12.3
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,17 +11,16 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: <3.13,>=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: typer<0.25,>=0.18.0
14
+ Requires-Dist: typer<0.26,>=0.18.0
15
15
  Requires-Dist: pydantic<2.14.0,>=2.8.2
16
16
  Requires-Dist: pyyaml~=6.0.1
17
- Requires-Dist: requests<2.34,>=2.31
17
+ Requires-Dist: requests<2.35,>=2.31
18
18
  Requires-Dist: fastjsonschema<2.22.0,>=2.19.1
19
19
  Requires-Dist: jsonschema<5.0.0,>=4.23.0
20
20
  Requires-Dist: pytz>=2024.1
21
21
  Requires-Dist: python-multipart<1.0.0,>=0.0.20
22
22
  Requires-Dist: rich<16.0,>=13.7
23
23
  Requires-Dist: sqlglot<31.0.0,>=26.6.0
24
- Requires-Dist: setuptools>=60
25
24
  Requires-Dist: python-dotenv<2.0.0,>=1.0.0
26
25
  Requires-Dist: boto3<2.0.0,>=1.34.41
27
26
  Requires-Dist: Jinja2<4.0.0,>=3.1.5
@@ -29,6 +28,7 @@ Requires-Dist: jinja_partials<1.0.0,>=0.2.1
29
28
  Requires-Dist: datacontract-specification<2.0.0,>=1.2.3
30
29
  Requires-Dist: open-data-contract-standard<4.0.0,>=3.1.2
31
30
  Requires-Dist: deepdiff<10.0.0,>=6.0.0
31
+ Requires-Dist: setuptools>=70
32
32
  Provides-Extra: avro
33
33
  Requires-Dist: avro==1.12.1; extra == "avro"
34
34
  Provides-Extra: bigquery
@@ -41,7 +41,7 @@ Provides-Extra: databricks
41
41
  Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
42
42
  Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
43
43
  Requires-Dist: databricks-sql-connector<4.3.0,>=3.7.0; extra == "databricks"
44
- Requires-Dist: databricks-sdk<0.104.0; extra == "databricks"
44
+ Requires-Dist: databricks-sdk<0.109.0; extra == "databricks"
45
45
  Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "databricks"
46
46
  Provides-Extra: iceberg
47
47
  Requires-Dist: pyiceberg==0.11.1; extra == "iceberg"
@@ -51,14 +51,16 @@ Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "kafka"
51
51
  Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "kafka"
52
52
  Provides-Extra: mysql
53
53
  Requires-Dist: soda-core-mysql<3.6.0,>=3.3.20; extra == "mysql"
54
- Requires-Dist: mysql-connector-python<10.0.0,>=8.0.30; extra == "mysql"
54
+ Requires-Dist: mysql-connector-python<9.7.0,>=8.0.30; extra == "mysql"
55
55
  Provides-Extra: postgres
56
56
  Requires-Dist: soda-core-postgres<3.6.0,>=3.3.20; extra == "postgres"
57
+ Provides-Extra: redshift
58
+ Requires-Dist: soda-core-redshift<3.6.0,>=3.3.20; extra == "redshift"
57
59
  Provides-Extra: s3
58
60
  Requires-Dist: s3fs<2027.0.0,>=2025.2.0; extra == "s3"
59
- Requires-Dist: aiobotocore<3.5.0,>=2.17.0; extra == "s3"
61
+ Requires-Dist: aiobotocore<3.8.0,>=2.17.0; extra == "s3"
60
62
  Provides-Extra: snowflake
61
- Requires-Dist: snowflake-connector-python[pandas]<4.5,>=3.6; extra == "snowflake"
63
+ Requires-Dist: snowflake-connector-python[pandas]<4.6,>=3.6; extra == "snowflake"
62
64
  Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
63
65
  Provides-Extra: sqlserver
64
66
  Requires-Dist: soda-core-sqlserver<3.6.0,>=3.3.20; extra == "sqlserver"
@@ -68,8 +70,8 @@ Provides-Extra: athena
68
70
  Requires-Dist: soda-core-athena<3.6.0,>=3.3.20; extra == "athena"
69
71
  Provides-Extra: trino
70
72
  Requires-Dist: soda-core-trino<3.6.0,>=3.3.20; extra == "trino"
71
- Provides-Extra: dbt
72
- Requires-Dist: dbt-core>=1.8.0; extra == "dbt"
73
+ Provides-Extra: impala
74
+ Requires-Dist: soda-core-impala<3.6.0,>=3.3.20; extra == "impala"
73
75
  Provides-Extra: dbml
74
76
  Requires-Dist: pydbml>=1.1.1; extra == "dbml"
75
77
  Provides-Extra: duckdb
@@ -80,24 +82,24 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
80
82
  Provides-Extra: rdf
81
83
  Requires-Dist: rdflib==7.6.0; extra == "rdf"
82
84
  Provides-Extra: api
83
- Requires-Dist: fastapi==0.136.0; extra == "api"
84
- Requires-Dist: uvicorn==0.44.0; extra == "api"
85
+ Requires-Dist: fastapi==0.136.1; extra == "api"
86
+ Requires-Dist: uvicorn<0.47.0,>=0.44.0; extra == "api"
85
87
  Provides-Extra: protobuf
86
- Requires-Dist: grpcio-tools>=1.53; extra == "protobuf"
88
+ Requires-Dist: protobuf<8.0,>=3.20; extra == "protobuf"
87
89
  Provides-Extra: all
88
- Requires-Dist: datacontract-cli[api,athena,bigquery,csv,databricks,dbml,dbt,duckdb,excel,iceberg,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,s3,snowflake,sqlserver,trino]; extra == "all"
90
+ Requires-Dist: datacontract-cli[api,athena,bigquery,csv,databricks,dbml,duckdb,excel,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino]; extra == "all"
89
91
  Provides-Extra: dev
90
92
  Requires-Dist: datacontract-cli[all]; extra == "dev"
91
93
  Requires-Dist: httpx==0.28.1; extra == "dev"
92
94
  Requires-Dist: kafka-python; extra == "dev"
93
95
  Requires-Dist: minio==7.2.20; extra == "dev"
94
- Requires-Dist: moto==5.1.22; extra == "dev"
96
+ Requires-Dist: moto==5.2.1; extra == "dev"
95
97
  Requires-Dist: pandas>=2.1.0; extra == "dev"
96
- Requires-Dist: pre-commit<4.6.0,>=3.7.1; extra == "dev"
98
+ Requires-Dist: pre-commit<4.7.0,>=3.7.1; extra == "dev"
97
99
  Requires-Dist: pytest; extra == "dev"
98
100
  Requires-Dist: pytest-xdist; extra == "dev"
99
101
  Requires-Dist: pymssql==2.3.13; extra == "dev"
100
- Requires-Dist: ruff==0.15.11; extra == "dev"
102
+ Requires-Dist: ruff==0.15.12; extra == "dev"
101
103
  Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.14.2; extra == "dev"
102
104
  Requires-Dist: trino==0.337.0; extra == "dev"
103
105
  Dynamic: license-file
@@ -230,6 +232,9 @@ $ datacontract changelog v1.odcs.yaml v2.odcs.yaml
230
232
  # execute schema and quality checks (define credentials as environment variables)
231
233
  $ datacontract test odcs.yaml
232
234
 
235
+ # generate dbt tests from a contract into your dbt project and run `dbt test`
236
+ $ datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse
237
+
233
238
  # export data contract as html (other formats: avro, dbt-models, dbt-sources, dbt-staging-sql, jsonschema, odcs, rdf, sql, sodacl, terraform, ...)
234
239
  $ datacontract export html datacontract.yaml --output odcs.html
235
240
 
@@ -345,23 +350,26 @@ A list of available extras:
345
350
  | Amazon Athena | `pip install datacontract-cli[athena]` |
346
351
  | Avro Support | `pip install datacontract-cli[avro]` |
347
352
  | Google BigQuery | `pip install datacontract-cli[bigquery]` |
353
+ | CSV | `pip install datacontract-cli[csv]` |
348
354
  | Databricks Integration | `pip install datacontract-cli[databricks]` |
355
+ | DBML | `pip install datacontract-cli[dbml]` |
349
356
  | DuckDB (local/S3/GCS/Azure file testing) | `pip install datacontract-cli[duckdb]` |
357
+ | Excel | `pip install datacontract-cli[excel]` |
350
358
  | Iceberg | `pip install datacontract-cli[iceberg]` |
359
+ | Impala | `pip install datacontract-cli[impala]` |
351
360
  | Kafka Integration | `pip install datacontract-cli[kafka]` |
352
361
  | MySQL Integration | `pip install datacontract-cli[mysql]` |
362
+ | Oracle | `pip install datacontract-cli[oracle]` |
363
+ | Parquet | `pip install datacontract-cli[parquet]` |
353
364
  | PostgreSQL Integration | `pip install datacontract-cli[postgres]` |
365
+ | protobuf | `pip install datacontract-cli[protobuf]` |
366
+ | RDF | `pip install datacontract-cli[rdf]` |
367
+ | Amazon Redshift | `pip install datacontract-cli[redshift]` |
354
368
  | S3 Integration | `pip install datacontract-cli[s3]` |
355
369
  | Snowflake Integration | `pip install datacontract-cli[snowflake]` |
356
370
  | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
357
371
  | Trino | `pip install datacontract-cli[trino]` |
358
- | Impala | `pip install datacontract-cli[impala]` |
359
- | dbt | `pip install datacontract-cli[dbt]` |
360
- | DBML | `pip install datacontract-cli[dbml]` |
361
- | Parquet | `pip install datacontract-cli[parquet]` |
362
- | RDF | `pip install datacontract-cli[rdf]` |
363
372
  | API (run as web server) | `pip install datacontract-cli[api]` |
364
- | protobuf | `pip install datacontract-cli[protobuf]` |
365
373
 
366
374
 
367
375
  ## Documentation
@@ -372,6 +380,7 @@ Commands
372
380
  - [lint](#lint)
373
381
  - [changelog](#changelog)
374
382
  - [test](#test)
383
+ - [dbt](#dbt-sync)
375
384
  - [ci](#ci)
376
385
  - [export](#export)
377
386
  - [import](#import)
@@ -442,13 +451,19 @@ Commands
442
451
  Show a changelog between two data contracts.
443
452
 
444
453
  ╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
445
- │ * v1 TEXT The location (path) of the source (before) data contract YAML. [required]
446
- * v2 TEXT The location (path) of the target (after) data contract YAML. [required]
454
+ │ * v1 TEXT The location (url or path) of the source (before) data contract YAML.
455
+ [required]
456
+ │ * v2 TEXT The location (url or path) of the target (after) data contract YAML. │
457
+ │ [required] │
447
458
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
448
459
  ╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
449
460
  │ --debug --no-debug Enable debug logging │
450
461
  │ --help Show this message and exit. │
451
462
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
463
+
464
+ Example: datacontract changelog datacontract-v1.yaml datacontract-v2.yaml
465
+
466
+
452
467
  ```
453
468
 
454
469
  ```bash
@@ -1042,6 +1057,52 @@ models:
1042
1057
 
1043
1058
  </details>
1044
1059
 
1060
+ <details markdown="1">
1061
+ <summary><strong>Amazon Redshift</strong></summary>
1062
+
1063
+ Data Contract CLI can test data in Amazon Redshift (both provisioned clusters and Redshift Serverless).
1064
+
1065
+ ##### Example
1066
+
1067
+ datacontract.yaml
1068
+ ```yaml
1069
+ servers:
1070
+ redshift:
1071
+ type: redshift
1072
+ host: my-workgroup.123456789012.us-east-1.redshift-serverless.amazonaws.com
1073
+ port: 5439
1074
+ database: dev
1075
+ schema: analytics
1076
+ models:
1077
+ my_table_1: # corresponds to a table
1078
+ type: table
1079
+ fields:
1080
+ my_column_1: # corresponds to a column
1081
+ type: varchar
1082
+ ```
1083
+
1084
+ ##### Environment Variables
1085
+ All [parameters supported by Soda](https://docs.soda.io/soda/connect-redshift.html), uppercased and prepended by `DATACONTRACT_REDSHIFT_` prefix.
1086
+ For example:
1087
+
1088
+ | Soda parameter | Environment Variable | Details |
1089
+ |---------------------|-------------------------------------------|---------------------|
1090
+ | `username` | `DATACONTRACT_REDSHIFT_USERNAME` | |
1091
+ | `password` | `DATACONTRACT_REDSHIFT_PASSWORD` | leave unset for IAM |
1092
+ | `region` | `DATACONTRACT_REDSHIFT_REGION` | for IAM |
1093
+ | `access_key_id` | `DATACONTRACT_REDSHIFT_ACCESS_KEY_ID` | for IAM |
1094
+ | `secret_access_key` | `DATACONTRACT_REDSHIFT_SECRET_ACCESS_KEY` | for IAM |
1095
+ | `role_arn` | `DATACONTRACT_REDSHIFT_ROLE_ARN` | for IAM |
1096
+
1097
+ IAM credentials can be supplied in two ways:
1098
+
1099
+ 1. **AWS_PROFILE** — set `AWS_PROFILE` in your shell to a profile defined in `~/.aws/credentials` and `DATACONTRACT_REDSHIFT_REGION`.
1100
+ 2. **Explicit keys** — set `DATACONTRACT_REDSHIFT_REGION`, `..._ACCESS_KEY_ID`, `..._SECRET_ACCESS_KEY`, and `..._SESSION_TOKEN` for temporary credentials, or `..._ROLE_ARN` to assume a role.
1101
+
1102
+ >IAM authentication is supported only for **provisioned** Redshift clusters.
1103
+
1104
+ </details>
1105
+
1045
1106
  <details markdown="1">
1046
1107
  <summary><strong>MySQL</strong></summary>
1047
1108
 
@@ -1221,6 +1282,84 @@ models:
1221
1282
 
1222
1283
  </details>
1223
1284
 
1285
+ ### dbt sync
1286
+ > The `dbt sync` command is still work in progress and will receive further functionality and documentation soon.
1287
+ ```
1288
+
1289
+ Usage: datacontract dbt sync [OPTIONS] [CONTRACT]
1290
+
1291
+ Generate dbt tests from an ODCS contract and run them.
1292
+
1293
+ Within the specified dbt project, this command wipes `<model-paths>/datacontract_cli/` and
1294
+ `<test-paths>/datacontract_cli/`, regenerates them from the contract, then runs `dbt test`.
1295
+
1296
+ ╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
1297
+ │ contract [CONTRACT] Path to the ODCS data contract. If omitted, searches for a single │
1298
+ │ `*.odcs.yaml` in the current directory and its subdirectories. │
1299
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
1300
+ ╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
1301
+ │ --project-dir PATH Path to the dbt project root │
1302
+ │ (must contain │
1303
+ │ `dbt_project.yml`). Defaults │
1304
+ │ to the current directory. │
1305
+ │ --schema-name TEXT Which ODCS schema object to │
1306
+ │ sync, by name. │
1307
+ │ [default: all] │
1308
+ │ --model-resolution [name|physicalName] How to map an ODCS schema to │
1309
+ │ a dbt model name. │
1310
+ │ [default: name] │
1311
+ │ --target TEXT Forwarded to `dbt test │
1312
+ │ --target`. │
1313
+ │ --profiles-dir PATH Forwarded to `dbt test │
1314
+ │ --profiles-dir`. │
1315
+ │ --skip-tests --run-tests Generate tests but skip │
1316
+ │ running `dbt test`. │
1317
+ │ [default: run-tests] │
1318
+ │ --publish TEXT The url to publish the │
1319
+ │ results after the test. │
1320
+ │ --server TEXT ODCS server name for │
1321
+ │ published test results. │
1322
+ │ Auto-selected if the │
1323
+ │ contract contains only one │
1324
+ │ server. Otherwise defaults │
1325
+ │ to --target. │
1326
+ │ --ssl-verification --no-ssl-verification SSL verification when │
1327
+ │ publishing test results. │
1328
+ │ [default: ssl-verification] │
1329
+ │ --debug --no-debug Enable debug logging │
1330
+ │ --help Show this message and exit. │
1331
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
1332
+
1333
+ Example: datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse
1334
+
1335
+
1336
+ ```
1337
+
1338
+ `datacontract dbt sync` generates dbt tests from an ODCS data contract directly into your dbt project and (by default) runs `dbt test` against them. The contract becomes the single source of truth for column-level constraints and quality checks. It is recommended to remove existing dbt tests to avoid duplication.
1339
+
1340
+ On each run, the command:
1341
+
1342
+ - **Wipes and regenerates** the `models/datacontract_cli/` and `tests/datacontract_cli/` directories under your dbt project. The paths honor `model-paths` and `test-paths` in `dbt_project.yml`.
1343
+ - **Emits one YAML model file per ODCS schema** that uses dbt's built-in tests and [`dbt_utils`](https://github.com/dbt-labs/dbt-utils).
1344
+ - **Emits singular SQL tests** for all ODCS `quality` that can't be expressed as native YAML tests.
1345
+ - **Runs `dbt test --select tag:datacontract_cli`** to run the generated tests; pre-existing dbt tests are untouched. Pass `--skip-tests` to regenerate without invoking dbt.
1346
+
1347
+ Prerequisites: `dbt-core` plus an adapter (e.g. `dbt-duckdb`, `dbt-postgres`) on `PATH`, [`dbt_utils`](https://github.com/dbt-labs/dbt-utils) installed in your dbt project's `packages.yml`.
1348
+
1349
+ ```bash
1350
+ # Auto-discover a contract named *.odcs.yaml in a dbt project
1351
+ $ datacontract dbt sync
1352
+
1353
+ # Explicit contract, run against a specific dbt target
1354
+ $ datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse --target dev
1355
+
1356
+ # Only generate dbt tests, don't run them
1357
+ $ datacontract dbt sync orders.odcs.yaml --skip-tests
1358
+
1359
+ # Run and publish results to an Entropy Data instance
1360
+ $ datacontract dbt sync orders.odcs.yaml --publish https://api.entropy-data.com/api/test-results
1361
+ ```
1362
+
1224
1363
  ### ci
1225
1364
  ```
1226
1365
 
@@ -1271,6 +1410,9 @@ models:
1271
1410
  │ --help Show this message and │
1272
1411
  │ exit. │
1273
1412
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
1413
+
1414
+ Example: datacontract ci datacontract.yaml --output test-results.xml --output-format junit
1415
+
1274
1416
 
1275
1417
  ```
1276
1418
 
@@ -1395,7 +1537,7 @@ steps:
1395
1537
 
1396
1538
  Example: datacontract export html datacontract.yaml --output datacontract.html
1397
1539
  For SQL dialects (postgres, mysql, snowflake, databricks, sqlserver, trino, oracle), use
1398
- `datacontract export sql --dialect <dialect>`.
1540
+ `datacontract export sql --dialect <dialect>`.
1399
1541
 
1400
1542
 
1401
1543
  ```
@@ -1742,9 +1884,9 @@ For more information about the Excel template structure, visit the [ODCS Excel T
1742
1884
  │ --help Show this message and exit. │
1743
1885
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
1744
1886
  ╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
1887
+ │ dbt Import a data contract from a dbt manifest file. │
1745
1888
  │ sql Import a data contract from a SQL DDL file. │
1746
1889
  │ avro Import a data contract from an Avro schema file. │
1747
- │ dbt Import a data contract from a dbt manifest file. │
1748
1890
  │ dbml Import a data contract from a DBML file. │
1749
1891
  │ glue Import a data contract from AWS Glue. │
1750
1892
  │ bigquery Import a data contract from BigQuery. │
@@ -1972,7 +2114,17 @@ datacontract import csv --source "test.csv"
1972
2114
  <details markdown="1">
1973
2115
  <summary><strong>protobuf</strong></summary>
1974
2116
 
1975
- Importing from protobuf File. Specify file in `source` parameter.
2117
+ Importing from protobuf File. Specify file in `source` parameter.
2118
+
2119
+ Requires the `protoc` compiler installed on the system. Install with:
2120
+
2121
+ | Platform | Command |
2122
+ |----------------|--------------------------------------|
2123
+ | macOS | `brew install protobuf` |
2124
+ | Debian/Ubuntu | `sudo apt install protobuf-compiler` |
2125
+ | Fedora/RHEL | `sudo dnf install protobuf-compiler` |
2126
+ | Arch | `sudo pacman -S protobuf` |
2127
+ | Windows | `choco install protoc` (or [download a release](https://github.com/protocolbuffers/protobuf/releases)) |
1976
2128
 
1977
2129
  Example:
1978
2130
 
@@ -2124,9 +2276,9 @@ Create a data contract based on the actual data. This is the fastest way to get
2124
2276
 
2125
2277
  4. Set up a CI pipeline that executes daily for continuous quality checks. Use the [`ci`](#ci) command for
2126
2278
  CI-optimized output (GitHub Actions annotations and step summary, Azure DevOps annotations).
2127
- You can also report the test results to tools like [Data Mesh Manager](https://datamesh-manager.com).
2279
+ You can also report the test results to tools like [Entropy Data](https://entropy-data.com).
2128
2280
  ```bash
2129
- $ datacontract ci --publish https://api.datamesh-manager.com/api/test-results
2281
+ $ datacontract ci --publish https://api.entropy-data.com/api/test-results
2130
2282
  ```
2131
2283
 
2132
2284
  ### Contract-First
@@ -126,6 +126,9 @@ $ datacontract changelog v1.odcs.yaml v2.odcs.yaml
126
126
  # execute schema and quality checks (define credentials as environment variables)
127
127
  $ datacontract test odcs.yaml
128
128
 
129
+ # generate dbt tests from a contract into your dbt project and run `dbt test`
130
+ $ datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse
131
+
129
132
  # export data contract as html (other formats: avro, dbt-models, dbt-sources, dbt-staging-sql, jsonschema, odcs, rdf, sql, sodacl, terraform, ...)
130
133
  $ datacontract export html datacontract.yaml --output odcs.html
131
134
 
@@ -241,23 +244,26 @@ A list of available extras:
241
244
  | Amazon Athena | `pip install datacontract-cli[athena]` |
242
245
  | Avro Support | `pip install datacontract-cli[avro]` |
243
246
  | Google BigQuery | `pip install datacontract-cli[bigquery]` |
247
+ | CSV | `pip install datacontract-cli[csv]` |
244
248
  | Databricks Integration | `pip install datacontract-cli[databricks]` |
249
+ | DBML | `pip install datacontract-cli[dbml]` |
245
250
  | DuckDB (local/S3/GCS/Azure file testing) | `pip install datacontract-cli[duckdb]` |
251
+ | Excel | `pip install datacontract-cli[excel]` |
246
252
  | Iceberg | `pip install datacontract-cli[iceberg]` |
253
+ | Impala | `pip install datacontract-cli[impala]` |
247
254
  | Kafka Integration | `pip install datacontract-cli[kafka]` |
248
255
  | MySQL Integration | `pip install datacontract-cli[mysql]` |
256
+ | Oracle | `pip install datacontract-cli[oracle]` |
257
+ | Parquet | `pip install datacontract-cli[parquet]` |
249
258
  | PostgreSQL Integration | `pip install datacontract-cli[postgres]` |
259
+ | protobuf | `pip install datacontract-cli[protobuf]` |
260
+ | RDF | `pip install datacontract-cli[rdf]` |
261
+ | Amazon Redshift | `pip install datacontract-cli[redshift]` |
250
262
  | S3 Integration | `pip install datacontract-cli[s3]` |
251
263
  | Snowflake Integration | `pip install datacontract-cli[snowflake]` |
252
264
  | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
253
265
  | Trino | `pip install datacontract-cli[trino]` |
254
- | Impala | `pip install datacontract-cli[impala]` |
255
- | dbt | `pip install datacontract-cli[dbt]` |
256
- | DBML | `pip install datacontract-cli[dbml]` |
257
- | Parquet | `pip install datacontract-cli[parquet]` |
258
- | RDF | `pip install datacontract-cli[rdf]` |
259
266
  | API (run as web server) | `pip install datacontract-cli[api]` |
260
- | protobuf | `pip install datacontract-cli[protobuf]` |
261
267
 
262
268
 
263
269
  ## Documentation
@@ -268,6 +274,7 @@ Commands
268
274
  - [lint](#lint)
269
275
  - [changelog](#changelog)
270
276
  - [test](#test)
277
+ - [dbt](#dbt-sync)
271
278
  - [ci](#ci)
272
279
  - [export](#export)
273
280
  - [import](#import)
@@ -338,13 +345,19 @@ Commands
338
345
  Show a changelog between two data contracts.
339
346
 
340
347
  ╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
341
- │ * v1 TEXT The location (path) of the source (before) data contract YAML. [required]
342
- * v2 TEXT The location (path) of the target (after) data contract YAML. [required]
348
+ │ * v1 TEXT The location (url or path) of the source (before) data contract YAML.
349
+ [required]
350
+ │ * v2 TEXT The location (url or path) of the target (after) data contract YAML. │
351
+ │ [required] │
343
352
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
344
353
  ╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
345
354
  │ --debug --no-debug Enable debug logging │
346
355
  │ --help Show this message and exit. │
347
356
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
357
+
358
+ Example: datacontract changelog datacontract-v1.yaml datacontract-v2.yaml
359
+
360
+
348
361
  ```
349
362
 
350
363
  ```bash
@@ -938,6 +951,52 @@ models:
938
951
 
939
952
  </details>
940
953
 
954
+ <details markdown="1">
955
+ <summary><strong>Amazon Redshift</strong></summary>
956
+
957
+ Data Contract CLI can test data in Amazon Redshift (both provisioned clusters and Redshift Serverless).
958
+
959
+ ##### Example
960
+
961
+ datacontract.yaml
962
+ ```yaml
963
+ servers:
964
+ redshift:
965
+ type: redshift
966
+ host: my-workgroup.123456789012.us-east-1.redshift-serverless.amazonaws.com
967
+ port: 5439
968
+ database: dev
969
+ schema: analytics
970
+ models:
971
+ my_table_1: # corresponds to a table
972
+ type: table
973
+ fields:
974
+ my_column_1: # corresponds to a column
975
+ type: varchar
976
+ ```
977
+
978
+ ##### Environment Variables
979
+ All [parameters supported by Soda](https://docs.soda.io/soda/connect-redshift.html), uppercased and prepended by `DATACONTRACT_REDSHIFT_` prefix.
980
+ For example:
981
+
982
+ | Soda parameter | Environment Variable | Details |
983
+ |---------------------|-------------------------------------------|---------------------|
984
+ | `username` | `DATACONTRACT_REDSHIFT_USERNAME` | |
985
+ | `password` | `DATACONTRACT_REDSHIFT_PASSWORD` | leave unset for IAM |
986
+ | `region` | `DATACONTRACT_REDSHIFT_REGION` | for IAM |
987
+ | `access_key_id` | `DATACONTRACT_REDSHIFT_ACCESS_KEY_ID` | for IAM |
988
+ | `secret_access_key` | `DATACONTRACT_REDSHIFT_SECRET_ACCESS_KEY` | for IAM |
989
+ | `role_arn` | `DATACONTRACT_REDSHIFT_ROLE_ARN` | for IAM |
990
+
991
+ IAM credentials can be supplied in two ways:
992
+
993
+ 1. **AWS_PROFILE** — set `AWS_PROFILE` in your shell to a profile defined in `~/.aws/credentials` and `DATACONTRACT_REDSHIFT_REGION`.
994
+ 2. **Explicit keys** — set `DATACONTRACT_REDSHIFT_REGION`, `..._ACCESS_KEY_ID`, `..._SECRET_ACCESS_KEY`, and `..._SESSION_TOKEN` for temporary credentials, or `..._ROLE_ARN` to assume a role.
995
+
996
+ >IAM authentication is supported only for **provisioned** Redshift clusters.
997
+
998
+ </details>
999
+
941
1000
  <details markdown="1">
942
1001
  <summary><strong>MySQL</strong></summary>
943
1002
 
@@ -1117,6 +1176,84 @@ models:
1117
1176
 
1118
1177
  </details>
1119
1178
 
1179
+ ### dbt sync
1180
+ > The `dbt sync` command is still work in progress and will receive further functionality and documentation soon.
1181
+ ```
1182
+
1183
+ Usage: datacontract dbt sync [OPTIONS] [CONTRACT]
1184
+
1185
+ Generate dbt tests from an ODCS contract and run them.
1186
+
1187
+ Within the specified dbt project, this command wipes `<model-paths>/datacontract_cli/` and
1188
+ `<test-paths>/datacontract_cli/`, regenerates them from the contract, then runs `dbt test`.
1189
+
1190
+ ╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
1191
+ │ contract [CONTRACT] Path to the ODCS data contract. If omitted, searches for a single │
1192
+ │ `*.odcs.yaml` in the current directory and its subdirectories. │
1193
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
1194
+ ╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
1195
+ │ --project-dir PATH Path to the dbt project root │
1196
+ │ (must contain │
1197
+ │ `dbt_project.yml`). Defaults │
1198
+ │ to the current directory. │
1199
+ │ --schema-name TEXT Which ODCS schema object to │
1200
+ │ sync, by name. │
1201
+ │ [default: all] │
1202
+ │ --model-resolution [name|physicalName] How to map an ODCS schema to │
1203
+ │ a dbt model name. │
1204
+ │ [default: name] │
1205
+ │ --target TEXT Forwarded to `dbt test │
1206
+ │ --target`. │
1207
+ │ --profiles-dir PATH Forwarded to `dbt test │
1208
+ │ --profiles-dir`. │
1209
+ │ --skip-tests --run-tests Generate tests but skip │
1210
+ │ running `dbt test`. │
1211
+ │ [default: run-tests] │
1212
+ │ --publish TEXT The url to publish the │
1213
+ │ results after the test. │
1214
+ │ --server TEXT ODCS server name for │
1215
+ │ published test results. │
1216
+ │ Auto-selected if the │
1217
+ │ contract contains only one │
1218
+ │ server. Otherwise defaults │
1219
+ │ to --target. │
1220
+ │ --ssl-verification --no-ssl-verification SSL verification when │
1221
+ │ publishing test results. │
1222
+ │ [default: ssl-verification] │
1223
+ │ --debug --no-debug Enable debug logging │
1224
+ │ --help Show this message and exit. │
1225
+ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
1226
+
1227
+ Example: datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse
1228
+
1229
+
1230
+ ```
1231
+
1232
+ `datacontract dbt sync` generates dbt tests from an ODCS data contract directly into your dbt project and (by default) runs `dbt test` against them. The contract becomes the single source of truth for column-level constraints and quality checks. It is recommended to remove existing dbt tests to avoid duplication.
1233
+
1234
+ On each run, the command:
1235
+
1236
+ - **Wipes and regenerates** the `models/datacontract_cli/` and `tests/datacontract_cli/` directories under your dbt project. The paths honor `model-paths` and `test-paths` in `dbt_project.yml`.
1237
+ - **Emits one YAML model file per ODCS schema** that uses dbt's built-in tests and [`dbt_utils`](https://github.com/dbt-labs/dbt-utils).
1238
+ - **Emits singular SQL tests** for all ODCS `quality` that can't be expressed as native YAML tests.
1239
+ - **Runs `dbt test --select tag:datacontract_cli`** to run the generated tests; pre-existing dbt tests are untouched. Pass `--skip-tests` to regenerate without invoking dbt.
1240
+
1241
+ Prerequisites: `dbt-core` plus an adapter (e.g. `dbt-duckdb`, `dbt-postgres`) on `PATH`, [`dbt_utils`](https://github.com/dbt-labs/dbt-utils) installed in your dbt project's `packages.yml`.
1242
+
1243
+ ```bash
1244
+ # Auto-discover a contract named *.odcs.yaml in a dbt project
1245
+ $ datacontract dbt sync
1246
+
1247
+ # Explicit contract, run against a specific dbt target
1248
+ $ datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse --target dev
1249
+
1250
+ # Only generate dbt tests, don't run them
1251
+ $ datacontract dbt sync orders.odcs.yaml --skip-tests
1252
+
1253
+ # Run and publish results to an Entropy Data instance
1254
+ $ datacontract dbt sync orders.odcs.yaml --publish https://api.entropy-data.com/api/test-results
1255
+ ```
1256
+
1120
1257
  ### ci
1121
1258
  ```
1122
1259
 
@@ -1167,6 +1304,9 @@ models:
1167
1304
  │ --help Show this message and │
1168
1305
  │ exit. │
1169
1306
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
1307
+
1308
+ Example: datacontract ci datacontract.yaml --output test-results.xml --output-format junit
1309
+
1170
1310
 
1171
1311
  ```
1172
1312
 
@@ -1291,7 +1431,7 @@ steps:
1291
1431
 
1292
1432
  Example: datacontract export html datacontract.yaml --output datacontract.html
1293
1433
  For SQL dialects (postgres, mysql, snowflake, databricks, sqlserver, trino, oracle), use
1294
- `datacontract export sql --dialect <dialect>`.
1434
+ `datacontract export sql --dialect <dialect>`.
1295
1435
 
1296
1436
 
1297
1437
  ```
@@ -1638,9 +1778,9 @@ For more information about the Excel template structure, visit the [ODCS Excel T
1638
1778
  │ --help Show this message and exit. │
1639
1779
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
1640
1780
  ╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
1781
+ │ dbt Import a data contract from a dbt manifest file. │
1641
1782
  │ sql Import a data contract from a SQL DDL file. │
1642
1783
  │ avro Import a data contract from an Avro schema file. │
1643
- │ dbt Import a data contract from a dbt manifest file. │
1644
1784
  │ dbml Import a data contract from a DBML file. │
1645
1785
  │ glue Import a data contract from AWS Glue. │
1646
1786
  │ bigquery Import a data contract from BigQuery. │
@@ -1868,7 +2008,17 @@ datacontract import csv --source "test.csv"
1868
2008
  <details markdown="1">
1869
2009
  <summary><strong>protobuf</strong></summary>
1870
2010
 
1871
- Importing from protobuf File. Specify file in `source` parameter.
2011
+ Importing from protobuf File. Specify file in `source` parameter.
2012
+
2013
+ Requires the `protoc` compiler installed on the system. Install with:
2014
+
2015
+ | Platform | Command |
2016
+ |----------------|--------------------------------------|
2017
+ | macOS | `brew install protobuf` |
2018
+ | Debian/Ubuntu | `sudo apt install protobuf-compiler` |
2019
+ | Fedora/RHEL | `sudo dnf install protobuf-compiler` |
2020
+ | Arch | `sudo pacman -S protobuf` |
2021
+ | Windows | `choco install protoc` (or [download a release](https://github.com/protocolbuffers/protobuf/releases)) |
1872
2022
 
1873
2023
  Example:
1874
2024
 
@@ -2020,9 +2170,9 @@ Create a data contract based on the actual data. This is the fastest way to get
2020
2170
 
2021
2171
  4. Set up a CI pipeline that executes daily for continuous quality checks. Use the [`ci`](#ci) command for
2022
2172
  CI-optimized output (GitHub Actions annotations and step summary, Azure DevOps annotations).
2023
- You can also report the test results to tools like [Data Mesh Manager](https://datamesh-manager.com).
2173
+ You can also report the test results to tools like [Entropy Data](https://entropy-data.com).
2024
2174
  ```bash
2025
- $ datacontract ci --publish https://api.datamesh-manager.com/api/test-results
2175
+ $ datacontract ci --publish https://api.entropy-data.com/api/test-results
2026
2176
  ```
2027
2177
 
2028
2178
  ### Contract-First