datacontract-cli 0.10.33__tar.gz → 0.10.35__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 (223) hide show
  1. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/LICENSE +1 -1
  2. {datacontract_cli-0.10.33/datacontract_cli.egg-info → datacontract_cli-0.10.35}/PKG-INFO +126 -42
  3. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/README.md +114 -32
  4. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/api.py +9 -2
  5. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/cli.py +4 -2
  6. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/data_contract_checks.py +102 -59
  7. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/data_contract_test.py +37 -0
  8. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/fastjsonschema/check_jsonschema.py +37 -19
  9. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/check_soda_execute.py +6 -0
  10. datacontract_cli-0.10.35/datacontract/engines/soda/connections/athena.py +79 -0
  11. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/duckdb_connection.py +3 -0
  12. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/avro_converter.py +12 -2
  13. datacontract_cli-0.10.35/datacontract/export/dqx_converter.py +121 -0
  14. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/exporter.py +1 -0
  15. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/exporter_factory.py +6 -0
  16. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/markdown_converter.py +115 -5
  17. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/mermaid_exporter.py +24 -11
  18. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/spark_converter.py +28 -3
  19. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/sql_type_converter.py +4 -0
  20. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/avro_importer.py +33 -7
  21. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/odcs_v3_importer.py +30 -1
  22. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/spark_importer.py +12 -1
  23. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35/datacontract_cli.egg-info}/PKG-INFO +126 -42
  24. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract_cli.egg-info/SOURCES.txt +6 -0
  25. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract_cli.egg-info/requires.txt +12 -9
  26. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/pyproject.toml +14 -10
  27. datacontract_cli-0.10.35/tests/test_export_dqx.py +319 -0
  28. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_spark.py +3 -2
  29. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_avro.py +38 -0
  30. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_spark.py +4 -2
  31. datacontract_cli-0.10.35/tests/test_test_api.py +55 -0
  32. datacontract_cli-0.10.35/tests/test_test_athena_iceberg.py +26 -0
  33. datacontract_cli-0.10.35/tests/test_test_local_json_nd.py +19 -0
  34. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_postgres.py +1 -1
  35. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_quality.py +1 -1
  36. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_sqlserver.py +1 -1
  37. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_trino.py +1 -1
  38. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/MANIFEST.in +0 -0
  39. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/__init__.py +0 -0
  40. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/breaking/breaking.py +0 -0
  41. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/breaking/breaking_change.py +0 -0
  42. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/breaking/breaking_rules.py +0 -0
  43. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/catalog/catalog.py +0 -0
  44. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/data_contract.py +0 -0
  45. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/__init__.py +0 -0
  46. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  47. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  48. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  49. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/__init__.py +0 -0
  50. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/bigquery.py +0 -0
  51. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/databricks.py +0 -0
  52. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/kafka.py +0 -0
  53. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/postgres.py +0 -0
  54. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/snowflake.py +0 -0
  55. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  56. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/engines/soda/connections/trino.py +0 -0
  57. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/__init__.py +0 -0
  58. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/avro_idl_converter.py +0 -0
  59. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/bigquery_converter.py +0 -0
  60. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/custom_converter.py +0 -0
  61. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/data_caterer_converter.py +0 -0
  62. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/dbml_converter.py +0 -0
  63. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/dbt_converter.py +0 -0
  64. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/dcs_exporter.py +0 -0
  65. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/duckdb_type_converter.py +0 -0
  66. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/excel_exporter.py +0 -0
  67. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/go_converter.py +0 -0
  68. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/great_expectations_converter.py +0 -0
  69. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/html_exporter.py +0 -0
  70. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/iceberg_converter.py +0 -0
  71. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/jsonschema_converter.py +0 -0
  72. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/odcs_v3_exporter.py +0 -0
  73. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/pandas_type_converter.py +0 -0
  74. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/protobuf_converter.py +0 -0
  75. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/pydantic_converter.py +0 -0
  76. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/rdf_converter.py +0 -0
  77. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/sodacl_converter.py +0 -0
  78. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/sql_converter.py +0 -0
  79. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/sqlalchemy_converter.py +0 -0
  80. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/export/terraform_converter.py +0 -0
  81. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/bigquery_importer.py +0 -0
  82. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/csv_importer.py +0 -0
  83. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/dbml_importer.py +0 -0
  84. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/dbt_importer.py +0 -0
  85. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/excel_importer.py +0 -0
  86. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/glue_importer.py +0 -0
  87. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/iceberg_importer.py +0 -0
  88. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/importer.py +0 -0
  89. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/importer_factory.py +0 -0
  90. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/json_importer.py +0 -0
  91. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/jsonschema_importer.py +0 -0
  92. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/odcs_importer.py +0 -0
  93. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/parquet_importer.py +0 -0
  94. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/protobuf_importer.py +0 -0
  95. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/sql_importer.py +0 -0
  96. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/imports/unity_importer.py +0 -0
  97. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/init/init_template.py +0 -0
  98. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/integration/datamesh_manager.py +0 -0
  99. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/files.py +0 -0
  100. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/lint.py +0 -0
  101. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/__init__.py +0 -0
  102. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/description_linter.py +0 -0
  103. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/field_pattern_linter.py +0 -0
  104. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/field_reference_linter.py +0 -0
  105. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/notice_period_linter.py +0 -0
  106. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/linters/valid_constraints_linter.py +0 -0
  107. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/resolve.py +0 -0
  108. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/resources.py +0 -0
  109. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/schema.py +0 -0
  110. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/lint/urls.py +0 -0
  111. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/model/data_contract_specification/__init__.py +0 -0
  112. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/model/exceptions.py +0 -0
  113. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/model/odcs.py +0 -0
  114. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/model/run.py +0 -0
  115. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/output/__init__.py +0 -0
  116. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/output/junit_test_results.py +0 -0
  117. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/output/output_format.py +0 -0
  118. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/output/test_results_writer.py +0 -0
  119. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/py.typed +0 -0
  120. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  121. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  122. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
  123. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  124. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  125. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/datacontract.html +0 -0
  126. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/datacontract_odcs.html +0 -0
  127. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/index.html +0 -0
  128. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/datacontract_information.html +0 -0
  129. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  130. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/datacontract_terms.html +0 -0
  131. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/definition.html +0 -0
  132. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/example.html +0 -0
  133. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/model_field.html +0 -0
  134. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/quality.html +0 -0
  135. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/partials/server.html +0 -0
  136. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract/templates/style/output.css +0 -0
  137. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  138. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract_cli.egg-info/entry_points.txt +0 -0
  139. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/datacontract_cli.egg-info/top_level.txt +0 -0
  140. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/setup.cfg +0 -0
  141. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_api.py +0 -0
  142. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_breaking.py +0 -0
  143. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_catalog.py +0 -0
  144. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_changelog.py +0 -0
  145. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_cli.py +0 -0
  146. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_data_contract_checks.py +0 -0
  147. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_data_contract_specification.py +0 -0
  148. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_description_linter.py +0 -0
  149. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_documentation_linter.py +0 -0
  150. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_download_datacontract_file.py +0 -0
  151. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_duckdb_json.py +0 -0
  152. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_avro.py +0 -0
  153. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_avro_idl.py +0 -0
  154. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_bigquery.py +0 -0
  155. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_complex_data_contract.py +0 -0
  156. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_custom.py +0 -0
  157. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_custom_exporter.py +0 -0
  158. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_data_caterer.py +0 -0
  159. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_dbml.py +0 -0
  160. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_dbt_models.py +0 -0
  161. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_dbt_sources.py +0 -0
  162. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_dbt_staging_sql.py +0 -0
  163. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_excel.py +0 -0
  164. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_go.py +0 -0
  165. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_great_expectations.py +0 -0
  166. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_html.py +0 -0
  167. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_iceberg.py +0 -0
  168. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_jsonschema.py +0 -0
  169. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_markdown.py +0 -0
  170. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_mermaid.py +0 -0
  171. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_odcs_v3.py +0 -0
  172. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_protobuf.py +0 -0
  173. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_pydantic.py +0 -0
  174. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_rdf.py +0 -0
  175. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_sodacl.py +0 -0
  176. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_sql.py +0 -0
  177. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_sql_query.py +0 -0
  178. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_sqlalchemy.py +0 -0
  179. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_export_terraform.py +0 -0
  180. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_field_constraint_linter.py +0 -0
  181. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_field_pattern_linter.py +0 -0
  182. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_field_reference_linter.py +0 -0
  183. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_bigquery.py +0 -0
  184. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_csv.py +0 -0
  185. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_dbml.py +0 -0
  186. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_dbt.py +0 -0
  187. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_excel.py +0 -0
  188. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_glue.py +0 -0
  189. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_iceberg.py +0 -0
  190. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_json.py +0 -0
  191. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_jsonschema.py +0 -0
  192. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_odcs_v3.py +0 -0
  193. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_parquet.py +0 -0
  194. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_protobuf.py +0 -0
  195. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_sql_postgres.py +0 -0
  196. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_sql_sqlserver.py +0 -0
  197. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_import_unity_file.py +0 -0
  198. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_integration_datameshmanager.py +0 -0
  199. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_lint.py +0 -0
  200. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_notice_period_linter.py +0 -0
  201. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_resolve.py +0 -0
  202. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_roundtrip_jsonschema.py +0 -0
  203. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_spec_fields_field.py +0 -0
  204. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_spec_ref.py +0 -0
  205. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_azure_remote.py +0 -0
  206. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_bigquery.py +0 -0
  207. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_databricks.py +0 -0
  208. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_dataframe.py +0 -0
  209. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_delta.py +0 -0
  210. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_gcs_csv_remote.py +0 -0
  211. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_gcs_json_remote.py +0 -0
  212. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_kafka.py +0 -0
  213. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_kafka_remote.py +0 -0
  214. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_local_json.py +0 -0
  215. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_output_junit.py +0 -0
  216. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_parquet.py +0 -0
  217. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_csv.py +0 -0
  218. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_delta.py +0 -0
  219. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_json.py +0 -0
  220. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_json_complex.py +0 -0
  221. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_json_multiple_models.py +0 -0
  222. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_s3_json_remote.py +0 -0
  223. {datacontract_cli-0.10.33 → datacontract_cli-0.10.35}/tests/test_test_snowflake.py +0 -0
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 innoQ Deutschland GmbH
3
+ Copyright (c) 2025 Entropy Data GmbH
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacontract-cli
3
- Version: 0.10.33
3
+ Version: 0.10.35
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
@@ -20,7 +20,7 @@ Requires-Dist: fastparquet<2025.0.0,>=2024.5.0
20
20
  Requires-Dist: numpy<2.0.0,>=1.26.4
