datacontract-cli 1.2.2__tar.gz → 1.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. {datacontract_cli-1.2.2/datacontract_cli.egg-info → datacontract_cli-1.2.4}/PKG-INFO +58 -44
  2. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/README.md +40 -34
  3. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/api.py +10 -1
  4. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/cli.py +20 -1
  5. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_ci.py +5 -2
  6. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_edit.py +1 -1
  7. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_export.py +18 -0
  8. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_import.py +110 -0
  9. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_test.py +4 -1
  10. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/config/settings.py +79 -0
  11. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/config/variables.py +38 -8
  12. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/data_contract.py +2 -0
  13. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/check_spec.py +6 -1
  14. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/create_checks.py +218 -34
  15. datacontract_cli-1.2.4/datacontract/engines/checks/custom_quality_check.py +552 -0
  16. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/dimensions.py +2 -0
  17. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/physical_type_match.py +33 -1
  18. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/sql_guard.py +6 -0
  19. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/data_contract_test.py +30 -11
  20. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/fastjsonschema/check_jsonschema.py +77 -50
  21. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +6 -8
  22. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/check_hana_execute.py +2 -0
  23. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/hana_quality_check.py +126 -16
  24. datacontract_cli-1.2.4/datacontract/engines/ibis/__init__.py +16 -0
  25. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/aws_credentials.py +12 -3
  26. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/connect.py +63 -9
  27. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/duckdb_connection.py +187 -71
  28. datacontract_cli-1.2.4/datacontract/engines/ibis/connections/hive_patch.py +53 -0
  29. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/ibis_check_execute.py +74 -6
  30. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/native_type.py +32 -0
  31. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/dbt_exporter.py +14 -5
  32. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/exporter.py +1 -0
  33. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/exporter_factory.py +4 -0
  34. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/jsonschema_exporter.py +10 -4
  35. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/pydantic_exporter.py +37 -1
  36. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/sodacl_check_builder.py +77 -14
  37. datacontract_cli-1.2.4/datacontract/export/xsd_exporter.py +337 -0
  38. datacontract_cli-1.2.4/datacontract/imports/clickhouse_importer.py +262 -0
  39. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/dbt_importer.py +12 -0
  40. datacontract_cli-1.2.4/datacontract/imports/hive_importer.py +196 -0
  41. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/importer.py +4 -0
  42. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/importer_factory.py +20 -0
  43. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/jsonschema_importer.py +184 -20
  44. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/mysql_importer.py +2 -3
  45. datacontract_cli-1.2.4/datacontract/imports/openapi_importer.py +187 -0
  46. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/sql_importer.py +20 -2
  47. datacontract_cli-1.2.4/datacontract/imports/xsd_importer.py +432 -0
  48. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/integration/dbt_sync.py +24 -5
  49. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/integration/dbt_test_mapping.py +23 -13
  50. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/integration/entropy_data.py +11 -9
  51. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/resolve.py +109 -26
  52. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/run.py +3 -1
  53. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/server.py +3 -2
  54. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/ci_output.py +11 -7
  55. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/test_results_writer.py +12 -6
  56. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/macros/schema.html +12 -13
  57. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/schema.html +7 -8
  58. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4/datacontract_cli.egg-info}/PKG-INFO +58 -44
  59. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract_cli.egg-info/SOURCES.txt +25 -1
  60. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract_cli.egg-info/requires.txt +20 -9
  61. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/pyproject.toml +31 -11
  62. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_api.py +154 -0
  63. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_ci_output.py +36 -7
  64. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_config_threading.py +5 -5
  65. datacontract_cli-1.2.4/tests/test_connect_clickhouse.py +112 -0
  66. datacontract_cli-1.2.4/tests/test_connect_hive.py +117 -0
  67. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_mysql.py +15 -4
  68. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_s3_credentials.py +38 -4
  69. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_sql_placeholders.py +22 -17
  70. datacontract_cli-1.2.4/tests/test_custom_quality_checks.py +531 -0
  71. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_dbt_sync.py +63 -12
  72. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_dbt_test_mapping.py +24 -14
  73. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dbt_models.py +89 -36
  74. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dbt_sources.py +39 -28
  75. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_html.py +56 -0
  76. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_jsonschema.py +26 -0
  77. datacontract_cli-1.2.4/tests/test_export_pydantic.py +361 -0
  78. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_sodacl.py +40 -0
  79. datacontract_cli-1.2.4/tests/test_export_xsd.py +594 -0
  80. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_hana_quality_check.py +39 -0
  81. datacontract_cli-1.2.4/tests/test_import_clickhouse.py +184 -0
  82. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_dbt.py +68 -0
  83. datacontract_cli-1.2.4/tests/test_import_hive.py +172 -0
  84. datacontract_cli-1.2.4/tests/test_import_jsonschema.py +340 -0
  85. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_mysql.py +30 -0
  86. datacontract_cli-1.2.4/tests/test_import_openapi.py +138 -0
  87. datacontract_cli-1.2.4/tests/test_import_sql_clickhouse.py +42 -0
  88. datacontract_cli-1.2.4/tests/test_import_sql_hive.py +61 -0
  89. datacontract_cli-1.2.4/tests/test_import_sql_struct.py +20 -0
  90. datacontract_cli-1.2.4/tests/test_import_xsd.py +583 -0
  91. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_install_extras.py +2 -0
  92. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_lint.py +1 -1
  93. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_nested_path_checks.py +32 -0
  94. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_physical_type_match.py +103 -0
  95. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_quality_sql_dialects.py +4 -0
  96. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_resolve_definitions.py +40 -0
  97. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_roundtrip_pydantic_model.py +6 -3
  98. datacontract_cli-1.2.4/tests/test_roundtrip_xsd.py +256 -0
  99. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_servers_3_2_0.py +52 -0
  100. datacontract_cli-1.2.4/tests/test_test_api_openapi_import.py +151 -0
  101. datacontract_cli-1.2.4/tests/test_test_array_items.py +193 -0
  102. datacontract_cli-1.2.4/tests/test_test_clickhouse.py +147 -0
  103. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_diagnostics.py +72 -0
  104. datacontract_cli-1.2.4/tests/test_test_hive.py +156 -0
  105. datacontract_cli-1.2.4/tests/test_test_local_json.py +159 -0
  106. datacontract_cli-1.2.4/tests/test_test_local_xml.py +463 -0
  107. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_metadata_only.py +2 -2
  108. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_oracle.py +22 -0
  109. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_postgres.py +32 -0
  110. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_quality_id_and_tag_filter.py +16 -0
  111. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_redshift.py +19 -0
  112. datacontract_cli-1.2.4/tests/test_test_relationships.py +270 -0
  113. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_results_writer.py +33 -0
  114. datacontract_cli-1.2.4/tests/test_test_s3_json_multiple_files.py +84 -0
  115. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_schema_evolution.py +3 -9
  116. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_untrusted_contract.py +1 -1
  117. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_variables.py +19 -0
  118. datacontract_cli-1.2.2/datacontract/output/__init__.py +0 -0
  119. datacontract_cli-1.2.2/tests/test_export_pydantic.py +0 -188
  120. datacontract_cli-1.2.2/tests/test_import_jsonschema.py +0 -151
  121. datacontract_cli-1.2.2/tests/test_test_array_items.py +0 -109
  122. datacontract_cli-1.2.2/tests/test_test_local_json.py +0 -21
  123. datacontract_cli-1.2.2/tests/test_test_s3_json_remote.py +0 -23
  124. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/LICENSE +0 -0
  125. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/MANIFEST.in +0 -0
  126. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/__init__.py +0 -0
  127. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/breaking/__init__.py +0 -0
  128. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/breaking/detector.py +0 -0
  129. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/breaking/rules.py +0 -0
  130. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/catalog/catalog.py +0 -0
  131. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/changelog/__init__.py +0 -0
  132. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/changelog/changelog.py +0 -0
  133. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/changelog/normalize.py +0 -0
  134. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_api.py +0 -0
  135. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_breaking.py +0 -0
  136. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_catalog.py +0 -0
  137. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_changelog.py +0 -0
  138. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_dbt.py +0 -0
  139. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_init.py +0 -0
  140. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_lint.py +0 -0
  141. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/command_publish.py +0 -0
  142. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/config/__init__.py +0 -0
  143. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/config/cli_context.py +0 -0
  144. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/VERSION +0 -0
  145. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/assets/editor.worker-4.7.0.js +0 -0
  146. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +0 -0
  147. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/datacontract-editor.css +0 -0
  148. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/datacontract-editor.es.js +0 -0
  149. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/index.html +0 -0
  150. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/logo_fuchsia_v2.svg +0 -0
  151. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/monaco-4.7.0.js +0 -0
  152. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/odcs.svg +0 -0
  153. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/robots.txt +0 -0
  154. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/rolldown-runtime-DY7j01NX.js +0 -0
  155. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/editor_assets/sitemap.xml +0 -0
  156. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/__init__.py +0 -0
  157. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/__init__.py +0 -0
  158. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/check_filter.py +0 -0
  159. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/severity.py +0 -0
  160. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/checks/type_normalize.py +0 -0
  161. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/datacontract/check_azure_blob_file.py +0 -0
  162. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  163. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  164. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/__init__.py +0 -0
  165. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/hana_check_selection.py +0 -0
  166. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/hana_connection.py +0 -0
  167. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/hana_schema_check.py +0 -0
  168. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/hana/hana_type_mapping.py +0 -0
  169. {datacontract_cli-1.2.2/datacontract/engines/ibis → datacontract_cli-1.2.4/datacontract/engines/ibis/connections}/__init__.py +0 -0
  170. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/databricks_patch.py +0 -0
  171. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/exasol_patch.py +0 -0
  172. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/iceberg.py +0 -0
  173. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/kafka.py +0 -0
  174. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/oracle_patch.py +0 -0
  175. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/redshift_credentials.py +0 -0
  176. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/connections/redshift_patch.py +0 -0
  177. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/dtype_category.py +0 -0
  178. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/engines/ibis/snowflake_structured_types.py +0 -0
  179. {datacontract_cli-1.2.2/datacontract/engines/ibis/connections → datacontract_cli-1.2.4/datacontract/export}/__init__.py +0 -0
  180. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/avro_exporter.py +0 -0
  181. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/avro_idl_exporter.py +0 -0
  182. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/bigquery_exporter.py +0 -0
  183. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/custom_exporter.py +0 -0
  184. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/data_caterer_exporter.py +0 -0
  185. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/dbml_exporter.py +0 -0
  186. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/dcs_exporter.py +0 -0
  187. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/dqx_exporter.py +0 -0
  188. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/duckdb_type_converter.py +0 -0
  189. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/excel_exporter.py +0 -0
  190. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/go_exporter.py +0 -0
  191. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/great_expectations_exporter.py +0 -0
  192. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/html_exporter.py +0 -0
  193. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/iceberg_exporter.py +0 -0
  194. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/markdown_exporter.py +0 -0
  195. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/mermaid_exporter.py +0 -0
  196. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/odcs_v3_exporter.py +0 -0
  197. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/pandas_type_converter.py +0 -0
  198. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/protobuf_exporter.py +0 -0
  199. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/rdf_exporter.py +0 -0
  200. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/sodacl_exporter.py +0 -0
  201. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/spark_exporter.py +0 -0
  202. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/sql_exporter.py +0 -0
  203. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/sql_type_converter.py +0 -0
  204. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/export/sqlalchemy_exporter.py +0 -0
  205. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/athena_importer.py +0 -0
  206. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/avro_importer.py +0 -0
  207. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/bigquery_importer.py +0 -0
  208. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/csv_importer.py +0 -0
  209. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/dbml_importer.py +0 -0
  210. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/dcs_importer.py +0 -0
  211. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/excel_importer.py +0 -0
  212. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/glue_importer.py +0 -0
  213. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/iceberg_importer.py +0 -0
  214. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/json_importer.py +0 -0
  215. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/object_storage_importer.py +0 -0
  216. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/odata_importer.py +0 -0
  217. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/odcs_helper.py +0 -0
  218. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/odcs_importer.py +0 -0
  219. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/oracle_importer.py +0 -0
  220. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/parquet_importer.py +0 -0
  221. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/postgres_importer.py +0 -0
  222. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/powerbi_importer.py +0 -0
  223. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/protobuf_importer.py +0 -0
  224. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/pydantic_importer.py +0 -0
  225. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/redshift_importer.py +0 -0
  226. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/snowflake_importer.py +0 -0
  227. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/spark_importer.py +0 -0
  228. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/spark_type_json.py +0 -0
  229. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/sqlserver_importer.py +0 -0
  230. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/trino_importer.py +0 -0
  231. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/imports/unity_importer.py +0 -0
  232. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/init/init_template.py +0 -0
  233. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/constraints.py +0 -0
  234. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/files.py +0 -0
  235. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/resources.py +0 -0
  236. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/s3.py +0 -0
  237. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/schema.py +0 -0
  238. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/lint/urls.py +0 -0
  239. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/breaking.py +0 -0
  240. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/changelog.py +0 -0
  241. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/enum_values.py +0 -0
  242. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/exceptions.py +0 -0
  243. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/map_type.py +0 -0
  244. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/natural_keys.py +0 -0
  245. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/odcs.py +0 -0
  246. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/vector_type.py +0 -0
  247. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/model/workbook.py +0 -0
  248. {datacontract_cli-1.2.2/datacontract/export → datacontract_cli-1.2.4/datacontract/output}/__init__.py +0 -0
  249. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/json_test_results.py +0 -0
  250. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/junit_test_results.py +0 -0
  251. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/output_format.py +0 -0
  252. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/text_breaking_results.py +0 -0
  253. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/output/text_changelog_results.py +0 -0
  254. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/py.typed +0 -0
  255. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  256. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  257. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
  258. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  259. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
  260. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
  261. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
  262. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
  263. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/odcs-3.2.0.init.yaml +0 -0
  264. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/schemas/odcs-3.2.0.schema.json +0 -0
  265. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/datacontract.html +0 -0
  266. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/datacontract_odcs.html +0 -0
  267. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/excel/odcs-template-v3.0.xlsx +0 -0
  268. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/excel/odcs-template-v3.1.xlsx +0 -0
  269. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/excel/odcs-template-v3.2.xlsx +0 -0
  270. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/index.html +0 -0
  271. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/macros/authoritative_definitions.html +0 -0
  272. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/macros/context.html +0 -0
  273. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/macros/server.html +0 -0
  274. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/macros/support.html +0 -0
  275. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/datacontract_information.html +0 -0
  276. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  277. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/datacontract_terms.html +0 -0
  278. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/definition.html +0 -0
  279. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/example.html +0 -0
  280. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/model_field.html +0 -0
  281. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/quality.html +0 -0
  282. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials/server.html +0 -0
  283. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/context.html +0 -0
  284. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/custom_properties.html +0 -0
  285. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/diagram.html +0 -0
  286. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/dialog_yaml.html +0 -0
  287. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/footer.html +0 -0
  288. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/fundamentals.html +0 -0
  289. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/header.html +0 -0
  290. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/pricing.html +0 -0
  291. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/roles.html +0 -0
  292. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/servers.html +0 -0
  293. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/sla.html +0 -0
  294. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/support.html +0 -0
  295. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/team.html +0 -0
  296. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/term_of_use.html +0 -0
  297. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/partials_odcs/title.html +0 -0
  298. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract/templates/style/output.css +0 -0
  299. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  300. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract_cli.egg-info/entry_points.txt +0 -0
  301. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/datacontract_cli.egg-info/top_level.txt +0 -0
  302. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/setup.cfg +0 -0
  303. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_api_openapi.py +0 -0
  304. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_breaking.py +0 -0
  305. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_breaking_odcs_3_2.py +0 -0
  306. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_catalog.py +0 -0
  307. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_changelog.py +0 -0
  308. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_changelog_engine.py +0 -0
  309. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_changelog_normalize.py +0 -0
  310. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_changelog_output_text.py +0 -0
  311. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_check_quality_provenance.py +0 -0
  312. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_cli.py +0 -0
  313. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_command_api.py +0 -0
  314. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_command_api_options.py +0 -0
  315. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_config.py +0 -0
  316. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_config_file.py +0 -0
  317. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_config_require.py +0 -0
  318. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_athena.py +0 -0
  319. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_bigquery.py +0 -0
  320. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_databricks.py +0 -0
  321. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_exasol.py +0 -0
  322. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_impala.py +0 -0
  323. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_oracle.py +0 -0
  324. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_postgres.py +0 -0
  325. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_redshift.py +0 -0
  326. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_snowflake.py +0 -0
  327. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_sqlserver.py +0 -0
  328. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_connect_trino.py +0 -0
  329. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_array_items.py +0 -0
  330. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_nested.py +0 -0
  331. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_nested_type.py +0 -0
  332. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_physical_type.py +0 -0
  333. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_primary_key.py +0 -0
  334. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_retention_period.py +0 -0
  335. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_create_checks_servicelevel.py +0 -0
  336. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_data_contract.py +0 -0
  337. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_data_contract_checks.py +0 -0
  338. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_data_contract_specification.py +0 -0
  339. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_description_linter.py +0 -0
  340. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_docs_commands.py +0 -0
  341. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_docs_config_options.py +0 -0
  342. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_docs_ordering.py +0 -0
  343. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_download_datacontract_file.py +0 -0
  344. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_dtype_category.py +0 -0
  345. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_duckdb_json.py +0 -0
  346. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_edit.py +0 -0
  347. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_enum_values.py +0 -0
  348. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_avro.py +0 -0
  349. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_avro_idl.py +0 -0
  350. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_bigquery.py +0 -0
  351. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_complex_data_contract.py +0 -0
  352. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_custom.py +0 -0
  353. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_custom_exporter.py +0 -0
  354. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_custom_model.py +0 -0
  355. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_data_caterer.py +0 -0
  356. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dbml.py +0 -0
  357. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dbt_staging_sql.py +0 -0
  358. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dcs.py +0 -0
  359. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_dqx.py +0 -0
  360. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_excel.py +0 -0
  361. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_go.py +0 -0
  362. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_great_expectations.py +0 -0
  363. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_iceberg.py +0 -0
  364. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_large_contract.py +0 -0
  365. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_markdown.py +0 -0
  366. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_mermaid.py +0 -0
  367. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_odcs_v3.py +0 -0
  368. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_protobuf.py +0 -0
  369. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_rdf.py +0 -0
  370. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_spark.py +0 -0
  371. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_sql.py +0 -0
  372. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_sql_clickhouse.py +0 -0
  373. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_sql_query.py +0 -0
  374. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_export_sqlalchemy.py +0 -0
  375. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_hana_connection.py +0 -0
  376. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_hana_schema_check.py +0 -0
  377. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_hana_type_mapping.py +0 -0
  378. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_ibis_check_execute.py +0 -0
  379. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_ibis_mssql_pattern.py +0 -0
  380. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_ibis_mssql_schema.py +0 -0
  381. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_ibis_oracle_schema.py +0 -0
  382. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_athena.py +0 -0
  383. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_avro.py +0 -0
  384. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_bigquery.py +0 -0
  385. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_csv.py +0 -0
  386. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_dbml.py +0 -0
  387. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_excel.py +0 -0
  388. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_glue.py +0 -0
  389. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_iceberg.py +0 -0
  390. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_json.py +0 -0
  391. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_object_storage.py +0 -0
  392. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_odata.py +0 -0
  393. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_odcs_v3.py +0 -0
  394. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_oracle.py +0 -0
  395. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_parquet.py +0 -0
  396. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_postgres.py +0 -0
  397. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_powerbi.py +0 -0
  398. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_protobuf.py +0 -0
  399. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_pydantic_model.py +0 -0
  400. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_redshift.py +0 -0
  401. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_snowflake.py +0 -0
  402. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_spark_type_json.py +0 -0
  403. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_sql_oracle.py +0 -0
  404. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_sql_postgres.py +0 -0
  405. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_sql_snowflake.py +0 -0
  406. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_sql_sqlserver.py +0 -0
  407. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_sqlserver.py +0 -0
  408. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_trino.py +0 -0
  409. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_unity_file.py +0 -0
  410. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_import_unmapped_types.py +0 -0
  411. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_integration_entropydata.py +0 -0
  412. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_lint_files.py +0 -0
  413. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_lint_odcs_3_2_constraints.py +0 -0
  414. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_lint_schema.py +0 -0
  415. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_lint_urls.py +0 -0
  416. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_map_type.py +0 -0
  417. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_metadata_fields.py +0 -0
  418. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_native_type_schema_scope.py +0 -0
  419. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_oracle_patch.py +0 -0
  420. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_publish_test_results.py +0 -0
  421. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_publish_test_results_payload.py +0 -0
  422. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_quality_unrunnable_rules.py +0 -0
  423. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_redshift_credentials.py +0 -0
  424. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_redshift_patch.py +0 -0
  425. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_resolve.py +0 -0
  426. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_resolve_local_definitions.py +0 -0
  427. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_roundtrip_jsonschema.py +0 -0
  428. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_row_filter_duplicate_count.py +0 -0
  429. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_run_check_deprecated_fields.py +0 -0
  430. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_run_check_engine.py +0 -0
  431. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_server_overrides.py +0 -0
  432. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_server_type_mssql.py +0 -0
  433. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_server_type_synonyms.py +0 -0
  434. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_snowflake_structured_types.py +0 -0
  435. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_sql_type_converter_physicaltype.py +0 -0
  436. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_api.py +0 -0
  437. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_athena_iceberg.py +0 -0
  438. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_azure_blob_file.py +0 -0
  439. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_azure_remote.py +0 -0
  440. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_bigquery.py +0 -0
  441. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_checks_filter.py +0 -0
  442. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_databricks.py +0 -0
  443. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_delta.py +0 -0
  444. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_dimension_filter.py +0 -0
  445. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_dry_run.py +0 -0
  446. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_duckdb.py +0 -0
  447. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_failed_samples.py +0 -0
  448. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_gcs_csv_remote.py +0 -0
  449. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_gcs_json_remote.py +0 -0
  450. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_hana.py +0 -0
  451. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_iceberg.py +0 -0
  452. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_iceberg_rest.py +0 -0
  453. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_iceberg_s3tables.py +0 -0
  454. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_kafka.py +0 -0
  455. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_kafka_decoding.py +0 -0
  456. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_kafka_remote.py +0 -0
  457. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_local_json_nd.py +0 -0
  458. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_mysql.py +0 -0
  459. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_nested_checks.py +0 -0
  460. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_oracle_xe.py +0 -0
  461. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_output_json.py +0 -0
  462. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_output_junit.py +0 -0
  463. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_parquet.py +0 -0
  464. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_quality.py +0 -0
  465. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_quality_local_fallback.py +0 -0
  466. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_quality_percent_severity.py +0 -0
  467. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_row_filter.py +0 -0
  468. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_s3_csv.py +0 -0
  469. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_s3_delta.py +0 -0
  470. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_s3_json.py +0 -0
  471. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_s3_json_complex.py +0 -0
  472. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_s3_json_multiple_models.py +0 -0
  473. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_server_not_found.py +0 -0
  474. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_snowflake.py +0 -0
  475. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_soda_connection_error.py +0 -0
  476. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_sqlserver.py +0 -0
  477. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_trino.py +0 -0
  478. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_test_variables.py +0 -0
  479. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_type_normalize.py +0 -0
  480. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_untrusted_contract_variables.py +0 -0
  481. {datacontract_cli-1.2.2 → datacontract_cli-1.2.4}/tests/test_vector_type.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacontract-cli
