datacontract-cli 1.2.7__tar.gz → 1.2.9__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 (489) hide show
  1. {datacontract_cli-1.2.7/datacontract_cli.egg-info → datacontract_cli-1.2.9}/PKG-INFO +34 -29
  2. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/README.md +17 -16
  3. datacontract_cli-1.2.9/datacontract/__init__.py +30 -0
  4. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/api.py +65 -21
  5. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/breaking/rules.py +227 -97
  6. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/catalog/catalog.py +1 -1
  7. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/changelog/changelog.py +7 -19
  8. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/changelog/normalize.py +74 -2
  9. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/cli.py +4 -5
  10. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_api.py +1 -1
  11. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_edit.py +59 -9
  12. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_import.py +58 -5
  13. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/config/settings.py +16 -0
  14. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/data_contract.py +4 -3
  15. datacontract_cli-1.2.9/datacontract/editor_assets/VERSION +1 -0
  16. datacontract_cli-1.2.9/datacontract/editor_assets/assets/editor.worker-4.7.0.js +33 -0
  17. datacontract_cli-1.2.9/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +476 -0
  18. datacontract_cli-1.2.9/datacontract/editor_assets/datacontract-editor-version.json +1 -0
  19. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/datacontract-editor.css +1 -1
  20. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/datacontract-editor.es.js +16121 -12358
  21. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/index.html +7 -5
  22. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/monaco-4.7.0.js +9597 -10209
  23. datacontract_cli-1.2.7/datacontract/editor_assets/rolldown-runtime-DY7j01NX.js → datacontract_cli-1.2.9/datacontract/editor_assets/rolldown-runtime-CEFd7nDs.js +2 -2
  24. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/check_spec.py +3 -0
  25. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/create_checks.py +53 -11
  26. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/custom_quality_check.py +207 -122
  27. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/data_contract_test.py +113 -51
  28. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/check_hana_execute.py +7 -1
  29. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/hana_quality_check.py +21 -7
  30. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/connect.py +24 -2
  31. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/duckdb_connection.py +118 -0
  32. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/ibis_check_execute.py +61 -21
  33. datacontract_cli-1.2.9/datacontract/engines/ibis/snowflake_nested_values.py +149 -0
  34. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/avro_exporter.py +11 -3
  35. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/excel_exporter.py +14 -15
  36. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/markdown_exporter.py +1 -1
  37. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/rdf_exporter.py +1 -1
  38. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/sodacl_check_builder.py +1 -1
  39. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/sql_exporter.py +92 -4
  40. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/avro_importer.py +8 -5
  41. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/excel_importer.py +5 -5
  42. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/odcs_importer.py +2 -1
  43. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/openapi_importer.py +86 -46
  44. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/integration/dbt_sync.py +162 -28
  45. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/integration/dbt_test_mapping.py +2 -1
  46. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/resolve.py +30 -4
  47. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/workbook.py +4 -7
  48. datacontract_cli-1.2.9/datacontract/templates/excel/odcs-template-v3.2.xlsx +0 -0
  49. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9/datacontract_cli.egg-info}/PKG-INFO +34 -29
  50. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract_cli.egg-info/SOURCES.txt +6 -1
  51. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract_cli.egg-info/requires.txt +15 -10
  52. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/pyproject.toml +24 -19
  53. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_api.py +213 -3
  54. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_breaking.py +263 -27
  55. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_changelog_engine.py +8 -0
  56. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_changelog_normalize.py +0 -10
  57. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_athena.py +1 -1
  58. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_bigquery.py +54 -2
  59. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_snowflake.py +71 -0
  60. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_sql_placeholders.py +10 -0
  61. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_custom_quality_checks.py +264 -54
  62. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_dbt_sync.py +294 -8
  63. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_docs_ordering.py +2 -2
  64. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_edit.py +20 -0
  65. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_markdown.py +12 -0
  66. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_rdf.py +18 -0
  67. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_sql.py +176 -0
  68. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_sql_clickhouse.py +37 -0
  69. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_hana_quality_check.py +35 -6
  70. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_avro.py +15 -0
  71. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_excel.py +9 -0
  72. datacontract_cli-1.2.9/tests/test_import_odcs_v3.py +30 -0
  73. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_openapi.py +47 -0
  74. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_snowflake.py +2 -1
  75. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_nested_path_checks.py +44 -2
  76. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_resolve.py +91 -1
  77. datacontract_cli-1.2.9/tests/test_test_api_endpoints.py +208 -0
  78. datacontract_cli-1.2.9/tests/test_test_local_xlsx.py +190 -0
  79. datacontract_cli-1.2.9/tests/test_test_s3_xlsx.py +43 -0
  80. datacontract_cli-1.2.7/datacontract/__init__.py +0 -17
  81. datacontract_cli-1.2.7/datacontract/editor_assets/VERSION +0 -1
  82. datacontract_cli-1.2.7/datacontract/editor_assets/assets/editor.worker-4.7.0.js +0 -33
  83. datacontract_cli-1.2.7/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +0 -452
  84. datacontract_cli-1.2.7/datacontract/templates/excel/odcs-template-v3.2.xlsx +0 -0
  85. datacontract_cli-1.2.7/tests/test_import_odcs_v3.py +0 -11
  86. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/LICENSE +0 -0
  87. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/MANIFEST.in +0 -0
  88. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/breaking/__init__.py +0 -0
  89. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/breaking/detector.py +0 -0
  90. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/changelog/__init__.py +0 -0
  91. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_breaking.py +0 -0
  92. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_catalog.py +0 -0
  93. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_changelog.py +0 -0
  94. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_ci.py +0 -0
  95. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_dbt.py +0 -0
  96. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_export.py +0 -0
  97. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_init.py +0 -0
  98. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_lint.py +0 -0
  99. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_publish.py +0 -0
  100. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/command_test.py +0 -0
  101. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/config/__init__.py +0 -0
  102. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/config/cli_context.py +0 -0
  103. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/config/variables.py +0 -0
  104. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/logo_fuchsia_v2.svg +0 -0
  105. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/odcs.svg +0 -0
  106. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/robots.txt +0 -0
  107. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/editor_assets/sitemap.xml +0 -0
  108. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/__init__.py +0 -0
  109. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/__init__.py +0 -0
  110. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/check_filter.py +0 -0
  111. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/dimensions.py +0 -0
  112. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/physical_type_match.py +0 -0
  113. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/severity.py +0 -0
  114. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/sql_guard.py +0 -0
  115. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/checks/type_normalize.py +0 -0
  116. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/datacontract/check_azure_blob_file.py +0 -0
  117. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  118. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  119. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  120. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  121. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/__init__.py +0 -0
  122. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/hana_check_selection.py +0 -0
  123. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/hana_connection.py +0 -0
  124. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/hana_schema_check.py +0 -0
  125. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/hana/hana_type_mapping.py +0 -0
  126. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/http_api.py +0 -0
  127. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/__init__.py +0 -0
  128. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/__init__.py +0 -0
  129. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/athena_patch.py +0 -0
  130. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/aws_credentials.py +0 -0
  131. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/databricks_patch.py +0 -0
  132. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/exasol_patch.py +0 -0
  133. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/hive_patch.py +0 -0
  134. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/iceberg.py +0 -0
  135. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/kafka.py +0 -0
  136. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/oracle_patch.py +0 -0
  137. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/redshift_credentials.py +0 -0
  138. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/connections/redshift_patch.py +0 -0
  139. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/dtype_category.py +0 -0
  140. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/native_type.py +0 -0
  141. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/engines/ibis/snowflake_structured_types.py +0 -0
  142. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/__init__.py +0 -0
  143. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/avro_idl_exporter.py +0 -0
  144. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/bigquery_exporter.py +0 -0
  145. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/custom_exporter.py +0 -0
  146. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/data_caterer_exporter.py +0 -0
  147. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/dbml_exporter.py +0 -0
  148. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/dbt_exporter.py +0 -0
  149. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/dcs_exporter.py +0 -0
  150. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/dqx_exporter.py +0 -0
  151. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/duckdb_type_converter.py +0 -0
  152. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/exporter.py +0 -0
  153. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/exporter_factory.py +0 -0
  154. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/go_exporter.py +0 -0
  155. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/great_expectations_exporter.py +0 -0
  156. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/html_exporter.py +0 -0
  157. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/iceberg_exporter.py +0 -0
  158. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/jsonschema_exporter.py +0 -0
  159. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/mermaid_exporter.py +0 -0
  160. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/odcs_v3_exporter.py +0 -0
  161. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/pandas_type_converter.py +0 -0
  162. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/protobuf_exporter.py +0 -0
  163. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/pydantic_exporter.py +0 -0
  164. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/sodacl_exporter.py +0 -0
  165. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/spark_exporter.py +0 -0
  166. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/sql_type_converter.py +0 -0
  167. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/sqlalchemy_exporter.py +0 -0
  168. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/export/xsd_exporter.py +0 -0
  169. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/athena_importer.py +0 -0
  170. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/bigquery_importer.py +0 -0
  171. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/clickhouse_importer.py +0 -0
  172. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/csv_importer.py +0 -0
  173. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/dbml_importer.py +0 -0
  174. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/dbt_importer.py +0 -0
  175. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/dcs_importer.py +0 -0
  176. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/glue_importer.py +0 -0
  177. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/hive_importer.py +0 -0
  178. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/iceberg_importer.py +0 -0
  179. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/importer.py +0 -0
  180. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/importer_factory.py +0 -0
  181. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/json_importer.py +0 -0
  182. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/jsonschema_importer.py +0 -0
  183. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/mysql_importer.py +0 -0
  184. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/object_storage_importer.py +0 -0
  185. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/odata_importer.py +0 -0
  186. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/odcs_helper.py +0 -0
  187. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/oracle_importer.py +0 -0
  188. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/parquet_importer.py +0 -0
  189. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/postgres_importer.py +0 -0
  190. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/powerbi_importer.py +0 -0
  191. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/protobuf_importer.py +0 -0
  192. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/pydantic_importer.py +0 -0
  193. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/redshift_importer.py +0 -0
  194. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/snowflake_importer.py +0 -0
  195. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/spark_importer.py +0 -0
  196. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/spark_type_json.py +0 -0
  197. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/sql_importer.py +0 -0
  198. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/sqlserver_importer.py +0 -0
  199. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/trino_importer.py +0 -0
  200. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/unity_importer.py +0 -0
  201. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/imports/xsd_importer.py +0 -0
  202. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/init/init_template.py +0 -0
  203. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/integration/entropy_data.py +0 -0
  204. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/constraints.py +0 -0
  205. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/files.py +0 -0
  206. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/resources.py +0 -0
  207. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/s3.py +0 -0
  208. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/schema.py +0 -0
  209. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/lint/urls.py +0 -0
  210. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/breaking.py +0 -0
  211. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/changelog.py +0 -0
  212. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/enum_values.py +0 -0
  213. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/exceptions.py +0 -0
  214. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/map_type.py +0 -0
  215. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/natural_keys.py +0 -0
  216. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/odcs.py +0 -0
  217. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/run.py +0 -0
  218. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/server.py +0 -0
  219. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/model/vector_type.py +0 -0
  220. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/__init__.py +0 -0
  221. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/ci_output.py +0 -0
  222. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/json_test_results.py +0 -0
  223. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/junit_test_results.py +0 -0
  224. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/output_format.py +0 -0
  225. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/test_results_writer.py +0 -0
  226. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/text_breaking_results.py +0 -0
  227. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/output/text_changelog_results.py +0 -0
  228. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/py.typed +0 -0
  229. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  230. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  231. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
  232. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  233. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
  234. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
  235. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
  236. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
  237. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/odcs-3.2.0.init.yaml +0 -0
  238. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/schemas/odcs-3.2.0.schema.json +0 -0
  239. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/datacontract.html +0 -0
  240. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/datacontract_odcs.html +0 -0
  241. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/excel/odcs-template-v3.0.xlsx +0 -0
  242. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/excel/odcs-template-v3.1.xlsx +0 -0
  243. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/index.html +0 -0
  244. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/macros/authoritative_definitions.html +0 -0
  245. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/macros/context.html +0 -0
  246. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/macros/schema.html +0 -0
  247. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/macros/server.html +0 -0
  248. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/macros/support.html +0 -0
  249. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/datacontract_information.html +0 -0
  250. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  251. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/datacontract_terms.html +0 -0
  252. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/definition.html +0 -0
  253. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/example.html +0 -0
  254. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/model_field.html +0 -0
  255. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/quality.html +0 -0
  256. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials/server.html +0 -0
  257. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/context.html +0 -0
  258. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/custom_properties.html +0 -0
  259. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/diagram.html +0 -0
  260. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/dialog_yaml.html +0 -0
  261. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/footer.html +0 -0
  262. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/fundamentals.html +0 -0
  263. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/header.html +0 -0
  264. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/pricing.html +0 -0
  265. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/roles.html +0 -0
  266. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/schema.html +0 -0
  267. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/servers.html +0 -0
  268. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/sla.html +0 -0
  269. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/support.html +0 -0
  270. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/team.html +0 -0
  271. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/term_of_use.html +0 -0
  272. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/partials_odcs/title.html +0 -0
  273. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract/templates/style/output.css +0 -0
  274. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  275. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract_cli.egg-info/entry_points.txt +0 -0
  276. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/datacontract_cli.egg-info/top_level.txt +0 -0
  277. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/setup.cfg +0 -0
  278. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_api_concurrency.py +0 -0
  279. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_api_openapi.py +0 -0
  280. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_breaking_odcs_3_2.py +0 -0
  281. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_catalog.py +0 -0
  282. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_changelog.py +0 -0
  283. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_changelog_output_text.py +0 -0
  284. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_check_quality_provenance.py +0 -0
  285. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_ci_output.py +0 -0
  286. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_cli.py +0 -0
  287. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_command_api.py +0 -0
  288. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_command_api_options.py +0 -0
  289. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_config.py +0 -0
  290. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_config_file.py +0 -0
  291. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_config_require.py +0 -0
  292. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_config_threading.py +0 -0
  293. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_clickhouse.py +0 -0
  294. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_databricks.py +0 -0
  295. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_exasol.py +0 -0
  296. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_hive.py +0 -0
  297. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_impala.py +0 -0
  298. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_mysql.py +0 -0
  299. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_oracle.py +0 -0
  300. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_postgres.py +0 -0
  301. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_redshift.py +0 -0
  302. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_s3_credentials.py +0 -0
  303. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_sqlserver.py +0 -0
  304. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_connect_trino.py +0 -0
  305. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_array_items.py +0 -0
  306. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_nested.py +0 -0
  307. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_nested_type.py +0 -0
  308. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_physical_type.py +0 -0
  309. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_primary_key.py +0 -0
  310. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_retention_period.py +0 -0
  311. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_create_checks_servicelevel.py +0 -0
  312. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_data_contract.py +0 -0
  313. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_data_contract_checks.py +0 -0
  314. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_data_contract_specification.py +0 -0
  315. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_dbt_test_mapping.py +0 -0
  316. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_description_linter.py +0 -0
  317. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_docs_commands.py +0 -0
  318. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_docs_config_options.py +0 -0
  319. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_download_datacontract_file.py +0 -0
  320. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_dtype_category.py +0 -0
  321. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_duckdb_json.py +0 -0
  322. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_enum_values.py +0 -0
  323. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_avro.py +0 -0
  324. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_avro_idl.py +0 -0
  325. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_bigquery.py +0 -0
  326. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_complex_data_contract.py +0 -0
  327. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_custom.py +0 -0
  328. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_custom_exporter.py +0 -0
  329. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_custom_model.py +0 -0
  330. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_data_caterer.py +0 -0
  331. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dbml.py +0 -0
  332. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dbt_models.py +0 -0
  333. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dbt_sources.py +0 -0
  334. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dbt_staging_sql.py +0 -0
  335. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dcs.py +0 -0
  336. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_dqx.py +0 -0
  337. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_excel.py +0 -0
  338. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_go.py +0 -0
  339. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_great_expectations.py +0 -0
  340. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_html.py +0 -0
  341. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_iceberg.py +0 -0
  342. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_jsonschema.py +0 -0
  343. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_large_contract.py +0 -0
  344. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_mermaid.py +0 -0
  345. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_odcs_v3.py +0 -0
  346. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_protobuf.py +0 -0
  347. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_pydantic.py +0 -0
  348. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_sodacl.py +0 -0
  349. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_spark.py +0 -0
  350. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_sql_query.py +0 -0
  351. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_sqlalchemy.py +0 -0
  352. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_export_xsd.py +0 -0
  353. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_hana_connection.py +0 -0
  354. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_hana_schema_check.py +0 -0
  355. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_hana_type_mapping.py +0 -0
  356. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_ibis_check_execute.py +0 -0
  357. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_ibis_mssql_pattern.py +0 -0
  358. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_ibis_mssql_schema.py +0 -0
  359. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_ibis_oracle_schema.py +0 -0
  360. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_athena.py +0 -0
  361. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_bigquery.py +0 -0
  362. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_clickhouse.py +0 -0
  363. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_csv.py +0 -0
  364. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_dbml.py +0 -0
  365. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_dbt.py +0 -0
  366. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_glue.py +0 -0
  367. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_hive.py +0 -0
  368. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_iceberg.py +0 -0
  369. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_json.py +0 -0
  370. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_jsonschema.py +0 -0
  371. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_mysql.py +0 -0
  372. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_object_storage.py +0 -0
  373. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_odata.py +0 -0
  374. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_oracle.py +0 -0
  375. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_parquet.py +0 -0
  376. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_postgres.py +0 -0
  377. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_powerbi.py +0 -0
  378. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_protobuf.py +0 -0
  379. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_pydantic_model.py +0 -0
  380. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_redshift.py +0 -0
  381. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_spark_type_json.py +0 -0
  382. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_clickhouse.py +0 -0
  383. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_hive.py +0 -0
  384. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_oracle.py +0 -0
  385. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_postgres.py +0 -0
  386. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_snowflake.py +0 -0
  387. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_sqlserver.py +0 -0
  388. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sql_struct.py +0 -0
  389. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_sqlserver.py +0 -0
  390. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_trino.py +0 -0
  391. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_unity_file.py +0 -0
  392. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_unmapped_types.py +0 -0
  393. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_import_xsd.py +0 -0
  394. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_install_extras.py +0 -0
  395. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_integration_entropydata.py +0 -0
  396. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_lint.py +0 -0
  397. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_lint_files.py +0 -0
  398. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_lint_odcs_3_2_constraints.py +0 -0
  399. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_lint_schema.py +0 -0
  400. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_lint_urls.py +0 -0
  401. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_map_type.py +0 -0
  402. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_metadata_fields.py +0 -0
  403. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_native_type_schema_scope.py +0 -0
  404. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_oracle_patch.py +0 -0
  405. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_physical_type_match.py +0 -0
  406. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_publish_test_results.py +0 -0
  407. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_publish_test_results_payload.py +0 -0
  408. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_quality_sql_dialects.py +0 -0
  409. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_quality_unrunnable_rules.py +0 -0
  410. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_redshift_credentials.py +0 -0
  411. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_redshift_patch.py +0 -0
  412. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_resolve_definitions.py +0 -0
  413. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_resolve_local_definitions.py +0 -0
  414. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_roundtrip_jsonschema.py +0 -0
  415. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_roundtrip_pydantic_model.py +0 -0
  416. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_roundtrip_xsd.py +0 -0
  417. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_row_filter_duplicate_count.py +0 -0
  418. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_run_check_deprecated_fields.py +0 -0
  419. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_run_check_engine.py +0 -0
  420. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_server_overrides.py +0 -0
  421. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_server_type_mssql.py +0 -0
  422. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_server_type_synonyms.py +0 -0
  423. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_servers_3_2_0.py +0 -0
  424. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_snowflake_structured_types.py +0 -0
  425. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_sql_type_converter_physicaltype.py +0 -0
  426. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_api.py +0 -0
  427. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_api_openapi_import.py +0 -0
  428. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_array_items.py +0 -0
  429. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_athena_iceberg.py +0 -0
  430. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_azure_blob_file.py +0 -0
  431. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_azure_remote.py +0 -0
  432. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_bigquery.py +0 -0
  433. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_checks_filter.py +0 -0
  434. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_clickhouse.py +0 -0
  435. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_databricks.py +0 -0
  436. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_delta.py +0 -0
  437. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_diagnostics.py +0 -0
  438. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_dimension_filter.py +0 -0
  439. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_dry_run.py +0 -0
  440. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_duckdb.py +0 -0
  441. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_failed_samples.py +0 -0
  442. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_gcs_csv_remote.py +0 -0
  443. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_gcs_json_remote.py +0 -0
  444. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_hana.py +0 -0
  445. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_hive.py +0 -0
  446. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_iceberg.py +0 -0
  447. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_iceberg_rest.py +0 -0
  448. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_iceberg_s3tables.py +0 -0
  449. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_kafka.py +0 -0
  450. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_kafka_decoding.py +0 -0
  451. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_kafka_remote.py +0 -0
  452. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_local_json.py +0 -0
  453. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_local_json_nd.py +0 -0
  454. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_local_xml.py +0 -0
  455. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_metadata_only.py +0 -0
  456. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_mysql.py +0 -0
  457. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_nested_checks.py +0 -0
  458. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_oracle.py +0 -0
  459. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_oracle_xe.py +0 -0
  460. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_output_json.py +0 -0
  461. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_output_junit.py +0 -0
  462. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_parquet.py +0 -0
  463. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_postgres.py +0 -0
  464. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_quality.py +0 -0
  465. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_quality_id_and_tag_filter.py +0 -0
  466. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_quality_local_fallback.py +0 -0
  467. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_quality_percent_severity.py +0 -0
  468. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_redshift.py +0 -0
  469. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_relationships.py +0 -0
  470. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_results_writer.py +0 -0
  471. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_row_filter.py +0 -0
  472. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_csv.py +0 -0
  473. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_delta.py +0 -0
  474. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_json.py +0 -0
  475. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_json_complex.py +0 -0
  476. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_json_multiple_files.py +0 -0
  477. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_s3_json_multiple_models.py +0 -0
  478. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_schema_evolution.py +0 -0
  479. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_server_not_found.py +0 -0
  480. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_snowflake.py +0 -0
  481. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_soda_connection_error.py +0 -0
  482. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_sqlserver.py +0 -0
  483. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_trino.py +0 -0
  484. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_test_variables.py +0 -0
  485. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_type_normalize.py +0 -0
  486. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_untrusted_contract.py +0 -0
  487. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_untrusted_contract_variables.py +0 -0
  488. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_variables.py +0 -0
  489. {datacontract_cli-1.2.7 → datacontract_cli-1.2.9}/tests/test_vector_type.py +0 -0
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacontract-cli
3
- Version: 1.2.7
3
+ Version: 1.2.9
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
7
7
  Project-URL: Homepage, https://cli.datacontract.com