21
21
  Requires-Dist: python-multipart<1.0.0,>=0.0.20
22
22
  Requires-Dist: rich<15.0,>=13.7
23
- Requires-Dist: sqlglot<27.0.0,>=26.6.0
23
+ Requires-Dist: sqlglot<28.0.0,>=26.6.0
24
24
  Requires-Dist: duckdb<2.0.0,>=1.0.0
25
25
  Requires-Dist: soda-core-duckdb<3.6.0,>=3.3.20
26
26
  Requires-Dist: setuptools>=60
@@ -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.64.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,12 +54,14 @@ 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.16,>=3.6; extra == "snowflake"
59
+ Requires-Dist: snowflake-connector-python[pandas]<3.17,>=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"
63
+ Provides-Extra: athena
64
+ Requires-Dist: soda-core-athena<3.6.0,>=3.3.20; extra == "athena"
63
65
  Provides-Extra: trino
64
66
  Requires-Dist: soda-core-trino<3.6.0,>=3.3.20; extra == "trino"
65
67
  Provides-Extra: dbt
@@ -76,20 +78,20 @@ Requires-Dist: uvicorn==0.35.0; extra == "api"
76
78
  Provides-Extra: protobuf
77
79
  Requires-Dist: grpcio-tools>=1.53; extra == "protobuf"
