datacontract-cli 0.10.6__tar.gz → 0.10.8__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 (167) hide show
  1. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/PKG-INFO +232 -96
  2. datacontract_cli-0.10.6/datacontract_cli.egg-info/PKG-INFO → datacontract_cli-0.10.8/README.md +196 -133
  3. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/cli.py +26 -24
  4. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/data_contract.py +69 -152
  5. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +13 -1
  6. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/soda/check_soda_execute.py +11 -0
  7. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/soda/connections/bigquery.py +8 -1
  8. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/soda/connections/kafka.py +3 -0
  9. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/avro_converter.py +28 -21
  10. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/avro_idl_converter.py +29 -22
  11. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/bigquery_converter.py +15 -0
  12. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/dbml_converter.py +9 -0
  13. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/dbt_converter.py +26 -1
  14. datacontract_cli-0.10.8/datacontract/export/exporter.py +87 -0
  15. datacontract_cli-0.10.8/datacontract/export/exporter_factory.py +52 -0
  16. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/go_converter.py +6 -0
  17. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/great_expectations_converter.py +10 -0
  18. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/html_export.py +6 -0
  19. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/jsonschema_converter.py +24 -16
  20. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/odcs_converter.py +24 -1
  21. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/protobuf_converter.py +6 -0
  22. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/pydantic_converter.py +6 -0
  23. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/rdf_converter.py +9 -0
  24. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/sodacl_converter.py +7 -1
  25. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/sql_converter.py +32 -2
  26. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/sql_type_converter.py +4 -5
  27. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/terraform_converter.py +6 -0
  28. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/imports/bigquery_importer.py +30 -4
  29. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/imports/glue_importer.py +13 -3
  30. datacontract_cli-0.10.8/datacontract/imports/odcs_importer.py +192 -0
  31. datacontract_cli-0.10.8/datacontract/imports/unity_importer.py +138 -0
  32. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/model/data_contract_specification.py +2 -0
  33. datacontract_cli-0.10.8/datacontract/templates/partials/server.html +176 -0
  34. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/templates/style/output.css +9 -0
  35. datacontract_cli-0.10.8/datacontract/web.py +68 -0
  36. datacontract_cli-0.10.6/README.md → datacontract_cli-0.10.8/datacontract_cli.egg-info/PKG-INFO +269 -76
  37. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract_cli.egg-info/SOURCES.txt +10 -0
  38. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract_cli.egg-info/requires.txt +45 -19
  39. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/pyproject.toml +57 -27
  40. datacontract_cli-0.10.8/tests/test_description_linter.py +0 -0
  41. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_avro.py +1 -1
  42. datacontract_cli-0.10.8/tests/test_export_custom_exporter.py +30 -0
  43. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_jsonschema.py +5 -3
  44. datacontract_cli-0.10.8/tests/test_export_sql.py +115 -0
  45. datacontract_cli-0.10.8/tests/test_import_bigquery.py +50 -0
  46. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_import_glue.py +35 -0
  47. datacontract_cli-0.10.8/tests/test_import_odcs.py +49 -0
  48. datacontract_cli-0.10.8/tests/test_import_unity_file.py +36 -0
  49. datacontract_cli-0.10.8/tests/test_roundtrip_jsonschema.py +49 -0
  50. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_schema.py +2 -2
  51. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_azure_parquet_remote.py +16 -3
  52. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_databricks.py +1 -1
  53. datacontract_cli-0.10.8/tests/test_test_dataframe.py +75 -0
  54. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_kafka.py +1 -5
  55. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_parquet.py +9 -0
  56. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_postgres.py +18 -6
  57. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_sqlserver.py +5 -5
  58. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_web.py +17 -0
  59. datacontract_cli-0.10.6/datacontract/templates/partials/server.html +0 -144
  60. datacontract_cli-0.10.6/datacontract/web.py +0 -14
  61. datacontract_cli-0.10.6/tests/test_export_sql.py +0 -71
  62. datacontract_cli-0.10.6/tests/test_import_bigquery.py +0 -85
  63. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/LICENSE +0 -0
  64. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/MANIFEST.in +0 -0
  65. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/__init__.py +0 -0
  66. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/breaking/breaking.py +0 -0
  67. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/breaking/breaking_rules.py +0 -0
  68. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/catalog/catalog.py +0 -0
  69. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/__init__.py +0 -0
  70. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  71. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  72. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/datacontract/check_that_datacontract_str_is_valid.py +0 -0
  73. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  74. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/soda/__init__.py +0 -0
  75. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/soda/connections/dask.py +0 -0
  76. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/soda/connections/databricks.py +0 -0
  77. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/soda/connections/duckdb.py +0 -0
  78. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/soda/connections/postgres.py +0 -0
  79. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/soda/connections/snowflake.py +0 -0
  80. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  81. {datacontract_cli-0.10.6/datacontract/lint/linters → datacontract_cli-0.10.8/datacontract/export}/__init__.py +0 -0
  82. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/export/csv_type_converter.py +0 -0
  83. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/imports/avro_importer.py +0 -0
  84. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/imports/jsonschema_importer.py +0 -0
  85. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/imports/sql_importer.py +0 -0
  86. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/init/download_datacontract_file.py +0 -0
  87. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/integration/publish_datamesh_manager.py +0 -0
  88. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/integration/publish_opentelemetry.py +0 -0
  89. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/files.py +0 -0
  90. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/lint.py +0 -0
  91. /datacontract_cli-0.10.6/datacontract/py.typed → /datacontract_cli-0.10.8/datacontract/lint/linters/__init__.py +0 -0
  92. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/linters/description_linter.py +0 -0
  93. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/linters/example_model_linter.py +0 -0
  94. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/linters/field_pattern_linter.py +0 -0
  95. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/linters/field_reference_linter.py +0 -0
  96. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/linters/notice_period_linter.py +0 -0
  97. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/linters/quality_schema_linter.py +0 -0
  98. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/linters/valid_constraints_linter.py +0 -0
  99. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/resolve.py +0 -0
  100. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/schema.py +0 -0
  101. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/lint/urls.py +0 -0
  102. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/model/breaking_change.py +0 -0
  103. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/model/exceptions.py +0 -0
  104. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/model/run.py +0 -0
  105. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/publish/publish.py +0 -0
  106. /datacontract_cli-0.10.6/tests/test_description_linter.py → /datacontract_cli-0.10.8/datacontract/py.typed +0 -0
  107. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/templates/datacontract.html +0 -0
  108. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/templates/index.html +0 -0
  109. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/templates/partials/datacontract_information.html +0 -0
  110. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  111. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/templates/partials/datacontract_terms.html +0 -0
  112. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/templates/partials/definition.html +0 -0
  113. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/templates/partials/example.html +0 -0
  114. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract/templates/partials/model_field.html +0 -0
  115. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  116. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract_cli.egg-info/entry_points.txt +0 -0
  117. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/datacontract_cli.egg-info/top_level.txt +0 -0
  118. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/setup.cfg +0 -0
  119. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_breaking.py +0 -0
  120. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_catalog.py +0 -0
  121. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_changelog.py +0 -0
  122. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_cli.py +0 -0
  123. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_documentation_linter.py +0 -0
  124. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_download_datacontract_file.py +0 -0
  125. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_example_model_linter.py +0 -0
  126. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_avro_idl.py +0 -0
  127. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_bigquery.py +0 -0
  128. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_dbml.py +0 -0
  129. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_dbt_models.py +0 -0
  130. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_dbt_sources.py +0 -0
  131. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_dbt_staging_sql.py +0 -0
  132. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_go.py +0 -0
  133. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_great_expectations.py +0 -0
  134. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_html.py +0 -0
  135. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_odcs.py +0 -0
  136. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_protobuf.py +0 -0
  137. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_pydantic.py +0 -0
  138. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_rdf.py +0 -0
  139. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_sodacl.py +0 -0
  140. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_sql_query.py +0 -0
  141. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_export_terraform.py +0 -0
  142. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_field_constraint_linter.py +0 -0
  143. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_field_pattern_linter.py +0 -0
  144. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_field_reference_linter.py +0 -0
  145. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_import_avro.py +0 -0
  146. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_import_jsonschema.py +0 -0
  147. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_import_sql.py +0 -0
  148. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_integration_datameshmanager.py +0 -0
  149. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_integration_opentelemetry.py +0 -0
  150. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_lint.py +0 -0
  151. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_notice_period_linter.py +0 -0
  152. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_quality_schema_linter.py +0 -0
  153. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_bigquery.py +0 -0
  154. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_examples_csv.py +0 -0
  155. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_examples_formats_valid.py +0 -0
  156. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_examples_inline.py +0 -0
  157. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_examples_json.py +0 -0
  158. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_examples_missing.py +0 -0
  159. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_kafka_remote.py +0 -0
  160. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_local_json.py +0 -0
  161. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_s3_csv.py +0 -0
  162. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_s3_delta.py +0 -0
  163. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_s3_json.py +0 -0
  164. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_s3_json_complex.py +0 -0
  165. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_s3_json_multiple_models.py +0 -0
  166. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_s3_json_remote.py +0 -0
  167. {datacontract_cli-0.10.6 → datacontract_cli-0.10.8}/tests/test_test_snowflake.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datacontract-cli
