datacontract-cli 0.10.29__tar.gz → 0.10.31__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 (215) hide show
  1. {datacontract_cli-0.10.29/datacontract_cli.egg-info → datacontract_cli-0.10.31}/PKG-INFO +6 -9
  2. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/README.md +0 -3
  3. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/data_contract.py +2 -2
  4. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/great_expectations_converter.py +6 -3
  5. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/markdown_converter.py +1 -1
  6. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/spark_converter.py +3 -1
  7. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/excel_importer.py +5 -5
  8. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/sql_importer.py +2 -0
  9. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/unity_importer.py +2 -1
  10. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31/datacontract_cli.egg-info}/PKG-INFO +6 -9
  11. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/SOURCES.txt +1 -0
  12. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/requires.txt +5 -5
  13. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/pyproject.toml +6 -6
  14. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_excel.py +1 -0
  15. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_spark.py +1 -1
  16. datacontract_cli-0.10.31/tests/test_test_gcs_csv_remote.py +45 -0
  17. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_csv.py +1 -0
  18. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/LICENSE +0 -0
  19. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/MANIFEST.in +0 -0
  20. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/__init__.py +0 -0
  21. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/api.py +0 -0
  22. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/breaking/breaking.py +0 -0
  23. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/breaking/breaking_change.py +0 -0
  24. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/breaking/breaking_rules.py +0 -0
  25. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/catalog/catalog.py +0 -0
  26. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/cli.py +0 -0
  27. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/__init__.py +0 -0
  28. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/data_contract_checks.py +0 -0
  29. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/data_contract_test.py +0 -0
  30. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  31. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  32. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  33. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  34. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/__init__.py +0 -0
  35. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/check_soda_execute.py +0 -0
  36. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/bigquery.py +0 -0
  37. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/databricks.py +0 -0
  38. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
  39. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/kafka.py +0 -0
  40. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/postgres.py +0 -0
  41. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/snowflake.py +0 -0
  42. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  43. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/engines/soda/connections/trino.py +0 -0
  44. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/__init__.py +0 -0
  45. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/avro_converter.py +0 -0
  46. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/avro_idl_converter.py +0 -0
  47. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/bigquery_converter.py +0 -0
  48. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/custom_converter.py +0 -0
  49. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/data_caterer_converter.py +0 -0
  50. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/dbml_converter.py +0 -0
  51. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/dbt_converter.py +0 -0
  52. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/dcs_exporter.py +0 -0
  53. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/duckdb_type_converter.py +0 -0
  54. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/exporter.py +0 -0
  55. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/exporter_factory.py +0 -0
  56. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/go_converter.py +0 -0
  57. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/html_exporter.py +0 -0
  58. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/iceberg_converter.py +0 -0
  59. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/jsonschema_converter.py +0 -0
  60. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/mermaid_exporter.py +0 -0
  61. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/odcs_v3_exporter.py +0 -0
  62. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/pandas_type_converter.py +0 -0
  63. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/protobuf_converter.py +0 -0
  64. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/pydantic_converter.py +0 -0
  65. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/rdf_converter.py +0 -0
  66. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sodacl_converter.py +0 -0
  67. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sql_converter.py +0 -0
  68. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sql_type_converter.py +0 -0
  69. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/sqlalchemy_converter.py +0 -0
  70. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/export/terraform_converter.py +0 -0
  71. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/avro_importer.py +0 -0
  72. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/bigquery_importer.py +0 -0
  73. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/csv_importer.py +0 -0
  74. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/dbml_importer.py +0 -0
  75. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/dbt_importer.py +0 -0
  76. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/glue_importer.py +0 -0
  77. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/iceberg_importer.py +0 -0
  78. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/importer.py +0 -0
  79. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/importer_factory.py +0 -0
  80. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/json_importer.py +0 -0
  81. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/jsonschema_importer.py +0 -0
  82. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/odcs_importer.py +0 -0
  83. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/odcs_v3_importer.py +0 -0
  84. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/parquet_importer.py +0 -0
  85. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/protobuf_importer.py +0 -0
  86. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/imports/spark_importer.py +0 -0
  87. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/init/init_template.py +0 -0
  88. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/integration/datamesh_manager.py +0 -0
  89. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/files.py +0 -0
  90. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/lint.py +0 -0
  91. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/__init__.py +0 -0
  92. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/description_linter.py +0 -0
  93. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/field_pattern_linter.py +0 -0
  94. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/field_reference_linter.py +0 -0
  95. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/notice_period_linter.py +0 -0
  96. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/linters/valid_constraints_linter.py +0 -0
  97. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/resolve.py +0 -0
  98. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/resources.py +0 -0
  99. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/schema.py +0 -0
  100. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/lint/urls.py +0 -0
  101. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/model/data_contract_specification/__init__.py +0 -0
  102. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/model/exceptions.py +0 -0
  103. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/model/odcs.py +0 -0
  104. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/model/run.py +0 -0
  105. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/output/__init__.py +0 -0
  106. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/output/junit_test_results.py +0 -0
  107. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/output/output_format.py +0 -0
  108. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/output/test_results_writer.py +0 -0
  109. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/py.typed +0 -0
  110. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  111. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  112. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
  113. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  114. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  115. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/datacontract.html +0 -0
  116. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/datacontract_odcs.html +0 -0
  117. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/index.html +0 -0
  118. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/datacontract_information.html +0 -0
  119. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  120. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/datacontract_terms.html +0 -0
  121. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/definition.html +0 -0
  122. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/example.html +0 -0
  123. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/model_field.html +0 -0
  124. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/quality.html +0 -0
  125. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/partials/server.html +0 -0
  126. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract/templates/style/output.css +0 -0
  127. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  128. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/entry_points.txt +0 -0
  129. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/datacontract_cli.egg-info/top_level.txt +0 -0
  130. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/setup.cfg +0 -0
  131. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_api.py +0 -0
  132. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_breaking.py +0 -0
  133. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_catalog.py +0 -0
  134. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_changelog.py +0 -0
  135. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_cli.py +0 -0
  136. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_data_contract_checks.py +0 -0
  137. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_data_contract_specification.py +0 -0
  138. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_description_linter.py +0 -0
  139. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_documentation_linter.py +0 -0
  140. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_download_datacontract_file.py +0 -0
  141. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_duckdb_json.py +0 -0
  142. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_avro.py +0 -0
  143. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_avro_idl.py +0 -0
  144. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_bigquery.py +0 -0
  145. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_complex_data_contract.py +0 -0
  146. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_custom.py +0 -0
  147. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_custom_exporter.py +0 -0
  148. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_data_caterer.py +0 -0
  149. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_dbml.py +0 -0
  150. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_dbt_models.py +0 -0
  151. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_dbt_sources.py +0 -0
  152. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_dbt_staging_sql.py +0 -0
  153. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_go.py +0 -0
  154. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_great_expectations.py +0 -0
  155. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_html.py +0 -0
  156. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_iceberg.py +0 -0
  157. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_jsonschema.py +0 -0
  158. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_markdown.py +0 -0
  159. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_mermaid.py +0 -0
  160. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_odcs_v3.py +0 -0
  161. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_protobuf.py +0 -0
  162. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_pydantic.py +0 -0
  163. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_rdf.py +0 -0
  164. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_sodacl.py +0 -0
  165. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_spark.py +0 -0
  166. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_sql.py +0 -0
  167. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_sql_query.py +0 -0
  168. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_sqlalchemy.py +0 -0
  169. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_export_terraform.py +0 -0
  170. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_field_constraint_linter.py +0 -0
  171. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_field_pattern_linter.py +0 -0
  172. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_field_reference_linter.py +0 -0
  173. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_avro.py +0 -0
  174. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_bigquery.py +0 -0
  175. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_csv.py +0 -0
  176. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_dbml.py +0 -0
  177. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_dbt.py +0 -0
  178. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_glue.py +0 -0
  179. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_iceberg.py +0 -0
  180. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_json.py +0 -0
  181. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_jsonschema.py +0 -0
  182. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_odcs_v3.py +0 -0
  183. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_parquet.py +0 -0
  184. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_protobuf.py +0 -0
  185. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_sql_postgres.py +0 -0
  186. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_sql_sqlserver.py +0 -0
  187. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_import_unity_file.py +0 -0
  188. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_integration_datameshmanager.py +0 -0
  189. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_lint.py +0 -0
  190. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_notice_period_linter.py +0 -0
  191. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_resolve.py +0 -0
  192. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_roundtrip_jsonschema.py +0 -0
  193. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_spec_fields_field.py +0 -0
  194. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_spec_ref.py +0 -0
  195. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_azure_remote.py +0 -0
  196. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_bigquery.py +0 -0
  197. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_databricks.py +0 -0
  198. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_dataframe.py +0 -0
  199. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_delta.py +0 -0
  200. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_gcs_json_remote.py +0 -0
  201. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_kafka.py +0 -0
  202. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_kafka_remote.py +0 -0
  203. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_local_json.py +0 -0
  204. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_output_junit.py +0 -0
  205. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_parquet.py +0 -0
  206. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_postgres.py +0 -0
  207. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_quality.py +0 -0
  208. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_delta.py +0 -0
  209. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_json.py +0 -0
  210. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_json_complex.py +0 -0
  211. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_json_multiple_models.py +0 -0
  212. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_s3_json_remote.py +0 -0
  213. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_snowflake.py +0 -0
  214. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/tests/test_test_sqlserver.py +0 -0
  215. {datacontract_cli-0.10.29 → datacontract_cli-0.10.31}/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.10.29
