datacontract-cli 0.12.3__tar.gz → 0.12.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 (255) hide show
  1. {datacontract_cli-0.12.3/datacontract_cli.egg-info → datacontract_cli-0.12.4}/PKG-INFO +4 -4
  2. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/api.py +5 -2
  3. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/data_contract.py +15 -0
  4. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/data_contract_checks.py +5 -1
  5. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4/datacontract_cli.egg-info}/PKG-INFO +4 -4
  6. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract_cli.egg-info/requires.txt +3 -3
  7. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/pyproject.toml +10 -4
  8. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_data_contract_checks.py +44 -0
  9. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/LICENSE +0 -0
  10. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/MANIFEST.in +0 -0
  11. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/README.md +0 -0
  12. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/__init__.py +0 -0
  13. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/catalog/catalog.py +0 -0
  14. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/changelog/__init__.py +0 -0
  15. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/changelog/changelog.py +0 -0
  16. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/changelog/normalize.py +0 -0
  17. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/cli.py +0 -0
  18. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_api.py +0 -0
  19. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_catalog.py +0 -0
  20. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_changelog.py +0 -0
  21. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_ci.py +0 -0
  22. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_dbt.py +0 -0
  23. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_export.py +0 -0
  24. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_import.py +0 -0
  25. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_init.py +0 -0
  26. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_lint.py +0 -0
  27. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_publish.py +0 -0
  28. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/command_test.py +0 -0
  29. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/__init__.py +0 -0
  30. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/data_contract_test.py +0 -0
  31. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  32. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  33. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  34. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  35. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/__init__.py +0 -0
  36. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/check_soda_execute.py +0 -0
  37. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/athena.py +0 -0
  38. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/bigquery.py +0 -0
  39. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/databricks.py +0 -0
  40. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
  41. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/impala.py +0 -0
  42. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/kafka.py +0 -0
  43. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/mysql.py +0 -0
  44. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/oracle.py +0 -0
  45. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/postgres.py +0 -0
  46. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/redshift.py +0 -0
  47. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/snowflake.py +0 -0
  48. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  49. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/engines/soda/connections/trino.py +0 -0
  50. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/__init__.py +0 -0
  51. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/avro_exporter.py +0 -0
  52. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/avro_idl_exporter.py +0 -0
  53. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/bigquery_exporter.py +0 -0
  54. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/custom_exporter.py +0 -0
  55. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/data_caterer_exporter.py +0 -0
  56. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/dbml_exporter.py +0 -0
  57. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/dbt_exporter.py +0 -0
  58. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/dcs_exporter.py +0 -0
  59. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/dqx_exporter.py +0 -0
  60. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/duckdb_type_converter.py +0 -0
  61. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/excel_exporter.py +0 -0
  62. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/exporter.py +0 -0
  63. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/exporter_factory.py +0 -0
  64. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/go_exporter.py +0 -0
  65. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/great_expectations_exporter.py +0 -0
  66. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/html_exporter.py +0 -0
  67. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/iceberg_exporter.py +0 -0
  68. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/jsonschema_exporter.py +0 -0
  69. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/markdown_exporter.py +0 -0
  70. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/mermaid_exporter.py +0 -0
  71. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/odcs_export_helper.py +0 -0
  72. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/odcs_v3_exporter.py +0 -0
  73. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/pandas_type_converter.py +0 -0
  74. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/protobuf_exporter.py +0 -0
  75. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/pydantic_exporter.py +0 -0
  76. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/rdf_exporter.py +0 -0
  77. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/sodacl_exporter.py +0 -0
  78. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/spark_exporter.py +0 -0
  79. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/sql_exporter.py +0 -0
  80. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/sql_type_converter.py +0 -0
  81. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/export/sqlalchemy_exporter.py +0 -0
  82. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/avro_importer.py +0 -0
  83. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/bigquery_importer.py +0 -0
  84. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/csv_importer.py +0 -0
  85. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/dbml_importer.py +0 -0
  86. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/dbt_importer.py +0 -0
  87. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/dcs_importer.py +0 -0
  88. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/excel_importer.py +0 -0
  89. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/glue_importer.py +0 -0
  90. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/iceberg_importer.py +0 -0
  91. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/importer.py +0 -0
  92. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/importer_factory.py +0 -0
  93. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/json_importer.py +0 -0
  94. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/jsonschema_importer.py +0 -0
  95. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/odcs_helper.py +0 -0
  96. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/odcs_importer.py +0 -0
  97. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/parquet_importer.py +0 -0
  98. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/protobuf_importer.py +0 -0
  99. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/spark_importer.py +0 -0
  100. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/sql_importer.py +0 -0
  101. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/imports/unity_importer.py +0 -0
  102. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/init/init_template.py +0 -0
  103. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/integration/dbt_sync.py +0 -0
  104. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/integration/dbt_test_mapping.py +0 -0
  105. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/integration/entropy_data.py +0 -0
  106. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/lint/files.py +0 -0
  107. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/lint/resolve.py +0 -0
  108. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/lint/resources.py +0 -0
  109. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/lint/schema.py +0 -0
  110. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/lint/urls.py +0 -0
  111. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/model/changelog.py +0 -0
  112. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/model/exceptions.py +0 -0
  113. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/model/odcs.py +0 -0
  114. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/model/run.py +0 -0
  115. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/output/__init__.py +0 -0
  116. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/output/ci_output.py +0 -0
  117. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/output/json_test_results.py +0 -0
  118. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/output/junit_test_results.py +0 -0
  119. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/output/output_format.py +0 -0
  120. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/output/test_results_writer.py +0 -0
  121. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/output/text_changelog_results.py +0 -0
  122. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/py.typed +0 -0
  123. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  124. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  125. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
  126. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  127. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
  128. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
  129. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  130. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
  131. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/schemas/odcs-3.1.0.init.yaml +0 -0
  132. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
  133. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/datacontract.html +0 -0
  134. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/datacontract_odcs.html +0 -0
  135. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/index.html +0 -0
  136. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/partials/datacontract_information.html +0 -0
  137. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  138. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/partials/datacontract_terms.html +0 -0
  139. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/partials/definition.html +0 -0
  140. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/partials/example.html +0 -0
  141. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/partials/model_field.html +0 -0
  142. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/partials/quality.html +0 -0
  143. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/partials/server.html +0 -0
  144. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract/templates/style/output.css +0 -0
  145. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract_cli.egg-info/SOURCES.txt +0 -0
  146. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  147. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract_cli.egg-info/entry_points.txt +0 -0
  148. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/datacontract_cli.egg-info/top_level.txt +0 -0
  149. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/setup.cfg +0 -0
  150. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_api.py +0 -0
  151. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_bigquery_soda_connection.py +0 -0
  152. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_catalog.py +0 -0
  153. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_changelog.py +0 -0
  154. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_changelog_engine.py +0 -0
  155. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_changelog_normalize.py +0 -0
  156. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_changelog_output_text.py +0 -0
  157. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_ci_output.py +0 -0
  158. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_cli.py +0 -0
  159. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_data_contract.py +0 -0
  160. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_data_contract_specification.py +0 -0
  161. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_dbt_sync.py +0 -0
  162. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_dbt_test_mapping.py +0 -0
  163. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_description_linter.py +0 -0
  164. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_download_datacontract_file.py +0 -0
  165. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_duckdb_json.py +0 -0
  166. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_avro.py +0 -0
  167. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_avro_idl.py +0 -0
  168. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_bigquery.py +0 -0
  169. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_complex_data_contract.py +0 -0
  170. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_custom.py +0 -0
  171. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_custom_exporter.py +0 -0
  172. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_custom_model.py +0 -0
  173. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_data_caterer.py +0 -0
  174. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_dbml.py +0 -0
  175. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_dbt_models.py +0 -0
  176. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_dbt_sources.py +0 -0
  177. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_dbt_staging_sql.py +0 -0
  178. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_dqx.py +0 -0
  179. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_excel.py +0 -0
  180. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_go.py +0 -0
  181. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_great_expectations.py +0 -0
  182. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_html.py +0 -0
  183. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_iceberg.py +0 -0
  184. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_jsonschema.py +0 -0
  185. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_markdown.py +0 -0
  186. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_mermaid.py +0 -0
  187. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_odcs_v3.py +0 -0
  188. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_protobuf.py +0 -0
  189. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_pydantic.py +0 -0
  190. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_rdf.py +0 -0
  191. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_sodacl.py +0 -0
  192. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_spark.py +0 -0
  193. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_sql.py +0 -0
  194. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_sql_query.py +0 -0
  195. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_export_sqlalchemy.py +0 -0
  196. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_avro.py +0 -0
  197. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_bigquery.py +0 -0
  198. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_csv.py +0 -0
  199. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_dbml.py +0 -0
  200. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_dbt.py +0 -0
  201. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_excel.py +0 -0
  202. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_glue.py +0 -0
  203. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_iceberg.py +0 -0
  204. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_json.py +0 -0
  205. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_jsonschema.py +0 -0
  206. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_odcs_v3.py +0 -0
  207. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_parquet.py +0 -0
  208. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_protobuf.py +0 -0
  209. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_spark.py +0 -0
  210. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_sql_oracle.py +0 -0
  211. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_sql_postgres.py +0 -0
  212. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_sql_snowflake.py +0 -0
  213. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_sql_sqlserver.py +0 -0
  214. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_import_unity_file.py +0 -0
  215. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_integration_entropydata.py +0 -0
  216. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_lint.py +0 -0
  217. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_redshift_soda_configuration.py +0 -0
  218. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_require_env.py +0 -0
  219. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_resolve.py +0 -0
  220. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_roundtrip_jsonschema.py +0 -0
  221. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_sql_type_converter_physicaltype.py +0 -0
  222. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_sqlserver_soda_connection.py +0 -0
  223. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_api.py +0 -0
  224. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_athena_iceberg.py +0 -0
  225. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_azure_remote.py +0 -0
  226. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_bigquery.py +0 -0
  227. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_checks_filter.py +0 -0
  228. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_databricks.py +0 -0
  229. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_dataframe.py +0 -0
  230. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_delta.py +0 -0
  231. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_gcs_csv_remote.py +0 -0
  232. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_gcs_json_remote.py +0 -0
  233. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_kafka.py +0 -0
  234. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_kafka_remote.py +0 -0
  235. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_local_json.py +0 -0
  236. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_local_json_nd.py +0 -0
  237. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_mysql.py +0 -0
  238. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_oracle.py +0 -0
  239. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_output_json.py +0 -0
  240. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_output_junit.py +0 -0
  241. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_parquet.py +0 -0
  242. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_postgres.py +0 -0
  243. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_quality.py +0 -0
  244. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_s3_csv.py +0 -0
  245. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_s3_delta.py +0 -0
  246. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_s3_json.py +0 -0
  247. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_s3_json_complex.py +0 -0
  248. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_s3_json_multiple_models.py +0 -0
  249. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_s3_json_remote.py +0 -0
  250. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_schema_evolution.py +0 -0
  251. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_server_not_found.py +0 -0
  252. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_snowflake.py +0 -0
  253. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_soda_connection_error.py +0 -0
  254. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_sqlserver.py +0 -0
  255. {datacontract_cli-0.12.3 → datacontract_cli-0.12.4}/tests/test_test_trino.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacontract-cli