78
80
  Provides-Extra: all
79
- Requires-Dist: datacontract-cli[api,bigquery,csv,databricks,dbml,dbt,excel,iceberg,kafka,parquet,postgres,protobuf,rdf,s3,snowflake,sqlserver,trino]; extra == "all"
81
+ Requires-Dist: datacontract-cli[api,athena,bigquery,csv,databricks,dbml,dbt,excel,iceberg,kafka,parquet,postgres,protobuf,rdf,s3,snowflake,sqlserver,trino]; extra == "all"
80
82
  Provides-Extra: dev
81
83
  Requires-Dist: datacontract-cli[all]; extra == "dev"
82
84
  Requires-Dist: httpx==0.28.1; extra == "dev"
83
85
  Requires-Dist: kafka-python; extra == "dev"
84
- Requires-Dist: moto==5.1.6; extra == "dev"
86
+ Requires-Dist: moto==5.1.10; extra == "dev"
85
87
  Requires-Dist: pandas>=2.1.0; extra == "dev"
86
- 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"
87
89
  Requires-Dist: pytest; extra == "dev"
88
90
  Requires-Dist: pytest-xdist; extra == "dev"
89
91
  Requires-Dist: pymssql==2.3.7; extra == "dev"
90
92
  Requires-Dist: ruff; extra == "dev"
