datacontract-cli 0.10.34__tar.gz → 0.10.36__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of datacontract-cli might be problematic. Click here for more details.

Files changed (228) hide show
  1. {datacontract_cli-0.10.34/datacontract_cli.egg-info → datacontract_cli-0.10.36}/PKG-INFO +68 -56
  2. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/README.md +59 -47
  3. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/api.py +10 -3
  4. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/cli.py +5 -3
  5. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/data_contract.py +18 -51
  6. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/data_contract_checks.py +280 -19
  7. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/fastjsonschema/check_jsonschema.py +29 -19
  8. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/dbt_converter.py +30 -4
  9. datacontract_cli-0.10.36/datacontract/export/dqx_converter.py +126 -0
  10. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/excel_exporter.py +3 -3
  11. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/exporter.py +1 -0
  12. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/exporter_factory.py +6 -0
  13. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/markdown_converter.py +35 -16
  14. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/mermaid_exporter.py +24 -11
  15. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/rdf_converter.py +2 -2
  16. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/spark_converter.py +28 -3
  17. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/sql_type_converter.py +6 -4
  18. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/odcs_v3_importer.py +100 -19
  19. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/unity_importer.py +16 -11
  20. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/init/init_template.py +1 -1
  21. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/lint/resolve.py +1 -1
  22. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/lint/schema.py +1 -1
  23. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.1.0.init.yaml +1 -1
  24. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.2.0.init.yaml +1 -1
  25. datacontract_cli-0.10.36/datacontract/schemas/datacontract-1.2.1.init.yaml +91 -0
  26. datacontract_cli-0.10.36/datacontract/schemas/datacontract-1.2.1.schema.json +2058 -0
  27. datacontract_cli-0.10.36/datacontract/schemas/odcs-3.0.2.schema.json +2382 -0
  28. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/datacontract_odcs.html +60 -41
  29. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36/datacontract_cli.egg-info}/PKG-INFO +68 -56
  30. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/SOURCES.txt +6 -12
  31. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/requires.txt +8 -8
  32. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/pyproject.toml +9 -9
  33. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_api.py +1 -1
  34. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_duckdb_json.py +1 -1
  35. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_bigquery.py +1 -1
  36. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_complex_data_contract.py +1 -1
  37. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_dbml.py +2 -2
  38. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_dbt_models.py +125 -0
  39. datacontract_cli-0.10.36/tests/test_export_dqx.py +212 -0
  40. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_rdf.py +6 -6
  41. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_sodacl.py +1 -1
  42. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_spark.py +3 -2
  43. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_avro.py +18 -18
  44. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_bigquery.py +4 -4
  45. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_csv.py +3 -3
  46. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_dbml.py +3 -3
  47. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_dbt.py +12 -12
  48. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_glue.py +6 -6
  49. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_iceberg.py +1 -1
  50. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_json.py +6 -6
  51. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_jsonschema.py +6 -6
  52. datacontract_cli-0.10.36/tests/test_import_odcs_v3.py +123 -0
  53. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_parquet.py +3 -3
  54. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_protobuf.py +3 -3
  55. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_spark.py +5 -5
  56. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_sql_postgres.py +6 -6
  57. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_sql_sqlserver.py +3 -3
  58. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_unity_file.py +5 -5
  59. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_lint.py +2 -2
  60. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_resolve.py +7 -7
  61. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_roundtrip_jsonschema.py +1 -1
  62. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_bigquery.py +14 -0
  63. datacontract_cli-0.10.36/tests/test_test_dataframe.py +176 -0
  64. datacontract_cli-0.10.36/tests/test_test_local_json_nd.py +19 -0
  65. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_quality.py +4 -0
  66. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_delta.py +2 -4
  67. datacontract_cli-0.10.34/datacontract/lint/lint.py +0 -142
  68. datacontract_cli-0.10.34/datacontract/lint/linters/description_linter.py +0 -33
  69. datacontract_cli-0.10.34/datacontract/lint/linters/field_pattern_linter.py +0 -34
  70. datacontract_cli-0.10.34/datacontract/lint/linters/field_reference_linter.py +0 -47
  71. datacontract_cli-0.10.34/datacontract/lint/linters/notice_period_linter.py +0 -55
  72. datacontract_cli-0.10.34/datacontract/lint/linters/valid_constraints_linter.py +0 -100
  73. datacontract_cli-0.10.34/datacontract/output/__init__.py +0 -0
  74. datacontract_cli-0.10.34/tests/test_documentation_linter.py +0 -48
  75. datacontract_cli-0.10.34/tests/test_field_constraint_linter.py +0 -68
  76. datacontract_cli-0.10.34/tests/test_field_pattern_linter.py +0 -42
  77. datacontract_cli-0.10.34/tests/test_field_reference_linter.py +0 -56
  78. datacontract_cli-0.10.34/tests/test_import_odcs_v3.py +0 -48
  79. datacontract_cli-0.10.34/tests/test_notice_period_linter.py +0 -47
  80. datacontract_cli-0.10.34/tests/test_test_dataframe.py +0 -107
  81. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/LICENSE +0 -0
  82. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/MANIFEST.in +0 -0
  83. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/__init__.py +0 -0
  84. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/breaking/breaking.py +0 -0
  85. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/breaking/breaking_change.py +0 -0
  86. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/breaking/breaking_rules.py +0 -0
  87. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/catalog/catalog.py +0 -0
  88. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/__init__.py +0 -0
  89. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/data_contract_test.py +0 -0
  90. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  91. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  92. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  93. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/__init__.py +0 -0
  94. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/check_soda_execute.py +0 -0
  95. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/athena.py +0 -0
  96. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/bigquery.py +0 -0
  97. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/databricks.py +0 -0
  98. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
  99. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/kafka.py +0 -0
  100. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/postgres.py +0 -0
  101. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/snowflake.py +0 -0
  102. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  103. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/trino.py +0 -0
  104. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/__init__.py +0 -0
  105. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/avro_converter.py +0 -0
  106. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/avro_idl_converter.py +0 -0
  107. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/bigquery_converter.py +0 -0
  108. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/custom_converter.py +0 -0
  109. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/data_caterer_converter.py +0 -0
  110. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/dbml_converter.py +0 -0
  111. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/dcs_exporter.py +0 -0
  112. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/duckdb_type_converter.py +0 -0
  113. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/go_converter.py +0 -0
  114. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/great_expectations_converter.py +0 -0
  115. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/html_exporter.py +0 -0
  116. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/iceberg_converter.py +0 -0
  117. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/jsonschema_converter.py +0 -0
  118. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/odcs_v3_exporter.py +0 -0
  119. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/pandas_type_converter.py +0 -0
  120. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/protobuf_converter.py +0 -0
  121. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/pydantic_converter.py +0 -0
  122. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/sodacl_converter.py +0 -0
  123. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/sql_converter.py +0 -0
  124. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/sqlalchemy_converter.py +0 -0
  125. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/export/terraform_converter.py +0 -0
  126. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/avro_importer.py +0 -0
  127. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/bigquery_importer.py +0 -0
  128. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/csv_importer.py +0 -0
  129. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/dbml_importer.py +0 -0
  130. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/dbt_importer.py +0 -0
  131. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/excel_importer.py +0 -0
  132. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/glue_importer.py +0 -0
  133. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/iceberg_importer.py +0 -0
  134. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/importer.py +0 -0
  135. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/importer_factory.py +0 -0
  136. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/json_importer.py +0 -0
  137. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/jsonschema_importer.py +0 -0
  138. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/odcs_importer.py +0 -0
  139. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/parquet_importer.py +0 -0
  140. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/protobuf_importer.py +0 -0
  141. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/spark_importer.py +0 -0
  142. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/imports/sql_importer.py +0 -0
  143. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/integration/datamesh_manager.py +0 -0
  144. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/lint/files.py +0 -0
  145. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/lint/resources.py +0 -0
  146. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/lint/urls.py +0 -0
  147. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/model/data_contract_specification/__init__.py +0 -0
  148. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/model/exceptions.py +0 -0
  149. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/model/odcs.py +0 -0
  150. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/model/run.py +0 -0
  151. {datacontract_cli-0.10.34/datacontract/lint/linters → datacontract_cli-0.10.36/datacontract/output}/__init__.py +0 -0
  152. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/output/junit_test_results.py +0 -0
  153. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/output/output_format.py +0 -0
  154. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/output/test_results_writer.py +0 -0
  155. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/py.typed +0 -0
  156. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  157. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  158. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  159. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/datacontract.html +0 -0
  160. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/index.html +0 -0
  161. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_information.html +0 -0
  162. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  163. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_terms.html +0 -0
  164. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/definition.html +0 -0
  165. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/example.html +0 -0
  166. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/model_field.html +0 -0
  167. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/quality.html +0 -0
  168. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/partials/server.html +0 -0
  169. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract/templates/style/output.css +0 -0
  170. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  171. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/entry_points.txt +0 -0
  172. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/top_level.txt +0 -0
  173. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/setup.cfg +0 -0
  174. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_breaking.py +0 -0
  175. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_catalog.py +0 -0
  176. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_changelog.py +0 -0
  177. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_cli.py +0 -0
  178. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_data_contract_checks.py +0 -0
  179. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_data_contract_specification.py +0 -0
  180. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_description_linter.py +0 -0
  181. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_download_datacontract_file.py +0 -0
  182. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_avro.py +0 -0
  183. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_avro_idl.py +0 -0
  184. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_custom.py +0 -0
  185. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_custom_exporter.py +0 -0
  186. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_data_caterer.py +0 -0
  187. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_dbt_sources.py +0 -0
  188. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_dbt_staging_sql.py +0 -0
  189. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_excel.py +0 -0
  190. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_go.py +0 -0
  191. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_great_expectations.py +0 -0
  192. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_html.py +0 -0
  193. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_iceberg.py +0 -0
  194. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_jsonschema.py +0 -0
  195. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_markdown.py +0 -0
  196. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_mermaid.py +0 -0
  197. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_odcs_v3.py +0 -0
  198. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_protobuf.py +0 -0
  199. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_pydantic.py +0 -0
  200. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_sql.py +0 -0
  201. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_sql_query.py +0 -0
  202. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_sqlalchemy.py +0 -0
  203. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_export_terraform.py +0 -0
  204. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_import_excel.py +0 -0
  205. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_integration_datameshmanager.py +0 -0
  206. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_spec_fields_field.py +0 -0
  207. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_spec_ref.py +0 -0
  208. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_api.py +0 -0
  209. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_athena_iceberg.py +0 -0
  210. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_azure_remote.py +0 -0
  211. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_databricks.py +0 -0
  212. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_delta.py +0 -0
  213. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_gcs_csv_remote.py +0 -0
  214. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_gcs_json_remote.py +0 -0
  215. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_kafka.py +0 -0
  216. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_kafka_remote.py +0 -0
  217. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_local_json.py +0 -0
  218. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_output_junit.py +0 -0
  219. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_parquet.py +0 -0
  220. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_postgres.py +0 -0
  221. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_csv.py +0 -0
  222. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_json.py +0 -0
  223. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_json_complex.py +0 -0
  224. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_json_multiple_models.py +0 -0
  225. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_s3_json_remote.py +0 -0
  226. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_snowflake.py +0 -0
  227. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_sqlserver.py +0 -0
  228. {datacontract_cli-0.10.34 → datacontract_cli-0.10.36}/tests/test_test_trino.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacontract-cli
