datacontract-cli 0.10.19__tar.gz → 0.10.20__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 (205) hide show
  1. {datacontract_cli-0.10.19/datacontract_cli.egg-info → datacontract_cli-0.10.20}/PKG-INFO +5 -4
  2. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/cli.py +2 -3
  3. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/urls.py +9 -5
  4. datacontract_cli-0.10.20/datacontract/web.py +201 -0
  5. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20/datacontract_cli.egg-info}/PKG-INFO +5 -4
  6. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract_cli.egg-info/requires.txt +5 -3
  7. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/pyproject.toml +7 -4
  8. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_web.py +5 -7
  9. datacontract_cli-0.10.19/datacontract/web.py +0 -67
  10. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/LICENSE +0 -0
  11. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/MANIFEST.in +0 -0
  12. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/README.md +0 -0
  13. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/__init__.py +0 -0
  14. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/breaking/breaking.py +0 -0
  15. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/breaking/breaking_rules.py +0 -0
  16. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/catalog/catalog.py +0 -0
  17. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/data_contract.py +0 -0
  18. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/__init__.py +0 -0
  19. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  20. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  21. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  22. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  23. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/__init__.py +0 -0
  24. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/check_soda_execute.py +0 -0
  25. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/connections/bigquery.py +0 -0
  26. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/connections/dask.py +0 -0
  27. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/connections/databricks.py +0 -0
  28. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/connections/duckdb.py +0 -0
  29. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/connections/kafka.py +0 -0
  30. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/connections/postgres.py +0 -0
  31. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/connections/snowflake.py +0 -0
  32. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  33. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/engines/soda/connections/trino.py +0 -0
  34. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/__init__.py +0 -0
  35. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/avro_converter.py +0 -0
  36. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/avro_idl_converter.py +0 -0
  37. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/bigquery_converter.py +0 -0
  38. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/csv_type_converter.py +0 -0
  39. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/data_caterer_converter.py +0 -0
  40. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/dbml_converter.py +0 -0
  41. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/dbt_converter.py +0 -0
  42. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/dcs_exporter.py +0 -0
  43. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/exporter.py +0 -0
  44. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/exporter_factory.py +0 -0
  45. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/go_converter.py +0 -0
  46. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/great_expectations_converter.py +0 -0
  47. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/html_export.py +0 -0
  48. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/iceberg_converter.py +0 -0
  49. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/jsonschema_converter.py +0 -0
  50. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/markdown_converter.py +0 -0
  51. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/odcs_v2_exporter.py +0 -0
  52. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/odcs_v3_exporter.py +0 -0
  53. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/pandas_type_converter.py +0 -0
  54. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/protobuf_converter.py +0 -0
  55. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/pydantic_converter.py +0 -0
  56. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/rdf_converter.py +0 -0
  57. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/sodacl_converter.py +0 -0
  58. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/spark_converter.py +0 -0
  59. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/sql_converter.py +0 -0
  60. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/sql_type_converter.py +0 -0
  61. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/sqlalchemy_converter.py +0 -0
  62. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/export/terraform_converter.py +0 -0
  63. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/avro_importer.py +0 -0
  64. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/bigquery_importer.py +0 -0
  65. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/csv_importer.py +0 -0
  66. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/dbml_importer.py +0 -0
  67. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/dbt_importer.py +0 -0
  68. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/glue_importer.py +0 -0
  69. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/iceberg_importer.py +0 -0
  70. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/importer.py +0 -0
  71. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/importer_factory.py +0 -0
  72. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/jsonschema_importer.py +0 -0
  73. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/odcs_importer.py +0 -0
  74. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/odcs_v2_importer.py +0 -0
  75. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/odcs_v3_importer.py +0 -0
  76. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/parquet_importer.py +0 -0
  77. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/spark_importer.py +0 -0
  78. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/sql_importer.py +0 -0
  79. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/imports/unity_importer.py +0 -0
  80. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/init/init_template.py +0 -0
  81. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/integration/datamesh_manager.py +0 -0
  82. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/files.py +0 -0
  83. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/lint.py +0 -0
  84. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/linters/__init__.py +0 -0
  85. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/linters/description_linter.py +0 -0
  86. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/linters/example_model_linter.py +0 -0
  87. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/linters/field_pattern_linter.py +0 -0
  88. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/linters/field_reference_linter.py +0 -0
  89. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/linters/notice_period_linter.py +0 -0
  90. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/linters/quality_schema_linter.py +0 -0
  91. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/linters/valid_constraints_linter.py +0 -0
  92. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/resolve.py +0 -0
  93. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/resources.py +0 -0
  94. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/lint/schema.py +0 -0
  95. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/model/breaking_change.py +0 -0
  96. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/model/data_contract_specification.py +0 -0
  97. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/model/exceptions.py +0 -0
  98. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/model/odcs.py +0 -0
  99. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/model/run.py +0 -0
  100. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/py.typed +0 -0
  101. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  102. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  103. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  104. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/templates/datacontract.html +0 -0
  105. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/templates/index.html +0 -0
  106. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/templates/partials/datacontract_information.html +0 -0
  107. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  108. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/templates/partials/datacontract_terms.html +0 -0
  109. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/templates/partials/definition.html +0 -0
  110. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/templates/partials/example.html +0 -0
  111. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/templates/partials/model_field.html +0 -0
  112. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/templates/partials/server.html +0 -0
  113. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract/templates/style/output.css +0 -0
  114. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract_cli.egg-info/SOURCES.txt +0 -0
  115. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  116. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract_cli.egg-info/entry_points.txt +0 -0
  117. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/datacontract_cli.egg-info/top_level.txt +0 -0
  118. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/setup.cfg +0 -0
  119. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_breaking.py +0 -0
  120. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_catalog.py +0 -0
  121. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_changelog.py +0 -0
  122. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_cli.py +0 -0
  123. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_data_contract_specification.py +0 -0
  124. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_description_linter.py +0 -0
  125. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_documentation_linter.py +0 -0
  126. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_download_datacontract_file.py +0 -0
  127. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_example_model_linter.py +0 -0
  128. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_avro.py +0 -0
  129. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_avro_idl.py +0 -0
  130. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_bigquery.py +0 -0
  131. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_complex_data_contract.py +0 -0
  132. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_custom_exporter.py +0 -0
  133. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_data_caterer.py +0 -0
  134. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_dbml.py +0 -0
  135. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_dbt_models.py +0 -0
  136. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_dbt_sources.py +0 -0
  137. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_dbt_staging_sql.py +0 -0
  138. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_go.py +0 -0
  139. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_great_expectations.py +0 -0
  140. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_html.py +0 -0
  141. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_iceberg.py +0 -0
  142. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_jsonschema.py +0 -0
  143. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_markdown.py +0 -0
  144. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_odcs_v2.py +0 -0
  145. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_odcs_v3.py +0 -0
  146. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_protobuf.py +0 -0
  147. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_pydantic.py +0 -0
  148. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_rdf.py +0 -0
  149. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_sodacl.py +0 -0
  150. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_spark.py +0 -0
  151. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_sql.py +0 -0
  152. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_sql_query.py +0 -0
  153. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_sqlalchemy.py +0 -0
  154. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_export_terraform.py +0 -0
  155. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_field_constraint_linter.py +0 -0
  156. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_field_pattern_linter.py +0 -0
  157. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_field_reference_linter.py +0 -0
  158. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_avro.py +0 -0
  159. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_bigquery.py +0 -0
  160. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_csv.py +0 -0
  161. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_dbml.py +0 -0
  162. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_dbt.py +0 -0
  163. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_glue.py +0 -0
  164. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_iceberg.py +0 -0
  165. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_jsonschema.py +0 -0
  166. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_odcs_v2.py +0 -0
  167. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_odcs_v3.py +0 -0
  168. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_parquet.py +0 -0
  169. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_spark.py +0 -0
  170. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_sql.py +0 -0
  171. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_import_unity_file.py +0 -0
  172. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_integration_datameshmanager.py +0 -0
  173. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_lint.py +0 -0
  174. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_notice_period_linter.py +0 -0
  175. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_quality_schema_linter.py +0 -0
  176. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_resolve.py +0 -0
  177. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_roundtrip_jsonschema.py +0 -0
  178. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_spec_fields_field.py +0 -0
  179. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_spec_ref.py +0 -0
  180. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_azure_remote.py +0 -0
  181. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_bigquery.py +0 -0
  182. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_databricks.py +0 -0
  183. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_dataframe.py +0 -0
  184. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_delta.py +0 -0
  185. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_examples_csv.py +0 -0
  186. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_examples_formats_valid.py +0 -0
  187. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_examples_inline.py +0 -0
  188. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_examples_json.py +0 -0
  189. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_examples_missing.py +0 -0
  190. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_gcs_json_remote.py +0 -0
  191. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_kafka.py +0 -0
  192. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_kafka_remote.py +0 -0
  193. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_local_json.py +0 -0
  194. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_parquet.py +0 -0
  195. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_postgres.py +0 -0
  196. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_quality.py +0 -0
  197. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_s3_csv.py +0 -0
  198. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_s3_delta.py +0 -0
  199. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_s3_json.py +0 -0
  200. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_s3_json_complex.py +0 -0
  201. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_s3_json_multiple_models.py +0 -0
  202. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_s3_json_remote.py +0 -0
  203. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_snowflake.py +0 -0
  204. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_sqlserver.py +0 -0
  205. {datacontract_cli-0.10.19 → datacontract_cli-0.10.20}/tests/test_test_trino.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: datacontract-cli