3
- Version: 1.2.2
3
+ Version: 1.2.4
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@entropy-data.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@entropy-data.com>
6
6
  License-Expression: MIT
@@ -40,7 +40,7 @@ Requires-Dist: jsonschema<5.0.0,>=4.23.0
40
40
  Requires-Dist: pytz>=2024.1
41
41
  Requires-Dist: python-multipart<1.0.0,>=0.0.20
42
42
  Requires-Dist: rich<16.0,>=13.7
43
- Requires-Dist: sqlglot<30.18,>=26.6.0
43
+ Requires-Dist: sqlglot<31.0.0,>=26.6.0
44
44
  Requires-Dist: python-dotenv<2.0.0,>=1.0.0
45
45
  Requires-Dist: boto3<2.0.0,>=1.34.41
46
46
  Requires-Dist: Jinja2<4.0.0,>=3.1.5
@@ -52,6 +52,9 @@ Provides-Extra: avro
52
52
  Requires-Dist: avro==1.12.2; extra == "avro"
53
53
  Provides-Extra: bigquery
54
54
  Requires-Dist: ibis-framework[bigquery]<13.0.0,>=10.0.0; extra == "bigquery"
55
+ Provides-Extra: clickhouse
56
+ Requires-Dist: ibis-framework[clickhouse]<13.0.0,>=10.0.0; extra == "clickhouse"
57
+ Requires-Dist: packaging<27.0,>=21.3; extra == "clickhouse"
55
58
  Provides-Extra: csv