3
+ Version: 0.10.31
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
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: typer<0.16,>=0.15.1
14
+ Requires-Dist: typer<0.17,>=0.15.1
15
15
  Requires-Dist: pydantic<2.12.0,>=2.8.2
16
16
  Requires-Dist: pyyaml~=6.0.1
17
17
  Requires-Dist: requests<2.33,>=2.31
@@ -42,7 +42,7 @@ 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
44
  Requires-Dist: databricks-sql-connector<4.1.0,>=3.7.0; extra == "databricks"
45
- Requires-Dist: databricks-sdk<0.58.0; extra == "databricks"
45
+ Requires-Dist: databricks-sdk<0.59.0; extra == "databricks"
46
46
  Requires-Dist: pyspark<4.0.0,>=3.5.5; extra == "databricks"
47
47
  Provides-Extra: iceberg
48
48
  Requires-Dist: pyiceberg==0.9.1; extra == "iceberg"
@@ -54,7 +54,7 @@ Provides-Extra: postgres
54
54
  Requires-Dist: soda-core-postgres<3.6.0,>=3.3.20; extra == "postgres"
55
55
  Provides-Extra: s3
56
56
  Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
57
- Requires-Dist: aiobotocore<2.23.0,>=2.17.0; extra == "s3"
57
+ Requires-Dist: aiobotocore<2.24.0,>=2.17.0; extra == "s3"
58
58
  Provides-Extra: snowflake