8
- Project-URL: Documentation, https://docs.datacontract.com
8
+ Project-URL: Documentation, https://cli.datacontract.com
9
9
  Project-URL: Repository, https://github.com/datacontract/datacontract-cli
10
10
  Project-URL: Issues, https://github.com/datacontract/datacontract-cli/issues
11
- Project-URL: Changelog, https://docs.datacontract.com/release-notes
11
+ Project-URL: Changelog, https://cli.datacontract.com/release-notes
12
12
  Keywords: data-contract,data-contracts,odcs,open-data-contract-standard,data-quality,data-governance,data-mesh,data-product,data-engineering,schema,dbt,snowflake,databricks,bigquery
13
13
  Classifier: Development Status :: 5 - Production/Stable
14
14
  Classifier: Environment :: Console
@@ -47,7 +47,7 @@ Requires-Dist: Jinja2<4.0.0,>=3.1.5
47
47
  Requires-Dist: jinja_partials<1.0.0,>=0.2.1
48
48
  Requires-Dist: datacontract-specification<2.0.0,>=1.2.3
49
49
  Requires-Dist: open-data-contract-standard<3.3.0,>=3.2.0
50
- Requires-Dist: deepdiff<10.0.0,>=6.0.0
50
+ Requires-Dist: deepdiff<10.0.0,>=8.0.0
51
51
  Provides-Extra: avro