56
59
  Requires-Dist: datacontract-cli[duckdb]; extra == "csv"
57
60
  Provides-Extra: excel
@@ -66,8 +69,8 @@ Requires-Dist: pyarrow-hotfix>=0.4; extra == "dataframe"
66
69
  Requires-Dist: rich>=12.4.4; extra == "dataframe"
67
70
  Provides-Extra: databricks
68
71
  Requires-Dist: ibis-framework[databricks]<13.0.0,>=10.0.0; extra == "databricks"
69
- Requires-Dist: databricks-sql-connector<4.6.0,>=3.7.0; extra == "databricks"
70
- Requires-Dist: databricks-sdk<0.140.0; extra == "databricks"
72
+ Requires-Dist: databricks-sql-connector<4.7.0,>=3.7.0; extra == "databricks"
73
+ Requires-Dist: databricks-sdk<0.143.0; extra == "databricks"
71
74
  Requires-Dist: packaging<27.0,>=21.3; extra == "databricks"
72
75
  Provides-Extra: databricks-runtime
73
76
  Requires-Dist: datacontract-cli[databricks]; extra == "databricks-runtime"
@@ -101,7 +104,7 @@ Requires-Dist: duckdb-extension-azure<1.6.0,>=1.5.0; extra == "azure"
101
104
  Requires-Dist: azure-identity<1.26,>=1.17.1; extra == "azure"