59
59
  Requires-Dist: snowflake-connector-python[pandas]<3.16,>=3.6; extra == "snowflake"
60
60
  Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
@@ -71,7 +71,7 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
71
71
  Provides-Extra: rdf
72
72
  Requires-Dist: rdflib==7.0.0; extra == "rdf"
73
73
  Provides-Extra: api
74
- Requires-Dist: fastapi==0.115.14; extra == "api"
74
+ Requires-Dist: fastapi==0.116.1; extra == "api"
75
75
  Requires-Dist: uvicorn==0.35.0; extra == "api"
76
76
  Provides-Extra: protobuf
77
77
  Requires-Dist: grpcio-tools>=1.53; extra == "protobuf"
@@ -86,7 +86,7 @@ Requires-Dist: pandas>=2.1.0; extra == "dev"
86
86
  Requires-Dist: pre-commit<4.3.0,>=3.7.1; extra == "dev"
87
87
  Requires-Dist: pytest; extra == "dev"
88
88
  Requires-Dist: pytest-xdist; extra == "dev"
89
- Requires-Dist: pymssql==2.3.6; extra == "dev"
89
+ Requires-Dist: pymssql==2.3.7; extra == "dev"
90
90
  Requires-Dist: ruff; extra == "dev"
91
91
  Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.10.0; extra == "dev"
92
92
  Requires-Dist: trino==0.335.0; extra == "dev"
@@ -1018,8 +1018,6 @@ If using Databricks, and an error is thrown when trying to deploy the SQL DDLs w
1018
1018
 
1019
1019
  ```shell
1020
1020
  spark.conf.set(“spark.databricks.delta.schema.typeCheck.enabled”, “false”)
1021
- from datacontract.model import data_contract_specification
1022
- data_contract_specification.DATACONTRACT_TYPES.append(“variant”)
1023
1021
  ```
1024
1022
 
1025
1023
  #### Great Expectations