3
- Version: 0.12.3
3
+ Version: 0.12.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@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
6
6
  License-Expression: MIT
@@ -41,7 +41,7 @@ Provides-Extra: databricks
41
41
  Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
42
42
  Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
43
43
  Requires-Dist: databricks-sql-connector<4.3.0,>=3.7.0; extra == "databricks"
44
- Requires-Dist: databricks-sdk<0.109.0; extra == "databricks"
44
+ Requires-Dist: databricks-sdk<0.110.0; extra == "databricks"
45
45
  Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "databricks"
46
46
  Provides-Extra: iceberg
47
47
  Requires-Dist: pyiceberg==0.11.1; extra == "iceberg"
@@ -83,7 +83,7 @@ Provides-Extra: rdf
83
83
  Requires-Dist: rdflib==7.6.0; extra == "rdf"
84
84
  Provides-Extra: api
85
85
  Requires-Dist: fastapi==0.136.1; extra == "api"
86
- Requires-Dist: uvicorn<0.47.0,>=0.44.0; extra == "api"
86
+ Requires-Dist: uvicorn<0.48.0,>=0.44.0; extra == "api"
87
87
  Provides-Extra: protobuf
88
88
  Requires-Dist: protobuf<8.0,>=3.20; extra == "protobuf"
89
89
  Provides-Extra: all