3
- Version: 0.10.34
3
+ Version: 0.10.36
4
4
  Summary: The datacontract CLI is an open source command-line tool for working with Data Contracts. It uses data contract YAML files to lint the data contract, connect to data sources and execute schema and quality tests, detect breaking changes, and export to different formats. The tool is written in Python. It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a Python library.
5
5
  Author-email: Jochen Christ <jochen.christ@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
6
6
  License-Expression: MIT
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: typer<0.17,>=0.15.1
14
+ Requires-Dist: typer<0.20,>=0.15.1
15
15
  Requires-Dist: pydantic<2.12.0,>=2.8.2
16
16
  Requires-Dist: pyyaml~=6.0.1
17
17
  Requires-Dist: requests<2.33,>=2.31
@@ -28,7 +28,7 @@ Requires-Dist: python-dotenv<2.0.0,>=1.0.0
28
28
  Requires-Dist: boto3<2.0.0,>=1.34.41
29
29
  Requires-Dist: Jinja2<4.0.0,>=3.1.5
30
30
  Requires-Dist: jinja_partials<1.0.0,>=0.2.1
31
- Requires-Dist: datacontract-specification<2.0.0,>=1.2.0
31
+ Requires-Dist: datacontract-specification<2.0.0,>=1.2.3
32
32
  Requires-Dist: open-data-contract-standard<4.0.0,>=3.0.4