3
- Version: 0.10.19
3
+ Version: 0.10.20
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
  Project-URL: Homepage, https://cli.datacontract.com
@@ -15,8 +15,6 @@ Requires-Dist: typer<0.16,>=0.15.1
15
15
  Requires-Dist: pydantic<2.11.0,>=2.8.2
16
16
  Requires-Dist: pyyaml~=6.0.1
17
17
  Requires-Dist: requests<2.33,>=2.31
18
- Requires-Dist: fastapi==0.115.6
19
- Requires-Dist: uvicorn==0.34.0
20
18
  Requires-Dist: fastjsonschema<2.22.0,>=2.19.1
21
19
  Requires-Dist: fastparquet==2024.11.0
22
20
  Requires-Dist: numpy<2.0.0,>=1.26.4
@@ -65,8 +63,11 @@ Provides-Extra: dbml
65
63
  Requires-Dist: pydbml>=1.1.1; extra == "dbml"
66
64
  Provides-Extra: parquet
67
65
  Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
66
+ Provides-Extra: web
67
+ Requires-Dist: fastapi==0.115.6; extra == "web"
68
+ Requires-Dist: uvicorn==0.34.0; extra == "web"
68
69
  Provides-Extra: all
69
- Requires-Dist: datacontract-cli[bigquery,csv,databricks,dbml,dbt,iceberg,kafka,parquet,postgres,s3,snowflake,sqlserver,trino]; extra == "all"
70
+ Requires-Dist: datacontract-cli[bigquery,csv,databricks,dbml,dbt,iceberg,kafka,parquet,postgres,s3,snowflake,sqlserver,trino,web]; extra == "all"
70
71
  Provides-Extra: dev