3
- Version: 0.10.6
3
+ Version: 0.10.8
4
4
  Summary: Test data contracts
5
5
  Author-email: Jochen Christ <jochen.christ@innoq.com>, Stefan Negele <stefan.negele@innoq.com>
6
6
  Project-URL: Homepage, https://cli.datacontract.com
@@ -20,39 +20,55 @@ Requires-Dist: fastparquet==2024.5.0
20
20
  Requires-Dist: python-multipart==0.0.9
21
21
  Requires-Dist: rich~=13.7.0
22
22
  Requires-Dist: simple-ddl-parser==1.5.1
23
- Requires-Dist: soda-core-bigquery<3.4.0,>=3.3.1
24
23
  Requires-Dist: soda-core-duckdb<3.4.0,>=3.3.1
25
- Requires-Dist: soda-core-sqlserver<3.4.0,>=3.3.1
26
- Requires-Dist: soda-core-postgres<3.4.0,>=3.3.1
27
- Requires-Dist: soda-core-snowflake<3.4.0,>=3.3.1
28
- Requires-Dist: soda-core-spark[databricks]<3.4.0,>=3.3.1
29
- Requires-Dist: databricks-sql-connector<3.2.0,>=3.1.2
30
- Requires-Dist: soda-core-spark-df<3.4.0,>=3.3.1
31
24
  Requires-Dist: setuptools>=60
