datacontract-cli 0.11.1__tar.gz → 0.11.2__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 (211) hide show
  1. {datacontract_cli-0.11.1/datacontract_cli.egg-info → datacontract_cli-0.11.2}/PKG-INFO +76 -41
  2. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/README.md +69 -34
  3. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/check_soda_execute.py +14 -1
  4. datacontract_cli-0.11.2/datacontract/engines/soda/connections/impala.py +74 -0
  5. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/sql_type_converter.py +59 -1
  6. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2/datacontract_cli.egg-info}/PKG-INFO +76 -41
  7. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract_cli.egg-info/SOURCES.txt +1 -0
  8. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract_cli.egg-info/requires.txt +6 -6
  9. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/pyproject.toml +7 -7
  10. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/LICENSE +0 -0
  11. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/MANIFEST.in +0 -0
  12. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/__init__.py +0 -0
  13. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/api.py +0 -0
  14. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/catalog/catalog.py +0 -0
  15. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/cli.py +0 -0
  16. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/data_contract.py +0 -0
  17. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/__init__.py +0 -0
  18. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/data_contract_checks.py +0 -0
  19. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/data_contract_test.py +0 -0
  20. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  21. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  22. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  23. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  24. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/__init__.py +0 -0
  25. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/athena.py +0 -0
  26. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/bigquery.py +0 -0
  27. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/databricks.py +0 -0
  28. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
  29. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/kafka.py +0 -0
  30. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/oracle.py +0 -0
  31. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/postgres.py +0 -0
  32. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/snowflake.py +0 -0
  33. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  34. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/engines/soda/connections/trino.py +0 -0
  35. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/__init__.py +0 -0
  36. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/avro_exporter.py +0 -0
  37. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/avro_idl_exporter.py +0 -0
  38. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/bigquery_exporter.py +0 -0
  39. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/custom_exporter.py +0 -0
  40. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/data_caterer_exporter.py +0 -0
  41. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/dbml_exporter.py +0 -0
  42. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/dbt_exporter.py +0 -0
  43. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/dcs_exporter.py +0 -0
  44. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/dqx_exporter.py +0 -0
  45. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/duckdb_type_converter.py +0 -0
  46. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/excel_exporter.py +0 -0
  47. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/exporter.py +0 -0
  48. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/exporter_factory.py +0 -0
  49. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/go_exporter.py +0 -0
  50. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/great_expectations_exporter.py +0 -0
  51. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/html_exporter.py +0 -0
  52. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/iceberg_exporter.py +0 -0
  53. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/jsonschema_exporter.py +0 -0
  54. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/markdown_exporter.py +0 -0
  55. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/mermaid_exporter.py +0 -0
  56. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/odcs_export_helper.py +0 -0
  57. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/odcs_v3_exporter.py +0 -0
  58. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/pandas_type_converter.py +0 -0
  59. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/protobuf_exporter.py +0 -0
  60. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/pydantic_exporter.py +0 -0
  61. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/rdf_exporter.py +0 -0
  62. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/sodacl_exporter.py +0 -0
  63. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/spark_exporter.py +0 -0
  64. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/sql_exporter.py +0 -0
  65. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/export/sqlalchemy_exporter.py +0 -0
  66. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/avro_importer.py +0 -0
  67. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/bigquery_importer.py +0 -0
  68. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/csv_importer.py +0 -0
  69. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/dbml_importer.py +0 -0
  70. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/dbt_importer.py +0 -0
  71. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/dcs_importer.py +0 -0
  72. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/excel_importer.py +0 -0
  73. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/glue_importer.py +0 -0
  74. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/iceberg_importer.py +0 -0
  75. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/importer.py +0 -0
  76. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/importer_factory.py +0 -0
  77. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/json_importer.py +0 -0
  78. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/jsonschema_importer.py +0 -0
  79. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/odcs_helper.py +0 -0
  80. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/odcs_importer.py +0 -0
  81. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/parquet_importer.py +0 -0
  82. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/protobuf_importer.py +0 -0
  83. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/spark_importer.py +0 -0
  84. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/sql_importer.py +0 -0
  85. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/imports/unity_importer.py +0 -0
  86. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/init/init_template.py +0 -0
  87. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/integration/entropy_data.py +0 -0
  88. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/lint/files.py +0 -0
  89. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/lint/resolve.py +0 -0
  90. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/lint/resources.py +0 -0
  91. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/lint/schema.py +0 -0
  92. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/lint/urls.py +0 -0
  93. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/model/exceptions.py +0 -0
  94. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/model/odcs.py +0 -0
  95. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/model/run.py +0 -0
  96. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/output/__init__.py +0 -0
  97. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/output/junit_test_results.py +0 -0
  98. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/output/output_format.py +0 -0
  99. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/output/test_results_writer.py +0 -0
  100. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/py.typed +0 -0
  101. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  102. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  103. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
  104. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  105. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
  106. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
  107. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  108. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
  109. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
  110. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/datacontract.html +0 -0
  111. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/datacontract_odcs.html +0 -0
  112. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/index.html +0 -0
  113. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/datacontract_information.html +0 -0
  114. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  115. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/datacontract_terms.html +0 -0
  116. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/definition.html +0 -0
  117. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/example.html +0 -0
  118. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/model_field.html +0 -0
  119. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/quality.html +0 -0
  120. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/partials/server.html +0 -0
  121. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract/templates/style/output.css +0 -0
  122. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  123. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract_cli.egg-info/entry_points.txt +0 -0
  124. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/datacontract_cli.egg-info/top_level.txt +0 -0
  125. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/setup.cfg +0 -0
  126. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_api.py +0 -0
  127. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_catalog.py +0 -0
  128. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_cli.py +0 -0
  129. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_data_contract_checks.py +0 -0
  130. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_data_contract_specification.py +0 -0
  131. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_description_linter.py +0 -0
  132. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_download_datacontract_file.py +0 -0
  133. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_duckdb_json.py +0 -0
  134. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_avro.py +0 -0
  135. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_avro_idl.py +0 -0
  136. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_bigquery.py +0 -0
  137. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_complex_data_contract.py +0 -0
  138. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_custom.py +0 -0
  139. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_custom_exporter.py +0 -0
  140. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_data_caterer.py +0 -0
  141. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_dbml.py +0 -0
  142. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_dbt_models.py +0 -0
  143. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_dbt_sources.py +0 -0
  144. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_dbt_staging_sql.py +0 -0
  145. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_dqx.py +0 -0
  146. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_excel.py +0 -0
  147. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_go.py +0 -0
  148. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_great_expectations.py +0 -0
  149. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_html.py +0 -0
  150. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_iceberg.py +0 -0
  151. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_jsonschema.py +0 -0
  152. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_markdown.py +0 -0
  153. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_mermaid.py +0 -0
  154. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_odcs_v3.py +0 -0
  155. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_protobuf.py +0 -0
  156. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_pydantic.py +0 -0
  157. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_rdf.py +0 -0
  158. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_sodacl.py +0 -0
  159. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_spark.py +0 -0
  160. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_sql.py +0 -0
  161. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_sql_query.py +0 -0
  162. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_export_sqlalchemy.py +0 -0
  163. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_avro.py +0 -0
  164. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_bigquery.py +0 -0
  165. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_csv.py +0 -0
  166. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_dbml.py +0 -0
  167. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_dbt.py +0 -0
  168. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_excel.py +0 -0
  169. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_glue.py +0 -0
  170. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_iceberg.py +0 -0
  171. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_json.py +0 -0
  172. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_jsonschema.py +0 -0
  173. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_odcs_v3.py +0 -0
  174. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_parquet.py +0 -0
  175. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_protobuf.py +0 -0
  176. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_spark.py +0 -0
  177. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_sql_oracle.py +0 -0
  178. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_sql_postgres.py +0 -0
  179. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_sql_sqlserver.py +0 -0
  180. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_import_unity_file.py +0 -0
  181. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_integration_entropydata.py +0 -0
  182. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_lint.py +0 -0
  183. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_resolve.py +0 -0
  184. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_roundtrip_jsonschema.py +0 -0
  185. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_api.py +0 -0
  186. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_athena_iceberg.py +0 -0
  187. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_azure_remote.py +0 -0
  188. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_bigquery.py +0 -0
  189. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_databricks.py +0 -0
  190. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_dataframe.py +0 -0
  191. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_delta.py +0 -0
  192. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_gcs_csv_remote.py +0 -0
  193. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_gcs_json_remote.py +0 -0
  194. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_kafka.py +0 -0
  195. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_kafka_remote.py +0 -0
  196. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_local_json.py +0 -0
  197. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_local_json_nd.py +0 -0
  198. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_oracle.py +0 -0
  199. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_output_junit.py +0 -0
  200. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_parquet.py +0 -0
  201. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_postgres.py +0 -0
  202. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_quality.py +0 -0
  203. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_csv.py +0 -0
  204. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_delta.py +0 -0
  205. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_json.py +0 -0
  206. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_json_complex.py +0 -0
  207. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_json_multiple_models.py +0 -0
  208. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_s3_json_remote.py +0 -0
  209. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_snowflake.py +0 -0
  210. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/tests/test_test_sqlserver.py +0 -0
  211. {datacontract_cli-0.11.1 → datacontract_cli-0.11.2}/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.11.1
