datacontract-cli 0.10.24__tar.gz → 0.10.26__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of datacontract-cli might be problematic. Click here for more details.

Files changed (210) hide show
  1. {datacontract_cli-0.10.24/datacontract_cli.egg-info → datacontract_cli-0.10.26}/PKG-INFO +59 -18
  2. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/README.md +49 -12
  3. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/api.py +3 -3
  4. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/cli.py +1 -1
  5. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/soda/connections/kafka.py +2 -1
  6. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/great_expectations_converter.py +49 -2
  7. datacontract_cli-0.10.26/datacontract/export/odcs_v3_exporter.py +377 -0
  8. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/spark_converter.py +1 -1
  9. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/sql_converter.py +4 -0
  10. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/sql_type_converter.py +2 -0
  11. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/avro_importer.py +23 -23
  12. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/csv_importer.py +2 -2
  13. datacontract_cli-0.10.26/datacontract/imports/excel_importer.py +850 -0
  14. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/importer.py +4 -2
  15. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/importer_factory.py +5 -0
  16. datacontract_cli-0.10.26/datacontract/imports/odcs_v3_importer.py +415 -0
  17. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/protobuf_importer.py +0 -2
  18. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/spark_importer.py +2 -0
  19. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/linters/description_linter.py +1 -3
  20. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/linters/field_reference_linter.py +1 -2
  21. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/linters/notice_period_linter.py +2 -2
  22. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/linters/valid_constraints_linter.py +3 -3
  23. datacontract_cli-0.10.26/datacontract/model/data_contract_specification/__init__.py +1 -0
  24. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26/datacontract_cli.egg-info}/PKG-INFO +59 -18
  25. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract_cli.egg-info/SOURCES.txt +3 -1
  26. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract_cli.egg-info/requires.txt +9 -4
  27. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/pyproject.toml +16 -6
  28. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_great_expectations.py +103 -0
  29. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_odcs_v3.py +11 -6
  30. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_sql.py +11 -11
  31. datacontract_cli-0.10.26/tests/test_import_excel.py +40 -0
  32. datacontract_cli-0.10.24/datacontract/export/odcs_v3_exporter.py +0 -334
  33. datacontract_cli-0.10.24/datacontract/imports/odcs_v3_importer.py +0 -358
  34. datacontract_cli-0.10.24/datacontract/model/data_contract_specification.py +0 -327
  35. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/LICENSE +0 -0
  36. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/MANIFEST.in +0 -0
  37. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/__init__.py +0 -0
  38. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/breaking/breaking.py +0 -0
  39. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/breaking/breaking_change.py +0 -0
  40. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/breaking/breaking_rules.py +0 -0
  41. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/catalog/catalog.py +0 -0
  42. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/data_contract.py +0 -0
  43. {datacontract_cli-0.10.24/datacontract/output → datacontract_cli-0.10.26/datacontract/engines}/__init__.py +0 -0
  44. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/data_contract_checks.py +0 -0
  45. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/data_contract_test.py +0 -0
  46. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  47. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  48. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  49. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  50. {datacontract_cli-0.10.24/datacontract/lint/linters → datacontract_cli-0.10.26/datacontract/engines/soda}/__init__.py +0 -0
  51. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/soda/check_soda_execute.py +0 -0
  52. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/soda/connections/bigquery.py +0 -0
  53. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/soda/connections/databricks.py +0 -0
  54. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
  55. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/soda/connections/postgres.py +0 -0
  56. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/soda/connections/snowflake.py +0 -0
  57. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  58. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/engines/soda/connections/trino.py +0 -0
  59. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/__init__.py +0 -0
  60. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/avro_converter.py +0 -0
  61. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/avro_idl_converter.py +0 -0
  62. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/bigquery_converter.py +0 -0
  63. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/custom_converter.py +0 -0
  64. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/data_caterer_converter.py +0 -0
  65. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/dbml_converter.py +0 -0
  66. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/dbt_converter.py +0 -0
  67. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/dcs_exporter.py +0 -0
  68. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/duckdb_type_converter.py +0 -0
  69. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/exporter.py +0 -0
  70. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/exporter_factory.py +0 -0
  71. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/go_converter.py +0 -0
  72. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/html_export.py +0 -0
  73. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/iceberg_converter.py +0 -0
  74. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/jsonschema_converter.py +0 -0
  75. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/markdown_converter.py +0 -0
  76. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/pandas_type_converter.py +0 -0
  77. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/protobuf_converter.py +0 -0
  78. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/pydantic_converter.py +0 -0
  79. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/rdf_converter.py +0 -0
  80. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/sodacl_converter.py +0 -0
  81. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/sqlalchemy_converter.py +0 -0
  82. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/export/terraform_converter.py +0 -0
  83. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/bigquery_importer.py +0 -0
  84. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/dbml_importer.py +0 -0
  85. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/dbt_importer.py +0 -0
  86. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/glue_importer.py +0 -0
  87. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/iceberg_importer.py +0 -0
  88. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/jsonschema_importer.py +0 -0
  89. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/odcs_importer.py +0 -0
  90. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/parquet_importer.py +0 -0
  91. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/sql_importer.py +0 -0
  92. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/imports/unity_importer.py +0 -0
  93. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/init/init_template.py +0 -0
  94. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/integration/datamesh_manager.py +0 -0
  95. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/files.py +0 -0
  96. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/lint.py +0 -0
  97. {datacontract_cli-0.10.24/datacontract/engines/soda → datacontract_cli-0.10.26/datacontract/lint/linters}/__init__.py +0 -0
  98. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/linters/field_pattern_linter.py +0 -0
  99. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/resolve.py +0 -0
  100. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/resources.py +0 -0
  101. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/schema.py +0 -0
  102. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/lint/urls.py +0 -0
  103. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/model/exceptions.py +0 -0
  104. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/model/odcs.py +0 -0
  105. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/model/run.py +0 -0
  106. {datacontract_cli-0.10.24/datacontract/engines → datacontract_cli-0.10.26/datacontract/output}/__init__.py +0 -0
  107. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/output/junit_test_results.py +0 -0
  108. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/output/output_format.py +0 -0
  109. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/output/test_results_writer.py +0 -0
  110. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/py.typed +0 -0
  111. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  112. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  113. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  114. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/datacontract.html +0 -0
  115. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/index.html +0 -0
  116. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/partials/datacontract_information.html +0 -0
  117. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  118. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/partials/datacontract_terms.html +0 -0
  119. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/partials/definition.html +0 -0
  120. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/partials/example.html +0 -0
  121. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/partials/model_field.html +0 -0
  122. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/partials/quality.html +0 -0
  123. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/partials/server.html +0 -0
  124. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract/templates/style/output.css +0 -0
  125. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  126. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract_cli.egg-info/entry_points.txt +0 -0
  127. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/datacontract_cli.egg-info/top_level.txt +0 -0
  128. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/setup.cfg +0 -0
  129. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_api.py +0 -0
  130. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_breaking.py +0 -0
  131. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_catalog.py +0 -0
  132. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_changelog.py +0 -0
  133. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_cli.py +0 -0
  134. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_data_contract_checks.py +0 -0
  135. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_data_contract_specification.py +0 -0
  136. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_description_linter.py +0 -0
  137. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_documentation_linter.py +0 -0
  138. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_download_datacontract_file.py +0 -0
  139. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_duckdb_json.py +0 -0
  140. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_avro.py +0 -0
  141. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_avro_idl.py +0 -0
  142. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_bigquery.py +0 -0
  143. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_complex_data_contract.py +0 -0
  144. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_custom.py +0 -0
  145. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_custom_exporter.py +0 -0
  146. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_data_caterer.py +0 -0
  147. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_dbml.py +0 -0
  148. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_dbt_models.py +0 -0
  149. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_dbt_sources.py +0 -0
  150. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_dbt_staging_sql.py +0 -0
  151. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_go.py +0 -0
  152. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_html.py +0 -0
  153. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_iceberg.py +0 -0
  154. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_jsonschema.py +0 -0
  155. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_markdown.py +0 -0
  156. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_protobuf.py +0 -0
  157. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_pydantic.py +0 -0
  158. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_rdf.py +0 -0
  159. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_sodacl.py +0 -0
  160. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_spark.py +0 -0
  161. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_sql_query.py +0 -0
  162. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_sqlalchemy.py +0 -0
  163. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_export_terraform.py +0 -0
  164. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_field_constraint_linter.py +0 -0
  165. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_field_pattern_linter.py +0 -0
  166. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_field_reference_linter.py +0 -0
  167. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_avro.py +0 -0
  168. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_bigquery.py +0 -0
  169. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_csv.py +0 -0
  170. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_dbml.py +0 -0
  171. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_dbt.py +0 -0
  172. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_glue.py +0 -0
  173. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_iceberg.py +0 -0
  174. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_jsonschema.py +0 -0
  175. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_odcs_v3.py +0 -0
  176. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_parquet.py +0 -0
  177. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_protobuf.py +0 -0
  178. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_spark.py +0 -0
  179. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_sql_postgres.py +0 -0
  180. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_sql_sqlserver.py +0 -0
  181. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_import_unity_file.py +0 -0
  182. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_integration_datameshmanager.py +0 -0
  183. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_lint.py +0 -0
  184. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_notice_period_linter.py +0 -0
  185. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_resolve.py +0 -0
  186. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_roundtrip_jsonschema.py +0 -0
  187. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_spec_fields_field.py +0 -0
  188. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_spec_ref.py +0 -0
  189. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_azure_remote.py +0 -0
  190. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_bigquery.py +0 -0
  191. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_databricks.py +0 -0
  192. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_dataframe.py +0 -0
  193. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_delta.py +0 -0
  194. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_gcs_json_remote.py +0 -0
  195. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_kafka.py +0 -0
  196. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_kafka_remote.py +0 -0
  197. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_local_json.py +0 -0
  198. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_output_junit.py +0 -0
  199. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_parquet.py +0 -0
  200. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_postgres.py +0 -0
  201. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_quality.py +0 -0
  202. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_s3_csv.py +0 -0
  203. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_s3_delta.py +0 -0
  204. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_s3_json.py +0 -0
  205. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_s3_json_complex.py +0 -0
  206. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_s3_json_multiple_models.py +0 -0
  207. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_s3_json_remote.py +0 -0
  208. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_snowflake.py +0 -0
  209. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_sqlserver.py +0 -0
  210. {datacontract_cli-0.10.24 → datacontract_cli-0.10.26}/tests/test_test_trino.py +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacontract-cli