32
- Requires-Dist: snowflake-connector-python[pandas]<3.11,>=3.6
33
- Requires-Dist: duckdb==0.10.3
34
- Requires-Dist: fastjsonschema~=2.19.1
25
+ Requires-Dist: duckdb==1.0.0
26
+ Requires-Dist: fastjsonschema<2.21.0,>=2.19.1
35
27
  Requires-Dist: python-dotenv~=1.0.0
36
- Requires-Dist: s3fs==2024.5.0
37
28
  Requires-Dist: rdflib==7.0.0
38
- Requires-Dist: avro==1.11.3
39
29
  Requires-Dist: opentelemetry-exporter-otlp-proto-grpc~=1.16
40
30
  Requires-Dist: opentelemetry-exporter-otlp-proto-http~=1.16
41
- Requires-Dist: deltalake~=0.17.0
42
- Requires-Dist: boto3<1.34.114,>=1.34.41
43
- Requires-Dist: botocore<1.34.114,>=1.34.41
31
+ Requires-Dist: boto3<1.34.130,>=1.34.41
32
+ Requires-Dist: botocore<1.34.128,>=1.34.41
44
33
  Requires-Dist: jinja_partials>=0.2.1
34
+ Provides-Extra: avro
35
+ Requires-Dist: avro==1.11.3; extra == "avro"
36
+ Provides-Extra: bigquery
37
+ Requires-Dist: soda-core-bigquery<3.4.0,>=3.3.1; extra == "bigquery"
38
+ Provides-Extra: databricks
39
+ Requires-Dist: soda-core-spark-df<3.4.0,>=3.3.1; extra == "databricks"
40
+ Requires-Dist: databricks-sql-connector<3.2.0,>=3.1.2; extra == "databricks"
41
+ Requires-Dist: soda-core-spark[databricks]<3.4.0,>=3.3.1; extra == "databricks"
42
+ Provides-Extra: deltalake
43
+ Requires-Dist: deltalake<0.19,>=0.17; extra == "deltalake"
44
+ Provides-Extra: kafka
45
+ Requires-Dist: datacontract-cli[avro]; extra == "kafka"
46
+ Requires-Dist: soda-core-spark-df<3.4.0,>=3.3.1; extra == "kafka"
47
+ Provides-Extra: postgres
48
+ Requires-Dist: soda-core-postgres<3.4.0,>=3.3.1; extra == "postgres"
49
+ Provides-Extra: s3
50
+ Requires-Dist: s3fs==2024.6.0; extra == "s3"
51
+ Provides-Extra: snowflake
52
+ Requires-Dist: snowflake-connector-python[pandas]<3.11,>=3.6; extra == "snowflake"
53
+ Requires-Dist: soda-core-snowflake<3.4.0,>=3.3.1; extra == "snowflake"
54
+ Provides-Extra: sqlserver
55
+ Requires-Dist: soda-core-sqlserver<3.4.0,>=3.3.1; extra == "sqlserver"
56
+ Provides-Extra: all
57
+ Requires-Dist: datacontract-cli[bigquery,databricks,deltalake,kafka,postgres,s3,snowflake,sqlserver]; extra == "all"
45
58
  Provides-Extra: dev