52
52
  Requires-Dist: avro==1.12.2; extra == "avro"
53
53
  Provides-Extra: bigquery
@@ -59,6 +59,9 @@ Provides-Extra: csv
59
59
  Requires-Dist: datacontract-cli[duckdb]; extra == "csv"
60
60
  Provides-Extra: excel
61
61
  Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == "excel"
62
+ Provides-Extra: xlsx
63
+ Requires-Dist: datacontract-cli[duckdb]; extra == "xlsx"
64
+ Requires-Dist: duckdb-extension-excel<1.6.0,>=1.5.0; extra == "xlsx"
62
65
  Provides-Extra: dataframe
63
66
  Requires-Dist: ibis-framework<13.0.0,>=10.0.0; extra == "dataframe"
64
67
  Requires-Dist: numpy<3,>=1.23.2; extra == "dataframe"
@@ -70,7 +73,7 @@ Requires-Dist: rich>=12.4.4; extra == "dataframe"
70
73
  Provides-Extra: databricks
71
74
  Requires-Dist: ibis-framework[databricks]<13.0.0,>=10.0.0; extra == "databricks"
72
75
  Requires-Dist: databricks-sql-connector<4.7.0,>=3.7.0; extra == "databricks"
73
- Requires-Dist: databricks-sdk<0.152.0; extra == "databricks"
76
+ Requires-Dist: databricks-sdk<0.157.0; extra == "databricks"
74
77
  Requires-Dist: packaging<27.0,>=21.3; extra == "databricks"