102
105
  Requires-Dist: azure-storage-blob<12.31,>=12.24; extra == "azure"
103
106
  Provides-Extra: snowflake
104
- Requires-Dist: snowflake-connector-python[pandas]<4.8,>=3.6; extra == "snowflake"
107
+ Requires-Dist: snowflake-connector-python[pandas]<4.9,>=3.6; extra == "snowflake"
105
108
  Requires-Dist: ibis-framework[snowflake]<13.0.0,>=10.0.0; extra == "snowflake"
106
109
  Provides-Extra: sqlserver
107
110
  Requires-Dist: ibis-framework[mssql]<13.0.0,>=10.0.0; extra == "sqlserver"
@@ -125,6 +128,9 @@ Requires-Dist: packaging<27.0,>=21.3; extra == "trino"
125
128
  Provides-Extra: impala
126
129
  Requires-Dist: ibis-framework[impala]<13.0.0,>=10.0.0; extra == "impala"
127
130
  Requires-Dist: packaging<27.0,>=21.3; extra == "impala"
131
+ Provides-Extra: hive
132
+ Requires-Dist: ibis-framework[impala]<13.0.0,>=10.0.0; extra == "hive"
133
+ Requires-Dist: packaging<27.0,>=21.3; extra == "hive"
128
134
  Provides-Extra: dbml
129
135
  Requires-Dist: pydbml>=1.1.1; extra == "dbml"
130
136
  Provides-Extra: duckdb
@@ -135,12 +141,14 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
135
141
  Provides-Extra: rdf
136
142
  Requires-Dist: rdflib==7.6.0; extra == "rdf"
137
143
  Provides-Extra: api
138
- Requires-Dist: fastapi<0.142.0,>=0.115.0; extra == "api"
139
- Requires-Dist: uvicorn<0.54.0,>=0.44.0; extra == "api"
144
+ Requires-Dist: fastapi<0.143.0,>=0.115.0; extra == "api"
145
+ Requires-Dist: uvicorn<0.55.0,>=0.44.0; extra == "api"
140
146
  Provides-Extra: protobuf
141
147
  Requires-Dist: proto-schema-parser<3.0,>=1.0; extra == "protobuf"
148
+ Provides-Extra: xml
149
+ Requires-Dist: xmlschema<5.0,>=4.0; extra == "xml"
142
150
  Provides-Extra: all
143
- Requires-Dist: datacontract-cli[api,athena,avro,azure,bigquery,csv,databricks,dataframe,dbml,duckdb,exasol,excel,gcs,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino]; extra == "all"
151
+ Requires-Dist: datacontract-cli[api,athena,avro,azure,bigquery,clickhouse,csv,databricks,dataframe,dbml,duckdb,exasol,excel,gcs,hive,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino,xml]; extra == "all"
144
152
  Provides-Extra: dev
145
153
  Requires-Dist: datacontract-cli[all]; extra == "dev"
146
154
  Requires-Dist: httpx==0.28.1; extra == "dev"
@@ -153,10 +161,10 @@ Requires-Dist: pre-commit<4.7.0,>=3.7.1; extra == "dev"
153
161
  Requires-Dist: pytest; extra == "dev"
154
162
  Requires-Dist: pytest-cov; extra == "dev"
155
163
  Requires-Dist: pytest-xdist; extra == "dev"
156
- Requires-Dist: pymssql==2.4.1; extra == "dev"
164
+ Requires-Dist: pymssql==2.4.2; extra == "dev"
157
165
  Requires-Dist: psycopg2-binary<3.0,>=2.9; extra == "dev"
158
166
  Requires-Dist: mysql-connector-python<26.8.0,>=8.0.30; extra == "dev"
159
- Requires-Dist: ruff==0.16.8; extra == "dev"
167
+ Requires-Dist: ruff==0.16.10; extra == "dev"
160
168
  Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.15.0; extra == "dev"
161
169
  Requires-Dist: trino==0.339.0; extra == "dev"
162
170
  Dynamic: license-file
@@ -186,7 +194,7 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
186
194
  >