59
+ Requires-Dist: datacontract-cli[all]; extra == "dev"
46
60
  Requires-Dist: httpx==0.27.0; extra == "dev"
47
61
  Requires-Dist: ruff; extra == "dev"
62
+ Requires-Dist: pre-commit~=3.7.1; extra == "dev"
48
63
  Requires-Dist: pytest; extra == "dev"
49
64
  Requires-Dist: pytest-xdist; extra == "dev"
50
65
  Requires-Dist: moto; extra == "dev"
51
66
  Requires-Dist: pymssql==2.3.0; extra == "dev"
52
- Requires-Dist: testcontainers<4.0.0; extra == "dev"
53
- Requires-Dist: testcontainers-minio; extra == "dev"
54
- Requires-Dist: testcontainers-postgres; extra == "dev"
55
- Requires-Dist: testcontainers-kafka; extra == "dev"
67
+ Requires-Dist: kafka-python; extra == "dev"
68
+ Requires-Dist: testcontainers~=4.5.0; extra == "dev"
69
+ Requires-Dist: testcontainers[minio]; extra == "dev"
70
+ Requires-Dist: testcontainers[postgres]; extra == "dev"
71
+ Requires-Dist: testcontainers[kafka]; extra == "dev"
56
72
  Requires-Dist: testcontainers[mssql]; extra == "dev"
57
73
 
58
74
  # Data Contract CLI
@@ -82,9 +98,10 @@ This data contract contains all information to connect to S3 and check that the
82
98
 
83
99
  Let's use [pip](https://pip.pypa.io/en/stable/getting-started/) to install the CLI (or use the [Docker image](#docker), if you prefer).
84
100
  ```bash
85
- $ python3 -m pip install datacontract-cli
101
+ $ python3 -m pip install datacontract-cli[all]
86
102
  ```
87
103
 
104
+
88
105
  We run the tests:
89
106
 
90
107
  ```bash
@@ -154,6 +171,7 @@ $ datacontract export --format html https://datacontract.com/examples/orders-lat
154
171
 
155
172
  which will create this [HTML export](https://datacontract.com/examples/orders-latest/datacontract.html).
156
173
 
174
+
157
175
  ## Usage
158
176
 
159
177
  ```bash
@@ -206,13 +224,13 @@ Python 3.11 recommended.
206
224
  Python 3.12 available as pre-release release candidate for 0.9.3
207
225
 
208
226
  ```bash
209
- python3 -m pip install datacontract-cli
227
+ python3 -m pip install datacontract-cli[all]
210
228
  ```
211
229
 
212
230
  ### pipx
213
231
  pipx installs into an isolated environment.
214
232
  ```bash
215
- pipx install datacontract-cli
233
+ pipx install datacontract-cli[all]
216
234
  ```
217
235
 
218
236
  ### Docker
@@ -228,6 +246,32 @@ Or via an alias that automatically uses the latest version:
228
246
  alias datacontract='docker run --rm -v "${PWD}:/home/datacontract" datacontract/cli:latest'