75
78
  Provides-Extra: databricks-runtime
76
79
  Requires-Dist: datacontract-cli[databricks]; extra == "databricks-runtime"
@@ -102,10 +105,11 @@ Provides-Extra: azure
102
105
  Requires-Dist: datacontract-cli[duckdb]; extra == "azure"
103
106
  Requires-Dist: duckdb-extension-azure<1.6.0,>=1.5.0; extra == "azure"
104
107
  Requires-Dist: azure-identity<1.27,>=1.17.1; extra == "azure"
105
- Requires-Dist: azure-storage-blob<12.31,>=12.24; extra == "azure"
108
+ Requires-Dist: azure-storage-blob<12.32,>=12.24; extra == "azure"
106
109
  Provides-Extra: snowflake
107
- Requires-Dist: snowflake-connector-python[pandas]<4.9,>=3.6; extra == "snowflake"
110
+ Requires-Dist: snowflake-connector-python[pandas]<5.2,>=3.17; extra == "snowflake"
108
111
  Requires-Dist: ibis-framework[snowflake]<13.0.0,>=10.0.0; extra == "snowflake"
112
+ Requires-Dist: packaging<27.0,>=21.3; extra == "snowflake"
109
113
  Provides-Extra: sqlserver
110
114
  Requires-Dist: ibis-framework[mssql]<13.0.0,>=10.0.0; extra == "sqlserver"
111
115
  Requires-Dist: packaging<27.0,>=21.3; extra == "sqlserver"
@@ -141,30 +145,30 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
141
145
  Provides-Extra: rdf
142
146
  Requires-Dist: rdflib==7.6.0; extra == "rdf"
143
147
  Provides-Extra: api
144
- Requires-Dist: fastapi<0.143.0,>=0.115.0; extra == "api"
148
+ Requires-Dist: fastapi<0.162.0,>=0.115.0; extra == "api"
145
149
  Requires-Dist: uvicorn<0.55.0,>=0.44.0; extra == "api"
146
150
  Provides-Extra: protobuf
147
151
  Requires-Dist: proto-schema-parser<3.0,>=1.0; extra == "protobuf"
148
152
  Provides-Extra: xml
149
153
  Requires-Dist: xmlschema<5.0,>=4.0; extra == "xml"
150
154
  Provides-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"
155
+ 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,xlsx,xml]; extra == "all"
152
156
  Provides-Extra: dev