187
195
  > Quick links: [Quickstart](https://docs.datacontract.com/quickstart) · [Commands](https://docs.datacontract.com/commands) · [Best Practices](https://docs.datacontract.com/best-practices) · [Custom Export and Import](https://docs.datacontract.com/extending) · [Release Notes](https://docs.datacontract.com/release-notes) · [Development Setup](#development-setup)
188
196
  >
189
- > For LLMs: [cli.datacontract.com/llms.txt](https://cli.datacontract.com/llms.txt) · [docs.datacontract.com/llms.txt](https://docs.datacontract.com/llms.txt) · [docs.datacontract.com/llms-full.txt](https://docs.datacontract.com/llms-full.txt)
197
+ > For LLMs: [docs.datacontract.com/llms.txt](https://docs.datacontract.com/llms.txt) · [docs.datacontract.com/llms-full.txt](https://docs.datacontract.com/llms-full.txt)
190
198
 
191
199
  ## Getting started
192
200
 
@@ -214,36 +222,41 @@ $ datacontract test https://datacontract.com/orders-v1.odcs.yaml
214
222
  # returns:
215
223
  Testing https://datacontract.com/orders-v1.odcs.yaml
216
224
  Server: production (type=postgres, host=aws-1-eu-central-2.pooler.supabase.com, port=6543, database=postgres, schema=dp_orders_v1)
217
- ╭────────┬──────────────────────────────────────────────────────────┬─────────────────────────┬─────────╮
218
- │ Result │ Check │ Field │ Details │
219
- ├────────┼──────────────────────────────────────────────────────────┼─────────────────────────┼─────────┤
220
- │ passed │ Check that field 'line_item_id' is present │ line_items.line_item_id │ │
221
- │ passed │ Check that field line_item_id has type UUID │ line_items.line_item_id │ │
222
- │ passed │ Check that field line_item_id has no missing values │ line_items.line_item_id │ │
223
- │ passed │ Check that field 'order_id' is present │ line_items.order_id │ │
224
- │ passed │ Check that field order_id has type UUID │ line_items.order_id │ │
225
- │ passed │ Check that field 'price' is present │ line_items.price │ │
226
- │ passed │ Check that field price has type INTEGER │ line_items.price │ │
227
- │ passed │ Check that field price has no missing values │ line_items.price │ │
228
- │ passed │ Check that field 'sku' is present │ line_items.sku │ │
229
- │ passed │ Check that field sku has type TEXT │ line_items.sku │ │
230
- │ passed │ Check that field sku has no missing values │ line_items.sku │ │
231
- │ passed │ Check that field 'customer_id' is present │ orders.customer_id │ │
232
- │ passed │ Check that field customer_id has type TEXT │ orders.customer_id │ │
233
- │ passed │ Check that field customer_id has no missing values │ orders.customer_id │ │
234
- │ passed │ Check that field 'order_id' is present │ orders.order_id │ │
235
- │ passed │ Check that field order_id has type UUID │ orders.order_id │ │
236
- │ passed │ Check that field order_id has no missing values │ orders.order_id │ │
237
- │ passed │ Check that unique field order_id has no duplicate values │ orders.order_id │ │
238
- │ passed │ Check that field 'order_status' is present │ orders.order_status │ │
239
- │ passed │ Check that field order_status has type TEXT │ orders.order_status │ │
240
- │ passed │ Check that field 'order_timestamp' is present │ orders.order_timestamp │ │
241
- │ passed │ Check that field order_timestamp has type TIMESTAMPTZ │ orders.order_timestamp │ │
242
- │ passed │ Check that field 'order_total' is present │ orders.order_total │ │
243
- │ passed │ Check that field order_total has type INTEGER │ orders.order_total │ │
244
- │ passed │ Check that field order_total has no missing values │ orders.order_total │ │
245
- ╰────────┴──────────────────────────────────────────────────────────┴─────────────────────────┴─────────╯
246
- 🟢 data contract is valid. Run 25 checks. Took 3.938887 seconds.
225
+ ╭────────┬───────────────────────────────────────────────────────────────────┬─────────────────────────┬─────────╮
226
+ │ Result │ Check │ Field │ Details │
227
+ ├────────┼───────────────────────────────────────────────────────────────────┼─────────────────────────┼─────────┤
228
+ │ passed │ Check that field 'line_item_id' is present │ line_items.line_item_id │ │
229
+ │ passed │ Check that field line_item_id has physical type UUID │ line_items.line_item_id │ │
230
+ │ passed │ Check that field line_item_id has no missing values │ line_items.line_item_id │ │
231
+ │ passed │ Check that primary key field line_item_id has no duplicate values │ line_items.line_item_id │ │
232
+ │ passed │ Check that field 'order_id' is present │ line_items.order_id │ │
233
+ │ passed │ Check that field order_id has physical type UUID │ line_items.order_id │ │
234
+ │ passed │ Check that field 'price' is present │ line_items.price │ │
235
+ │ passed │ Check that field price has physical type INTEGER │ line_items.price │ │
236
+ │ passed │ Check that field price has no missing values │ line_items.price │ │
237
+ │ passed │ Check that field 'sku' is present │ line_items.sku │ │
238
+ │ passed │ Check that field sku has physical type TEXT │ line_items.sku │ │
239
+ │ passed │ Check that field sku has no missing values │ line_items.sku │ │
240
+ │ passed │ Check that model orders has row_count > 100000 │ orders │ │
241
+ │ passed │ Check that field 'customer_id' is present │ orders.customer_id │ │
242
+ │ passed │ Check that field customer_id has physical type TEXT │ orders.customer_id │ │
243
+ │ passed │ Check that field customer_id has no missing values │ orders.customer_id │ │
244
+ │ passed │ Check that field customer_id has a min length of 10 │ orders.customer_id │ │
245
+ │ passed │ Check that field customer_id has a max length of 10 │ orders.customer_id │ │
246
+ │ passed │ Check that field 'order_id' is present │ orders.order_id │ │
247
+ │ passed │ Check that field order_id has physical type UUID │ orders.order_id │ │
248
+ │ passed │ Check that field order_id has no missing values │ orders.order_id │ │
249
+ │ passed │ Check that unique field order_id has no duplicate values │ orders.order_id │ │
250
+ │ passed │ Check that field 'order_status' is present │ orders.order_status │ │
251
+ │ passed │ Check that field order_status has physical type TEXT │ orders.order_status │ │
252
+ │ passed │ Check that field order_status has invalid_count = 0 │ orders.order_status │ │
253
+ │ passed │ Check that field 'order_timestamp' is present │ orders.order_timestamp │ │
254
+ │ passed │ Check that field order_timestamp has physical type TIMESTAMPTZ │ orders.order_timestamp │ │
255
+ │ passed │ Check that field 'order_total' is present │ orders.order_total │ │
256
+ │ passed │ Check that field order_total has physical type INTEGER │ orders.order_total │ │
257
+ │ passed │ Check that field order_total has no missing values │ orders.order_total │ │
258
+ ╰────────┴───────────────────────────────────────────────────────────────────┴─────────────────────────┴─────────╯
259
+ 🟢 Data contract is valid. Ran 30 checks. Took 2.504495 seconds.
247
260
  ```
248
261
 
249
262
  Voilà, the CLI tested that the YAML itself is valid, all records comply with the schema, and all quality attributes are met.
@@ -342,7 +355,7 @@ if not run.has_passed():
342
355
  ## How to
343
356
 
344
357
  - [How to integrate Data Contract CLI in your CI/CD pipeline as a GitHub Action](https://github.com/datacontract/datacontract-action/)
345
- - [How to run the Data Contract CLI API to test data contracts with POST requests](https://cli.datacontract.com/API)
358
+ - [How to run the Data Contract CLI API to test data contracts with POST requests](https://docs.datacontract.com/api)
346
359
  - [How to run Data Contract CLI in a Databricks pipeline](https://www.datamesh-architecture.com/howto/build-a-dataproduct-with-databricks#test-the-data-product)
347
360
 
348
361
 
@@ -363,11 +376,11 @@ uv tool install --python python3.11 --upgrade 'datacontract-cli[all]'
363
376
  If you have [uv](https://docs.astral.sh/uv/) installed, you can run datacontract-cli directly without installing:
364
377
 
365
378
  ```
366
- uv run --with 'datacontract-cli[all]' datacontract --version
379
+ uvx --from 'datacontract-cli[all]' datacontract --version
367
380
  ```
368
381
 
369
382
  ### pip
370
- Python 3.10, 3.11, and 3.12 are supported. We recommend using Python 3.11.
383
+ Python 3.10–3.14 are supported. We recommend using Python 3.11.
371
384
 
372
385
  ```bash
373
386
  python3 -m pip install 'datacontract-cli[all]'
@@ -456,6 +469,7 @@ A list of available extras:
456
469
  | Snowflake | `pip install datacontract-cli[snowflake]` |
457
470
  | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
458
471
  | Trino | `pip install datacontract-cli[trino]` |
472
+ | XML Schema (import) | `pip install datacontract-cli[xml]` |
459
473
 
460
474
 
461
475
  ## Documentation
@@ -23,7 +23,7 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
23
23
  >
24
24
  > Quick links: [Quickstart](https://docs.datacontract.com/quickstart) · [Commands](https://docs.datacontract.com/commands) · [Best Practices](https://docs.datacontract.com/best-practices) · [Custom Export and Import](https://docs.datacontract.com/extending) · [Release Notes](https://docs.datacontract.com/release-notes) · [Development Setup](#development-setup)
25
25
  >
26
- > For LLMs: [cli.datacontract.com/llms.txt](https://cli.datacontract.com/llms.txt) · [docs.datacontract.com/llms.txt](https://docs.datacontract.com/llms.txt) · [docs.datacontract.com/llms-full.txt](https://docs.datacontract.com/llms-full.txt)
26
+ > For LLMs: [docs.datacontract.com/llms.txt](https://docs.datacontract.com/llms.txt) · [docs.datacontract.com/llms-full.txt](https://docs.datacontract.com/llms-full.txt)
27
27
 
28
28
  ## Getting started
29
29
 
@@ -51,36 +51,41 @@ $ datacontract test https://datacontract.com/orders-v1.odcs.yaml
51
51
  # returns:
52
52
  Testing https://datacontract.com/orders-v1.odcs.yaml
53
53
  Server: production (type=postgres, host=aws-1-eu-central-2.pooler.supabase.com, port=6543, database=postgres, schema=dp_orders_v1)
54
- ╭────────┬──────────────────────────────────────────────────────────┬─────────────────────────┬─────────╮
55
- │ Result │ Check │ Field │ Details │
56
- ├────────┼──────────────────────────────────────────────────────────┼─────────────────────────┼─────────┤
57
- │ passed │ Check that field 'line_item_id' is present │ line_items.line_item_id │ │
58
- │ passed │ Check that field line_item_id has type UUID │ line_items.line_item_id │ │
59
- │ passed │ Check that field line_item_id has no missing values │ line_items.line_item_id │ │
60
- │ passed │ Check that field 'order_id' is present │ line_items.order_id │ │
61
- │ passed │ Check that field order_id has type UUID │ line_items.order_id │ │
62
- │ passed │ Check that field 'price' is present │ line_items.price │ │
63
- │ passed │ Check that field price has type INTEGER │ line_items.price │ │
64
- │ passed │ Check that field price has no missing values │ line_items.price │ │
65
- │ passed │ Check that field 'sku' is present │ line_items.sku │ │
66
- │ passed │ Check that field sku has type TEXT │ line_items.sku │ │
67
- │ passed │ Check that field sku has no missing values │ line_items.sku │ │
68
- │ passed │ Check that field 'customer_id' is present │ orders.customer_id │ │
69
- │ passed │ Check that field customer_id has type TEXT │ orders.customer_id │ │
70
- │ passed │ Check that field customer_id has no missing values │ orders.customer_id │ │
71
- │ passed │ Check that field 'order_id' is present │ orders.order_id │ │
72
- │ passed │ Check that field order_id has type UUID │ orders.order_id │ │
73
- │ passed │ Check that field order_id has no missing values │ orders.order_id │ │
74
- │ passed │ Check that unique field order_id has no duplicate values │ orders.order_id │ │
75
- │ passed │ Check that field 'order_status' is present │ orders.order_status │ │
76
- │ passed │ Check that field order_status has type TEXT │ orders.order_status │ │
77
- │ passed │ Check that field 'order_timestamp' is present │ orders.order_timestamp │ │
78
- │ passed │ Check that field order_timestamp has type TIMESTAMPTZ │ orders.order_timestamp │ │
79
- │ passed │ Check that field 'order_total' is present │ orders.order_total │ │
80
- │ passed │ Check that field order_total has type INTEGER │ orders.order_total │ │
81
- │ passed │ Check that field order_total has no missing values │ orders.order_total │ │
82
- ╰────────┴──────────────────────────────────────────────────────────┴─────────────────────────┴─────────╯
83
- 🟢 data contract is valid. Run 25 checks. Took 3.938887 seconds.
54
+ ╭────────┬───────────────────────────────────────────────────────────────────┬─────────────────────────┬─────────╮
55
+ │ Result │ Check │ Field │ Details │
56
+ ├────────┼───────────────────────────────────────────────────────────────────┼─────────────────────────┼─────────┤
57
+ │ passed │ Check that field 'line_item_id' is present │ line_items.line_item_id │ │
58
+ │ passed │ Check that field line_item_id has physical type UUID │ line_items.line_item_id │ │
59
+ │ passed │ Check that field line_item_id has no missing values │ line_items.line_item_id │ │
60
+ │ passed │ Check that primary key field line_item_id has no duplicate values │ line_items.line_item_id │ │
61
+ │ passed │ Check that field 'order_id' is present │ line_items.order_id │ │
62
+ │ passed │ Check that field order_id has physical type UUID │ line_items.order_id │ │
63
+ │ passed │ Check that field 'price' is present │ line_items.price │ │
64
+ │ passed │ Check that field price has physical type INTEGER │ line_items.price │ │
65
+ │ passed │ Check that field price has no missing values │ line_items.price │ │
66
+ │ passed │ Check that field 'sku' is present │ line_items.sku │ │
67
+ │ passed │ Check that field sku has physical type TEXT │ line_items.sku │ │
68
+ │ passed │ Check that field sku has no missing values │ line_items.sku │ │
69
+ │ passed │ Check that model orders has row_count > 100000 │ orders │ │
70
+ │ passed │ Check that field 'customer_id' is present │ orders.customer_id │ │
71
+ │ passed │ Check that field customer_id has physical type TEXT │ orders.customer_id │ │
72
+ │ passed │ Check that field customer_id has no missing values │ orders.customer_id │ │
73
+ │ passed │ Check that field customer_id has a min length of 10 │ orders.customer_id │ │
74
+ │ passed │ Check that field customer_id has a max length of 10 │ orders.customer_id │ │
75
+ │ passed │ Check that field 'order_id' is present │ orders.order_id │ │
76
+ │ passed │ Check that field order_id has physical type UUID │ orders.order_id │ │
77
+ │ passed │ Check that field order_id has no missing values │ orders.order_id │ │
78
+ │ passed │ Check that unique field order_id has no duplicate values │ orders.order_id │ │
79
+ │ passed │ Check that field 'order_status' is present │ orders.order_status │ │
80
+ │ passed │ Check that field order_status has physical type TEXT │ orders.order_status │ │
81
+ │ passed │ Check that field order_status has invalid_count = 0 │ orders.order_status │ │
82
+ │ passed │ Check that field 'order_timestamp' is present │ orders.order_timestamp │ │
83
+ │ passed │ Check that field order_timestamp has physical type TIMESTAMPTZ │ orders.order_timestamp │ │
84
+ │ passed │ Check that field 'order_total' is present │ orders.order_total │ │
85
+ │ passed │ Check that field order_total has physical type INTEGER │ orders.order_total │ │
86
+ │ passed │ Check that field order_total has no missing values │ orders.order_total │ │
87
+ ╰────────┴───────────────────────────────────────────────────────────────────┴─────────────────────────┴─────────╯
88
+ 🟢 Data contract is valid. Ran 30 checks. Took 2.504495 seconds.
84
89
  ```
85
90
 
86
91
  Voilà, the CLI tested that the YAML itself is valid, all records comply with the schema, and all quality attributes are met.
@@ -179,7 +184,7 @@ if not run.has_passed():
179
184
  ## How to
180
185
 
181
186
  - [How to integrate Data Contract CLI in your CI/CD pipeline as a GitHub Action](https://github.com/datacontract/datacontract-action/)
182
- - [How to run the Data Contract CLI API to test data contracts with POST requests](https://cli.datacontract.com/API)
187
+ - [How to run the Data Contract CLI API to test data contracts with POST requests](https://docs.datacontract.com/api)
183
188
  - [How to run Data Contract CLI in a Databricks pipeline](https://www.datamesh-architecture.com/howto/build-a-dataproduct-with-databricks#test-the-data-product)
184
189
 
185
190
 
@@ -200,11 +205,11 @@ uv tool install --python python3.11 --upgrade 'datacontract-cli[all]'
200
205
  If you have [uv](https://docs.astral.sh/uv/) installed, you can run datacontract-cli directly without installing:
201
206
 
202
207
  ```
203
- uv run --with 'datacontract-cli[all]' datacontract --version
208
+ uvx --from 'datacontract-cli[all]' datacontract --version
204
209
  ```
205
210
 
206
211
  ### pip
207
- Python 3.10, 3.11, and 3.12 are supported. We recommend using Python 3.11.
212
+ Python 3.10–3.14 are supported. We recommend using Python 3.11.
208
213
 
209
214
  ```bash
210
215
  python3 -m pip install 'datacontract-cli[all]'
@@ -293,6 +298,7 @@ A list of available extras:
293
298
  | Snowflake | `pip install datacontract-cli[snowflake]` |
294
299
  | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
295
300
  | Trino | `pip install datacontract-cli[trino]` |
301
+ | XML Schema (import) | `pip install datacontract-cli[xml]` |
296
302
 
297
303
 
298
304
  ## Documentation
@@ -449,7 +449,8 @@ def config_from_headers(headers) -> "Config | None":
449
449
  → ``DATACONTRACT_SNOWFLAKE_PASSWORD``, ``entropy-data-api-key`` →
450
450
  ``ENTROPY_DATA_API_KEY``. Returns None when no config headers are present,
451
451
  so env-var-configured deployments behave exactly as before. Unknown
452
- ``datacontract-*`` option names are rejected with a 400.
452
+ ``datacontract-*`` option names are rejected with a 400, and so is the
453
+ custom quality checks folder.
453
454
  """
454
455
  known = known_env_names()
455
456
  values = {}
@@ -457,6 +458,12 @@ def config_from_headers(headers) -> "Config | None":
457
458
  lowered = name.lower()
458
459
  env = lowered.upper().replace("-", "_")
459
460
  if lowered.startswith(_CONFIG_HEADER_PREFIX) or env in known:
461
+ if env == "DATACONTRACT_CUSTOM_QUALITY_CHECKS":
462
+ # A folder on the server's disk is the operator's to choose, never the caller's.
463
+ raise HTTPException(
464
+ status_code=status.HTTP_400_BAD_REQUEST,
465
+ detail="The custom quality checks folder is configured by the API server, not per request.",
466
+ )
460
467
  values[env] = value
461
468
  if not values:
462
469
  return None
@@ -502,6 +509,8 @@ _ENVIRONMENT_CREDENTIAL_TARGETS: dict[str, tuple[str, str | None, tuple[str, ...
502
509
  "impala": ("host", "impala_host", ("impala_password",)),
503
510
  "trino": ("host", "trino_host", ("trino_password",)),
504
511
  "exasol": ("host", "exasol_host", ("exasol_password",)),
512
+ "clickhouse": ("host", "clickhouse_host", ("clickhouse_password",)),
513
+ "hive": ("host", "hive_host", ("hive_password",)),
505
514
  "redshift": ("host", "redshift_host", ("redshift_password",)),
506
515
  "sqlserver": ("host", "sqlserver_host", ("sqlserver_password",)),
507
516
  "snowflake": (
@@ -15,7 +15,7 @@ from rich.markup import escape
15
15
  from typer.core import TyperGroup
16
16
  from typing_extensions import Annotated
17
17
 
18
- from datacontract.config import Config, set_cli_config
18
+ from datacontract.config import Config, cli_config, set_cli_config
19
19
  from datacontract.output.output_format import OutputFormat
20
20
 
21
21
  console = Console()
@@ -31,6 +31,23 @@ inline_references_option = Annotated[
31
31
  ),
32
32
  ]
33
33
 
34
+ custom_quality_checks_option = Annotated[
35
+ Optional[Path],
36
+ typer.Option(
37
+ metavar="DIR",
38
+ help="Folder with the custom quality checks the contract's quality rules use, one YAML file per check. "
39
+ "Defaults to DATACONTRACT_CUSTOM_QUALITY_CHECKS.",
40
+ ),
41
+ ]
42
+
43
+
44
+ def config_with_custom_quality_checks(custom_quality_checks: Optional[Path]) -> Config | None:
45
+ """The --config-file config, with the --custom-quality-checks folder if one was given."""
46
+ config = cli_config()
47
+ if custom_quality_checks is None:
48
+ return config
49
+ return Config.resolve(config).model_copy(update={"custom_quality_checks": str(custom_quality_checks)})
50
+
34
51
 
35
52
  # Order in which top-level commands appear in `datacontract --help` (cf. README.md)
36
53
  COMMAND_ORDER = [
@@ -130,6 +147,8 @@ app = typer.Typer(
130
147
  cls=OrderedCommandsWithMigrationHints,
131
148
  no_args_is_help=True,
132
149
  add_completion=False,
150
+ # the locals of a --debug traceback can hold credentials
151
+ pretty_exceptions_show_locals=False,
133
152
  help="CLI to manage data contracts. Documentation: https://docs.datacontract.com",
134
153
  epilog="Read the full documentation at https://docs.datacontract.com",
135
154
  )
@@ -10,14 +10,15 @@ from datacontract.cli import (
10
10
  _print_logs,
11
11
  _print_publish_failure,
12
12
  app,
13
+ config_with_custom_quality_checks,
13
14
  console,
15
+ custom_quality_checks_option,
14
16
  debug_option,
15
17
  enable_debug_logging,
16
18
  inline_references_option,
17
19
  resolve_output_format,
18
20
  validate_publish_url,
19
21
  )
20
- from datacontract.config import cli_config
21
22
  from datacontract.data_contract import DataContract
22
23
  from datacontract.output.ci_output import write_ci_output, write_ci_summary, write_json_results
23
24
  from datacontract.output.output_format import OutputFormat
@@ -80,6 +81,7 @@ def ci(
80
81
  bool,
81
82
  typer.Option(help="SSL verification when publishing the data contract."),
82
83
  ] = True,
84
+ custom_quality_checks: custom_quality_checks_option = None,
83
85
  inline_references: inline_references_option = True,
84
86
  debug: debug_option = None,
85
87
  ):
@@ -104,6 +106,7 @@ def ci(
104
106
  # Plain text output for CI logs; --json sends human output to stderr.
105
107
  out = Console(stderr=True, no_color=True) if json_output else Console(no_color=True)
106
108
 
109
+ config = config_with_custom_quality_checks(custom_quality_checks)
107
110
  results = []
108
111
  fail_results = {
109
112
  "warning": {"warning", "failed", "error"},
@@ -115,7 +118,7 @@ def ci(
115
118
  for location in locations:
116
119
  out.print(f"Testing {location}")
117
120
  run = DataContract(
118
- config=cli_config(),
121
+ config=config,
119
122
  data_contract_file=location,
120
123
  schema_location=schema,
121
124
  publish_url=publish,
@@ -336,7 +336,7 @@ def edit(
336
336
  The server also acts as the editor's test runner: "Run test" in the editor executes
337
337
  the data contract tests locally against the servers defined in the data contract.
338
338
  Credentials for the data sources must be provided as environment variables, see
339
- https://cli.datacontract.com/#test
339
+ https://docs.datacontract.com/testing
340
340
  """
341
341
  enable_debug_logging(debug)
342
342
 
@@ -306,6 +306,24 @@ def export_jsonschema(
306
306
  _export(ExportFormat.jsonschema, location, output, server, schema_name, schema, inline_references=inline_references)
307
307
 
308
308
 
309
+ @export_app.command(
310
+ name="xsd",
311
+ epilog="Example: datacontract export xsd datacontract.yaml --output schema.xsd",
312
+ )
313
+ def export_xsd(
314
+ location: location_arg = "datacontract.yaml",
315
+ output: output_option = None,
316
+ server: server_option = None,
317
+ schema_name: schema_name_option = "all",
318
+ schema: schema_option = None,
319
+ inline_references: inline_references_option = True,
320
+ debug: debug_option = None,
321
+ ):
322
+ """Export a data contract to an XML Schema (XSD)."""
323
+ enable_debug_logging(debug)
324
+ _export(ExportFormat.xsd, location, output, server, schema_name, schema, inline_references=inline_references)
325
+
326
+
309
327
  @export_app.command(
310
328
  name="pydantic-model",
311
329
  epilog="Example: datacontract export pydantic-model datacontract.yaml --output models.py",
@@ -316,6 +316,26 @@ def import_jsonschema(
316
316
  _write_result(result, output)
317
317
 
318
318
 
319
+ @import_app.command(
320
+ name="xsd",
321
+ epilog="Example: datacontract import xsd --source schema.xsd --output datacontract.yaml",
322
+ )
323
+ def import_xsd(
324
+ source: Annotated[Optional[str], typer.Option(help="Path to the XML Schema (XSD) file.")] = None,
325
+ output: output_option = None,
326
+ schema: schema_option = None,
327
+ owner: owner_option = None,
328
+ id: id_option = None,
329
+ debug: debug_option = None,
330
+ ):
331
+ """Import a data contract from an XML Schema (XSD) file."""
332
+ enable_debug_logging(debug)
333
+ result = DataContract.import_from_source(
334
+ config=cli_config(), format="xsd", source=source, schema=schema, owner=owner, id=id
335
+ )
336
+ _write_result(result, output)
337
+
338
+
319
339
  @import_app.command(
320
340
  name="json",
321
341
  epilog="Example: datacontract import json --source data.json --output datacontract.yaml",
@@ -835,6 +855,70 @@ def import_mysql(
835
855
  _write_result(result, output)
836
856
 
837
857
 
858
+ @import_app.command(
859
+ name="clickhouse",
860
+ epilog="Example: datacontract import clickhouse --source localhost --database default --output datacontract.yaml",
861
+ )
862
+ def import_clickhouse(
863
+ source: Annotated[Optional[str], typer.Option(help="The host of the ClickHouse server.")] = None,
864
+ port: Annotated[Optional[int], typer.Option(help="The ClickHouse HTTP port (default 8123).")] = None,
865
+ database: database_option = None,
866
+ table: Annotated[
867
+ Optional[List[str]],
868
+ typer.Option(help="Name of a table to import (repeat for multiple tables, omit for all tables)."),
869
+ ] = None,
870
+ output: output_option = None,
871
+ owner: owner_option = None,
872
+ id: id_option = None,
873
+ debug: debug_option = None,
874
+ ):
875
+ """Import a data contract from a ClickHouse database."""
876
+ enable_debug_logging(debug)
877
+ result = DataContract.import_from_source(
878
+ config=cli_config(),
879
+ format="clickhouse",
880
+ source=source,
881
+ port=port,
882
+ database=database,
883
+ clickhouse_table=table,
884
+ owner=owner,
885
+ id=id,
886
+ )
887
+ _write_result(result, output)
888
+
889
+
890
+ @import_app.command(
891
+ name="hive",
892
+ epilog="Example: datacontract import hive --source localhost --database default --output datacontract.yaml",
893
+ )
894
+ def import_hive(
895
+ source: Annotated[Optional[str], typer.Option(help="The host of the HiveServer2.")] = None,
896
+ port: Annotated[Optional[int], typer.Option(help="The HiveServer2 port (default 10000).")] = None,
897
+ database: database_option = None,
898
+ table: Annotated[
899
+ Optional[List[str]],
900
+ typer.Option(help="Name of a table to import (repeat for multiple tables, omit for all tables)."),
901
+ ] = None,
902
+ output: output_option = None,
903
+ owner: owner_option = None,
904
+ id: id_option = None,
905
+ debug: debug_option = None,
906
+ ):
907
+ """Import a data contract from a Hive database."""
908
+ enable_debug_logging(debug)
909
+ result = DataContract.import_from_source(
910
+ config=cli_config(),
911
+ format="hive",
912
+ source=source,
913
+ port=port,
914
+ database=database,
915
+ hive_table=table,
916
+ owner=owner,
917
+ id=id,
918
+ )
919
+ _write_result(result, output)
920
+
921
+
838
922
  @import_app.command(
839
923
  name="s3",
840
924
  epilog="Example: datacontract import s3 --source s3://my-bucket/orders/*.json --output datacontract.yaml",
@@ -958,3 +1042,29 @@ def import_odata(
958
1042
  id=id,
959
1043
  )
960
1044
  _write_result(result, output)
1045
+
1046
+
1047
+ @import_app.command(
1048
+ name="openapi",
1049
+ epilog="Example: datacontract import openapi --source openapi.yaml --operation listOrders --output datacontract.yaml",
1050
+ )
1051
+ def import_openapi(
1052
+ source: Annotated[Optional[str], typer.Option(help="Path to the OpenAPI 3.x document (YAML or JSON).")] = None,
1053
+ operation: Annotated[
1054
+ Optional[str],
1055
+ typer.Option(
1056
+ help="The GET operation to import, by operationId or path (e.g. listOrders or /orders). "
1057
+ "Required when the document has more than one GET operation."
1058
+ ),
1059
+ ] = None,
1060
+ output: output_option = None,
1061
+ owner: owner_option = None,
1062
+ id: id_option = None,
1063
+ debug: debug_option = None,
1064
+ ):
1065
+ """Import a data contract from the response of a GET operation in an OpenAPI 3.x document."""
1066
+ enable_debug_logging(debug)
1067
+ result = DataContract.import_from_source(
1068
+ config=cli_config(), format="openapi", source=source, openapi_operation=operation, owner=owner, id=id
1069
+ )
1070
+ _write_result(result, output)
@@ -10,7 +10,9 @@ from datacontract.cli import (
10
10
  _print_logs,
11
11
  _print_publish_failure,
12
12
  app,
13
+ config_with_custom_quality_checks,
13
14
  console,
15
+ custom_quality_checks_option,
14
16
  debug_option,
15
17
  enable_debug_logging,
16
18
  inline_references_option,
@@ -200,6 +202,7 @@ def test(
200
202
  bool,
201
203
  typer.Option(help="SSL verification when publishing the data contract."),
202
204
  ] = True,
205
+ custom_quality_checks: custom_quality_checks_option = None,
203
206
  inline_references: inline_references_option = True,
204
207
  debug: debug_option = None,
205
208
  ):
@@ -231,7 +234,7 @@ def test(
231
234
  if server == "all":
232
235
  server = None
233
236
  run = DataContract(
234
- config=cli_config(),
237
+ config=config_with_custom_quality_checks(custom_quality_checks),
235
238
  data_contract_file=location,
236
239
  schema_location=schema,
237
240
  publish_test_results=publish_test_results,