71
72
  Requires-Dist: datacontract-cli[all]; extra == "dev"
72
73
  Requires-Dist: httpx==0.28.1; extra == "dev"
@@ -4,7 +4,6 @@ from pathlib import Path
4
4
  from typing import Iterable, List, Optional
5
5
 
6
6
  import typer
7
- import uvicorn
8
7
  from click import Context
9
8
  from rich import box
10
9
  from rich.console import Console
@@ -12,7 +11,6 @@ from rich.table import Table
12
11
  from typer.core import TyperGroup
13
12
  from typing_extensions import Annotated
14
13
 
15
- from datacontract import web
16
14
  from datacontract.catalog.catalog import create_data_contract_html, create_index_html
17
15
  from datacontract.data_contract import DataContract, ExportFormat
18
16
  from datacontract.imports.importer import ImportFormat
@@ -442,8 +440,9 @@ def serve(
442
440
  """
443
441
  Start the datacontract web server.
444
442
  """
443
+ import uvicorn
445
444
 
446
- uvicorn.run(web.app, port=port, host=host)
445
+ uvicorn.run("datacontract.web:app", port=port, host=host, reload=True)
447
446
 
448
447
 
449
448
  def _handle_result(run):
@@ -27,8 +27,11 @@ def fetch_resource(url: str):
27
27
 
28
28
  def _set_api_key(headers, url):
29
29
  hostname = urlparse(url).hostname
30
+
31
+ datamesh_manager_api_key = os.getenv("DATAMESH_MANAGER_API_KEY")
32
+ datacontract_manager_api_key = os.getenv("DATACONTRACT_MANAGER_API_KEY")
33
+
30
34
  if hostname == "datamesh-manager.com" or hostname.endswith(".datamesh-manager.com"):
31
- datamesh_manager_api_key = os.getenv("DATAMESH_MANAGER_API_KEY")
32
35
  if datamesh_manager_api_key is None or datamesh_manager_api_key == "":
33
36
  print("Error: Data Mesh Manager API Key is not set. Set env variable DATAMESH_MANAGER_API_KEY.")
34
37
  raise DataContractException(
@@ -40,7 +43,6 @@ def _set_api_key(headers, url):
40
43
  )
41
44
  headers["x-api-key"] = datamesh_manager_api_key
42
45
  elif hostname == "datacontract-manager.com" or hostname.endswith(".datacontract-manager.com"):
43
- datacontract_manager_api_key = os.getenv("DATACONTRACT_MANAGER_API_KEY")
44
46
  if datacontract_manager_api_key is None or datacontract_manager_api_key == "":
45
47
  print("Error: Data Contract Manager API Key is not set. Set env variable DATACONTRACT_MANAGER_API_KEY.")
46
48
  raise DataContractException(
@@ -51,6 +53,8 @@ def _set_api_key(headers, url):
51
53
  result="error",
52
54
  )
53
55
  headers["x-api-key"] = datacontract_manager_api_key
54
- else:
55
- # do nothing
56
- pass
56
+
57
+ if datamesh_manager_api_key is not None and datamesh_manager_api_key != "":
58
+ headers["x-api-key"] = datamesh_manager_api_key
59
+ if datacontract_manager_api_key is not None and datacontract_manager_api_key != "":
60
+ headers["x-api-key"] = datacontract_manager_api_key
@@ -0,0 +1,201 @@
1
+ from typing import Annotated, Optional
2
+
3
+ import typer
4
+ from fastapi import Body, FastAPI, Query
5
+ from fastapi.responses import PlainTextResponse
6
+
7
+ from datacontract.data_contract import DataContract, ExportFormat
8
+ from datacontract.model.run import Run
9
+
10
+ DATA_CONTRACT_EXAMPLE_PAYLOAD = """dataContractSpecification: 1.1.0
11
+ id: urn:datacontract:checkout:orders-latest
12
+ info:
13
+ title: Orders Latest
14
+ version: 2.0.0
15
+ owner: Sales Team
16
+ servers:
17
+ production:
18
+ type: s3
19
+ location: s3://datacontract-example-orders-latest/v2/{model}/*.json
20
+ format: json
21
+ delimiter: new_line
22
+ models:
23
+ orders:
24
+ description: One record per order. Includes cancelled and deleted orders.
25
+ type: table
26
+ fields:
27
+ order_id:
28
+ type: string
29
+ primaryKey: true
30
+ order_timestamp:
31
+ description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.
32
+ type: timestamp
33
+ required: true
34
+ examples:
35
+ - "2024-09-09T08:30:00Z"
36
+ order_total:
37
+ description: Total amount the smallest monetary unit (e.g., cents).
38
+ type: long
39
+ required: true
40
+ examples:
41
+ - 9999
42
+ quality:
43
+ - type: sql
44
+ description: 95% of all order total values are expected to be between 10 and 499 EUR.
45
+ query: |
46
+ SELECT quantile_cont(order_total, 0.95) AS percentile_95
47
+ FROM orders
48
+ mustBeBetween: [1000, 99900]
49
+ customer_id:
50
+ description: Unique identifier for the customer.
51
+ type: text
52
+ minLength: 10
53
+ maxLength: 20
54
+ """
55
+
56
+ app = FastAPI(
57
+ docs_url="/",
58
+ title="Data Contract API",
59
+ summary="API to execute Data Contract CLI operations.",
60
+ license_info={
61
+ "name": "MIT License",
62
+ "identifier": "MIT",
63
+ },
64
+ contact={"name": "Data Contract CLI", "url": "https://cli.datacontract.com/"},
65
+ openapi_tags=[
66
+ {
67
+ "name": "test",
68
+ "externalDocs": {
69
+ "description": "Documentation",
70
+ "url": "https://cli.datacontract.com/#test",
71
+ },
72
+ },
73
+ {
74
+ "name": "lint",
75
+ "externalDocs": {
76
+ "description": "Documentation",
77
+ "url": "https://cli.datacontract.com/#lint",
78
+ },
79
+ },
80
+ {
81
+ "name": "export",
82
+ "externalDocs": {
83
+ "description": "Documentation",
84
+ "url": "https://cli.datacontract.com/#export",
85
+ },
86
+ },
87
+ ],
88
+ )
89
+
90
+
91
+ @app.post(
92
+ "/test",
93
+ tags=["test"],
94
+ summary="Run data contract tests",
95
+ description="""
96
+ Run schema and quality tests. Data Contract CLI connects to the data sources configured in the server section.
97
+ This usually requires credentials to access the data sources.
98
+ Credentials must be provided via environment variables when running the web server.
99
+ POST the data contract YAML as payload.
100
+ """,
101
+ response_model_exclude_none=True,
102
+ response_model_exclude_unset=True,
103
+ )
104
+ async def test(
105
+ body: Annotated[
106
+ str,
107
+ Body(
108
+ title="Data Contract YAML",
109
+ media_type="application/yaml",
110
+ examples=[DATA_CONTRACT_EXAMPLE_PAYLOAD],
111
+ ),
112
+ ],
113
+ server: Annotated[
114
+ str | None,
115
+ Query(
116
+ example="production",
117
+ description="The server name to test. Optional, if there is only one server.",
118
+ ),
119
+ ] = None,
120
+ ) -> Run:
121
+ return DataContract(data_contract_str=body, server=server).test()
122
+
123
+
124
+ @app.post(
125
+ "/lint",
126
+ tags=["lint"],
127
+ summary="Validate that the datacontract.yaml is correctly formatted.",
128
+ description="""Validate that the datacontract.yaml is correctly formatted.""",
129
+ )
130
+ async def lint(
131
+ body: Annotated[
132
+ str,
133
+ Body(
134
+ title="Data Contract YAML",
135
+ media_type="application/yaml",
136
+ examples=[DATA_CONTRACT_EXAMPLE_PAYLOAD],
137
+ ),
138
+ ],
139
+ schema: Annotated[
140
+ str | None,
141
+ Query(
142
+ example="https://datacontract.com/datacontract.schema.json",
143
+ description="The schema to use for validation. This must be a URL.",
144
+ ),
145
+ ] = None,
146
+ ):
147
+ data_contract = DataContract(data_contract_str=body, schema_location=schema)
148
+ lint_result = data_contract.lint()
149
+ return {"result": lint_result.result, "checks": lint_result.checks}
150
+
151
+
152
+ @app.post(
153
+ "/export",
154
+ tags=["export"],
155
+ summary="Convert data contract to a specific format.",
156
+ response_class=PlainTextResponse,
157
+ )
158
+ def export(
159
+ body: Annotated[
160
+ str,
161
+ Body(
162
+ title="Data Contract YAML",
163
+ media_type="application/yaml",
164
+ examples=[DATA_CONTRACT_EXAMPLE_PAYLOAD],
165
+ ),
166
+ ],
167
+ format: Annotated[ExportFormat, typer.Option(help="The export format.")],
168
+ server: Annotated[
169
+ str | None,
170
+ Query(
171
+ example="production",
172
+ description="The server name to export. Optional, if there is only one server.",
173
+ ),
174
+ ] = None,
175
+ model: Annotated[
176
+ str | None,
177
+ Query(
178
+ description="Use the key of the model in the data contract yaml file "
179
+ "to refer to a model, e.g., `orders`, or `all` for all "
180
+ "models (default).",
181
+ ),
182
+ ] = "all",
183
+ rdf_base: Annotated[
184
+ Optional[str],
185
+ typer.Option(help="[rdf] The base URI used to generate the RDF graph.", rich_help_panel="RDF Options"),
186
+ ] = None,
187
+ sql_server_type: Annotated[
188
+ Optional[str],
189
+ Query(
190
+ description="[sql] The server type to determine the sql dialect. By default, it uses 'auto' to automatically detect the sql dialect via the specified servers in the data contract.",
191
+ ),
192
+ ] = None,
193
+ ):
194
+ result = DataContract(data_contract_str=body, server=server).export(
195
+ export_format=format,
196
+ model=model,
197
+ rdf_base=rdf_base,
198
+ sql_server_type=sql_server_type,
199
+ )
200
+
201
+ return result
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: datacontract-cli
3
- Version: 0.10.19
3
+ Version: 0.10.20
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
  Project-URL: Homepage, https://cli.datacontract.com
@@ -15,8 +15,6 @@ Requires-Dist: typer<0.16,>=0.15.1
15
15
  Requires-Dist: pydantic<2.11.0,>=2.8.2
16
16
  Requires-Dist: pyyaml~=6.0.1
17
17
  Requires-Dist: requests<2.33,>=2.31
18
- Requires-Dist: fastapi==0.115.6
19
- Requires-Dist: uvicorn==0.34.0
20
18
  Requires-Dist: fastjsonschema<2.22.0,>=2.19.1
21
19
  Requires-Dist: fastparquet==2024.11.0
22
20
  Requires-Dist: numpy<2.0.0,>=1.26.4
@@ -65,8 +63,11 @@ Provides-Extra: dbml
65
63
  Requires-Dist: pydbml>=1.1.1; extra == "dbml"
66
64
  Provides-Extra: parquet
67
65
  Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
66
+ Provides-Extra: web
67
+ Requires-Dist: fastapi==0.115.6; extra == "web"
68
+ Requires-Dist: uvicorn==0.34.0; extra == "web"
68
69
  Provides-Extra: all
69
- Requires-Dist: datacontract-cli[bigquery,csv,databricks,dbml,dbt,iceberg,kafka,parquet,postgres,s3,snowflake,sqlserver,trino]; extra == "all"
70
+ Requires-Dist: datacontract-cli[bigquery,csv,databricks,dbml,dbt,iceberg,kafka,parquet,postgres,s3,snowflake,sqlserver,trino,web]; extra == "all"
70
71
  Provides-Extra: dev
71
72
  Requires-Dist: datacontract-cli[all]; extra == "dev"
72
73
  Requires-Dist: httpx==0.28.1; extra == "dev"
@@ -2,8 +2,6 @@ typer<0.16,>=0.15.1
2
2
  pydantic<2.11.0,>=2.8.2
3
3
  pyyaml~=6.0.1
4
4
  requests<2.33,>=2.31
5
- fastapi==0.115.6
6
- uvicorn==0.34.0
7
5
  fastjsonschema<2.22.0,>=2.19.1
8
6
  fastparquet==2024.11.0
9
7
  numpy<2.0.0,>=1.26.4
@@ -19,7 +17,7 @@ boto3<1.35.98,>=1.34.41
19
17
  jinja_partials>=0.2.1
20
18
 
21
19
  [all]
22
- datacontract-cli[bigquery,csv,databricks,dbml,dbt,iceberg,kafka,parquet,postgres,s3,snowflake,sqlserver,trino]
20
+ datacontract-cli[bigquery,csv,databricks,dbml,dbt,iceberg,kafka,parquet,postgres,s3,snowflake,sqlserver,trino,web]
23
21
 
24
22
  [avro]
25
23
  avro==1.12.0
@@ -83,3 +81,7 @@ soda-core-sqlserver<3.4.0,>=3.3.20
83
81
 
84
82
  [trino]
85
83
  soda-core-trino<3.4.0,>=3.3.20
84
+
85
+ [web]
86
+ fastapi==0.115.6
87
+ uvicorn==0.34.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "datacontract-cli"
3
- version = "0.10.19"
3
+ version = "0.10.20"
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
  readme = "README.md"
6
6
  authors = [
@@ -19,8 +19,6 @@ dependencies = [
19
19
  "pydantic>=2.8.2,<2.11.0",
20
20
  "pyyaml~=6.0.1",
21
21
  "requests>=2.31,<2.33",
22
- "fastapi==0.115.6", # move to extra?
23
- "uvicorn==0.34.0", # move to extra?
24
22
  "fastjsonschema>=2.19.1,<2.22.0",
25
23
  "fastparquet==2024.11.0",
26
24
  "numpy>=1.26.4,<2.0.0", # transitive dependency, needs to be <2.0.0 https://github.com/datacontract/datacontract-cli/issues/575
@@ -103,8 +101,13 @@ parquet = [
103
101
  "pyarrow>=18.1.0"
104
102
  ]
105
103
 
104
+ web = [
105
+ "fastapi==0.115.6",
106
+ "uvicorn==0.34.0",
107
+ ]
108
+
106
109
  all = [
107
- "datacontract-cli[kafka,bigquery,csv,snowflake,postgres,databricks,sqlserver,s3,trino,dbt,dbml,iceberg,parquet]"
110
+ "datacontract-cli[kafka,bigquery,csv,snowflake,postgres,databricks,sqlserver,s3,trino,dbt,dbml,iceberg,parquet,web]"
108
111
  ]
109
112
 
110
113
  dev = [
@@ -6,13 +6,12 @@ client = TestClient(app)
6
6
 
7
7
 
8
8
  def test_lint():
9
- with open("fixtures/lint/valid_datacontract.yaml", "rb") as f:
9
+ with open("fixtures/lint/valid_datacontract.yaml", "r") as f:
10
10
  data_contract_str = f.read()
11
11
 
12
12
  response = client.post(
13
13
  url="/lint",
14
- files={"file": ("datacontract.yaml", data_contract_str, "application/yaml")},
15
- params={"linters": "none"},
14
+ json=data_contract_str,
16
15
  )
17
16
  assert response.status_code == 200
18
17
  print(response.json())
@@ -22,12 +21,11 @@ def test_lint():
22
21
 
23
22
 
24
23
  def test_export_jsonschema():
25
- with open("fixtures/local-json/datacontract.yaml", "rb") as f:
24
+ with open("fixtures/local-json/datacontract.yaml", "r") as f:
26
25
  data_contract_str = f.read()
27
26
  response = client.post(
28
- url="/export",
29
- files={"file": ("datacontract.yaml", data_contract_str, "application/yaml")},
30
- params={"export_format": "jsonschema"},
27
+ url="/export?format=jsonschema",
28
+ json=data_contract_str,
31
29
  )
32
30
  assert response.status_code == 200
33
31
  print(response.text)
@@ -1,67 +0,0 @@
1
- from typing import Annotated, Optional, Union
2
-
3
- import typer
4
- from fastapi import FastAPI, File
5
- from fastapi.responses import HTMLResponse, PlainTextResponse
6
-
7
- from datacontract.data_contract import DataContract, ExportFormat
8
-
9
- app = FastAPI()
10
-
11
-
12
- @app.get("/", response_class=HTMLResponse)
13
- def index():
14
- # TODO OpenAPI spec
15
- return """
16
- <html>
17
- <body>
18
- <h1>datacontract web server</h1>
19
- <ul>
20
- <li>POST /lint</li>
21
- <li>POST /export</li>
22
- </ul>
23
- </body>
24
- </html>
25
- """
26
-
27
-
28
- @app.post("/lint")
29
- def lint(file: Annotated[bytes, File()], linters: Union[str, set[str]] = "all"):
30
- data_contract = DataContract(data_contract_str=str(file, encoding="utf-8"))
31
- lint_result = data_contract.lint(enabled_linters=linters)
32
- return {"result": lint_result.result, "checks": lint_result.checks}
33
-
34
-
35
- @app.post("/export", response_class=PlainTextResponse)
36
- def export(
37
- file: Annotated[bytes, File()],
38
- export_format: Annotated[ExportFormat, typer.Option(help="The export format.")],
39
- server: Annotated[str, typer.Option(help="The server name to export.")] = None,
40
- model: Annotated[
41
- str,
42
- typer.Option(
43
- help="Use the key of the model in the data contract yaml file "
44
- "to refer to a model, e.g., `orders`, or `all` for all "
45
- "models (default)."
46
- ),
47
- ] = "all",
48
- rdf_base: Annotated[
49
- Optional[str],
50
- typer.Option(help="[rdf] The base URI used to generate the RDF graph.", rich_help_panel="RDF Options"),
51
- ] = None,
52
- sql_server_type: Annotated[
53
- Optional[str],
54
- typer.Option(
55
- help="[sql] The server type to determine the sql dialect. By default, it uses 'auto' to automatically detect the sql dialect via the specified servers in the data contract.",
56
- rich_help_panel="SQL Options",
57
- ),
58
- ] = "auto",
59
- ):
60
- result = DataContract(data_contract_str=str(file, encoding="utf-8"), server=server).export(
61
- export_format=export_format,
62
- model=model,
63
- rdf_base=rdf_base,
64
- sql_server_type=sql_server_type,
65
- )
66
-
67
- return result