3
+ Version: 0.11.2
4
4
  Summary: The datacontract CLI is an open source command-line tool for working with Data Contracts. It uses data contract YAML files to lint the data contract, connect to data sources and execute schema and quality tests, detect breaking changes, and export to different formats. The tool is written in Python. It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a Python library.
5
5
  Author-email: Jochen Christ <jochen.christ@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
6
6
  License-Expression: MIT
@@ -20,8 +20,8 @@ Requires-Dist: fastparquet<2025.0.0,>=2024.5.0
20
20
  Requires-Dist: numpy<2.0.0,>=1.26.4
21
21
  Requires-Dist: python-multipart<1.0.0,>=0.0.20
22
22
  Requires-Dist: rich<15.0,>=13.7
23
- Requires-Dist: sqlglot<28.0.0,>=26.6.0
24
- Requires-Dist: duckdb<2.0.0,>=1.0.0
23
+ Requires-Dist: sqlglot<29.0.0,>=26.6.0
24
+ Requires-Dist: duckdb<1.4.0,>=1.0.0
25
25
  Requires-Dist: soda-core-duckdb<3.6.0,>=3.3.20
26
26
  Requires-Dist: setuptools>=60
27
27
  Requires-Dist: python-dotenv<2.0.0,>=1.0.0
@@ -41,7 +41,7 @@ Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == "excel"
41
41
  Provides-Extra: databricks