@@ -2083,7 +2081,6 @@ We are happy to receive your contributions. Propose your change in an issue or d
2083
2081
  - [INNOQ](https://innoq.com)
2084
2082
  - [Data Catering](https://data.catering/)
2085
2083
  - [Oliver Wyman](https://www.oliverwyman.com/)
2086
- - [dmTECH](https://www.dmtech.tech/de)
2087
2084
  - And many more. To add your company, please create a pull request.
2088
2085
 
2089
2086
  ## Related Tools
@@ -924,8 +924,6 @@ If using Databricks, and an error is thrown when trying to deploy the SQL DDLs w
924
924
 
925
925
  ```shell
926
926
  spark.conf.set(“spark.databricks.delta.schema.typeCheck.enabled”, “false”)
927
- from datacontract.model import data_contract_specification
928
- data_contract_specification.DATACONTRACT_TYPES.append(“variant”)
929
927
  ```
930
928
 
931
929
  #### Great Expectations
@@ -1989,7 +1987,6 @@ We are happy to receive your contributions. Propose your change in an issue or d
1989
1987
  - [INNOQ](https://innoq.com)
1990
1988
  - [Data Catering](https://data.catering/)
1991
1989
  - [Oliver Wyman](https://www.oliverwyman.com/)
1992
- - [dmTECH](https://www.dmtech.tech/de)
1993
1990
  - And many more. To add your company, please create a pull request.
1994
1991
 
1995
1992
  ## Related Tools
@@ -4,7 +4,7 @@ import typing
4
4
  from open_data_contract_standard.model import CustomProperty, OpenDataContractStandard
5
5
 
6
6
  from datacontract.export.odcs_v3_exporter import to_odcs_v3
7
- from datacontract.imports.importer import Spec
7
+ from datacontract.imports.importer import ImportFormat, Spec
8
8
  from datacontract.imports.odcs_v3_importer import import_from_odcs
9
9
 
10
10
  if typing.TYPE_CHECKING:
@@ -300,7 +300,7 @@ class DataContract:
300
300
  id = kwargs.get("id")
301
301
  owner = kwargs.get("owner")
302
302
 
303
- if spec == Spec.odcs:
303
+ if spec == Spec.odcs or format == ImportFormat.excel:
304
304
  data_contract_specification_initial = DataContract.init(template=template, schema=schema)
305
305
 
306
306
  odcs_imported = importer_factory.create(format).import_source(
@@ -14,9 +14,6 @@ from datacontract.export.exporter import (
14
14
  Exporter,
15
15
  _check_models_for_export,
16
16
  )
17
- from datacontract.export.pandas_type_converter import convert_to_pandas_type
18
- from datacontract.export.spark_converter import to_spark_data_type
19
- from datacontract.export.sql_type_converter import convert_to_sql_type
20
17
  from datacontract.model.data_contract_specification import (
21
18
  DataContractSpecification,
22
19
  DeprecatedQuality,
@@ -167,10 +164,16 @@ def add_field_expectations(
167
164
  """
168
165
  if field.type is not None:
169
166
  if engine == GreatExpectationsEngine.spark.value:
167
+ from datacontract.export.spark_converter import to_spark_data_type
168
+
170
169
  field_type = to_spark_data_type(field).__class__.__name__
171
170
  elif engine == GreatExpectationsEngine.pandas.value:
171
+ from datacontract.export.pandas_type_converter import convert_to_pandas_type
172
+
172
173
  field_type = convert_to_pandas_type(field)
173
174
  elif engine == GreatExpectationsEngine.sql.value:
175
+ from datacontract.export.sql_type_converter import convert_to_sql_type
176
+
174
177
  field_type = convert_to_sql_type(field, sql_server_type)
175
178
  else:
176
179
  field_type = field.type
@@ -153,7 +153,7 @@ def field_to_markdown(field_name: str, field: Field, level: int = 0) -> str:
153
153
  Returns:
154
154
  str: A Markdown table rows for the field.
155
155
  """
156
- tabs = "&numsp;" * level
156
+ tabs = "&#x2007;" * level
157
157
  arrow = "&#x21b3;" if level > 0 else ""
158
158
  column_name = f"{tabs}{arrow} {field_name}"
159
159
 
@@ -126,6 +126,8 @@ def to_spark_data_type(field: Field) -> types.DataType:
126
126
  return types.StructType(to_struct_type(field.fields))
127
127
  if field_type == "map":
128
128
  return types.MapType(to_spark_data_type(field.keys), to_spark_data_type(field.values))
129
+ if field_type == "variant":
130
+ return types.VariantType()
129
131
  if field_type in ["string", "varchar", "text"]:
130
132
  return types.StringType()
131
133
  if field_type in ["number", "decimal", "numeric"]:
@@ -150,7 +152,7 @@ def to_spark_data_type(field: Field) -> types.DataType:
150
152
  return types.DateType()
151
153
  if field_type == "bytes":
152
154
  return types.BinaryType()
153
- return types.BinaryType()
155
+ return types.StringType() # default if no condition is met
154
156
 
155
157
 
156
158
  def print_schema(dtype: types.DataType) -> str:
@@ -680,7 +680,7 @@ def import_servers(workbook) -> Optional[List[Server]]:
680
680
  elif server_type == "databricks":
681
681
  server.catalog = get_server_cell_value(workbook, sheet, "servers.databricks.catalog", index)
682
682
  server.host = get_server_cell_value(workbook, sheet, "servers.databricks.host", index)
683
- server.schema = get_server_cell_value(workbook, sheet, "servers.databricks.schema", index)
683
+ server.schema_ = get_server_cell_value(workbook, sheet, "servers.databricks.schema", index)
684
684
  elif server_type == "glue":
685
685
  server.account = get_server_cell_value(workbook, sheet, "servers.glue.account", index)
686
686
  server.database = get_server_cell_value(workbook, sheet, "servers.glue.database", index)
@@ -694,7 +694,7 @@ def import_servers(workbook) -> Optional[List[Server]]:
694
694
  server.database = get_server_cell_value(workbook, sheet, "servers.postgres.database", index)
695
695
  server.host = get_server_cell_value(workbook, sheet, "servers.postgres.host", index)
696
696
  server.port = get_server_cell_value(workbook, sheet, "servers.postgres.port", index)
697
- server.schema = get_server_cell_value(workbook, sheet, "servers.postgres.schema", index)
697
+ server.schema_ = get_server_cell_value(workbook, sheet, "servers.postgres.schema", index)
698
698
  elif server_type == "s3":
699
699
  server.delimiter = get_server_cell_value(workbook, sheet, "servers.s3.delimiter", index)
700
700
  server.endpointUrl = get_server_cell_value(workbook, sheet, "servers.s3.endpointUrl", index)
@@ -705,13 +705,13 @@ def import_servers(workbook) -> Optional[List[Server]]:
705
705
  server.database = get_server_cell_value(workbook, sheet, "servers.snowflake.database", index)
706
706
  server.host = get_server_cell_value(workbook, sheet, "servers.snowflake.host", index)
707
707
  server.port = get_server_cell_value(workbook, sheet, "servers.snowflake.port", index)
708
- server.schema = get_server_cell_value(workbook, sheet, "servers.snowflake.schema", index)
708
+ server.schema_ = get_server_cell_value(workbook, sheet, "servers.snowflake.schema", index)
709
709
  server.warehouse = get_server_cell_value(workbook, sheet, "servers.snowflake.warehouse", index)
710
710
  elif server_type == "sqlserver":
711
711
  server.database = get_server_cell_value(workbook, sheet, "servers.sqlserver.database", index)
712
712
  server.host = get_server_cell_value(workbook, sheet, "servers.sqlserver.host", index)
713
713
  server.port = get_server_cell_value(workbook, sheet, "servers.sqlserver.port", index)
714
- server.schema = get_server_cell_value(workbook, sheet, "servers.sqlserver.schema", index)
714
+ server.schema_ = get_server_cell_value(workbook, sheet, "servers.sqlserver.schema", index)
715
715
  else:
716
716
  # Custom server type - grab all possible fields
717
717
  server.account = get_server_cell_value(workbook, sheet, "servers.custom.account", index)
@@ -726,7 +726,7 @@ def import_servers(workbook) -> Optional[List[Server]]:
726
726
  server.path = get_server_cell_value(workbook, sheet, "servers.custom.path", index)
727
727
  server.port = get_server_cell_value(workbook, sheet, "servers.custom.port", index)
728
728
  server.project = get_server_cell_value(workbook, sheet, "servers.custom.project", index)
729
- server.schema = get_server_cell_value(workbook, sheet, "servers.custom.schema", index)
729
+ server.schema_ = get_server_cell_value(workbook, sheet, "servers.custom.schema", index)
730
730
  server.stagingDir = get_server_cell_value(workbook, sheet, "servers.custom.stagingDir", index)
731
731
  server.table = get_server_cell_value(workbook, sheet, "servers.custom.table", index)
732
732
  server.view = get_server_cell_value(workbook, sheet, "servers.custom.view", index)
@@ -230,6 +230,8 @@ def map_type_from_sql(sql_type: str) -> str | None:
230
230
  return "int"
231
231
  elif sql_type_normed.startswith("float"):
232
232
  return "float"
233
+ elif sql_type_normed.startswith("double"):
234
+ return "double"
233
235
  elif sql_type_normed.startswith("decimal"):
234
236
  return "decimal"
235
237
  elif sql_type_normed.startswith("numeric"):
@@ -200,7 +200,8 @@ def import_table_fields(columns: List[ColumnInfo]) -> dict[str, Field]:
200
200
 
201
201
  def _to_field(column: ColumnInfo) -> Field:
202
202
  field = Field()
203
- if column.type_name is not None:
203
+ # The second condition evaluates for complex types (e.g. variant)
204
+ if column.type_name is not None or (column.type_name is None and column.type_text is not None):
204
205
  sql_type = str(column.type_text)
205
206
  field.type = map_type_from_sql(sql_type)
206
207
  physical_type_key = to_physical_type_key("databricks")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacontract-cli
3
- Version: 0.10.29
3
+ Version: 0.10.31
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
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: typer<0.16,>=0.15.1
14
+ Requires-Dist: typer<0.17,>=0.15.1
15
15
  Requires-Dist: pydantic<2.12.0,>=2.8.2
16
16
  Requires-Dist: pyyaml~=6.0.1
17
17
  Requires-Dist: requests<2.33,>=2.31
@@ -42,7 +42,7 @@ 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
44
  Requires-Dist: databricks-sql-connector<4.1.0,>=3.7.0; extra == "databricks"
45
- Requires-Dist: databricks-sdk<0.58.0; extra == "databricks"
45
+ Requires-Dist: databricks-sdk<0.59.0; extra == "databricks"
46
46
  Requires-Dist: pyspark<4.0.0,>=3.5.5; extra == "databricks"
47
47
  Provides-Extra: iceberg
48
48
  Requires-Dist: pyiceberg==0.9.1; extra == "iceberg"
@@ -54,7 +54,7 @@ Provides-Extra: postgres
54
54
  Requires-Dist: soda-core-postgres<3.6.0,>=3.3.20; extra == "postgres"
55
55
  Provides-Extra: s3
56
56
  Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
57
- Requires-Dist: aiobotocore<2.23.0,>=2.17.0; extra == "s3"
57
+ Requires-Dist: aiobotocore<2.24.0,>=2.17.0; extra == "s3"
58
58
  Provides-Extra: snowflake
59
59
  Requires-Dist: snowflake-connector-python[pandas]<3.16,>=3.6; extra == "snowflake"
60
60
  Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
@@ -71,7 +71,7 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
71
71
  Provides-Extra: rdf
72
72
  Requires-Dist: rdflib==7.0.0; extra == "rdf"
73
73
  Provides-Extra: api
74
- Requires-Dist: fastapi==0.115.14; extra == "api"
74
+ Requires-Dist: fastapi==0.116.1; extra == "api"
75
75
  Requires-Dist: uvicorn==0.35.0; extra == "api"
76
76
  Provides-Extra: protobuf
77
77
  Requires-Dist: grpcio-tools>=1.53; extra == "protobuf"
@@ -86,7 +86,7 @@ Requires-Dist: pandas>=2.1.0; extra == "dev"
86
86
  Requires-Dist: pre-commit<4.3.0,>=3.7.1; extra == "dev"
87
87
  Requires-Dist: pytest; extra == "dev"
88
88
  Requires-Dist: pytest-xdist; extra == "dev"
89
- Requires-Dist: pymssql==2.3.6; extra == "dev"
89
+ Requires-Dist: pymssql==2.3.7; extra == "dev"
90
90
  Requires-Dist: ruff; extra == "dev"
91
91
  Requires-Dist: testcontainers[kafka,minio,mssql,postgres]==4.10.0; extra == "dev"
92
92
  Requires-Dist: trino==0.335.0; extra == "dev"
@@ -1018,8 +1018,6 @@ If using Databricks, and an error is thrown when trying to deploy the SQL DDLs w
1018
1018
 
1019
1019
  ```shell
1020
1020
  spark.conf.set(“spark.databricks.delta.schema.typeCheck.enabled”, “false”)
1021
- from datacontract.model import data_contract_specification
1022
- data_contract_specification.DATACONTRACT_TYPES.append(“variant”)
1023
1021
  ```
1024
1022
 
1025
1023
  #### Great Expectations
@@ -2083,7 +2081,6 @@ We are happy to receive your contributions. Propose your change in an issue or d
2083
2081
  - [INNOQ](https://innoq.com)
2084
2082
  - [Data Catering](https://data.catering/)
2085
2083
  - [Oliver Wyman](https://www.oliverwyman.com/)
2086
- - [dmTECH](https://www.dmtech.tech/de)
2087
2084
  - And many more. To add your company, please create a pull request.
2088
2085
 
2089
2086
  ## Related Tools
@@ -193,6 +193,7 @@ tests/test_test_bigquery.py
193
193
  tests/test_test_databricks.py
194
194
  tests/test_test_dataframe.py
195
195
  tests/test_test_delta.py
196
+ tests/test_test_gcs_csv_remote.py
196
197
  tests/test_test_gcs_json_remote.py
197
198
  tests/test_test_kafka.py
198
199
  tests/test_test_kafka_remote.py
@@ -1,4 +1,4 @@
1
- typer<0.16,>=0.15.1
1
+ typer<0.17,>=0.15.1
2
2
  pydantic<2.12.0,>=2.8.2
3
3
  pyyaml~=6.0.1
4
4
  requests<2.33,>=2.31
@@ -22,7 +22,7 @@ open-data-contract-standard<4.0.0,>=3.0.4
22
22
  datacontract-cli[api,bigquery,csv,databricks,dbml,dbt,excel,iceberg,kafka,parquet,postgres,protobuf,rdf,s3,snowflake,sqlserver,trino]
23
23
 
24
24
  [api]
25
- fastapi==0.115.14
25
+ fastapi==0.116.1
26
26
  uvicorn==0.35.0
27
27
 
28
28
  [avro]
@@ -38,7 +38,7 @@ pandas>=2.0.0
38
38
  soda-core-spark-df<3.6.0,>=3.3.20
39
39
  soda-core-spark[databricks]<3.6.0,>=3.3.20
40
40
  databricks-sql-connector<4.1.0,>=3.7.0
41
- databricks-sdk<0.58.0
41
+ databricks-sdk<0.59.0
42
42
  pyspark<4.0.0,>=3.5.5
43
43
 
44
44
  [dbml]
@@ -56,7 +56,7 @@ pandas>=2.1.0
56
56
  pre-commit<4.3.0,>=3.7.1
57
57
  pytest
58
58
  pytest-xdist
59
- pymssql==2.3.6
59
+ pymssql==2.3.7
60
60
  ruff
61
61
  testcontainers[kafka,minio,mssql,postgres]==4.10.0
62
62
  trino==0.335.0
@@ -86,7 +86,7 @@ rdflib==7.0.0
86
86
 
87
87
  [s3]
88
88
  s3fs<2026.0.0,>=2025.2.0
89
- aiobotocore<2.23.0,>=2.17.0
89
+ aiobotocore<2.24.0,>=2.17.0
90
90
 
91
91
  [snowflake]
92
92
  snowflake-connector-python[pandas]<3.16,>=3.6
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "datacontract-cli"
3
- version = "0.10.29"
3
+ version = "0.10.31"
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"
@@ -15,7 +15,7 @@ classifiers = [
15
15
  ]
16
16
  requires-python = ">=3.10"
17
17
  dependencies = [
18
- "typer>=0.15.1,<0.16",
18
+ "typer>=0.15.1,<0.17",
19
19
  "pydantic>=2.8.2,<2.12.0",
20
20
  "pyyaml~=6.0.1",
21
21
  "requests>=2.31,<2.33",
@@ -60,7 +60,7 @@ databricks = [
60
60
  "soda-core-spark-df>=3.3.20,<3.6.0",
61
61
  "soda-core-spark[databricks]>=3.3.20,<3.6.0",
62
62
  "databricks-sql-connector>=3.7.0,<4.1.0",
63
- "databricks-sdk<0.58.0",
63
+ "databricks-sdk<0.59.0",
64
64
  "pyspark>=3.5.5,<4.0.0",
65
65
  ]
66
66
 
@@ -80,7 +80,7 @@ postgres = [
80
80
 
81
81
  s3 = [
82
82
  "s3fs>=2025.2.0,<2026.0.0",
83
- "aiobotocore>=2.17.0,<2.23.0",
83
+ "aiobotocore>=2.17.0,<2.24.0",
84
84
  ]
85
85
 
86
86
  snowflake = [
@@ -113,7 +113,7 @@ rdf = [
113
113
  ]
114
114
 
115
115
  api = [
116
- "fastapi==0.115.14",
116
+ "fastapi==0.116.1",
117
117
  "uvicorn==0.35.0",
118
118
  ]
119
119
 
@@ -135,7 +135,7 @@ dev = [
135
135
  "pre-commit>=3.7.1,<4.3.0",
136
136
  "pytest",
137
137
  "pytest-xdist",
138
- "pymssql==2.3.6",
138
+ "pymssql==2.3.7",
139
139
  "ruff",
140
140
  "testcontainers[minio,postgres,kafka,mssql]==4.10.0",
141
141
  "trino==0.335.0",
@@ -23,6 +23,7 @@ def test_cli():
23
23
  ],
24
24
  )
25
25
  assert result.exit_code == 0
26
+ assert "kind: DataContract" in result.stdout
26
27
 
27
28
 
28
29
  def test_import_excel_odcs():
@@ -162,4 +162,4 @@ def test_prog(spark: SparkSession, df_user, user_datacontract_no_desc, user_data
162
162
 
163
163
  # does include a table level description (dataframe object method)
164
164
  result4 = DataContract().import_from_source("spark", "users", dataframe=df_user, description="description")
165
- assert yaml.safe_load(result4.to_yaml()) == yaml.safe_load(expected_desc)
165
+ assert yaml.safe_load(result4.to_yaml()) == yaml.safe_load(expected_desc)
@@ -0,0 +1,45 @@
1
+ import os
2
+
3
+ import pytest
4
+ from dotenv import load_dotenv
5
+
6
+ from datacontract.data_contract import DataContract
7
+
8
+ datacontract = "fixtures/gcs-csv-remote/datacontract.yaml"
9
+ load_dotenv(override=True)
10
+
11
+
12
+ @pytest.mark.skipif(
13
+ os.environ.get("DATACONTRACT_GCS_KEY_ID") is None or os.environ.get("DATACONTRACT_GCS_SECRET") is None,
14
+ reason="Requires DATACONTRACT_GCS_KEY_ID, and DATACONTRACT_GCS_SECRET to be set",
15
+ )
16
+ def test_test_gcs_csv_remote_gcs_url():
17
+ data_contract = DataContract(
18
+ data_contract_file=datacontract,
19
+ server="gcs-url",
20
+ )
21
+
22
+ run = data_contract.test()
23
+
24
+ print(run)
25
+ assert run.result == "passed"
26
+
27
+
28
+ @pytest.mark.skipif(
29
+ os.environ.get("DATACONTRACT_GCS_KEY_ID") is None or os.environ.get("DATACONTRACT_GCS_SECRET") is None,
30
+ reason="Requires DATACONTRACT_GCS_KEY_ID, and DATACONTRACT_GCS_SECRET to be set",
31
+ )
32
+ def test_test_gcs_csv_remote_s3_style(monkeypatch):
33
+ monkeypatch.setenv("DATACONTRACT_S3_ACCESS_KEY_ID", os.environ.get("DATACONTRACT_GCS_KEY_ID"))
34
+ monkeypatch.setenv("DATACONTRACT_S3_SECRET_ACCESS_KEY", os.environ.get("DATACONTRACT_GCS_SECRET"))
35
+
36
+ data_contract = DataContract(
37
+ data_contract_file=datacontract,
38
+ server="s3-style",
39
+ )
40
+
41
+ run = data_contract.test()
42
+
43
+ print(run)
44
+ assert run.result == "passed"
45
+ assert all(check.result == "passed" for check in run.checks)
@@ -33,6 +33,7 @@ def test_test_s3_csv(minio_container, monkeypatch):
33
33
  print(run)
34
34
  assert run.result == "passed"
35
35
  assert all(check.result == "passed" for check in run.checks)
36
+ assert 8 == len(run.checks), "Expected 5 checks to be executed"
36
37
 
37
38
 
38
39
  def _prepare_s3_files(minio_container):