91
- Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.10.0; extra == "dev"
92
- Requires-Dist: trino==0.335.0; extra == "dev"
93
+ Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.12.0; extra == "dev"
94
+ Requires-Dist: trino==0.336.0; extra == "dev"
93
95
  Dynamic: license-file
94
96
 
95
97
  # Data Contract CLI
@@ -255,6 +257,14 @@ if not run.has_passed():
255
257
 
256
258
  Choose the most appropriate installation method for your needs:
257
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
+
258
268
  ### pip
259
269
  Python 3.10, 3.11, and 3.12 are supported. We recommend to use Python 3.11.
260
270
 
@@ -316,6 +326,7 @@ A list of available extras:
316
326
 
317
327
  | Dependency | Installation Command |
318
328
  |-------------------------|--------------------------------------------|
329
+ | Amazon Athena | `pip install datacontract-cli[athena]` |
319
330
  | Avro Support | `pip install datacontract-cli[avro]` |
320
331
  | Google BigQuery | `pip install datacontract-cli[bigquery]` |
321
332
  | Databricks Integration | `pip install datacontract-cli[databricks]` |
@@ -460,6 +471,7 @@ Credentials are provided with environment variables.
460
471
  Supported server types:
461
472
 
462
473
  - [s3](#S3)
474
+ - [athena](#athena)
463
475
  - [bigquery](#bigquery)
464
476
  - [azure](#azure)
465
477
  - [sqlserver](#sqlserver)
@@ -470,6 +482,7 @@ Supported server types:
470
482
  - [kafka](#kafka)
471
483
  - [postgres](#postgres)
472
484
  - [trino](#trino)
485
+ - [api](#api)
473
486
  - [local](#local)
474
487
 
475
488
  Supported formats:
@@ -529,6 +542,41 @@ servers:
529
542
  | `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
530
543
 
531
544
 
545
+ #### Athena
546
+
547
+ Data Contract CLI can test data in AWS Athena stored in S3.
548
+ Supports different file formats, such as Iceberg, Parquet, JSON, CSV...
549
+
550
+ ##### Example
551
+
552
+ datacontract.yaml
553
+ ```yaml
554
+ servers:
555
+ athena:
556
+ type: athena
557
+ catalog: awsdatacatalog # awsdatacatalog is the default setting
558
+ schema: icebergdemodb # in Athena, this is called "database"
559
+ regionName: eu-central-1
560
+ stagingDir: s3://my-bucket/athena-results/
561
+ models:
562
+ my_table: # corresponds to a table of view name
563
+ type: table
564
+ fields:
565
+ my_column_1: # corresponds to a column
566
+ type: string
567
+ config:
568
+ physicalType: varchar
569
+ ```
570
+
571
+ ##### Environment Variables
572
+
573
+ | Environment Variable | Example | Description |
574
+ |-------------------------------------|---------------------------------|----------------------------------------|
575
+ | `DATACONTRACT_S3_REGION` | `eu-central-1` | Region of Athena service |
576
+ | `DATACONTRACT_S3_ACCESS_KEY_ID` | `AKIAXV5Q5QABCDEFGH` | AWS Access Key ID |
577
+ | `DATACONTRACT_S3_SECRET_ACCESS_KEY` | `93S7LRrJcqLaaaa/XXXXXXXXXXXXX` | AWS Secret Access Key |
578
+ | `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
579
+
532
580
 
533
581
  #### Google Cloud Storage (GCS)
534
582
 
@@ -896,6 +944,38 @@ models:
896
944
  | `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
897
945
 
898
946
 
947
+ #### API
948
+
949
+ Data Contract CLI can test APIs that return data in JSON format.
950
+ Currently, only GET requests are supported.
951
+
952
+ ##### Example
953
+
954
+ datacontract.yaml
955
+ ```yaml
956
+ servers:
957
+ api:
958
+ type: "api"
959
+ location: "https://api.example.com/path"
960
+ delimiter: none # new_line, array, or none (default)
961
+
962
+ models:
963
+ my_object: # corresponds to the root element of the JSON response
964
+ type: object
965
+ fields:
966
+ field1:
967
+ type: string
968
+ fields2:
969
+ type: number
970
+ ```
971
+
972
+ ##### Environment Variables
973
+
974
+ | Environment Variable | Example | Description |
975
+ |-----------------------------------------|------------------|---------------------------------------------------|
976
+ | `DATACONTRACT_API_HEADER_AUTHORIZATION` | `Bearer <token>` | The value for the `authorization` header. Optional. |
977
+
978
+
899
979
  #### Local
900
980
 
901
981
  Data Contract CLI can test local files in parquet, json, csv, or delta format.
@@ -939,7 +1019,7 @@ models:
939
1019
  │ terraform|avro-idl|sql|sql-query|mer │
940
1020
  │ maid|html|go|bigquery|dbml|spark|sql │
941
1021
  │ alchemy|data-caterer|dcs|markdown|ic │
942
- │ eberg|custom|excel] │
1022
+ │ eberg|custom|excel|dqx] │
943
1023
  │ --output PATH Specify the file path where the │
944
1024
  │ exported data will be saved. If no │
945
1025
  │ path is provided, the output will be │
@@ -959,8 +1039,10 @@ models:
959
1039
  │ --engine TEXT [engine] The engine used for great │
960
1040
  │ expection run. │
961
1041
  │ [default: None] │
962
- │ --template PATH [custom] The file path of Jinja
963
- template.
1042
+ │ --template PATH The file path or URL of a template.
1043
+ For Excel format: path/URL to custom
1044
+ │ Excel template. For custom format: │
1045
+ │ path to Jinja template. │
964
1046
  │ [default: None] │
965
1047
  │ --help Show this message and exit. │
966
1048
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -983,35 +1065,36 @@ datacontract export --format html --output datacontract.html
983
1065
 
984
1066
  Available export options:
985
1067
 
986
- | Type | Description | Status |
987
- |----------------------|---------------------------------------------------------|--------|
988
- | `html` | Export to HTML | ✅ |
989
- | `jsonschema` | Export to JSON Schema | ✅ |
990
- | `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅ |
991
- | `sodacl` | Export to SodaCL quality checks in YAML format | ✅ |
992
- | `dbt` | Export to dbt models in YAML format | ✅ |
993
- | `dbt-sources` | Export to dbt sources in YAML format | ✅ |
994
- | `dbt-staging-sql` | Export to dbt staging SQL models | ✅ |
995
- | `rdf` | Export data contract to RDF representation in N3 format | ✅ |
996
- | `avro` | Export to AVRO models | ✅ |
997
- | `protobuf` | Export to Protobuf | ✅ |
998
- | `terraform` | Export to terraform resources | ✅ |
999
- | `sql` | Export to SQL DDL | ✅ |
1000
- | `sql-query` | Export to SQL Query | ✅ |
1001
- | `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅ |
1002
- | `bigquery` | Export to BigQuery Schemas | ✅ |
1003
- | `go` | Export to Go types | ✅ |
1004
- | `pydantic-model` | Export to pydantic models | ✅ |
1005
- | `DBML` | Export to a DBML Diagram description | ✅ |
1006
- | `spark` | Export to a Spark StructType | ✅ |
1007
- | `sqlalchemy` | Export to SQLAlchemy Models | ✅ |
1008
- | `data-caterer` | Export to Data Caterer in YAML format | ✅ |
1009
- | `dcs` | Export to Data Contract Specification in YAML format | ✅ |
1010
- | `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 | ✅ |
1011
1093
  | `iceberg` | Export to an Iceberg JSON Schema Definition | partial |
1012
- | `excel` | Export to ODCS Excel Template | ✅ |
1013
- | `custom` | Export to Custom format with Jinja | ✅ |
1014
- | 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 |
1015
1098
 
1016
1099
  #### SQL
1017
1100
 
@@ -2102,6 +2185,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
2102
2185
 
2103
2186
  ## Companies using this tool
2104
2187
 
2188
+ - [Entropy Data](https://www.entropy-data.com)
2105
2189
  - [INNOQ](https://innoq.com)
2106
2190
  - [Data Catering](https://data.catering/)
2107
2191
  - [Oliver Wyman](https://www.oliverwyman.com/)
@@ -2120,7 +2204,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
2120
2204
 
2121
2205
  ## Credits
2122
2206
 
2123
- Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/) and [Jochen Christ](https://www.linkedin.com/in/jochenchrist/).
2207
+ Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/), [Jochen Christ](https://www.linkedin.com/in/jochenchrist/), and [Simon Harrer]().
2124
2208
 
2125
2209
 
2126
2210
 
@@ -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
 
@@ -222,6 +230,7 @@ A list of available extras:
222
230
 
223
231
  | Dependency | Installation Command |
224
232
  |-------------------------|--------------------------------------------|
233
+ | Amazon Athena | `pip install datacontract-cli[athena]` |
225
234
  | Avro Support | `pip install datacontract-cli[avro]` |
226
235
  | Google BigQuery | `pip install datacontract-cli[bigquery]` |
227
236
  | Databricks Integration | `pip install datacontract-cli[databricks]` |
@@ -366,6 +375,7 @@ Credentials are provided with environment variables.
366
375
  Supported server types:
367
376
 
368
377
  - [s3](#S3)
378
+ - [athena](#athena)
369
379
  - [bigquery](#bigquery)
370
380
  - [azure](#azure)
371
381
  - [sqlserver](#sqlserver)
@@ -376,6 +386,7 @@ Supported server types:
376
386
  - [kafka](#kafka)
377
387
  - [postgres](#postgres)
378
388
  - [trino](#trino)
389
+ - [api](#api)
379
390
  - [local](#local)
380
391
 
381
392
  Supported formats:
@@ -435,6 +446,41 @@ servers:
435
446
  | `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
436
447
 
437
448
 
449
+ #### Athena
450
+
451
+ Data Contract CLI can test data in AWS Athena stored in S3.
452
+ Supports different file formats, such as Iceberg, Parquet, JSON, CSV...
453
+
454
+ ##### Example
455
+
456
+ datacontract.yaml
457
+ ```yaml
458
+ servers:
459
+ athena:
460
+ type: athena
461
+ catalog: awsdatacatalog # awsdatacatalog is the default setting
462
+ schema: icebergdemodb # in Athena, this is called "database"
463
+ regionName: eu-central-1
464
+ stagingDir: s3://my-bucket/athena-results/
465
+ models:
466
+ my_table: # corresponds to a table of view name
467
+ type: table
468
+ fields:
469
+ my_column_1: # corresponds to a column
470
+ type: string
471
+ config:
472
+ physicalType: varchar
473
+ ```
474
+
475
+ ##### Environment Variables
476
+
477
+ | Environment Variable | Example | Description |
478
+ |-------------------------------------|---------------------------------|----------------------------------------|
479
+ | `DATACONTRACT_S3_REGION` | `eu-central-1` | Region of Athena service |
480
+ | `DATACONTRACT_S3_ACCESS_KEY_ID` | `AKIAXV5Q5QABCDEFGH` | AWS Access Key ID |
481
+ | `DATACONTRACT_S3_SECRET_ACCESS_KEY` | `93S7LRrJcqLaaaa/XXXXXXXXXXXXX` | AWS Secret Access Key |
482
+ | `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
483
+
438
484
 
439
485
  #### Google Cloud Storage (GCS)
440
486
 
@@ -802,6 +848,38 @@ models:
802
848
  | `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
803
849
 
804
850
 
851
+ #### API
852
+
853
+ Data Contract CLI can test APIs that return data in JSON format.
854
+ Currently, only GET requests are supported.
855
+
856
+ ##### Example
857
+
858
+ datacontract.yaml
859
+ ```yaml
860
+ servers:
861
+ api:
862
+ type: "api"
863
+ location: "https://api.example.com/path"
864
+ delimiter: none # new_line, array, or none (default)
865
+
866
+ models:
867
+ my_object: # corresponds to the root element of the JSON response
868
+ type: object
869
+ fields:
870
+ field1:
871
+ type: string
872
+ fields2:
873
+ type: number
874
+ ```
875
+
876
+ ##### Environment Variables
877
+
878
+ | Environment Variable | Example | Description |
879
+ |-----------------------------------------|------------------|---------------------------------------------------|
880
+ | `DATACONTRACT_API_HEADER_AUTHORIZATION` | `Bearer <token>` | The value for the `authorization` header. Optional. |
881
+
882
+
805
883
  #### Local
806
884
 
807
885
  Data Contract CLI can test local files in parquet, json, csv, or delta format.
@@ -845,7 +923,7 @@ models:
845
923
  │ terraform|avro-idl|sql|sql-query|mer │
846
924
  │ maid|html|go|bigquery|dbml|spark|sql │
847
925
  │ alchemy|data-caterer|dcs|markdown|ic │
848
- │ eberg|custom|excel] │
926
+ │ eberg|custom|excel|dqx] │
849
927
  │ --output PATH Specify the file path where the │
850
928
  │ exported data will be saved. If no │
851
929
  │ path is provided, the output will be │
@@ -865,8 +943,10 @@ models:
865
943
  │ --engine TEXT [engine] The engine used for great │
866
944
  │ expection run. │
867
945
  │ [default: None] │
868
- │ --template PATH [custom] The file path of Jinja
869
- template.
946
+ │ --template PATH The file path or URL of a template.
947
+ For Excel format: path/URL to custom
948
+ │ Excel template. For custom format: │
949
+ │ path to Jinja template. │
870
950
  │ [default: None] │
871
951
  │ --help Show this message and exit. │
872
952
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -889,35 +969,36 @@ datacontract export --format html --output datacontract.html
889
969
 
890
970
  Available export options:
891
971
 
892
- | Type | Description | Status |
893
- |----------------------|---------------------------------------------------------|--------|
894
- | `html` | Export to HTML | ✅ |
895
- | `jsonschema` | Export to JSON Schema | ✅ |
896
- | `odcs` | Export to Open Data Contract Standard (ODCS) V3 | ✅ |
897
- | `sodacl` | Export to SodaCL quality checks in YAML format | ✅ |
898
- | `dbt` | Export to dbt models in YAML format | ✅ |
899
- | `dbt-sources` | Export to dbt sources in YAML format | ✅ |
900
- | `dbt-staging-sql` | Export to dbt staging SQL models | ✅ |
901
- | `rdf` | Export data contract to RDF representation in N3 format | ✅ |
902
- | `avro` | Export to AVRO models | ✅ |
903
- | `protobuf` | Export to Protobuf | ✅ |
904
- | `terraform` | Export to terraform resources | ✅ |
905
- | `sql` | Export to SQL DDL | ✅ |
906
- | `sql-query` | Export to SQL Query | ✅ |
907
- | `great-expectations` | Export to Great Expectations Suites in JSON Format | ✅ |
908
- | `bigquery` | Export to BigQuery Schemas | ✅ |
909
- | `go` | Export to Go types | ✅ |
910
- | `pydantic-model` | Export to pydantic models | ✅ |
911
- | `DBML` | Export to a DBML Diagram description | ✅ |
912
- | `spark` | Export to a Spark StructType | ✅ |
913
- | `sqlalchemy` | Export to SQLAlchemy Models | ✅ |
914
- | `data-caterer` | Export to Data Caterer in YAML format | ✅ |
915
- | `dcs` | Export to Data Contract Specification in YAML format | ✅ |
916
- | `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 | ✅ |
917
997
  | `iceberg` | Export to an Iceberg JSON Schema Definition | partial |
918
- | `excel` | Export to ODCS Excel Template | ✅ |
919
- | `custom` | Export to Custom format with Jinja | ✅ |
920
- | 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 |
921
1002
 
922
1003
  #### SQL
923
1004
 
@@ -2008,6 +2089,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
2008
2089
 
2009
2090
  ## Companies using this tool
2010
2091
 
2092
+ - [Entropy Data](https://www.entropy-data.com)
2011
2093
  - [INNOQ](https://innoq.com)
2012
2094
  - [Data Catering](https://data.catering/)
2013
2095
  - [Oliver Wyman](https://www.oliverwyman.com/)
@@ -2026,7 +2108,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
2026
2108
 
2027
2109
  ## Credits
2028
2110
 
2029
- Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/) and [Jochen Christ](https://www.linkedin.com/in/jochenchrist/).
2111
+ Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/), [Jochen Christ](https://www.linkedin.com/in/jochenchrist/), and [Simon Harrer]().
2030
2112
 
2031
2113
 
2032
2114
 
@@ -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(