33
33
  Provides-Extra: avro
34
34
  Requires-Dist: avro==1.12.0; extra == "avro"
@@ -42,7 +42,7 @@ Provides-Extra: databricks
42
42
  Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
43
43
  Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
44
44
  Requires-Dist: databricks-sql-connector<4.1.0,>=3.7.0; extra == "databricks"
45
- Requires-Dist: databricks-sdk<0.61.0; extra == "databricks"
45
+ Requires-Dist: databricks-sdk<0.68.0; extra == "databricks"
46
46
  Requires-Dist: pyspark<4.0.0,>=3.5.5; extra == "databricks"
47
47
  Provides-Extra: iceberg
48
48
  Requires-Dist: pyiceberg==0.9.1; extra == "iceberg"
@@ -54,9 +54,9 @@ Provides-Extra: postgres
54
54
  Requires-Dist: soda-core-postgres<3.6.0,>=3.3.20; extra == "postgres"
55
55
  Provides-Extra: s3
56
56
  Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
57
- Requires-Dist: aiobotocore<2.24.0,>=2.17.0; extra == "s3"
57
+ Requires-Dist: aiobotocore<2.25.0,>=2.17.0; extra == "s3"
58
58
  Provides-Extra: snowflake
59
- Requires-Dist: snowflake-connector-python[pandas]<3.17,>=3.6; extra == "snowflake"
59
+ Requires-Dist: snowflake-connector-python[pandas]<4.1,>=3.6; extra == "snowflake"
60
60
  Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
61
61
  Provides-Extra: sqlserver
62
62
  Requires-Dist: soda-core-sqlserver<3.6.0,>=3.3.20; extra == "sqlserver"
@@ -83,15 +83,15 @@ Provides-Extra: dev
83
83
  Requires-Dist: datacontract-cli[all]; extra == "dev"
84
84
  Requires-Dist: httpx==0.28.1; extra == "dev"
85
85
  Requires-Dist: kafka-python; extra == "dev"
86
- Requires-Dist: moto==5.1.8; extra == "dev"
86
+ Requires-Dist: moto==5.1.13; extra == "dev"
87
87
  Requires-Dist: pandas>=2.1.0; extra == "dev"