@@ -99,7 +99,7 @@ Requires-Dist: pre-commit<4.7.0,>=3.7.1; extra == "dev"
99
99
  Requires-Dist: pytest; extra == "dev"
100
100
  Requires-Dist: pytest-xdist; extra == "dev"
101
101
  Requires-Dist: pymssql==2.3.13; extra == "dev"
102
- Requires-Dist: ruff==0.15.12; extra == "dev"
102
+ Requires-Dist: ruff==0.15.13; extra == "dev"
103
103
  Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.14.2; extra == "dev"
104
104
  Requires-Dist: trino==0.337.0; extra == "dev"
105
105
  Dynamic: license-file
@@ -6,7 +6,7 @@ from typing import Annotated, Optional
6
6
  import pydantic
7
7
  import typer
8
8
  import yaml
9
- from fastapi import Body, Depends, FastAPI, HTTPException, Query, status
9
+ from fastapi import Body, Depends, FastAPI, HTTPException, Query, Request, status
10
10
  from fastapi.middleware.cors import CORSMiddleware
11
11
  from fastapi.responses import PlainTextResponse
12
12
  from fastapi.security.api_key import APIKeyHeader
@@ -305,6 +305,7 @@ def check_api_key(api_key_header: str | None):
305
305
  response_model_exclude_unset=True,