229
247
  ```
230
248
 
249
+
250
+ ## Optional Dependencies
251
+
252
+ The CLI tool defines several optional dependencies (also known as extras) that can be installed for using with specific servers types.
253
+ With _all_, all server dependencies are included.
254
+
255
+ ```bash
256
+ pip install datacontract-cli[all]
257
+ ```
258
+
259
+ A list of available extras:
260
+
261
+ | Dependency | Installation Command |
262
+ |-------------------------|-------------------------------------------------------------|
263
+ | Avro Support | `pip install datacontract-cli[avro]` |
264
+ | Google BigQuery | `pip install datacontract-cli[bigquery]` |
265
+ | Databricks Integration | `pip install datacontract-cli[databricks]` |
266
+ | Deltalake Integration | `pip install datacontract-cli[deltalake]` |
267
+ | Kafka Integration | `pip install datacontract-cli[kafka]` |
268
+ | PostgreSQL Integration | `pip install datacontract-cli[postgres]` |
269
+ | S3 Integration | `pip install datacontract-cli[s3]` |
270
+ | Snowflake Integration | `pip install datacontract-cli[snowflake]` |
271
+ | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
272
+
273
+
274
+
231
275
  ## Documentation
232
276
 
233
277
  Commands
@@ -333,8 +377,10 @@ Supported server types:
333
377
  - [s3](#S3)
334
378
  - [bigquery](#bigquery)
335
379
  - [azure](#azure)
380
+ - [sqlserver](#sqlserver)
336
381
  - [databricks](#databricks)
337
382
  - [databricks (programmatic)](#databricks-programmatic)
383
+ - [dataframr (programmatic)](#dataframe-programmatic)
338
384
  - [snowflake](#snowflake)
339
385
  - [kafka](#kafka)
340
386
  - [postgres](#postgres)
@@ -417,7 +463,7 @@ models:
417
463
 
418
464
  | Environment Variable | Example | Description |
419
465
  |----------------------------------------------|---------------------------|---------------------------------------------------------|
420
- | `DATACONTRACT_BIGQUERY_ACCOUNT_INFO_JSON_PATH` | `~/service-access-key.json` | Service Access key as saved on key creation by BigQuery |
466
+ | `DATACONTRACT_BIGQUERY_ACCOUNT_INFO_JSON_PATH` | `~/service-access-key.json` | Service Access key as saved on key creation by BigQuery. If this environment variable isn't set, the cli tries to use `GOOGLE_APPLICATION_CREDENTIALS` as a fallback, so if you have that set for using their Python library anyway, it should work seamlessly. |
421
467
 
422
468
 
423
469
 
@@ -448,6 +494,43 @@ Authentication works with an Azure Service Principal (SPN) aka App Registration
448
494
 
449
495
 
450
496
 
497
+ ### Sqlserver
498
+
499
+ Data Contract CLI can test data in MS SQL Server (including Azure SQL, Synapse Analytics SQL Pool).
500
+
501
+ #### Example
502
+
503
+ datacontract.yaml
504
+ ```yaml
505
+ servers:
506
+ production:
507
+ type: sqlserver
508
+ host: localhost
509
+ port: 5432
510
+ database: tempdb
511
+ schema: dbo
512
+ driver: ODBC Driver 18 for SQL Server
513
+ models:
514
+ my_table_1: # corresponds to a table
515
+ type: table
516
+ fields:
517
+ my_column_1: # corresponds to a column
518
+ type: varchar
519
+ ```
520
+
521
+ #### Environment Variables
522
+
523
+ | Environment Variable | Example | Description |
524
+ |----------------------------------|--------------------|-------------|
525
+ | `DATACONTRACT_SQLSERVER_USERNAME` | `root` | Username |
526
+ | `DATACONTRACT_SQLSERVER_PASSWORD` | `toor` | Password |
527
+ | `DATACONTRACT_SQLSERVER_TRUSTED_CONNECTION` | `True` | Use windows authentication, instead of login |
528
+ | `DATACONTRACT_SQLSERVER_TRUST_SERVER_CERTIFICATE` | `True` | Trust self-signed certificate |
529
+ | `DATACONTRACT_SQLSERVER_ENCRYPTED_CONNECTION` | `True` | Use SSL |
530
+
531
+
532
+
533
+
451
534
  ### Databricks
452
535
 
453
536
  Works with Unity Catalog and Hive metastore.
@@ -504,7 +587,7 @@ models:
504
587
 
505
588
  Notebook
506
589
  ```python