88
- Requires-Dist: pre-commit<4.3.0,>=3.7.1; extra == "dev"
88
+ Requires-Dist: pre-commit<4.4.0,>=3.7.1; extra == "dev"
89
89
  Requires-Dist: pytest; extra == "dev"
90
90
  Requires-Dist: pytest-xdist; extra == "dev"
91
91
  Requires-Dist: pymssql==2.3.7; extra == "dev"
92
92
  Requires-Dist: ruff; extra == "dev"
93
93
  Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.12.0; extra == "dev"
94
- Requires-Dist: trino==0.335.0; extra == "dev"
94
+ Requires-Dist: trino==0.336.0; extra == "dev"
95
95
  Dynamic: license-file
96
96
 
97
97
  # Data Contract CLI
@@ -119,9 +119,9 @@ We have a _servers_ section with endpoint details to the S3 bucket, _models_ for
119
119
 
120
120
  This data contract contains all information to connect to S3 and check that the actual data meets the defined schema and quality requirements. We can use this information to test if the actual data product in S3 is compliant to the data contract.
121
121
 
122
- Let's use [pip](https://pip.pypa.io/en/stable/getting-started/) to install the CLI (or use the [Docker image](#docker)),
122
+ Let's use [uv](https://docs.astral.sh/uv/) to install the CLI (or use the [Docker image](#docker)),
123
123
  ```bash
124
- $ python3 -m pip install 'datacontract-cli[all]'
124
+ $ uv tool install --python python3.11 'datacontract-cli[all]'
125
125
  ```
126
126
 
127
127
 
@@ -257,6 +257,14 @@ if not run.has_passed():
257
257
 
258
258
  Choose the most appropriate installation method for your needs:
259
259
 
260
+ ### uv
261
+
262
+ If you have [uv](https://docs.astral.sh/uv/) installed, you can run datacontract-cli directly without installing:
263
+
264
+ ```
265
+ uv run --with 'datacontract-cli[all]' datacontract --version
266
+ ```
267
+
260
268
  ### pip
261
269
  Python 3.10, 3.11, and 3.12 are supported. We recommend to use Python 3.11.
262
270
 
@@ -1011,7 +1019,7 @@ models:
1011
1019
  │ terraform|avro-idl|sql|sql-query|mer │
1012
1020
  │ maid|html|go|bigquery|dbml|spark|sql │
1013
1021
  │ alchemy|data-caterer|dcs|markdown|ic │
1014
- │ eberg|custom|excel] │
1022
+ │ eberg|custom|excel|dqx] │
1015
1023
  │ --output PATH Specify the file path where the │
1016
1024
  │ exported data will be saved. If no │
1017
1025
  │ path is provided, the output will be │
@@ -1057,35 +1065,36 @@ datacontract export --format html --output datacontract.html
1057
1065
 
1058
1066
  Available export options:
1059
1067
 
1060
- | Type | Description | Status |
1061
- |----------------------|---------------------------------------------------------|--------|
1062
- | `html` | Export to HTML | ✅ |
1063
- | `jsonschema` | Export to JSON Schema | ✅ |
1064
- | `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅ |
1065
- | `sodacl` | Export to SodaCL quality checks in YAML format | ✅ |
1066
- | `dbt` | Export to dbt models in YAML format | ✅ |
1067
- | `dbt-sources` | Export to dbt sources in YAML format | ✅ |
1068
- | `dbt-staging-sql` | Export to dbt staging SQL models | ✅ |
1069
- | `rdf` | Export data contract to RDF representation in N3 format | ✅ |
1070
- | `avro` | Export to AVRO models | ✅ |
1071
- | `protobuf` | Export to Protobuf | ✅ |
1072
- | `terraform` | Export to terraform resources | ✅ |
1073
- | `sql` | Export to SQL DDL | ✅ |
1074
- | `sql-query` | Export to SQL Query | ✅ |
1075
- | `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅ |
1076
- | `bigquery` | Export to BigQuery Schemas | ✅ |
1077
- | `go` | Export to Go types | ✅ |
1078
- | `pydantic-model` | Export to pydantic models | ✅ |
1079
- | `DBML` | Export to a DBML Diagram description | ✅ |
1080
- | `spark` | Export to a Spark StructType | ✅ |
1081
- | `sqlalchemy` | Export to SQLAlchemy Models | ✅ |
1082
- | `data-caterer` | Export to Data Caterer in YAML format | ✅ |
1083
- | `dcs` | Export to Data Contract Specification in YAML format | ✅ |
1084
- | `markdown` | Export to Markdown | ✅ |
1068
+ | Type | Description | Status |
1069
+ |----------------------|---------------------------------------------------------|---------|
1070
+ | `html` | Export to HTML | ✅ |
1071
+ | `jsonschema` | Export to JSON Schema | ✅ |
1072
+ | `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅ |
1073
+ | `sodacl` | Export to SodaCL quality checks in YAML format | ✅ |
1074
+ | `dbt` | Export to dbt models in YAML format | ✅ |
1075
+ | `dbt-sources` | Export to dbt sources in YAML format | ✅ |
1076
+ | `dbt-staging-sql` | Export to dbt staging SQL models | ✅ |
1077
+ | `rdf` | Export data contract to RDF representation in N3 format | ✅ |
1078
+ | `avro` | Export to AVRO models | ✅ |
1079
+ | `protobuf` | Export to Protobuf | ✅ |
1080
+ | `terraform` | Export to terraform resources | ✅ |
1081
+ | `sql` | Export to SQL DDL | ✅ |
1082
+ | `sql-query` | Export to SQL Query | ✅ |
1083
+ | `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅ |
1084
+ | `bigquery` | Export to BigQuery Schemas | ✅ |
1085
+ | `go` | Export to Go types | ✅ |
1086
+ | `pydantic-model` | Export to pydantic models | ✅ |
1087
+ | `DBML` | Export to a DBML Diagram description | ✅ |
1088
+ | `spark` | Export to a Spark StructType | ✅ |
1089
+ | `sqlalchemy` | Export to SQLAlchemy Models | ✅ |
1090
+ | `data-caterer` | Export to Data Caterer in YAML format | ✅ |
1091
+ | `dcs` | Export to Data Contract Specification in YAML format | ✅ |
1092
+ | `markdown` | Export to Markdown | ✅ |
1085
1093
  | `iceberg` | Export to an Iceberg JSON Schema Definition | partial |