42
42
  Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
43
43
  Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
44
- Requires-Dist: databricks-sql-connector<4.2.0,>=3.7.0; extra == "databricks"
44
+ Requires-Dist: databricks-sql-connector<4.3.0,>=3.7.0; extra == "databricks"
45
45
  Requires-Dist: databricks-sdk<0.74.0; extra == "databricks"
46
46
  Requires-Dist: pyspark<4.0.0,>=3.5.5; extra == "databricks"
47
47
  Provides-Extra: iceberg
@@ -56,7 +56,7 @@ Provides-Extra: s3
56
56
  Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
57
57
  Requires-Dist: aiobotocore<2.26.0,>=2.17.0; extra == "s3"
58
58
  Provides-Extra: snowflake
59
- Requires-Dist: snowflake-connector-python[pandas]<4.1,>=3.6; extra == "snowflake"
59
+ Requires-Dist: snowflake-connector-python[pandas]<4.2,>=3.6; extra == "snowflake"
60
60
  Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
61
61
  Provides-Extra: sqlserver
62
62
  Requires-Dist: soda-core-sqlserver<3.6.0,>=3.3.20; extra == "sqlserver"
@@ -86,9 +86,9 @@ Requires-Dist: datacontract-cli[all]; extra == "dev"
86
86
  Requires-Dist: httpx==0.28.1; extra == "dev"
87
87
  Requires-Dist: kafka-python; extra == "dev"
88
88
  Requires-Dist: minio==7.2.17; extra == "dev"
89
- Requires-Dist: moto==5.1.17; extra == "dev"
89
+ Requires-Dist: moto==5.1.18; extra == "dev"
90
90
  Requires-Dist: pandas>=2.1.0; extra == "dev"
91
- Requires-Dist: pre-commit<4.5.0,>=3.7.1; extra == "dev"
91
+ Requires-Dist: pre-commit<4.6.0,>=3.7.1; extra == "dev"
92
92
  Requires-Dist: pytest; extra == "dev"
93
93
  Requires-Dist: pytest-xdist; extra == "dev"
94
94
  Requires-Dist: pymssql==2.3.9; extra == "dev"
@@ -120,7 +120,7 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
120
120
  Let's look at this data contract:
121
121
  [https://datacontract.com/orders-v1.odcs.yaml](https://datacontract.com/orders-v1.odcs.yaml)
122
122
 
123
- We have a _servers_ section with endpoint details to a Postgres database, _schema_ for the structure and semantics of the data, _slaAttributes_ and _quality_ attributes that describe the expected freshness and number of rows.
123
+ We have a _servers_ section with endpoint details to a Postgres database, _schema_ for the structure and semantics of the data, _service levels_ and _quality_ attributes that describe the expected freshness and number of rows.
124
124
 
125
125
  This data contract contains all information to connect to the database and check that the actual data meets the defined schema specification and quality expectations.
126
126
  We can use this information to test if the actual data product is compliant to the data contract.
@@ -342,6 +342,7 @@ A list of available extras:
342
342
  | Snowflake Integration | `pip install datacontract-cli[snowflake]` |
343
343
  | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
344
344
  | Trino | `pip install datacontract-cli[trino]` |
345
+ | Impala | `pip install datacontract-cli[impala]` |
345
346
  | dbt | `pip install datacontract-cli[dbt]` |
346
347
  | DBML | `pip install datacontract-cli[dbml]` |
347
348
  | Parquet | `pip install datacontract-cli[parquet]` |
@@ -493,6 +494,7 @@ Supported server types:
493
494
  - [kafka](#kafka)
494
495
  - [postgres](#postgres)
495
496
  - [trino](#trino)
497
+ - [impala](#impala)
496
498
  - [api](#api)
497
499
  - [local](#local)
498
500
 
@@ -1023,6 +1025,53 @@ models:
1023
1025
  | `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
1024
1026
 
1025
1027
 
1028
+ #### Impala
1029
+
1030
+ Data Contract CLI can run Soda checks against an Apache Impala cluster.
1031
+
1032
+ ##### Example
1033
+
1034
+ datacontract.yaml
1035
+ ```yaml
1036
+ servers:
1037
+ impala:
1038
+ type: impala
1039
+ host: my-impala-host
1040
+ port: 443
1041
+ # Optional default database used for Soda scans
1042
+ database: my_database
1043
+ models:
1044
+ my_table_1: # corresponds to a table
1045
+ type: table
1046
+ # fields as usual …
1047
+ ```
1048
+
1049
+ ##### Environment Variables
1050
+
1051
+ | Environment Variable | Example | Description |
1052
+ |------------------------------- |-------------------- |------------- |
1053
+ | `DATACONTRACT_IMPALA_USERNAME` | `analytics_user` | Username used to connect to Impala |
1054
+ | `DATACONTRACT_IMPALA_PASSWORD` | `mysecretpassword` | Password for the Impala user |
1055
+ | `DATACONTRACT_IMPALA_USE_SSL` | `true` | Whether to use SSL; defaults to true if unset |
1056
+ | `DATACONTRACT_IMPALA_AUTH_MECHANISM` | `LDAP` | Authentication mechanism; defaults to LDAP |
1057
+ | `DATACONTRACT_IMPALA_USE_HTTP_TRANSPORT` | `true` | Whether to use the HTTP transport; defaults to true |
1058
+ | `DATACONTRACT_IMPALA_HTTP_PATH` | `cliservice` | HTTP path for the Impala service; defaults to cliservice |
1059
+
1060
+ ### Type-mapping note (logicalType → Impala type)
1061
+
1062
+ If `physicalType` is not specified in the schema, we recommend the following mapping from `logicalType` to Impala column types:
1063
+
1064
+ |logicalType | Recommended Impala type |
1065
+ |------------|-------------------------|
1066
+ | `integer` | `INT` or `BIGINT` |
1067
+ | `number` | `DOUBLE`/`decimal(..)` |
1068
+ | `string` | `STRING` or `VARCHAR` |
1069
+ | `boolean` | `BOOLEAN` |
1070
+ | `date` | `DATE` |
1071
+ | `datetime` | `TIMESTAMP` |
1072
+
1073
+ This keeps the Impala schema compatible with the expectations of the Soda checks generated by datacontract-cli.
1074
+
1026
1075
  #### API
1027
1076
 
1028
1077
  Data Contract CLI can test APIs that return data in JSON format.
@@ -1569,38 +1618,25 @@ datacontract import --format sql --source my_ddl.sql --dialect postgres --output
1569
1618
 
1570
1619
  Available import options:
1571
1620
 
1572
- | Type | Description | Status |
1573
- |--------------------|------------------------------------------------|--------|
1574
- | `avro` | Import from AVRO schemas | ✅ |
1575
- | `bigquery` | Import from BigQuery Schemas | ✅ |
1576
- | `csv` | Import from CSV File | ✅ |
1577
- | `dbml` | Import from DBML models | ✅ |
1578
- | `dbt` | Import from dbt models | ✅ |
1579
- | `excel` | Import from ODCS Excel Template | ✅ |
1580
- | `glue` | Import from AWS Glue DataCatalog | ✅ |
1581
- | `iceberg` | Import from an Iceberg JSON Schema Definition | partial |
1582
- | `jsonschema` | Import from JSON Schemas | ✅ |
1583
- | `odcs` | Import from Open Data Contract Standard (ODCS) | ✅ |
1584
- | `parquet` | Import from Parquet File Metadata | ✅ |
1585
- | `protobuf` | Import from Protobuf schemas | ✅ |
1586
- | `spark` | Import from Spark StructTypes, Variant | ✅ |
1587
- | `sql` | Import from SQL DDL | |
1588
- | `unity` | Import from Databricks Unity Catalog | partial |
1589
- | `excel` | Import from ODCS Excel Template | |
1590
- | Missing something? | Please create an issue on GitHub | TBD |
1591
-
1592
-
1593
- #### ODCS
1594
-
1595
- Import from Open Data Contract Standard (ODCS) v2 or v3.
1596
- The importer automatically detects the ODCS version and imports the data contract.
1597
-
1598
- Examples:
1621
+ | Type | Description | Status |
1622
+ |--------------------|-----------------------------------------------|---------|
1623
+ | `avro` | Import from AVRO schemas | ✅ |
1624
+ | `bigquery` | Import from BigQuery Schemas | ✅ |
1625
+ | `csv` | Import from CSV File | ✅ |
1626
+ | `dbml` | Import from DBML models | ✅ |
1627
+ | `dbt` | Import from dbt models | ✅ |
1628
+ | `excel` | Import from ODCS Excel Template | ✅ |
1629
+ | `glue` | Import from AWS Glue DataCatalog | ✅ |
1630
+ | `iceberg` | Import from an Iceberg JSON Schema Definition | partial |
1631
+ | `jsonschema` | Import from JSON Schemas | ✅ |
1632
+ | `parquet` | Import from Parquet File Metadata | ✅ |
1633
+ | `protobuf` | Import from Protobuf schemas | ✅ |
1634
+ | `spark` | Import from Spark StructTypes, Variant | ✅ |
1635
+ | `sql` | Import from SQL DDL | ✅ |
1636
+ | `unity` | Import from Databricks Unity Catalog | partial |
1637
+ | `excel` | Import from ODCS Excel Template | |
1638
+ | Missing something? | Please create an issue on GitHub | TBD |
1599
1639
 
1600
- ```bash
1601
- # Example import from ODCS
1602
- datacontract import --format odcs --source my_data_contract.odcs.yaml
1603
- ```
1604
1640
 
1605
1641
  #### BigQuery
1606
1642
 
@@ -2202,8 +2238,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
2202
2238
 
2203
2239
  ## Related Tools
2204
2240
 
2205
- - [Data Contract Manager](https://www.datacontract-manager.com/) is a commercial tool to manage data contracts. It contains a web UI, access management, and data governance for a full enterprise data marketplace.
2206
- - [Data Contract GPT](https://gpt.datacontract.com) is a custom GPT that can help you write data contracts.
2241
+ - [Entropy Data](https://www.entropy-data.com/) is a commercial tool to manage data contracts. It contains a web UI, access management, and data governance for a data product marketplace based on data contracts.
2207
2242
  - [Data Contract Editor](https://editor.datacontract.com) is an editor for Data Contracts, including a live html preview.
2208
2243
  - [Data Contract Playground](https://data-catering.github.io/data-contract-playground/) allows you to validate and export your data contract to different formats within your browser.
2209
2244
 
@@ -21,7 +21,7 @@ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a P
21
21
  Let's look at this data contract:
22
22
  [https://datacontract.com/orders-v1.odcs.yaml](https://datacontract.com/orders-v1.odcs.yaml)
23
23
 
24
- We have a _servers_ section with endpoint details to a Postgres database, _schema_ for the structure and semantics of the data, _slaAttributes_ and _quality_ attributes that describe the expected freshness and number of rows.
24
+ We have a _servers_ section with endpoint details to a Postgres database, _schema_ for the structure and semantics of the data, _service levels_ and _quality_ attributes that describe the expected freshness and number of rows.
25
25
 
26
26
  This data contract contains all information to connect to the database and check that the actual data meets the defined schema specification and quality expectations.
27
27
  We can use this information to test if the actual data product is compliant to the data contract.
@@ -243,6 +243,7 @@ A list of available extras:
243
243
  | Snowflake Integration | `pip install datacontract-cli[snowflake]` |
244
244
  | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
245
245
  | Trino | `pip install datacontract-cli[trino]` |
246
+ | Impala | `pip install datacontract-cli[impala]` |
246
247
  | dbt | `pip install datacontract-cli[dbt]` |
247
248
  | DBML | `pip install datacontract-cli[dbml]` |
248
249
  | Parquet | `pip install datacontract-cli[parquet]` |
@@ -394,6 +395,7 @@ Supported server types:
394
395
  - [kafka](#kafka)
395
396
  - [postgres](#postgres)
396
397
  - [trino](#trino)
398
+ - [impala](#impala)
397
399
  - [api](#api)
398
400
  - [local](#local)
399
401
 
@@ -924,6 +926,53 @@ models:
924
926
  | `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
925
927
 
926
928
 
929
+ #### Impala
930
+
931
+ Data Contract CLI can run Soda checks against an Apache Impala cluster.
932
+
933
+ ##### Example
934
+
935
+ datacontract.yaml
936
+ ```yaml
937
+ servers:
938
+ impala:
939
+ type: impala
940
+ host: my-impala-host
941
+ port: 443
942
+ # Optional default database used for Soda scans
943
+ database: my_database
944
+ models:
945
+ my_table_1: # corresponds to a table
946
+ type: table
947
+ # fields as usual …
948
+ ```
949
+
950
+ ##### Environment Variables
951
+
952
+ | Environment Variable | Example | Description |
953
+ |------------------------------- |-------------------- |------------- |
954
+ | `DATACONTRACT_IMPALA_USERNAME` | `analytics_user` | Username used to connect to Impala |
955
+ | `DATACONTRACT_IMPALA_PASSWORD` | `mysecretpassword` | Password for the Impala user |
956
+ | `DATACONTRACT_IMPALA_USE_SSL` | `true` | Whether to use SSL; defaults to true if unset |
957
+ | `DATACONTRACT_IMPALA_AUTH_MECHANISM` | `LDAP` | Authentication mechanism; defaults to LDAP |
958
+ | `DATACONTRACT_IMPALA_USE_HTTP_TRANSPORT` | `true` | Whether to use the HTTP transport; defaults to true |
959
+ | `DATACONTRACT_IMPALA_HTTP_PATH` | `cliservice` | HTTP path for the Impala service; defaults to cliservice |
960
+
961
+ ### Type-mapping note (logicalType → Impala type)
962
+
963
+ If `physicalType` is not specified in the schema, we recommend the following mapping from `logicalType` to Impala column types:
964
+
965
+ |logicalType | Recommended Impala type |
966
+ |------------|-------------------------|
967
+ | `integer` | `INT` or `BIGINT` |
968
+ | `number` | `DOUBLE`/`decimal(..)` |
969
+ | `string` | `STRING` or `VARCHAR` |
970
+ | `boolean` | `BOOLEAN` |
971
+ | `date` | `DATE` |
972
+ | `datetime` | `TIMESTAMP` |
973
+
974
+ This keeps the Impala schema compatible with the expectations of the Soda checks generated by datacontract-cli.
975
+
927
976
  #### API
928
977
 
929
978
  Data Contract CLI can test APIs that return data in JSON format.
@@ -1470,38 +1519,25 @@ datacontract import --format sql --source my_ddl.sql --dialect postgres --output
1470
1519
 
1471
1520
  Available import options:
1472
1521
 
1473
- | Type | Description | Status |
1474
- |--------------------|------------------------------------------------|--------|
1475
- | `avro` | Import from AVRO schemas | ✅ |
1476
- | `bigquery` | Import from BigQuery Schemas | ✅ |
1477
- | `csv` | Import from CSV File | ✅ |
1478
- | `dbml` | Import from DBML models | ✅ |
1479
- | `dbt` | Import from dbt models | ✅ |
1480
- | `excel` | Import from ODCS Excel Template | ✅ |
1481
- | `glue` | Import from AWS Glue DataCatalog | ✅ |
1482
- | `iceberg` | Import from an Iceberg JSON Schema Definition | partial |
1483
- | `jsonschema` | Import from JSON Schemas | ✅ |
1484
- | `odcs` | Import from Open Data Contract Standard (ODCS) | ✅ |
1485
- | `parquet` | Import from Parquet File Metadata | ✅ |
1486
- | `protobuf` | Import from Protobuf schemas | ✅ |
1487
- | `spark` | Import from Spark StructTypes, Variant | ✅ |
1488
- | `sql` | Import from SQL DDL | |
1489
- | `unity` | Import from Databricks Unity Catalog | partial |
1490
- | `excel` | Import from ODCS Excel Template | |
1491
- | Missing something? | Please create an issue on GitHub | TBD |
1492
-
1493
-
1494
- #### ODCS
1495
-
1496
- Import from Open Data Contract Standard (ODCS) v2 or v3.
1497
- The importer automatically detects the ODCS version and imports the data contract.
1498
-
1499
- Examples:
1522
+ | Type | Description | Status |
1523
+ |--------------------|-----------------------------------------------|---------|
1524
+ | `avro` | Import from AVRO schemas | ✅ |
1525
+ | `bigquery` | Import from BigQuery Schemas | ✅ |
1526
+ | `csv` | Import from CSV File | ✅ |
1527
+ | `dbml` | Import from DBML models | ✅ |
1528
+ | `dbt` | Import from dbt models | ✅ |
1529
+ | `excel` | Import from ODCS Excel Template | ✅ |
1530
+ | `glue` | Import from AWS Glue DataCatalog | ✅ |
1531
+ | `iceberg` | Import from an Iceberg JSON Schema Definition | partial |
1532
+ | `jsonschema` | Import from JSON Schemas | ✅ |
1533
+ | `parquet` | Import from Parquet File Metadata | ✅ |
1534
+ | `protobuf` | Import from Protobuf schemas | ✅ |
1535
+ | `spark` | Import from Spark StructTypes, Variant | ✅ |
1536
+ | `sql` | Import from SQL DDL | ✅ |
1537
+ | `unity` | Import from Databricks Unity Catalog | partial |
1538
+ | `excel` | Import from ODCS Excel Template | |
1539
+ | Missing something? | Please create an issue on GitHub | TBD |
1500
1540
 
1501
- ```bash
1502
- # Example import from ODCS
1503
- datacontract import --format odcs --source my_data_contract.odcs.yaml
1504
- ```
1505
1541
 
1506
1542
  #### BigQuery
1507
1543
 
@@ -2103,8 +2139,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
2103
2139
 
2104
2140
  ## Related Tools
2105
2141
 
2106
- - [Data Contract Manager](https://www.datacontract-manager.com/) is a commercial tool to manage data contracts. It contains a web UI, access management, and data governance for a full enterprise data marketplace.
2107
- - [Data Contract GPT](https://gpt.datacontract.com) is a custom GPT that can help you write data contracts.
2142
+ - [Entropy Data](https://www.entropy-data.com/) is a commercial tool to manage data contracts. It contains a web UI, access management, and data governance for a data product marketplace based on data contracts.
2108
2143
  - [Data Contract Editor](https://editor.datacontract.com) is an editor for Data Contracts, including a live html preview.
2109
2144
  - [Data Contract Playground](https://data-catering.github.io/data-contract-playground/) allows you to validate and export your data contract to different formats within your browser.
2110
2145
 
@@ -14,6 +14,7 @@ from open_data_contract_standard.model import OpenDataContractStandard, Server
14
14
  from datacontract.engines.soda.connections.bigquery import to_bigquery_soda_configuration
15
15
  from datacontract.engines.soda.connections.databricks import to_databricks_soda_configuration
16
16
  from datacontract.engines.soda.connections.duckdb_connection import get_duckdb_connection
17
+ from datacontract.engines.soda.connections.impala import to_impala_soda_configuration
17
18
  from datacontract.engines.soda.connections.kafka import create_spark_session, read_kafka_topic
18
19
  from datacontract.engines.soda.connections.postgres import to_postgres_soda_configuration
19
20
  from datacontract.engines.soda.connections.snowflake import to_snowflake_soda_configuration
@@ -95,6 +96,18 @@ def check_soda_execute(
95
96
  logging.info("Use Spark to connect to data source")
96
97
  scan.add_spark_session(spark, data_source_name="datacontract-cli")
97
98
  scan.set_data_source_name("datacontract-cli")
99
+
100
+ # ------------------------------------------------------------------
101
+ # NEW: native Impala server type
102
+ # ------------------------------------------------------------------
103
+ elif server.type == "impala":
104
+ run.log_info("Connecting to Impala via Soda engine")
105
+ soda_configuration_str = to_impala_soda_configuration(server)
106
+ scan.add_configuration_yaml_str(soda_configuration_str)
107
+ # data source name must match what we configure in to_impala_soda_configuration
108
+ scan.set_data_source_name("impala")
109
+
110
+
98
111
  elif server.type == "kafka":
99
112
  if spark is None:
100
113
  spark = create_spark_session()
@@ -218,4 +231,4 @@ def update_reason(check, c):
218
231
  # print(check.reason)
219
232
  break # Exit the loop once the desired block is found
220
233
  if "fail" in c["diagnostics"]:
221
- check.reason = f"Value: {c['diagnostics']['value']} Fail: {c['diagnostics']['fail']}"
234
+ check.reason = f"Value: {c['diagnostics']['value']} Fail: {c['diagnostics']['fail']}"
@@ -0,0 +1,74 @@
1
+ import os
2
+
3
+ import yaml
4
+
5
+
6
+ def _get_bool_env(name: str, default: bool) -> bool:
7
+ """
8
+ Helper to read a boolean from an environment variable.
9
+
10
+ Accepts: 1/0, true/false, yes/no, on/off (case-insensitive).
11
+ """
12
+ value = os.getenv(name)
13
+ if value is None:
14
+ return default
15
+ return value.strip().lower() in ("1", "true", "yes", "y", "on")
16
+
17
+
18
+ def to_impala_soda_configuration(server):
19
+ """
20
+ Build a Soda configuration for an Impala data source.
21
+
22
+ Expects the datacontract `server` block to have at least:
23
+ - type (e.g. "impala")
24
+ - host
25
+ - port (optional; defaults to 443 if not set)
26
+
27
+ Credentials are taken from environment variables:
28
+ - DATACONTRACT_IMPALA_USERNAME
29
+ - DATACONTRACT_IMPALA_PASSWORD
30
+
31
+ Connection behaviour can be overridden via:
32
+ - DATACONTRACT_IMPALA_USE_SSL (default: true)
33
+ - DATACONTRACT_IMPALA_AUTH_MECHANISM (default: "LDAP")
34
+ - DATACONTRACT_IMPALA_USE_HTTP_TRANSPORT (default: true)
35
+ - DATACONTRACT_IMPALA_HTTP_PATH (default: "cliservice")
36
+ """
37
+
38
+ port = getattr(server, "port", None)
39
+ if port is None:
40
+ port = 443
41
+
42
+ # Optional database / schema default, e.g. "edpdevs_scratch"
43
+ database = getattr(server, "database", None)
44
+
45
+ use_ssl = _get_bool_env("DATACONTRACT_IMPALA_USE_SSL", True)
46
+ auth_mechanism = os.getenv("DATACONTRACT_IMPALA_AUTH_MECHANISM", "LDAP")
47
+ use_http_transport = _get_bool_env(
48
+ "DATACONTRACT_IMPALA_USE_HTTP_TRANSPORT", True
49
+ )
50
+ http_path = os.getenv("DATACONTRACT_IMPALA_HTTP_PATH", "cliservice")
51
+
52
+ connection = {
53
+ "host": server.host,
54
+ "port": str(port),
55
+ "username": os.getenv("DATACONTRACT_IMPALA_USERNAME"),
56
+ "password": os.getenv("DATACONTRACT_IMPALA_PASSWORD"),
57
+ "use_ssl": use_ssl,
58
+ "auth_mechanism": auth_mechanism,
59
+ "use_http_transport": use_http_transport,
60
+ "http_path": http_path,
61
+ }
62
+
63
+ if database:
64
+ connection["database"] = database
65
+
66
+ soda_configuration = {
67
+ f"data_source {server.type}": {
68
+ "type": "impala",
69
+ "connection": connection,
70
+ }
71
+ }
72
+
73
+ soda_configuration_str = yaml.dump(soda_configuration)
74
+ return soda_configuration_str
@@ -518,6 +518,64 @@ def convert_type_to_trino(field: Union[SchemaProperty, FieldLike]) -> None | str
518
518
  return None
519
519
 
520
520
 
521
+ def convert_type_to_impala(field: Union[SchemaProperty, FieldLike]) -> None | str:
522
+ """Convert from supported data contract types to equivalent Impala types.
523
+
524
+ Used as a fallback when `physicalType` is not present.
525
+ """
526
+ # Allow an explicit override via config/customProperties
527
+ impala_type = _get_config_value(field, "impalaType")
528
+ if impala_type:
529
+ return impala_type
530
+
531
+ field_type = _get_type(field)
532
+ if not field_type:
533
+ return None
534
+
535
+ t = field_type.lower()
536
+
537
+ # String-like
538
+ if t in ["string", "varchar", "text"]:
539
+ return "STRING"
540
+
541
+ # Numeric / decimal
542
+ if t in ["number", "decimal", "numeric"]:
543
+ precision = _get_precision(field) or 38
544
+ scale = _get_scale(field) or 0
545
+ return f"DECIMAL({precision},{scale})"
546
+
547
+ if t == "float":
548
+ return "FLOAT"
549
+ if t == "double":
550
+ return "DOUBLE"
551
+
552
+ # Integers
553
+ if t in ["integer", "int"]:
554
+ return "INT"
555
+ if t in ["long", "bigint"]:
556
+ return "BIGINT"
557
+
558
+ # Boolean
559
+ if t == "boolean":
560
+ return "BOOLEAN"
561
+
562
+ # Temporal – Impala has a single TIMESTAMP type
563
+ if t in ["timestamp", "timestamp_ntz", "timestamp_tz"]:
564
+ return "TIMESTAMP"
565
+ if t == "date":
566
+ return "DATE"
567
+ # No dedicated TIME type in Impala → store as string
568
+ if t == "time":
569
+ return "STRING"
570
+
571
+ # Binary
572
+ if t in ["bytes", "binary"]:
573
+ return "BINARY"
574
+
575
+ # For complex / JSON-like types we currently do not emit a type check
576
+ # (returning None means no "has type" check is generated)
577
+ return None
578
+
521
579
  def convert_type_to_oracle(schema_property: SchemaProperty) -> None | str:
522
580
  """Convert ODCS logical types to Oracle types.
523
581
 
@@ -547,4 +605,4 @@ def convert_type_to_oracle(schema_property: SchemaProperty) -> None | str:
547
605
  "array": "CLOB",
548
606
  }
549
607
 
550
- return mapping.get(logical_type)
608
+ return mapping.get(logical_type)