507
- %pip install datacontract-cli
590
+ %pip install datacontract-cli[databricks]
508
591
  dbutils.library.restartPython()
509
592
 
510
593
  from datacontract.data_contract import DataContract
@@ -516,6 +599,41 @@ run = data_contract.test()
516
599
  run.result
517
600
  ```
518
601
 
602
+ ### Dataframe (programmatic)
603
+
604
+ Works with Spark DataFrames.
605
+ DataFrames need to be created as named temporary views.
606
+ Multiple temporary views are suppored if your data contract contains multiple models.
607
+
608
+ Testing DataFrames is useful to test your datasets in a pipeline before writing them to a data source.
609
+
610
+ #### Example
611
+
612
+ datacontract.yaml
613
+ ```yaml
614
+ servers:
615
+ production:
616
+ type: dataframe
617
+ models:
618
+ my_table: # corresponds to a temporary view
619
+ type: table
620
+ fields: ...
621
+ ```
622
+
623
+ Example code
624
+ ```python
625
+ from datacontract.data_contract import DataContract
626
+
627
+ df.createOrReplaceTempView("my_table")
628
+
629
+ data_contract = DataContract(
630
+ data_contract_file="datacontract.yaml",
631
+ spark=spark,
632
+ )
633
+ run = data_contract.test()
634
+ assert run.result == "passed"
635
+ ```
636
+
519
637
 
520
638
  ### Snowflake
521
639
 
@@ -608,50 +726,15 @@ models:
608
726
 
609
727
 
610
728
 
611
- ### Postgres
612
-
613
- Data Contract CLI can test data in Postgres or Postgres-compliant databases (e.g., RisingWave).
614
729
 
615
- #### Example
730
+ ### export
616
731
 
617
- datacontract.yaml
618
- ```yaml
619
- servers:
620
- postgres:
621
- type: sqlserver
622
- host: localhost
623
- port: 5432
624
- database: tempdb
625
- schema: dbo
626
- driver: ODBC Driver 18 for SQL Server
627
- models:
628
- my_table_1: # corresponds to a table
629
- type: table
630
- fields:
631
- my_column_1: # corresponds to a column
632
- type: varchar
633
732
  ```
634
733
 
635
- #### Environment Variables
636
-
637
- | Environment Variable | Example | Description |
638
- |----------------------------------|--------------------|-------------|
639
- | `DATACONTRACT_SQLSERVER_USERNAME` | `root` | Username |
640
- | `DATACONTRACT_SQLSERVER_PASSWORD` | `toor` | Password |
641
- | `DATACONTRACT_SQLSERVER_TRUSTED_CONNECTION` | `True` | Use windows authentication, instead of login |
642
- | `DATACONTRACT_SQLSERVER_TRUST_SERVER_CERTIFICATE` | `True` | Trust self-signed certificate |
643
- | `DATACONTRACT_SQLSERVER_ENCRYPTED_CONNECTION` | `True` | Use SSL |
644
-
734
+ Usage: datacontract export [OPTIONS] [LOCATION]
645
735
 
736
+ Convert data contract to a specific format. Prints to stdout or to the specified output file.
646
737
 
647
- ### export
648
-
649
- ```
650
-
651
- Usage: datacontract export [OPTIONS] [LOCATION]
652
-
653
- Convert data contract to a specific format. Prints to stdout or to the specified output file.
654
-
655
738
  ╭─ Arguments ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
656
739
  │ location [LOCATION] The location (url or path) of the data contract yaml. [default: datacontract.yaml] │
657
740
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -752,13 +835,13 @@ data products, find the true domain owner of a field attribute)
752
835
  #### DBML
753
836
 
754
837
  The export function converts the logical data types of the datacontract into the specific ones of a concrete Database
755
- if a server is selected via the `--server` option (based on the `type` of that server). If no server is selected, the
838
+ if a server is selected via the `--server` option (based on the `type` of that server). If no server is selected, the
756
839
  logical data types are exported.
757
840
 
758
841
 
759
842
  #### Avro
760
843
 
761
- The export function converts the data contract specification into an avro schema. It supports specifying custom avro properties for logicalTypes and default values.
844
+ The export function converts the data contract specification into an avro schema. It supports specifying custom avro properties for logicalTypes and default values.
762
845
 