1086
- | `excel` | Export to ODCS Excel Template | ✅ |
1087
- | `custom` | Export to Custom format with Jinja | ✅ |
1088
- | Missing something? | Please create an issue on GitHub | TBD |
1094
+ | `excel` | Export to ODCS Excel Template | ✅ |
1095
+ | `custom` | Export to Custom format with Jinja | ✅ |
1096
+ | `dqx` | Export to DQX in YAML format | |
1097
+ | Missing something? | Please create an issue on GitHub | TBD |
1089
1098
 
1090
1099
  #### SQL
1091
1100
 
@@ -1531,18 +1540,22 @@ datacontract import --format bigquery --bigquery-project <project_id> --bigquery
1531
1540
  ```
1532
1541
 
1533
1542
  #### Unity Catalog
1534
-
1535
1543
  ```bash
1536
1544
  # Example import from a Unity Catalog JSON file
1537
1545
  datacontract import --format unity --source my_unity_table.json
1538
1546
  ```
1539
1547
 
1540
1548
  ```bash
1541
- # Example import single table from Unity Catalog via HTTP endpoint
1549
+ # Example import single table from Unity Catalog via HTTP endpoint using PAT
1542
1550
  export DATACONTRACT_DATABRICKS_SERVER_HOSTNAME="https://xyz.cloud.databricks.com"
1543
- export DATACONTRACT_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/b053a331fa014fb4"
1544
1551
  export DATACONTRACT_DATABRICKS_TOKEN=<token>
1545
1552
  datacontract import --format unity --unity-table-full-name <table_full_name>
1553
+ ```
1554
+ Please Refer to [Databricks documentation](https://docs.databricks.com/aws/en/dev-tools/auth/unified-auth) on how to set up a profile
1555
+ ```bash
1556
+ # Example import single table from Unity Catalog via HTTP endpoint using Profile
1557
+ export DATACONTRACT_DATABRICKS_PROFILE="my-profile"
1558
+ datacontract import --format unity --unity-table-full-name <table_full_name>
1546
1559
  ```
1547
1560
 
1548
1561
  #### dbt
@@ -1601,20 +1614,20 @@ datacontract import --format spark --source "users,orders"
1601
1614
 
1602
1615
  ```bash
1603
1616
  # Example: Import Spark table
1604
- DataContract().import_from_source("spark", "users")
1605
- DataContract().import_from_source(format = "spark", source = "users")
1617
+ DataContract.import_from_source("spark", "users")
1618
+ DataContract.import_from_source(format = "spark", source = "users")
1606
1619
 
1607
1620
  # Example: Import Spark dataframe
1608
- DataContract().import_from_source("spark", "users", dataframe = df_user)
1609
- DataContract().import_from_source(format = "spark", source = "users", dataframe = df_user)
1621
+ DataContract.import_from_source("spark", "users", dataframe = df_user)
1622
+ DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user)
1610
1623
 
1611
1624
  # Example: Import Spark table + table description
1612
- DataContract().import_from_source("spark", "users", description = "description")
1613
- DataContract().import_from_source(format = "spark", source = "users", description = "description")
1625
+ DataContract.import_from_source("spark", "users", description = "description")
1626
+ DataContract.import_from_source(format = "spark", source = "users", description = "description")
1614
1627
 
1615
1628
  # Example: Import Spark dataframe + table description
1616
- DataContract().import_from_source("spark", "users", dataframe = df_user, description = "description")
1617
- DataContract().import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
1629
+ DataContract.import_from_source("spark", "users", dataframe = df_user, description = "description")
1630
+ DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
1618
1631
  ```
1619
1632
 
1620
1633
  #### DBML
@@ -1859,8 +1872,7 @@ Create a data contract based on the actual data. This is the fastest way to get
1859
1872
  $ datacontract test
1860
1873
  ```