3
- Version: 0.10.24
3
+ Version: 0.10.26
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
+ License-Expression: MIT
6
7
  Project-URL: Homepage, https://cli.datacontract.com
7
8
  Project-URL: Issues, https://github.com/datacontract/datacontract-cli/issues
8
9
  Classifier: Programming Language :: Python :: 3
9
- Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
@@ -28,17 +28,21 @@ Requires-Dist: python-dotenv<2.0.0,>=1.0.0
28
28
  Requires-Dist: boto3<2.0.0,>=1.34.41
29
29
  Requires-Dist: Jinja2<4.0.0,>=3.1.5
30
30
  Requires-Dist: jinja_partials<1.0.0,>=0.2.1
31
+ Requires-Dist: datacontract-specification<2.0.0,>=1.1.1
32
+ Requires-Dist: open-data-contract-standard<4.0.0,>=3.0.4
31
33
  Provides-Extra: avro
32
34
  Requires-Dist: avro==1.12.0; extra == "avro"
33
35
  Provides-Extra: bigquery
34
36
  Requires-Dist: soda-core-bigquery<3.6.0,>=3.3.20; extra == "bigquery"
35
37
  Provides-Extra: csv
36
38
  Requires-Dist: pandas>=2.0.0; extra == "csv"
39
+ Provides-Extra: excel
40
+ Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == "excel"
37
41
  Provides-Extra: databricks