763
846
  ##### Custom Avro Properties
764
847
 
@@ -778,7 +861,7 @@ models:
778
861
  description: Example for AVRO with Timestamp (microsecond precision) https://avro.apache.org/docs/current/spec.html#Local+timestamp+%28microsecond+precision%29
779
862
  type: long
780
863
  example: 1672534861000000 # Equivalent to 2023-01-01 01:01:01 in microseconds
781
- config:
864
+ config:
782
865
  avroLogicalType: local-timestamp-micros
783
866
  avroDefault: 1672534861000000
784
867
  ```
@@ -804,39 +887,28 @@ models:
804
887
 
805
888
  Create a data contract from the given source location. Prints to stdout.
806
889
 
807
- ╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
808
- │ * --format [sql|avro|glue|bigquery|jsonschema] The format of the source file. [default: None] [required]
809
- │ --source TEXT The path to the file or Glue Database that should be imported. [default: None]
810
- --bigquery-project TEXT The bigquery project id. [default: None]
811
- │ --bigquery-dataset TEXT The bigquery dataset id. [default: None]
812
- --bigquery-table TEXT List of table ids to import from the bigquery API (repeat for multiple table ids, leave empty for all
813
- tables in the dataset).
814
- [default: None]
815
- │ --help Show this message and exit.
816
- ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
890
+ ╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
891
+ │ * --format [sql|avro|glue|bigquery|jsonschema|unity] The format of the source file. [default: None] [required]
892
+ │ --source TEXT The path to the file or Glue Database that should be imported.
893
+ [default: None]
894
+ │ --glue-table TEXT List of table ids to import from the Glue Database (repeat for
895
+ multiple table ids, leave empty for all tables in the dataset).
896
+ [default: None]
897
+ --bigquery-project TEXT The bigquery project id. [default: None]
898
+ │ --bigquery-dataset TEXT The bigquery dataset id. [default: None]
899
+ │ --bigquery-table TEXT List of table ids to import from the bigquery API (repeat for │
900
+ │ multiple table ids, leave empty for all tables in the dataset). │
901
+ │ [default: None] │
902
+ │ --help Show this message and exit. │
903
+ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
817
904
  ```
818
905
 