153
157
  Requires-Dist: datacontract-cli[all]; extra == "dev"
154
158
  Requires-Dist: httpx==0.28.1; extra == "dev"
155
159
  Requires-Dist: kafka-python; extra == "dev"
156
160
  Requires-Dist: minio==7.2.20; extra == "dev"
157
- Requires-Dist: moto==5.2.3; extra == "dev"
161
+ Requires-Dist: moto==5.2.4; extra == "dev"
158
162
  Requires-Dist: openapi-spec-validator<0.10,>=0.7; extra == "dev"
159
163
  Requires-Dist: pandas>=2.1.0; extra == "dev"
160
164
  Requires-Dist: pre-commit<4.7.0,>=3.7.1; extra == "dev"
161
165
  Requires-Dist: pytest; extra == "dev"
162
166
  Requires-Dist: pytest-cov; extra == "dev"
163
167
  Requires-Dist: pytest-xdist; extra == "dev"
164
- Requires-Dist: pymssql==2.4.4; extra == "dev"
168
+ Requires-Dist: pymssql==2.4.5; extra == "dev"
165
169
  Requires-Dist: psycopg2-binary<3.0,>=2.9; extra == "dev"
166
- Requires-Dist: mysql-connector-python<26.8.0,>=8.0.30; extra == "dev"
167
- Requires-Dist: ruff==0.16.10; extra == "dev"
170
+ Requires-Dist: mysql-connector-python<26.11.0,>=8.0.30; extra == "dev"
171
+ Requires-Dist: ruff==0.17.2; extra == "dev"
168
172
  Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.15.0; extra == "dev"
169
173
  Requires-Dist: trino==0.340.0; extra == "dev"
170
174
  Dynamic: license-file
@@ -191,11 +195,11 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
191
195
 
192
196
  ![Main features of the Data Contract CLI](datacontractcli.png)
193
197
 