38
42
  Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
39
43
  Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
40
44
  Requires-Dist: databricks-sql-connector<4.1.0,>=3.7.0; extra == "databricks"
41
- Requires-Dist: databricks-sdk<0.50.0; extra == "databricks"
45
+ Requires-Dist: databricks-sdk<0.51.0; extra == "databricks"
42
46
  Provides-Extra: iceberg
43
47
  Requires-Dist: pyiceberg==0.8.1; extra == "iceberg"
44
48
  Provides-Extra: kafka
@@ -66,11 +70,11 @@ Provides-Extra: rdf
66
70
  Requires-Dist: rdflib==7.0.0; extra == "rdf"
67
71
  Provides-Extra: api
68
72
  Requires-Dist: fastapi==0.115.12; extra == "api"
69
- Requires-Dist: uvicorn==0.34.0; extra == "api"
73
+ Requires-Dist: uvicorn==0.34.2; extra == "api"
70
74
  Provides-Extra: protobuf
71
75
  Requires-Dist: grpcio-tools>=1.53; extra == "protobuf"
72
76
  Provides-Extra: all
73
- Requires-Dist: datacontract-cli[api,bigquery,csv,databricks,dbml,dbt,iceberg,kafka,parquet,postgres,protobuf,rdf,s3,snowflake,sqlserver,trino]; extra == "all"
77
+ Requires-Dist: datacontract-cli[api,bigquery,csv,databricks,dbml,dbt,excel,iceberg,kafka,parquet,postgres,protobuf,rdf,s3,snowflake,sqlserver,trino]; extra == "all"
74
78
  Provides-Extra: dev