1861
1874
 
1862
- 3. Make sure that all the best practices for a `datacontract.yaml` are met using the linter. You
1863
- probably forgot to document some fields and add the terms and conditions.
1875
+ 3. Validate that the `datacontract.yaml` is correctly formatted and adheres to the Data Contract Specification.
1864
1876
  ```bash
1865
1877
  $ datacontract lint
1866
1878
  ```
@@ -1881,8 +1893,7 @@ Create a data contract based on the requirements from use cases.
1881
1893
  ```
1882
1894
 
1883
1895
  2. Create the model and quality guarantees based on your business requirements. Fill in the terms,
1884
- descriptions, etc. Make sure you follow all best practices for a `datacontract.yaml` using the
1885
- linter.
1896
+ descriptions, etc. Validate that your `datacontract.yaml` is correctly formatted.
1886
1897
  ```bash
1887
1898
  $ datacontract lint
1888
1899
  ```
@@ -2076,7 +2087,7 @@ if __name__ == "__main__":
2076
2087
  Output
2077
2088
 
2078
2089
  ```yaml
2079
- dataContractSpecification: 1.2.0
2090
+ dataContractSpecification: 1.2.1
2080
2091
  id: uuid-custom
2081
2092
  info:
2082
2093
  title: my_custom_imported_data
@@ -2102,6 +2113,7 @@ models:
2102
2113
  ```bash
2103
2114
  # make sure uv is installed
2104
2115
  uv python pin 3.11
2116
+ uv venv
2105
2117
  uv pip install -e '.[dev]'
2106
2118
  uv run ruff check
2107
2119
  uv run pytest
@@ -23,9 +23,9 @@ We have a _servers_ section with endpoint details to the S3 bucket, _models_ for
23
23
 
24
24
  This data contract contains all information to connect to S3 and check that the actual data meets the defined schema and quality requirements. We can use this information to test if the actual data product in S3 is compliant to the data contract.
25
25
 
26
- Let's use [pip](https://pip.pypa.io/en/stable/getting-started/) to install the CLI (or use the [Docker image](#docker)),
26
+ Let's use [uv](https://docs.astral.sh/uv/) to install the CLI (or use the [Docker image](#docker)),
27
27
  ```bash
28
- $ python3 -m pip install 'datacontract-cli[all]'
28
+ $ uv tool install --python python3.11 'datacontract-cli[all]'
29
29
  ```
30
30
 
31
31
 
@@ -161,6 +161,14 @@ if not run.has_passed():
161
161
 
162
162
  Choose the most appropriate installation method for your needs:
163
163
 
164
+ ### uv
165
+
166
+ If you have [uv](https://docs.astral.sh/uv/) installed, you can run datacontract-cli directly without installing:
167
+
168
+ ```
169
+ uv run --with 'datacontract-cli[all]' datacontract --version
170
+ ```
171
+
164
172
  ### pip
165
173
  Python 3.10, 3.11, and 3.12 are supported. We recommend to use Python 3.11.
166
174
 
@@ -915,7 +923,7 @@ models:
915
923
  │ terraform|avro-idl|sql|sql-query|mer │
916
924
  │ maid|html|go|bigquery|dbml|spark|sql │
917
925
  │ alchemy|data-caterer|dcs|markdown|ic │
918
- │ eberg|custom|excel] │
926
+ │ eberg|custom|excel|dqx] │
919
927
  │ --output PATH Specify the file path where the │
920
928
  │ exported data will be saved. If no │
921
929
  │ path is provided, the output will be │
@@ -961,35 +969,36 @@ datacontract export --format html --output datacontract.html
961
969
 
962
970
  Available export options:
963
971
 
964
- | Type | Description | Status |
965
- |----------------------|---------------------------------------------------------|--------|
966
- | `html` | Export to HTML | ✅ |
967
- | `jsonschema` | Export to JSON Schema | ✅ |
968
- | `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅ |
969
- | `sodacl` | Export to SodaCL quality checks in YAML format | ✅ |
970
- | `dbt` | Export to dbt models in YAML format | ✅ |
971
- | `dbt-sources` | Export to dbt sources in YAML format | ✅ |
972
- | `dbt-staging-sql` | Export to dbt staging SQL models | ✅ |
973
- | `rdf` | Export data contract to RDF representation in N3 format | ✅ |
974
- | `avro` | Export to AVRO models | ✅ |
975
- | `protobuf` | Export to Protobuf | ✅ |
976
- | `terraform` | Export to terraform resources | ✅ |
977
- | `sql` | Export to SQL DDL | ✅ |
978
- | `sql-query` | Export to SQL Query | ✅ |
979
- | `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅ |
980
- | `bigquery` | Export to BigQuery Schemas | ✅ |
981
- | `go` | Export to Go types | ✅ |
982
- | `pydantic-model` | Export to pydantic models | ✅ |
983
- | `DBML` | Export to a DBML Diagram description | ✅ |
984
- | `spark` | Export to a Spark StructType | ✅ |
985
- | `sqlalchemy` | Export to SQLAlchemy Models | ✅ |
986
- | `data-caterer` | Export to Data Caterer in YAML format | ✅ |
987
- | `dcs` | Export to Data Contract Specification in YAML format | ✅ |
988
- | `markdown` | Export to Markdown | ✅ |
972
+ | Type | Description | Status |
973
+ |----------------------|---------------------------------------------------------|---------|
974
+ | `html` | Export to HTML | ✅ |
975
+ | `jsonschema` | Export to JSON Schema | ✅ |
976
+ | `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅ |
977
+ | `sodacl` | Export to SodaCL quality checks in YAML format | ✅ |
978
+ | `dbt` | Export to dbt models in YAML format | ✅ |
979
+ | `dbt-sources` | Export to dbt sources in YAML format | ✅ |
980
+ | `dbt-staging-sql` | Export to dbt staging SQL models | ✅ |
981
+ | `rdf` | Export data contract to RDF representation in N3 format | ✅ |
982
+ | `avro` | Export to AVRO models | ✅ |
983
+ | `protobuf` | Export to Protobuf | ✅ |
984
+ | `terraform` | Export to terraform resources | ✅ |
985
+ | `sql` | Export to SQL DDL | ✅ |
986
+ | `sql-query` | Export to SQL Query | ✅ |
987
+ | `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅ |
988
+ | `bigquery` | Export to BigQuery Schemas | ✅ |
989
+ | `go` | Export to Go types | ✅ |
990
+ | `pydantic-model` | Export to pydantic models | ✅ |
991
+ | `DBML` | Export to a DBML Diagram description | ✅ |
992
+ | `spark` | Export to a Spark StructType | ✅ |
993
+ | `sqlalchemy` | Export to SQLAlchemy Models | ✅ |
994
+ | `data-caterer` | Export to Data Caterer in YAML format | ✅ |
995
+ | `dcs` | Export to Data Contract Specification in YAML format | ✅ |
996
+ | `markdown` | Export to Markdown | ✅ |
989
997
  | `iceberg` | Export to an Iceberg JSON Schema Definition | partial |
990
- | `excel` | Export to ODCS Excel Template | ✅ |
991
- | `custom` | Export to Custom format with Jinja | ✅ |
992
- | Missing something? | Please create an issue on GitHub | TBD |
998
+ | `excel` | Export to ODCS Excel Template | ✅ |
999
+ | `custom` | Export to Custom format with Jinja | ✅ |
1000
+ | `dqx` | Export to DQX in YAML format | |
1001
+ | Missing something? | Please create an issue on GitHub | TBD |
993
1002
 
994
1003
  #### SQL
995
1004
 
@@ -1435,18 +1444,22 @@ datacontract import --format bigquery --bigquery-project <project_id> --bigquery
1435
1444
  ```