306
306
  )
307
307
  async def test(
308
+ request: Request,
308
309
  body: Annotated[
309
310
  str,
310
311
  Body(
@@ -332,7 +333,9 @@ async def test(
332
333
  check_api_key(api_key)
333
334
  logging.info("Testing data contract...")
334
335
  logging.info(body)
335
- return DataContract(data_contract_str=body, server=server, publish_url=publish_url).test()
336
+ return DataContract(
337
+ data_contract_str=body, server=server, publish_url=publish_url, fastapi_url=str(request.url)
338
+ ).test()
336
339
 
337
340
 
338
341
  @app.post(
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  import typing
3
+ from importlib import metadata
3
4
 
4
5
  from open_data_contract_standard.model import OpenDataContractStandard, Team
5
6
 
@@ -36,6 +37,7 @@ class DataContract:
36
37
  publish_test_results: bool = False,
37
38
  all_errors: bool = False,
38
39
  check_categories: set[str] | None = None,
40
+ fastapi_url: str = None,
39
41
  ):
40
42
  self._data_contract_file = data_contract_file
41
43
  self._data_contract_str = data_contract_str
@@ -51,6 +53,7 @@ class DataContract:
51
53
  self._ssl_verification = ssl_verification
52
54
  self._all_errors = all_errors
53
55
  self._check_categories = check_categories
56
+ self._fastapi_url = fastapi_url
54
57
 
55
58
  @classmethod
56
59
  def init(cls, template: typing.Optional[str], schema: typing.Optional[str] = None) -> OpenDataContractStandard:
@@ -112,10 +115,22 @@ class DataContract:
112
115
  run.finish()
113
116
  return run
114
117
 
118
+ def _runtime_info(self) -> str:
119
+ try:
120
+ version = metadata.version("datacontract-cli")
121
+ except metadata.PackageNotFoundError:
122
+ version = "unknown"
123
+ if self._fastapi_url is not None:
124
+ execution = f"running through FastAPI at {self._fastapi_url}"
125
+ else:
126
+ execution = "running as CLI locally"
127
+ return f"Data Contract CLI {version} {execution}"
128
+
115
129
  def test(self) -> Run:
116
130
  run = Run.create_run()
117
131
  try:
118
132
  run.log_info("Testing data contract")
133
+ run.log_info(self._runtime_info())
119
134
  data_contract = resolve.resolve_data_contract(
120
135
  self._data_contract_file,
121
136
  self._data_contract_str,
@@ -130,7 +130,11 @@ def to_schema_checks(schema_object: SchemaObject, server: Server) -> List[Check]
130
130
  quoting_config = config
131
131
 
132
132
  for prop in properties:
133
- property_name = prop.name
133
+ # ODCS: physicalName is the actual column name in the system under
134
+ # test. to_schema_name() already prefers schema_object.physicalName at
135
+ # the table level — mirror that at the field level so checks target the
136
+ # real column when the logical `name` differs from the physical one.
137
+ property_name = prop.physicalName or prop.name
134
138
 
135
139
  checks.append(check_property_is_present(schema_name, property_name, quoting_config))
136
140
  if check_types and (prop.physicalType is not None or prop.logicalType is not None):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacontract-cli
3
- Version: 0.12.3
3
+ Version: 0.12.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@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
6
6
  License-Expression: MIT
@@ -41,7 +41,7 @@ Provides-Extra: databricks
41
41
  Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
42
42
  Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
43
43
  Requires-Dist: databricks-sql-connector<4.3.0,>=3.7.0; extra == "databricks"
44
- Requires-Dist: databricks-sdk<0.109.0; extra == "databricks"
44
+ Requires-Dist: databricks-sdk<0.110.0; extra == "databricks"
45
45
  Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "databricks"
46
46
  Provides-Extra: iceberg
47
47
  Requires-Dist: pyiceberg==0.11.1; extra == "iceberg"
@@ -83,7 +83,7 @@ Provides-Extra: rdf
83
83
  Requires-Dist: rdflib==7.6.0; extra == "rdf"
84
84
  Provides-Extra: api
85
85
  Requires-Dist: fastapi==0.136.1; extra == "api"
86
- Requires-Dist: uvicorn<0.47.0,>=0.44.0; extra == "api"
86
+ Requires-Dist: uvicorn<0.48.0,>=0.44.0; extra == "api"
87
87
  Provides-Extra: protobuf
88
88
  Requires-Dist: protobuf<8.0,>=3.20; extra == "protobuf"
89
89
  Provides-Extra: all
@@ -99,7 +99,7 @@ Requires-Dist: pre-commit<4.7.0,>=3.7.1; extra == "dev"
99
99
  Requires-Dist: pytest; extra == "dev"
100
100
  Requires-Dist: pytest-xdist; extra == "dev"
101
101
  Requires-Dist: pymssql==2.3.13; extra == "dev"
102
- Requires-Dist: ruff==0.15.12; extra == "dev"
102
+ Requires-Dist: ruff==0.15.13; extra == "dev"
103
103
  Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.14.2; extra == "dev"
104
104
  Requires-Dist: trino==0.337.0; extra == "dev"
105
105
  Dynamic: license-file
@@ -22,7 +22,7 @@ datacontract-cli[api,athena,bigquery,csv,databricks,dbml,duckdb,excel,iceberg,im
22
22
 
23
23
  [api]
24
24
  fastapi==0.136.1
25
- uvicorn<0.47.0,>=0.44.0
25
+ uvicorn<0.48.0,>=0.44.0
26
26
 
27
27
  [athena]
28
28
  soda-core-athena<3.6.0,>=3.3.20
@@ -40,7 +40,7 @@ pandas>=2.0.0
40
40
  soda-core-spark-df<3.6.0,>=3.3.20
41
41
  soda-core-spark[databricks]<3.6.0,>=3.3.20
42
42
  databricks-sql-connector<4.3.0,>=3.7.0
43
- databricks-sdk<0.109.0
43
+ databricks-sdk<0.110.0
44
44
  pyspark<5.0.0,>=3.5.0
45
45
 
46
46
  [dbml]
@@ -57,7 +57,7 @@ pre-commit<4.7.0,>=3.7.1
57
57
  pytest
58
58
  pytest-xdist
59
59
  pymssql==2.3.13
60
- ruff==0.15.12
60
+ ruff==0.15.13
61
61
  testcontainers[kafka,minio,mssql,mysql,postgres]==4.14.2
62
62
  trino==0.337.0
63
63
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "datacontract-cli"
3
- version = "0.12.3"
3
+ version = "0.12.4"
4
4
  description = "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
  license = "MIT"
6
6
  readme = "README.md"
@@ -64,7 +64,7 @@ databricks = [
64
64
  "soda-core-spark-df>=3.3.20,<3.6.0",
65
65
  "soda-core-spark[databricks]>=3.3.20,<3.6.0",
66
66
  "databricks-sql-connector>=3.7.0,<4.3.0",
67
- "databricks-sdk<0.109.0",
67
+ "databricks-sdk<0.110.0",
68
68
  "pyspark>=3.5.0,<5.0.0",
69
69
  ]
70
70
 
@@ -140,7 +140,7 @@ rdf = [
140
140
 
141
141
  api = [
142
142
  "fastapi==0.136.1",
143
- "uvicorn>=0.44.0,<0.47.0",
143
+ "uvicorn>=0.44.0,<0.48.0",
144
144
  ]
145
145
 
146
146
  protobuf = [
@@ -165,7 +165,7 @@ dev = [
165
165
  "pytest",
166
166
  "pytest-xdist",
167
167
  "pymssql==2.3.13",
168
- "ruff==0.15.12",
168
+ "ruff==0.15.13",
169
169
  "testcontainers[minio,postgres,kafka,mssql,mysql]==4.14.2",
170
170
  "trino==0.337.0",
171
171
  ]
@@ -188,8 +188,14 @@ build-backend = "setuptools.build_meta"
188
188
  # "Character set 'utf8' unsupported". Override to allow newer
189
189
  # mysql-connector-python releases that know about the current charsets.
190
190
  # See: https://github.com/sodadata/soda-core/issues/2515
191
+ #
192
+ # yarl 1.24.0 and 1.24.1 were published to PyPI with cp310-only wheels and no
193
+ # sdist, so `uv sync` fails on Python 3.11/3.12/3.13 ("no wheel for the current
194
+ # platform"). The whole 1.24.x line is affected; pin below it (resolves to the
195
+ # last good 1.23.0) until a 1.24.x with full wheels is available.
191
196
  override-dependencies = [
192
197
  "mysql-connector-python>=8.0.30,<9.7.0",
198
+ "yarl<1.24",
193
199
  ]
194
200
 
195
201
  [tool.pytest.ini_options]
@@ -526,3 +526,47 @@ def test_freshness_check_backticks_special_field_on_databricks():
526
526
  impl = yaml.safe_load(check.implementation)
527
527
  keys = list(impl["checks for events"][0].keys())
528
528
  assert keys == ["freshness(`$file_modified_time`) < 24h"]
529
+
530
+
531
+ # --- Field-level physicalName resolution (ODCS) ---
532
+
533
+
534
+ def test_field_checks_use_physical_name_when_set():
535
+ """When a property declares a physicalName, field checks must target it.
536
+
537
+ physicalName is the actual column name in the system under test. The
538
+ table level already prefers physicalName (to_schema_name); the field
539
+ level must do the same, otherwise a contract with a logical name like
540
+ `brand` and physicalName `BRAND` fails "required column missing" even
541
+ though the BRAND column exists.
542
+ """
543
+ schema_object = SchemaObject(
544
+ name="orders",
545
+ properties=[SchemaProperty(name="brand", physicalName="BRAND", logicalType="string")],
546
+ )
547
+
548
+ checks = to_schema_checks(schema_object=schema_object, server=Server(type="snowflake"))
549
+
550
+ present = next(c for c in checks if c.type == "field_is_present")
551
+ assert present.field == "BRAND"
552
+ # Key is "checks for <model>" (model name may be quoted per dialect) — read
553
+ # it positionally rather than hardcoding the dialect-specific spelling.
554
+ impl = yaml.safe_load(present.implementation)
555
+ (sodacl_checks,) = impl.values()
556
+ assert sodacl_checks[0]["schema"]["fail"]["when required column missing"] == ["BRAND"]
557
+
558
+ type_check = next(c for c in checks if c.type == "field_type")
559
+ assert type_check.field == "BRAND"
560
+
561
+
562
+ def test_field_checks_fall_back_to_name_without_physical_name():
563
+ """Without physicalName, field checks use the logical name (unchanged)."""
564
+ schema_object = SchemaObject(
565
+ name="orders",
566
+ properties=[SchemaProperty(name="sku", logicalType="string")],
567
+ )
568
+
569
+ checks = to_schema_checks(schema_object=schema_object, server=Server(type="snowflake"))
570
+
571
+ present = next(c for c in checks if c.type == "field_is_present")
572
+ assert present.field == "sku"