75
79
  Requires-Dist: datacontract-cli[all]; extra == "dev"
76
80
  Requires-Dist: httpx==0.28.1; extra == "dev"
@@ -80,7 +84,7 @@ Requires-Dist: pandas>=2.1.0; extra == "dev"
80
84
  Requires-Dist: pre-commit<4.3.0,>=3.7.1; extra == "dev"
81
85
  Requires-Dist: pytest; extra == "dev"
82
86
  Requires-Dist: pytest-xdist; extra == "dev"
83
- Requires-Dist: pymssql==2.3.2; extra == "dev"
87
+ Requires-Dist: pymssql==2.3.4; extra == "dev"
84
88
  Requires-Dist: ruff; extra == "dev"
85
89
  Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.9.2; extra == "dev"
86
90
  Requires-Dist: trino==0.333.0; extra == "dev"
@@ -900,6 +904,29 @@ models:
900
904
  | `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
901
905
 
902
906
 
907
+ #### Local
908
+
909
+ Data Contract CLI can test local files in parquet, json, csv, or delta format.
910
+
911
+ ##### Example
912
+
913
+ datacontract.yaml
914
+ ```yaml
915
+ servers:
916
+ local:
917
+ type: local
918
+ path: ./*.parquet
919
+ format: parquet
920
+ models:
921
+ my_table_1: # corresponds to a table
922
+ type: table
923
+ fields:
924
+ my_column_1: # corresponds to a column
925
+ type: varchar
926
+ my_column_2: # corresponds to a column
927
+ type: string
928
+ ```
929
+
903
930
 
904
931
  ### export
905
932
  ```
@@ -1370,20 +1397,21 @@ Available import options:
1370
1397
 
1371
1398
  | Type | Description | Status |
1372
1399
  |--------------------|------------------------------------------------|--------|
1373
- | `sql` | Import from SQL DDL | ✅ |
1374
1400
  | `avro` | Import from AVRO schemas | ✅ |
1375
- | `glue` | Import from AWS Glue DataCatalog | ✅ |
1376
- | `jsonschema` | Import from JSON Schemas | ✅ |
1377
1401
  | `bigquery` | Import from BigQuery Schemas | ✅ |
1378
- | `unity` | Import from Databricks Unity Catalog | partial |
1402
+ | `csv` | Import from CSV File | |
1403
+ | `dbml` | Import from DBML models | ✅ |
1379
1404
  | `dbt` | Import from dbt models | ✅ |
1405
+ | `excel` | Import from ODCS Excel Template | ✅ |
1406
+ | `glue` | Import from AWS Glue DataCatalog | ✅ |
1407
+ | `iceberg` | Import from an Iceberg JSON Schema Definition | partial |
1408
+ | `jsonschema` | Import from JSON Schemas | ✅ |
1380
1409
  | `odcs` | Import from Open Data Contract Standard (ODCS) | ✅ |
1381
- | `spark` | Import from Spark StructTypes | ✅ |
1382
- | `dbml` | Import from DBML models | ✅ |
1383
- | `csv` | Import from CSV File | ✅ |
1410
+ | `parquet` | Import from Parquet File Metadata | ✅ |
1384
1411
  | `protobuf` | Import from Protobuf schemas | ✅ |
1385
- | `iceberg` | Import from an Iceberg JSON Schema Definition | partial |
1386
- | `parquet` | Import from Parquet File Metadta | ✅ |
1412
+ | `spark` | Import from Spark StructTypes | |
1413
+ | `sql` | Import from SQL DDL | ✅ |
1414
+ | `unity` | Import from Databricks Unity Catalog | partial |
1387
1415
  | Missing something? | Please create an issue on GitHub | TBD |
1388
1416
 
1389
1417
 
@@ -1433,8 +1461,9 @@ datacontract import --format unity --source my_unity_table.json
1433
1461
 
1434
1462
  ```bash
1435
1463
  # Example import single table from Unity Catalog via HTTP endpoint
1436
- export DATABRICKS_IMPORT_INSTANCE="https://xyz.cloud.databricks.com"
1437
- export DATABRICKS_IMPORT_ACCESS_TOKEN=<token>
1464
+ export DATACONTRACT_DATABRICKS_SERVER_HOSTNAME="https://xyz.cloud.databricks.com"
1465
+ export DATACONTRACT_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/b053a331fa014fb4"
1466
+ export DATACONTRACT_DATABRICKS_TOKEN=<token>
1438
1467
  datacontract import --format unity --unity-table-full-name <table_full_name>
1439
1468
  ```
1440
1469
 
@@ -1455,6 +1484,17 @@ datacontract import --format dbt --source <manifest_path> --dbt-model <model_nam
1455
1484
  datacontract import --format dbt --source <manifest_path>
1456
1485
  ```
1457
1486
 
1487
+ ### Excel
1488
+
1489
+ Importing from [ODCS Excel Template](https://github.com/datacontract/open-data-contract-standard-excel-template).
1490
+
1491
+ Examples:
1492
+
1493
+ ```bash
1494
+ # Example import from ODCS Excel Template
1495
+ datacontract import --format excel --source odcs.xlsx
1496
+ ```
1497
+
1458
1498
  #### Glue
1459
1499
 
1460
1500
  Importing from Glue reads the necessary Data directly off of the AWS API.
@@ -1994,7 +2034,8 @@ pytest
1994
2034
  ```bash
1995
2035
  # make sure uv is installed
1996
2036
  uv python pin 3.11
1997
- uv sync --all-extras
2037
+ uv pip install -e '.[dev]'
2038
+ uv run ruff check
1998
2039
  uv run pytest
1999
2040
  ```
2000
2041
 
@@ -812,6 +812,29 @@ models:
812
812
  | `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
813
813
 
814
814
 
815
+ #### Local
816
+
817
+ Data Contract CLI can test local files in parquet, json, csv, or delta format.
818
+
819
+ ##### Example
820
+
821
+ datacontract.yaml
822
+ ```yaml
823
+ servers:
824
+ local:
825
+ type: local
826
+ path: ./*.parquet
827
+ format: parquet
828
+ models:
829
+ my_table_1: # corresponds to a table
830
+ type: table
831
+ fields:
832
+ my_column_1: # corresponds to a column
833
+ type: varchar
834
+ my_column_2: # corresponds to a column
835
+ type: string
836
+ ```
837
+
815
838
 
816
839
  ### export
817
840
  ```
@@ -1282,20 +1305,21 @@ Available import options:
1282
1305
 
1283
1306
  | Type | Description | Status |
1284
1307
  |--------------------|------------------------------------------------|--------|
1285
- | `sql` | Import from SQL DDL | ✅ |
1286
1308
  | `avro` | Import from AVRO schemas | ✅ |
1287
- | `glue` | Import from AWS Glue DataCatalog | ✅ |
1288
- | `jsonschema` | Import from JSON Schemas | ✅ |
1289
1309
  | `bigquery` | Import from BigQuery Schemas | ✅ |
1290
- | `unity` | Import from Databricks Unity Catalog | partial |
1310
+ | `csv` | Import from CSV File | |
1311
+ | `dbml` | Import from DBML models | ✅ |
1291
1312
  | `dbt` | Import from dbt models | ✅ |
1313
+ | `excel` | Import from ODCS Excel Template | ✅ |
1314
+ | `glue` | Import from AWS Glue DataCatalog | ✅ |
1315
+ | `iceberg` | Import from an Iceberg JSON Schema Definition | partial |
1316
+ | `jsonschema` | Import from JSON Schemas | ✅ |
1292
1317
  | `odcs` | Import from Open Data Contract Standard (ODCS) | ✅ |
1293
- | `spark` | Import from Spark StructTypes | ✅ |
1294
- | `dbml` | Import from DBML models | ✅ |
1295
- | `csv` | Import from CSV File | ✅ |
1318
+ | `parquet` | Import from Parquet File Metadata | ✅ |
1296
1319
  | `protobuf` | Import from Protobuf schemas | ✅ |
1297
- | `iceberg` | Import from an Iceberg JSON Schema Definition | partial |
1298
- | `parquet` | Import from Parquet File Metadta | ✅ |
1320
+ | `spark` | Import from Spark StructTypes | |
1321
+ | `sql` | Import from SQL DDL | ✅ |
1322
+ | `unity` | Import from Databricks Unity Catalog | partial |
1299
1323
  | Missing something? | Please create an issue on GitHub | TBD |
1300
1324
 
1301
1325
 
@@ -1345,8 +1369,9 @@ datacontract import --format unity --source my_unity_table.json
1345
1369
 
1346
1370
  ```bash
1347
1371
  # Example import single table from Unity Catalog via HTTP endpoint
1348
- export DATABRICKS_IMPORT_INSTANCE="https://xyz.cloud.databricks.com"
1349
- export DATABRICKS_IMPORT_ACCESS_TOKEN=<token>
1372
+ export DATACONTRACT_DATABRICKS_SERVER_HOSTNAME="https://xyz.cloud.databricks.com"
1373
+ export DATACONTRACT_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/b053a331fa014fb4"
1374
+ export DATACONTRACT_DATABRICKS_TOKEN=<token>
1350
1375
  datacontract import --format unity --unity-table-full-name <table_full_name>
1351
1376
  ```
1352
1377
 
@@ -1367,6 +1392,17 @@ datacontract import --format dbt --source <manifest_path> --dbt-model <model_nam
1367
1392
  datacontract import --format dbt --source <manifest_path>
1368
1393
  ```
1369
1394
 
1395
+ ### Excel
1396
+
1397
+ Importing from [ODCS Excel Template](https://github.com/datacontract/open-data-contract-standard-excel-template).
1398
+
1399
+ Examples:
1400
+
1401
+ ```bash
1402
+ # Example import from ODCS Excel Template
1403
+ datacontract import --format excel --source odcs.xlsx
1404
+ ```
1405
+
1370
1406
  #### Glue
1371
1407
 
1372
1408
  Importing from Glue reads the necessary Data directly off of the AWS API.
@@ -1906,7 +1942,8 @@ pytest
1906
1942
  ```bash
1907
1943
  # make sure uv is installed
1908
1944
  uv python pin 3.11
1909
- uv sync --all-extras
1945
+ uv pip install -e '.[dev]'
1946
+ uv run ruff check
1910
1947
  uv run pytest
1911
1948
  ```
1912
1949
 
@@ -162,7 +162,7 @@ async def test(
162
162
  server: Annotated[
163
163
  str | None,
164
164
  Query(
165
- example="production",
165
+ examples=["production"],
166
166
  description="The server name to test. Optional, if there is only one server.",
167
167
  ),
168
168
  ] = None,
@@ -191,7 +191,7 @@ async def lint(
191
191
  schema: Annotated[
192
192
  str | None,
193
193
  Query(
194
- example="https://datacontract.com/datacontract.schema.json",
194
+ examples=["https://datacontract.com/datacontract.schema.json"],
195
195
  description="The schema to use for validation. This must be a URL.",
196
196
  ),
197
197
  ] = None,
@@ -220,7 +220,7 @@ def export(
220
220
  server: Annotated[
221
221
  str | None,
222
222
  Query(
223
- example="production",
223
+ examples=["production"],
224
224
  description="The server name to export. Optional, if there is only one server.",
225
225
  ),
226
226
  ] = None,
@@ -244,7 +244,7 @@ def import_(
244
244
  ] = None,
245
245
  source: Annotated[
246
246
  Optional[str],
247
- typer.Option(help="The path to the file or Glue Database that should be imported."),
247
+ typer.Option(help="The path to the file that should be imported."),
248
248
  ] = None,
249
249
  dialect: Annotated[
250
250
  Optional[str],
@@ -27,6 +27,7 @@ def create_spark_session():
27
27
  tmp_dir = tempfile.TemporaryDirectory(prefix="datacontract-cli-spark")
28
28
  atexit.register(tmp_dir.cleanup)
29
29
 
30
+ pyspark_version = "3.5.5" # MUST be the same as in the pyproject.toml
30
31
  spark = (
31
32
  SparkSession.builder.appName("datacontract")
32
33
  .config("spark.sql.warehouse.dir", f"{tmp_dir}/spark-warehouse")
@@ -34,7 +35,7 @@ def create_spark_session():
34
35
  .config("spark.ui.enabled", "false")
35
36
  .config(
36
37
  "spark.jars.packages",
37
- "org.apache.spark:spark-sql-kafka-0-10_2.12:3.5.5,org.apache.spark:spark-avro_2.12:3.5.5",
38
+ f"org.apache.spark:spark-sql-kafka-0-10_2.12:{pyspark_version},org.apache.spark:spark-avro_2.12:{pyspark_version}",
38
39
  )
39
40
  .getOrCreate()
40
41
  )
@@ -19,6 +19,7 @@ from datacontract.export.spark_converter import to_spark_data_type
19
19
  from datacontract.export.sql_type_converter import convert_to_sql_type
20
20
  from datacontract.model.data_contract_specification import (
21
21
  DataContractSpecification,
22
+ DeprecatedQuality,
22
23
  Field,
23
24
  Quality,
24
25
  )
@@ -91,8 +92,14 @@ def to_great_expectations(
91
92
  model_key=model_key, contract_version=data_contract_spec.info.version
92
93
  )
93
94
  model_value = data_contract_spec.models.get(model_key)
94
- quality_checks = get_quality_checks(data_contract_spec.quality)
95
+
96
+ # Support for Deprecated Quality
97
+ quality_checks = get_deprecated_quality_checks(data_contract_spec.quality)
98
+
99
+ expectations.extend(get_quality_checks(model_value.quality))
100
+
95
101
  expectations.extend(model_to_expectations(model_value.fields, engine, sql_server_type))
102
+
96
103
  expectations.extend(checks_to_expectations(quality_checks, model_key))
97
104
  model_expectation_suite = to_suite(expectations, expectation_suite_name)
98
105
 
@@ -135,6 +142,7 @@ def model_to_expectations(fields: Dict[str, Field], engine: str | None, sql_serv
135
142
  add_column_order_exp(fields, expectations)
136
143
  for field_name, field in fields.items():
137
144
  add_field_expectations(field_name, field, expectations, engine, sql_server_type)
145
+ expectations.extend(get_quality_checks(field.quality, field_name))
138
146
  return expectations
139
147
 
140
148
 
@@ -173,6 +181,8 @@ def add_field_expectations(
173
181
  expectations.append(to_column_length_exp(field_name, field.minLength, field.maxLength))
174
182
  if field.minimum is not None or field.maximum is not None:
175
183
  expectations.append(to_column_min_max_exp(field_name, field.minimum, field.maximum))
184
+ if field.enum is not None and len(field.enum) != 0:
185
+ expectations.append(to_column_enum_exp(field_name, field.enum))
176
186
 
177
187
  return expectations
178
188
 
@@ -266,7 +276,24 @@ def to_column_min_max_exp(field_name, minimum, maximum) -> Dict[str, Any]:
266
276
  }
267
277
 
268
278
 
269
- def get_quality_checks(quality: Quality) -> Dict[str, Any]:
279
+ def to_column_enum_exp(field_name, enum_list: List[str]) -> Dict[str, Any]:
280
+ """Creates a expect_column_values_to_be_in_set expectation.
281
+
282
+ Args:
283
+ field_name (str): The name of the field.
284
+ enum_list (Set[str]): enum list of value.
285
+
286
+ Returns:
287
+ Dict[str, Any]: Column value in set expectation.
288
+ """
289
+ return {
290
+ "expectation_type": "expect_column_values_to_be_in_set",
291
+ "kwargs": {"column": field_name, "value_set": enum_list},
292
+ "meta": {},
293
+ }
294
+
295
+
296
+ def get_deprecated_quality_checks(quality: DeprecatedQuality) -> Dict[str, Any]:
270
297
  """Retrieves quality checks defined in a data contract.
271
298
 
272
299
  Args:
@@ -288,6 +315,26 @@ def get_quality_checks(quality: Quality) -> Dict[str, Any]:
288
315
  return quality_specification
289
316
 
290
317
 
318
+ def get_quality_checks(qualities: List[Quality], field_name: str | None = None) -> List[Dict[str, Any]]:
319
+ """Retrieves quality checks defined in a data contract.
320
+
321
+ Args:
322
+ qualities (List[Quality]): List of quality object from the model specification.
323
+ field_name (str | None): field name if the quality list is attached to a specific field
324
+
325
+ Returns:
326
+ Dict[str, Any]: Dictionary of quality checks.
327
+ """
328
+ quality_specification = []
329
+ for quality in qualities:
330
+ if quality is not None and quality.engine is not None and quality.engine.lower() == "great-expectations":
331
+ ge_expectation = quality.implementation
332
+ if field_name is not None:
333
+ ge_expectation["column"] = field_name
334
+ quality_specification.append(ge_expectation)
335
+ return quality_specification
336
+
337
+
291
338
  def checks_to_expectations(quality_checks: Dict[str, Any], model_key: str) -> List[Dict[str, Any]]:
292
339
  """Converts quality checks to a list of expectations.
293
340