1436
1445
 
1437
1446
  #### Unity Catalog
1438
-
1439
1447
  ```bash
1440
1448
  # Example import from a Unity Catalog JSON file
1441
1449
  datacontract import --format unity --source my_unity_table.json
1442
1450
  ```
1443
1451
 
1444
1452
  ```bash
1445
- # Example import single table from Unity Catalog via HTTP endpoint
1453
+ # Example import single table from Unity Catalog via HTTP endpoint using PAT
1446
1454
  export DATACONTRACT_DATABRICKS_SERVER_HOSTNAME="https://xyz.cloud.databricks.com"
1447
- export DATACONTRACT_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/b053a331fa014fb4"
1448
1455
  export DATACONTRACT_DATABRICKS_TOKEN=<token>
1449
1456
  datacontract import --format unity --unity-table-full-name <table_full_name>
1457
+ ```
1458
+ Please Refer to [Databricks documentation](https://docs.databricks.com/aws/en/dev-tools/auth/unified-auth) on how to set up a profile
1459
+ ```bash
1460
+ # Example import single table from Unity Catalog via HTTP endpoint using Profile
1461
+ export DATACONTRACT_DATABRICKS_PROFILE="my-profile"
1462
+ datacontract import --format unity --unity-table-full-name <table_full_name>
1450
1463
  ```
1451
1464
 
1452
1465
  #### dbt
@@ -1505,20 +1518,20 @@ datacontract import --format spark --source "users,orders"
1505
1518
 
1506
1519
  ```bash
1507
1520
  # Example: Import Spark table
1508
- DataContract().import_from_source("spark", "users")
1509
- DataContract().import_from_source(format = "spark", source = "users")
1521
+ DataContract.import_from_source("spark", "users")
1522
+ DataContract.import_from_source(format = "spark", source = "users")
1510
1523
 
1511
1524
  # Example: Import Spark dataframe
1512
- DataContract().import_from_source("spark", "users", dataframe = df_user)
1513
- DataContract().import_from_source(format = "spark", source = "users", dataframe = df_user)
1525
+ DataContract.import_from_source("spark", "users", dataframe = df_user)
1526
+ DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user)
1514
1527
 
1515
1528
  # Example: Import Spark table + table description
1516
- DataContract().import_from_source("spark", "users", description = "description")
1517
- DataContract().import_from_source(format = "spark", source = "users", description = "description")
1529
+ DataContract.import_from_source("spark", "users", description = "description")
1530
+ DataContract.import_from_source(format = "spark", source = "users", description = "description")
1518
1531
 
1519
1532
  # Example: Import Spark dataframe + table description
1520
- DataContract().import_from_source("spark", "users", dataframe = df_user, description = "description")
1521
- DataContract().import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
1533
+ DataContract.import_from_source("spark", "users", dataframe = df_user, description = "description")
1534
+ DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
1522
1535
  ```
1523
1536
 
1524
1537
  #### DBML
@@ -1763,8 +1776,7 @@ Create a data contract based on the actual data. This is the fastest way to get
1763
1776
  $ datacontract test
1764
1777
  ```
1765
1778
 
1766
- 3. Make sure that all the best practices for a `datacontract.yaml` are met using the linter. You
1767
- probably forgot to document some fields and add the terms and conditions.
1779
+ 3. Validate that the `datacontract.yaml` is correctly formatted and adheres to the Data Contract Specification.
1768
1780
  ```bash
1769
1781
  $ datacontract lint
1770
1782
  ```
@@ -1785,8 +1797,7 @@ Create a data contract based on the requirements from use cases.
1785
1797
  ```
1786
1798
 
1787
1799
  2. Create the model and quality guarantees based on your business requirements. Fill in the terms,
1788
- descriptions, etc. Make sure you follow all best practices for a `datacontract.yaml` using the
1789
- linter.
1800
+ descriptions, etc. Validate that your `datacontract.yaml` is correctly formatted.
1790
1801
  ```bash
1791
1802
  $ datacontract lint
1792
1803
  ```
@@ -1980,7 +1991,7 @@ if __name__ == "__main__":
1980
1991
  Output
1981
1992
 
1982
1993
  ```yaml
1983
- dataContractSpecification: 1.2.0
1994
+ dataContractSpecification: 1.2.1
1984
1995
  id: uuid-custom
1985
1996
  info:
1986
1997
  title: my_custom_imported_data
@@ -2006,6 +2017,7 @@ models:
2006
2017
  ```bash
2007
2018
  # make sure uv is installed
2008
2019
  uv python pin 3.11
2020
+ uv venv
2009
2021
  uv pip install -e '.[dev]'
2010
2022
  uv run ruff check
2011
2023
  uv run pytest
@@ -10,7 +10,7 @@ from fastapi.security.api_key import APIKeyHeader
10
10
  from datacontract.data_contract import DataContract, ExportFormat
11
11
  from datacontract.model.run import Run
12
12
 
13
- DATA_CONTRACT_EXAMPLE_PAYLOAD = """dataContractSpecification: 1.2.0
13
+ DATA_CONTRACT_EXAMPLE_PAYLOAD = """dataContractSpecification: 1.2.1
14
14
  id: urn:datacontract:checkout:orders-latest
15
15
  info:
16
16
  title: Orders Latest
@@ -162,15 +162,22 @@ async def test(
162
162
  server: Annotated[
163
163
  str | None,
164
164
  Query(
165
- examples=["production"],
166
165
  description="The server name to test. Optional, if there is only one server.",
166
+ examples=["production"],
167
+ ),
168
+ ] = None,
169
+ publish_url: Annotated[
170
+ str | None,
171
+ Query(
172
+ description="URL to publish test results. Optional, if you want to publish the test results to a Data Mesh Manager or Data Contract Manager. Example: https://api.datamesh-manager.com/api/test-results",
173
+ examples=["https://api.datamesh-manager.com/api/test-results"],
167
174
  ),
168
175
  ] = None,
169
176
  ) -> Run:
170
177
  check_api_key(api_key)
171
178
  logging.info("Testing data contract...")
172
179
  logging.info(body)
173
- return DataContract(data_contract_str=body, server=server).test()
180
+ return DataContract(data_contract_str=body, server=server, publish_url=publish_url).test()
174
181
 
175
182
 
176
183
  @app.post(
@@ -126,8 +126,10 @@ def test(
126
126
  "servers (default)."
127
127
  ),
128
128
  ] = "all",
129
- publish_test_results: Annotated[bool, typer.Option(help="Publish the results after the test")] = False,
130
- publish: Annotated[str, typer.Option(help="DEPRECATED. The url to publish the results after the test.")] = None,
129
+ publish_test_results: Annotated[
130
+ bool, typer.Option(help="Deprecated. Use publish parameter. Publish the results after the test")
131
+ ] = False,
132
+ publish: Annotated[str, typer.Option(help="The url to publish the results after the test.")] = None,
131
133
  output: Annotated[
132
134
  Path,
133
135
  typer.Option(
@@ -329,7 +331,7 @@ def import_(
329
331
  """
330
332
  Create a data contract from the given source location. Saves to file specified by `output` option if present, otherwise prints to stdout.
331
333
  """
332
- result = DataContract().import_from_source(
334
+ result = DataContract.import_from_source(
333
335
  format=format,
334
336
  source=source,
335
337
  spec=spec,