194
- > 📖 **Full documentation: [docs.datacontract.com](https://docs.datacontract.com)**
198
+ > 📖 **Full documentation: [cli.datacontract.com](https://cli.datacontract.com)**
195
199
  >
196
- > 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)
200
+ > Quick links: [Quickstart](https://cli.datacontract.com/quickstart) · [Commands](https://cli.datacontract.com/commands) · [Best Practices](https://cli.datacontract.com/best-practices) · [Custom Export and Import](https://cli.datacontract.com/extending) · [Release Notes](https://cli.datacontract.com/release-notes) · [Development Setup](#development-setup)
197
201
  >
198
- > 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) · [Data Contract Skills](https://github.com/datacontract/datacontract-skills) for coding agents
202
+ > For LLMs: [cli.datacontract.com/llms.txt](https://cli.datacontract.com/llms.txt) · [cli.datacontract.com/llms-full.txt](https://cli.datacontract.com/llms-full.txt) · [Data Contract Skills](https://github.com/datacontract/datacontract-skills) for coding agents
199
203
 
200
204
  ## Getting started
201
205
 
@@ -269,9 +273,9 @@ $ datacontract import snowflake --source <account> --database ORDER_DB --schema
269
273
  $ datacontract test datacontract.yaml
270
274
  ```
271
275
 
272
- Copy-paste guides with credentials setup are available for [Snowflake](https://docs.datacontract.com/testing/snowflake), [BigQuery](https://docs.datacontract.com/testing/bigquery), [Databricks](https://docs.datacontract.com/testing/databricks), and [15+ other sources](https://docs.datacontract.com/testing).
276
+ Copy-paste guides with credentials setup are available for [Snowflake](https://cli.datacontract.com/testing/snowflake), [BigQuery](https://cli.datacontract.com/testing/bigquery), [Databricks](https://cli.datacontract.com/testing/databricks), and [15+ other sources](https://cli.datacontract.com/testing).
273
277
 
274
- We can also use the data contract metadata to export in many [formats](https://docs.datacontract.com/exports), e.g., to generate a SQL DDL:
278
+ We can also use the data contract metadata to export in many [formats](https://cli.datacontract.com/exports), e.g., to generate a SQL DDL:
275
279
 
276
280
  ```bash
277
281
  $ datacontract export sql https://datacontract.com/orders-v1.odcs.yaml
@@ -357,7 +361,7 @@ if not run.has_passed():
357
361
 
358
362
  - [How to integrate Data Contract CLI in your CI/CD pipeline as a GitHub Action](https://github.com/datacontract/datacontract-action/)
359
363
  - [How to let your coding agent (Claude Code, Codex, GitHub Copilot) create and test data contracts with the Data Contract Skills](https://github.com/datacontract/datacontract-skills)
360
- - [How to run the Data Contract CLI API to test data contracts with POST requests](https://docs.datacontract.com/api)
364
+ - [How to run the Data Contract CLI API to test data contracts with POST requests](https://cli.datacontract.com/api)
361
365
  - [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)
362
366
 
363
367
 
@@ -427,7 +431,7 @@ alias datacontract='docker run --rm -v "${PWD}:/home/datacontract" datacontract/
427
431
 
428
432
  _Note:_ The output of Docker command line messages is limited to 80 columns and may include line breaks. Don't pipe docker output to files if you want to export code. Use the `--output` option instead.
429
433
 
430
- Released images are signed with [cosign](https://docs.sigstore.dev/cosign/signing/overview/) keyless signing. See [Verifying the image](https://docs.datacontract.com/installation#verifying-the-image) to check a signature before you run it.
434
+ Released images are signed with [cosign](https://docs.sigstore.dev/cosign/signing/overview/) keyless signing. See [Verifying the image](https://cli.datacontract.com/installation#verifying-the-image) to check a signature before you run it.
431
435
 
432
436
 
433
437
 
@@ -455,6 +459,7 @@ A list of available extras:
455
459
  | DuckDB (local file, CSV import and API response testing) | `pip install datacontract-cli[duckdb]` |
456
460
  | Exasol | `pip install datacontract-cli[exasol]` |
457
461
  | Excel | `pip install datacontract-cli[excel]` |
462
+ | Excel workbooks (testing) | `pip install datacontract-cli[xlsx]` |
458
463
  | GCS | `pip install datacontract-cli[gcs]` |
459
464
  | SAP HANA / Datasphere | `pip install datacontract-cli[hana]` (not part of `all`: `hdbcli` is proprietary) |
460
465
  | Apache Iceberg (schema import and export, REST catalog testing) | `pip install datacontract-cli[iceberg]` |
@@ -476,18 +481,18 @@ A list of available extras:
476
481
 
477
482
  ## Documentation
478
483
 
479
- 📖 **The full documentation is at [docs.datacontract.com](https://docs.datacontract.com).**
484
+ 📖 **The full documentation is at [cli.datacontract.com](https://cli.datacontract.com).**
480
485
 
481
486
  It covers everything in depth, including the complete command reference:
482
487
 
483
- - [Quickstart](https://docs.datacontract.com/quickstart) — install and run your first test
484
- - [Open Data Contract Standard](https://docs.datacontract.com/open-data-contract-standard) — the contract format
485
- - [Test your Data](https://docs.datacontract.com/testing) — schema & quality tests against 18+ data sources
486
- - [Define your Quality Rules](https://docs.datacontract.com/quality-rules) — SQL, library, text, and custom checks
487
- - [Sync with dbt](https://docs.datacontract.com/dbt) · [Edit your contract](https://docs.datacontract.com/editor)
488
- - [Imports](https://docs.datacontract.com/imports) and [Exports](https://docs.datacontract.com/exports) — convert to/from 25+ formats
489
- - [API](https://docs.datacontract.com/api) and [Python Library](https://docs.datacontract.com/python-library)
490
- - [Command reference](https://docs.datacontract.com/commands) — `init`, `lint`, `test`, `export`, `import`, `dbt`, `ci`, `catalog`, `publish`, `api`, and more
488
+ - [Quickstart](https://cli.datacontract.com/quickstart) — install and run your first test
489
+ - [Open Data Contract Standard](https://cli.datacontract.com/open-data-contract-standard) — the contract format
490
+ - [Test your Data](https://cli.datacontract.com/testing) — schema & quality tests against 18+ data sources
491
+ - [Define your Quality Rules](https://cli.datacontract.com/quality-rules) — SQL, library, text, and custom checks
492
+ - [Sync with dbt](https://cli.datacontract.com/dbt) · [Edit your contract](https://cli.datacontract.com/editor)
493
+ - [Imports](https://cli.datacontract.com/imports) and [Exports](https://cli.datacontract.com/exports) — convert to/from 25+ formats
494
+ - [API](https://cli.datacontract.com/api) and [Python Library](https://cli.datacontract.com/python-library)
495
+ - [Command reference](https://cli.datacontract.com/commands) — `init`, `lint`, `test`, `export`, `import`, `dbt`, `ci`, `catalog`, `publish`, `api`, and more
491
496
 
492
497
  ## Development Setup
493
498
 
@@ -20,11 +20,11 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
20
20
 
21
21
  ![Main features of the Data Contract CLI](datacontractcli.png)
22
22
 
23
- > 📖 **Full documentation: [docs.datacontract.com](https://docs.datacontract.com)**
23
+ > 📖 **Full documentation: [cli.datacontract.com](https://cli.datacontract.com)**
24
24
  >
25
- > 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
+ > Quick links: [Quickstart](https://cli.datacontract.com/quickstart) · [Commands](https://cli.datacontract.com/commands) · [Best Practices](https://cli.datacontract.com/best-practices) · [Custom Export and Import](https://cli.datacontract.com/extending) · [Release Notes](https://cli.datacontract.com/release-notes) · [Development Setup](#development-setup)
26
26
  >
27
- > 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) · [Data Contract Skills](https://github.com/datacontract/datacontract-skills) for coding agents
27
+ > For LLMs: [cli.datacontract.com/llms.txt](https://cli.datacontract.com/llms.txt) · [cli.datacontract.com/llms-full.txt](https://cli.datacontract.com/llms-full.txt) · [Data Contract Skills](https://github.com/datacontract/datacontract-skills) for coding agents
28
28
 
29
29
  ## Getting started
30
30
 
@@ -98,9 +98,9 @@ $ datacontract import snowflake --source <account> --database ORDER_DB --schema
98
98
  $ datacontract test datacontract.yaml
99
99
  ```
100
100
 
101
- Copy-paste guides with credentials setup are available for [Snowflake](https://docs.datacontract.com/testing/snowflake), [BigQuery](https://docs.datacontract.com/testing/bigquery), [Databricks](https://docs.datacontract.com/testing/databricks), and [15+ other sources](https://docs.datacontract.com/testing).
101
+ Copy-paste guides with credentials setup are available for [Snowflake](https://cli.datacontract.com/testing/snowflake), [BigQuery](https://cli.datacontract.com/testing/bigquery), [Databricks](https://cli.datacontract.com/testing/databricks), and [15+ other sources](https://cli.datacontract.com/testing).
102
102
 
103
- We can also use the data contract metadata to export in many [formats](https://docs.datacontract.com/exports), e.g., to generate a SQL DDL:
103
+ We can also use the data contract metadata to export in many [formats](https://cli.datacontract.com/exports), e.g., to generate a SQL DDL:
104
104
 
105
105
  ```bash
106
106
  $ datacontract export sql https://datacontract.com/orders-v1.odcs.yaml
@@ -186,7 +186,7 @@ if not run.has_passed():
186
186
 
187
187
  - [How to integrate Data Contract CLI in your CI/CD pipeline as a GitHub Action](https://github.com/datacontract/datacontract-action/)
188
188
  - [How to let your coding agent (Claude Code, Codex, GitHub Copilot) create and test data contracts with the Data Contract Skills](https://github.com/datacontract/datacontract-skills)
189
- - [How to run the Data Contract CLI API to test data contracts with POST requests](https://docs.datacontract.com/api)
189
+ - [How to run the Data Contract CLI API to test data contracts with POST requests](https://cli.datacontract.com/api)
190
190
  - [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)
191
191
 
192
192
 
@@ -256,7 +256,7 @@ alias datacontract='docker run --rm -v "${PWD}:/home/datacontract" datacontract/
256
256
 
257
257
  _Note:_ The output of Docker command line messages is limited to 80 columns and may include line breaks. Don't pipe docker output to files if you want to export code. Use the `--output` option instead.
258
258
 
259
- Released images are signed with [cosign](https://docs.sigstore.dev/cosign/signing/overview/) keyless signing. See [Verifying the image](https://docs.datacontract.com/installation#verifying-the-image) to check a signature before you run it.
259
+ Released images are signed with [cosign](https://docs.sigstore.dev/cosign/signing/overview/) keyless signing. See [Verifying the image](https://cli.datacontract.com/installation#verifying-the-image) to check a signature before you run it.
260
260
 
261
261
 
262
262
 
@@ -284,6 +284,7 @@ A list of available extras:
284
284
  | DuckDB (local file, CSV import and API response testing) | `pip install datacontract-cli[duckdb]` |
285
285
  | Exasol | `pip install datacontract-cli[exasol]` |
286
286
  | Excel | `pip install datacontract-cli[excel]` |
287
+ | Excel workbooks (testing) | `pip install datacontract-cli[xlsx]` |
287
288
  | GCS | `pip install datacontract-cli[gcs]` |
288
289
  | SAP HANA / Datasphere | `pip install datacontract-cli[hana]` (not part of `all`: `hdbcli` is proprietary) |
289
290
  | Apache Iceberg (schema import and export, REST catalog testing) | `pip install datacontract-cli[iceberg]` |
@@ -305,18 +306,18 @@ A list of available extras:
305
306
 
306
307
  ## Documentation
307
308
 
308
- 📖 **The full documentation is at [docs.datacontract.com](https://docs.datacontract.com).**
309
+ 📖 **The full documentation is at [cli.datacontract.com](https://cli.datacontract.com).**
309
310
 
310
311
  It covers everything in depth, including the complete command reference:
311
312
 
312
- - [Quickstart](https://docs.datacontract.com/quickstart) — install and run your first test
313
- - [Open Data Contract Standard](https://docs.datacontract.com/open-data-contract-standard) — the contract format
314
- - [Test your Data](https://docs.datacontract.com/testing) — schema & quality tests against 18+ data sources
315
- - [Define your Quality Rules](https://docs.datacontract.com/quality-rules) — SQL, library, text, and custom checks
316
- - [Sync with dbt](https://docs.datacontract.com/dbt) · [Edit your contract](https://docs.datacontract.com/editor)
317
- - [Imports](https://docs.datacontract.com/imports) and [Exports](https://docs.datacontract.com/exports) — convert to/from 25+ formats
318
- - [API](https://docs.datacontract.com/api) and [Python Library](https://docs.datacontract.com/python-library)
319
- - [Command reference](https://docs.datacontract.com/commands) — `init`, `lint`, `test`, `export`, `import`, `dbt`, `ci`, `catalog`, `publish`, `api`, and more
313
+ - [Quickstart](https://cli.datacontract.com/quickstart) — install and run your first test
314
+ - [Open Data Contract Standard](https://cli.datacontract.com/open-data-contract-standard) — the contract format
315
+ - [Test your Data](https://cli.datacontract.com/testing) — schema & quality tests against 18+ data sources
316
+ - [Define your Quality Rules](https://cli.datacontract.com/quality-rules) — SQL, library, text, and custom checks
317
+ - [Sync with dbt](https://cli.datacontract.com/dbt) · [Edit your contract](https://cli.datacontract.com/editor)
318
+ - [Imports](https://cli.datacontract.com/imports) and [Exports](https://cli.datacontract.com/exports) — convert to/from 25+ formats
319
+ - [API](https://cli.datacontract.com/api) and [Python Library](https://cli.datacontract.com/python-library)
320
+ - [Command reference](https://cli.datacontract.com/commands) — `init`, `lint`, `test`, `export`, `import`, `dbt`, `ci`, `catalog`, `publish`, `api`, and more
320
321
 
321
322
  ## Development Setup
322
323
 
@@ -0,0 +1,30 @@
1
+ # Configuration so that yaml.safe_dump dumps strings with line breaks with yaml literal |
2
+ import warnings
3
+
4
+ import yaml
5
+
6
+ yaml.SafeDumper.org_represent_str = yaml.SafeDumper.represent_str
7
+
8
+
9
+ def repr_str(dumper, data):
10
+ if "\n" in data:
11
+ return dumper.represent_scalar("tag:yaml.org,2002:str", data, style="|")
12
+ return dumper.org_represent_str(data)
13
+
14
+
15
+ yaml.add_representer(str, repr_str, Dumper=yaml.SafeDumper)
16
+
17
+ # snowflake-connector-python 5.x warns on every connection about a changing logout default, and about the 4.x
18
+ # parameter names we keep passing because Python 3.10 installs still get 4.x.
19
+ warnings.filterwarnings(
20
+ "ignore", message="enable_server_session_keep_alive_auto_detection was not set", category=FutureWarning
21
+ )
22
+ warnings.filterwarnings(
23
+ "ignore",
24
+ message="'(private_key_file_pwd|network_timeout|socket_timeout)' is deprecated",
25
+ category=DeprecationWarning,
26
+ )
27
+
28
+ from datacontract.config import Config # noqa: E402
29
+
30
+ __all__ = ["Config"]
@@ -12,7 +12,7 @@ from fastapi.security.api_key import APIKeyHeader
12
12
  from pydantic import BaseModel, Field, ValidationError
13
13
 
14
14
  from datacontract.config import Config, known_env_names
15
- from datacontract.config.variables import CONTRACT_VARIABLES_ENV, allowed_environment, resolve_variables
15
+ from datacontract.config.variables import CONTRACT_VARIABLES_ENV, allowed_environment, resolve_server_variables
16
16
  from datacontract.data_contract import DataContract, ExportFormat
17
17
  from datacontract.model.breaking import BreakingChangeEntry, Perspective
18
18
  from datacontract.model.changelog import ChangelogEntry
@@ -273,7 +273,7 @@ headers, which are matched case-insensitively and map mechanically to the enviro
273
273
  Per-request headers are never written to the process environment, so one server can serve several
274
274
  tenants. Send them over HTTPS only.
275
275
 
276
- See [Configuration](https://docs.datacontract.com/configuration) for the full list of options.
276
+ See [Configuration](https://cli.datacontract.com/configuration) for the full list of options.
277
277
  """
278
278
 
279
279
  # The endpoints are plain `def`, not `async def`: they block on data sources, and FastAPI runs
@@ -290,7 +290,7 @@ app = FastAPI(
290
290
  },
291
291
  contact={
292
292
  "name": "Data Contract CLI",
293
- "url": "https://docs.datacontract.com/",
293
+ "url": "https://cli.datacontract.com/",
294
294
  },
295
295
  # Relative, so the document works for any deployment. A second, absolute entry would
296
296
  # show up as a target in the Swagger UI dropdown and invite sending contracts there.
@@ -301,7 +301,7 @@ app = FastAPI(
301
301
  "description": "Run the schema and quality tests of a data contract against the actual data.",
302
302
  "externalDocs": {
303
303
  "description": "Documentation",
304
- "url": "https://docs.datacontract.com/testing/",
304
+ "url": "https://cli.datacontract.com/testing/",
305
305
  },
306
306
  },
307
307
  {
@@ -309,7 +309,7 @@ app = FastAPI(
309
309
  "description": "Validate that a data contract is syntactically correct and follows the standard.",
310
310
  "externalDocs": {
311
311
  "description": "Documentation",
312
- "url": "https://docs.datacontract.com/commands/lint",
312
+ "url": "https://cli.datacontract.com/commands/lint",
313
313
  },
314
314
  },
315
315
  {
@@ -317,7 +317,7 @@ app = FastAPI(
317
317
  "description": "Convert a data contract into another format, such as SQL DDL, Avro, or dbt.",
318
318
  "externalDocs": {
319
319
  "description": "Documentation",
320
- "url": "https://docs.datacontract.com/exports/",
320
+ "url": "https://cli.datacontract.com/exports/",
321
321
  },
322
322
  },
323
323
  {
@@ -325,7 +325,7 @@ app = FastAPI(
325
325
  "description": "Compare two versions of a data contract and list what changed.",
326
326
  "externalDocs": {
327
327
  "description": "Documentation",
328
- "url": "https://docs.datacontract.com/commands/changelog",
328
+ "url": "https://cli.datacontract.com/commands/changelog",
329
329
  },
330
330
  },
331
331
  {
@@ -333,7 +333,7 @@ app = FastAPI(
333
333
  "description": "Compare two versions of a data contract and grade each change by compatibility impact.",
334
334
  "externalDocs": {
335
335
  "description": "Documentation",
336
- "url": "https://docs.datacontract.com/commands/breaking",
336
+ "url": "https://cli.datacontract.com/commands/breaking",
337
337
  },
338
338
  },
339
339
  ],
@@ -368,7 +368,7 @@ def _openapi_with_external_docs() -> dict:
368
368
  "externalDocs",
369
369
  {
370
370
  "description": "Data Contract CLI documentation",
371
- "url": "https://docs.datacontract.com/api",
371
+ "url": "https://cli.datacontract.com/api",
372
372
  },
373
373
  )
374
374
  return schema
@@ -443,6 +443,22 @@ AUTHENTICATION_RESPONSES: dict[int | str, dict] = {
443
443
 
444
444
  _CONFIG_HEADER_PREFIX = "datacontract-"
445
445
 
446
+ # Options naming a file or folder on the server's disk, or the server's own workload identity: the operator's
447
+ # to choose, never the caller's, or a caller could have the server log in as the operator to a host of their choosing.
448
+ _SERVER_ONLY_OPTIONS = frozenset(
449
+ {
450
+ "DATACONTRACT_CUSTOM_QUALITY_CHECKS",
451
+ "DATACONTRACT_SNOWFLAKE_PRIVATE_KEY_FILE",
452
+ "DATACONTRACT_SNOWFLAKE_PRIVATE_KEY_PATH",
453
+ "DATACONTRACT_SNOWFLAKE_TOKEN_FILE_PATH",
454
+ "DATACONTRACT_SNOWFLAKE_WORKLOAD_IDENTITY_PROVIDER",
455
+ "DATACONTRACT_BIGQUERY_ACCOUNT_INFO_JSON_PATH",
456
+ "DATACONTRACT_DATABRICKS_PROFILE",
457
+ "DATACONTRACT_ORACLE_CLIENT_DIR",
458
+ "DATACONTRACT_DUCKDB_DATABASE",
459
+ }
460
+ )
461
+
446
462
 
447
463
  def config_from_headers(headers) -> "Config | None":
448
464
  """Build a per-request Config from configuration option headers.
@@ -452,8 +468,8 @@ def config_from_headers(headers) -> "Config | None":
452
468
  → ``DATACONTRACT_SNOWFLAKE_PASSWORD``, ``entropy-data-api-key`` →
453
469
  ``ENTROPY_DATA_API_KEY``. Returns None when no config headers are present,
454
470
  so env-var-configured deployments behave exactly as before. Unknown
455
- ``datacontract-*`` option names are rejected with a 400, and so is the
456
- custom quality checks folder.
471
+ ``datacontract-*`` option names are rejected with a 400, and so are options
472
+ only the operator may set.
457
473
  """
458
474
  known = known_env_names()
459
475
  values = {}
@@ -461,11 +477,10 @@ def config_from_headers(headers) -> "Config | None":
461
477
  lowered = name.lower()
462
478
  env = lowered.upper().replace("-", "_")
463
479
  if lowered.startswith(_CONFIG_HEADER_PREFIX) or env in known:
464
- if env == "DATACONTRACT_CUSTOM_QUALITY_CHECKS":
465
- # A folder on the server's disk is the operator's to choose, never the caller's.
480
+ if env in _SERVER_ONLY_OPTIONS:
466
481
  raise HTTPException(
467
482
  status_code=status.HTTP_400_BAD_REQUEST,
468
- detail="The custom quality checks folder is configured by the API server, not per request.",
483
+ detail=f"{env} is set on the API server. It is not possible to override it per request.",
469
484
  )
470
485
  values[env] = value
471
486
  if not values:
@@ -516,12 +531,25 @@ _ENVIRONMENT_CREDENTIAL_TARGETS: dict[str, tuple[str, str | None, tuple[str, ...
516
531
  "hive": ("host", "hive_host", ("hive_password",)),
517
532
  "redshift": ("host", "redshift_host", ("redshift_password",)),
518
533
  "sqlserver": ("host", "sqlserver_host", ("sqlserver_password",)),
534
+ "mssql": ("host", "sqlserver_host", ("sqlserver_password",)),
519
535
  "snowflake": (
520
536
  "account",
521
537
  "snowflake_account",
522
- ("snowflake_password", "snowflake_token", "snowflake_private_key"),
538
+ (
539
+ "snowflake_password",
540
+ "snowflake_token",
541
+ "snowflake_private_key",
542
+ "snowflake_private_key_file",
543
+ "snowflake_private_key_path",
544
+ "snowflake_token_file_path",
545
+ "snowflake_workload_identity_provider",
546
+ ),
547
+ ),
548
+ "databricks": (
549
+ "host",
550
+ "databricks_server_hostname",
551
+ ("databricks_token", "databricks_client_secret", "databricks_profile"),
523
552
  ),
524
- "databricks": ("host", "databricks_server_hostname", ("databricks_token", "databricks_client_secret")),
525
553
  # Kafka's broker host is always the contract's `server.host` (no environment
526
554
  # option pins it), so an environment-held SASL password can never be paired
527
555
  # with a posted contract safely -- host_field is None, so it is always rejected.
@@ -539,13 +567,17 @@ def _selected_server(body: str, server_name: str | None, config):
539
567
  """
540
568
  from datacontract.engines.data_contract_test import get_server
541
569
  from datacontract.lint import resolve
570
+ from datacontract.model.server import get_server_type
542
571
 
543
572
  try:
544
573
  data_contract = resolve.resolve_data_contract(data_contract_str=body, config=config)
545
574
  server = get_server(data_contract, server_name)
546
- # Guard the server type the test will run against, not a ${VAR:-local} reference to it.
547
- variables = allowed_environment(_allowed_contract_variables())
548
- return server and server.model_copy(update={"type": resolve_variables(server.type, variables=variables)})
575
+ if server is None:
576
+ return None
577
+ # Guard the server type the test will connect to: references like ${VAR:-local} resolved, and
578
+ # `custom` + customType or an ODCS synonym such as `postgresql` mapped to the type the CLI dispatches on.
579
+ server = resolve_server_variables(server, allowed_environment(_allowed_contract_variables()))
580
+ return server.model_copy(update={"type": get_server_type(server)})
549
581
  except Exception:
550
582
  return None
551
583
 
@@ -630,11 +662,23 @@ def _reject_environment_credentials_to_untrusted_host(body: str, server_name: st
630
662
  target_attr, host_field, secret_fields = guard
631
663
  if not any(resolved.option_source(field) == "env" for field in secret_fields):
632
664
  return # no environment-held secret for this server type; nothing to protect
633
- if host_field is not None and resolved.option_source(host_field) == "env":
634
- return # the operator pinned the target host; the contract's host is ignored
635
665
  held = [
636
666
  env_name(field, Config.model_fields[field]) for field in secret_fields if resolved.option_source(field) == "env"
637
667
  ]
668
+ if host_field is not None and resolved.option_source(host_field) == "env":
669
+ # Snowflake's host and port override the address the pinned account resolves to.
670
+ redirects = [
671
+ env_name(field, Config.model_fields[field])
672
+ for field in ("snowflake_host", "snowflake_port")
673
+ if server.type == "snowflake" and resolved.option_source(field) == "request"
674
+ ]
675
+ if not redirects:
676
+ return # the operator pinned the target host; the contract's host is ignored
677
+ raise HTTPException(
678
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
679
+ detail=f"{', '.join(redirects)} cannot be set per request while the API server uses its own Snowflake "
680
+ f"credential ({', '.join(held)}). Remove it, or send all credentials with the request.",
681
+ )
638
682
  if host_field is not None:
639
683
  env_var = env_name(host_field, Config.model_fields[host_field])
640
684
  detail = (