819
- As shown, some options are only relevant in certain conditions: For `format` Bigtable we support to directly read off the Bigtable APIs.
820
- In this case there's no need to specify `source` but instead `bt-project-id`, `bt-dataset-id` and `table` must be specified.
821
-
822
- For providing authentication to the Client, please see [the google documentation](https://cloud.google.com/docs/authentication/provide-credentials-adc#how-to) or the one [about authorizing client libraries](https://cloud.google.com/bigquery/docs/authentication#client-libs).
823
-
824
906
  Example:
825
907
  ```bash
826
908
  # Example import from SQL DDL
827
909
  datacontract import --format sql --source my_ddl.sql
828
910
  ```
829
911
 
830
- ```bash
831
- # Example import from Bigquery JSON
832
- datacontract import --format bigquery --source my_bigquery_table.json
833
- ```
834
-
835
- ```bash
836
- # Example import from Bigquery API
837
- datacontract import --format bigquery --btProjectId <project_id> --btDatasetId <dataset_id> --table <tableid_1> --table <tableid_2> --table <tableid_3>
838
- ```
839
-
840
912
  Available import options:
841
913
 
842
914
  | Type | Description | Status |
@@ -845,13 +917,71 @@ Available import options:
845
917
  | `avro` | Import from AVRO schemas | ✅ |
846
918
  | `glue` | Import from AWS Glue DataCatalog | ✅ |
847
919
  | `protobuf` | Import from Protobuf schemas | TBD |
848
- | `jsonschema` | Import from JSON Schemas | ✅ |
849
- | `bigquery` | Import from BigQuery Schemas | ✅ |
920
+ | `jsonschema` | Import from JSON Schemas | ✅ |
921
+ | `bigquery` | Import from BigQuery Schemas | ✅ |
922
+ | `unity` | Import from Databricks Unity Catalog | partial |
850
923
  | `dbt` | Import from dbt models | TBD |
851
- | `odcs` | Import from Open Data Contract Standard (ODCS) | TBD |
924
+ | `odcs` | Import from Open Data Contract Standard (ODCS) | |
852
925
  | Missing something? | Please create an issue on GitHub | TBD |
853
926
 
854
927
 
928
+ #### BigQuery
929
+
930
+ Bigquery data can either be imported off of JSON Files generated from the table descriptions or directly from the Bigquery API. In case you want to use JSON Files, specify the `source` parameter with a path to the JSON File.
931
+
932
+ To import from the Bigquery API, you have to _omit_ `source` and instead need to provide `bigquery-project` and `bigquery-dataset`. Additionally you may specify `bigquery-table` to enumerate the tables that should be imported. If no tables are given, _all_ available tables of the dataset will be imported.
933
+
934
+ For providing authentication to the Client, please see [the google documentation](https://cloud.google.com/docs/authentication/provide-credentials-adc#how-to) or the one [about authorizing client libraries](https://cloud.google.com/bigquery/docs/authentication#client-libs).
935
+
936
+ Examples:
937
+
938
+ ```bash
939
+ # Example import from Bigquery JSON
940
+ datacontract import --format bigquery --source my_bigquery_table.json
941
+ ```
942
+
943
+ ```bash
944
+ # Example import from Bigquery API with specifying the tables to import
945
+ datacontract import --format bigquery --bigquery-project <project_id> --bigquery-dataset <dataset_id> --bigquery-table <tableid_1> --bigquery-table <tableid_2> --bigquery-table <tableid_3>
946
+ ```
947
+
948
+ ```bash
949
+ # Example import from Bigquery API importing all tables in the dataset
950
+ datacontract import --format bigquery --bigquery-project <project_id> --bigquery-dataset <dataset_id>
951
+ ```
952
+
953
+ #### Unity Catalog
954
+
955
+ ```bash
956
+ # Example import from a Unity Catalog JSON file
957
+ datacontract import --format unity --source my_unity_table.json
958
+ ```
959
+
960
+ ```bash
961
+ # Example import single table from Unity Catalog via HTTP endpoint
962
+ export DATABRICKS_IMPORT_INSTANCE="https://xyz.cloud.databricks.com"
963
+ export DATABRICKS_IMPORT_ACCESS_TOKEN=<token>
964
+ datacontract import --format unity --unity-table-full-name <table_full_name>
965
+ ```
966
+
967
+ ### Glue
968
+
969
+ Importing from Glue reads the necessary Data directly off of the AWS API.
970
+ You may give the `glue-table` parameter to enumerate the tables that should be imported. If no tables are given, _all_ available tables of the database will be imported.
971
+
972
+ Examples:
973
+
974
+ ```bash
975
+ # Example import from AWS Glue with specifying the tables to import
976
+ datacontract import --format glue --source <database_name> --glue-table <table_name_1> --glue-table <table_name_2> --glue-table <table_name_3>
977
+ ```
978
+
979
+ ```bash
980
+ # Example import from AWS Glue importing all tables in the database
981
+ datacontract import --format glue --source <database_name>
982
+ ```
983
+
984
+
855
985
  ### breaking
856
986
 
857
987
  ```
@@ -1096,8 +1226,8 @@ source venv/bin/activate
1096
1226
  # Install Requirements
1097
1227
  pip install --upgrade pip setuptools wheel
1098
1228
  pip install -e '.[dev]'
1099
- ruff check --fix
1100
- ruff format
1229
+ pre-commit install
1230
+ pre-commit run --all-files
1101
1231
  pytest
1102
1232
  ```
1103
1233
 
@@ -1153,6 +1283,12 @@ We are happy to receive your contributions. Propose your change in an issue or d
1153
1283
  - [INNOQ](https://innoq.com)
1154
1284
  - And many more. To add your company, please create a pull request.
1155
1285
 
1286
+ ## Related Tools
1287
+
1288
+ - [Data Mesh Manager](https://www.datamesh-manager.com/) is a commercial tool to manage data products and data contracts. It supports the data contract specification and allows the user to import or export data contracts using this specification.
1289
+ - [Data Contract GPT](https://gpt.datacontract.com) is a custom GPT that can help you write data contracts.
1290
+ - [Data Contract Editor](https://editor.datacontract.com) is an editor for Data Contracts, including a live html preview.
1291
+
1156
1292
  ## License
1157
1293
 
1158
1294
  [MIT License](LICENSE)