datacontract-cli 1.0.16__tar.gz → 1.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. {datacontract_cli-1.0.16/datacontract_cli.egg-info → datacontract_cli-1.1.0}/PKG-INFO +41 -33
  2. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/README.md +2 -13
  3. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/__init__.py +4 -0
  4. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/api.py +88 -3
  5. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/catalog/catalog.py +2 -1
  6. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/cli.py +29 -0
  7. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_changelog.py +11 -4
  8. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_ci.py +3 -1
  9. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_dbt.py +2 -1
  10. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_edit.py +2 -1
  11. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_export.py +6 -1
  12. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_import.py +55 -17
  13. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_lint.py +3 -1
  14. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_publish.py +4 -2
  15. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_test.py +50 -2
  16. datacontract_cli-1.1.0/datacontract/config/__init__.py +32 -0
  17. datacontract_cli-1.1.0/datacontract/config/cli_context.py +19 -0
  18. datacontract_cli-1.1.0/datacontract/config/settings.py +894 -0
  19. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/data_contract.py +25 -2
  20. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/create_checks.py +2 -1
  21. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/data_contract_test.py +74 -7
  22. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/datacontract/check_azure_blob_file.py +9 -8
  23. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/fastjsonschema/check_jsonschema.py +23 -15
  24. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +5 -4
  25. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/aws_credentials.py +12 -15
  26. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/connect.py +257 -158
  27. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/duckdb_connection.py +15 -13
  28. datacontract_cli-1.1.0/datacontract/engines/ibis/connections/kafka.py +609 -0
  29. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/redshift_credentials.py +35 -51
  30. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/ibis_check_execute.py +43 -2
  31. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/great_expectations_exporter.py +1 -1
  32. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/spark_exporter.py +193 -76
  33. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/athena_importer.py +5 -3
  34. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/dcs_importer.py +2 -2
  35. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/glue_importer.py +18 -15
  36. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/importer.py +9 -0
  37. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/mysql_importer.py +10 -6
  38. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/object_storage_importer.py +6 -4
  39. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/odcs_importer.py +4 -4
  40. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/oracle_importer.py +6 -4
  41. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/postgres_importer.py +10 -6
  42. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/redshift_importer.py +6 -4
  43. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/snowflake_importer.py +20 -20
  44. datacontract_cli-1.1.0/datacontract/imports/spark_type_json.py +122 -0
  45. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/sqlserver_importer.py +9 -6
  46. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/trino_importer.py +8 -4
  47. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/unity_importer.py +23 -21
  48. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/integration/dbt_sync.py +23 -6
  49. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/integration/entropy_data.py +27 -19
  50. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/lint/files.py +2 -1
  51. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/lint/resolve.py +34 -21
  52. datacontract_cli-1.1.0/datacontract/lint/resources.py +26 -0
  53. datacontract_cli-1.1.0/datacontract/lint/s3.py +26 -0
  54. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/lint/urls.py +13 -11
  55. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/model/exceptions.py +0 -18
  56. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/model/run.py +3 -0
  57. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/test_results_writer.py +4 -0
  58. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/datacontract.html +1 -0
  59. datacontract_cli-1.1.0/datacontract/templates/datacontract_odcs.html +47 -0
  60. datacontract_cli-1.1.0/datacontract/templates/macros/authoritative_definitions.html +25 -0
  61. datacontract_cli-1.1.0/datacontract/templates/macros/schema.html +226 -0
  62. datacontract_cli-1.1.0/datacontract/templates/macros/server.html +84 -0
  63. datacontract_cli-1.1.0/datacontract/templates/macros/support.html +25 -0
  64. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/custom_properties.html +69 -0
  65. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/diagram.html +41 -0
  66. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/dialog_yaml.html +27 -0
  67. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/footer.html +15 -0
  68. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/fundamentals.html +113 -0
  69. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/header.html +16 -0
  70. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/pricing.html +37 -0
  71. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/roles.html +91 -0
  72. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/schema.html +123 -0
  73. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/servers.html +282 -0
  74. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/sla.html +95 -0
  75. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/support.html +79 -0
  76. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/team.html +236 -0
  77. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/term_of_use.html +101 -0
  78. datacontract_cli-1.1.0/datacontract/templates/partials_odcs/title.html +88 -0
  79. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/style/output.css +531 -213
  80. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0/datacontract_cli.egg-info}/PKG-INFO +41 -33
  81. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract_cli.egg-info/SOURCES.txt +35 -3
  82. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract_cli.egg-info/requires.txt +20 -17
  83. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/pyproject.toml +87 -44
  84. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_api.py +126 -0
  85. datacontract_cli-1.1.0/tests/test_config.py +248 -0
  86. datacontract_cli-1.1.0/tests/test_config_file.py +140 -0
  87. datacontract_cli-1.1.0/tests/test_config_require.py +39 -0
  88. datacontract_cli-1.1.0/tests/test_config_threading.py +96 -0
  89. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_athena.py +15 -0
  90. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_bigquery.py +12 -0
  91. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_databricks.py +15 -0
  92. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_impala.py +15 -0
  93. datacontract_cli-1.1.0/tests/test_connect_mysql.py +78 -0
  94. datacontract_cli-1.1.0/tests/test_connect_oracle.py +73 -0
  95. datacontract_cli-1.1.0/tests/test_connect_postgres.py +87 -0
  96. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_redshift.py +21 -0
  97. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_snowflake.py +73 -4
  98. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_sqlserver.py +24 -1
  99. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_trino.py +19 -0
  100. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_dbt_sync.py +31 -3
  101. datacontract_cli-1.1.0/tests/test_docs_config_options.py +17 -0
  102. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_edit.py +1 -1
  103. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_sodacl.py +34 -1
  104. datacontract_cli-1.1.0/tests/test_export_spark.py +191 -0
  105. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_object_storage.py +3 -1
  106. datacontract_cli-1.1.0/tests/test_import_spark_type_json.py +129 -0
  107. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_lint.py +48 -0
  108. datacontract_cli-1.1.0/tests/test_test_databricks.py +53 -0
  109. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_kafka.py +3 -13
  110. datacontract_cli-1.1.0/tests/test_test_kafka_decoding.py +212 -0
  111. datacontract_cli-1.1.0/tests/test_test_row_filter.py +120 -0
  112. datacontract_cli-1.0.16/datacontract/engines/ibis/connections/kafka.py +0 -437
  113. datacontract_cli-1.0.16/datacontract/lint/resources.py +0 -21
  114. datacontract_cli-1.0.16/datacontract/templates/datacontract_odcs.html +0 -703
  115. datacontract_cli-1.0.16/tests/test_export_spark.py +0 -180
  116. datacontract_cli-1.0.16/tests/test_import_spark.py +0 -219
  117. datacontract_cli-1.0.16/tests/test_require_env.py +0 -28
  118. datacontract_cli-1.0.16/tests/test_test_databricks.py +0 -27
  119. datacontract_cli-1.0.16/tests/test_test_dataframe.py +0 -200
  120. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/LICENSE +0 -0
  121. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/MANIFEST.in +0 -0
  122. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/changelog/__init__.py +0 -0
  123. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/changelog/changelog.py +0 -0
  124. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/changelog/normalize.py +0 -0
  125. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_api.py +0 -0
  126. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_catalog.py +0 -0
  127. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_init.py +0 -0
  128. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/VERSION +0 -0
  129. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/abap-Bs8kvjsq.js +0 -0
  130. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/apex-Dspwrl5m.js +0 -0
  131. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/assets/editor.worker-4.7.0.js +0 -0
  132. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +0 -0
  133. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/azcli-k1BiOau1.js +0 -0
  134. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/bat-BIP72KWc.js +0 -0
  135. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/bicep-VhQeYhS3.js +0 -0
  136. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/cameligo-DnuAXtHg.js +0 -0
  137. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/clojure-BAuDPsal.js +0 -0
  138. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/coffee-BV06qSnj.js +0 -0
  139. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/cpp-Cz8Jeyrf.js +0 -0
  140. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/csharp-F6hhlXFb.js +0 -0
  141. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/csp-KzlEHCyI.js +0 -0
  142. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/css-e4FKntZ3.js +0 -0
  143. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/cssMode-BNkTa2xp.js +0 -0
  144. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/cypher-CpvDGKRr.js +0 -0
  145. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/dart-DdHeFWR0.js +0 -0
  146. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/datacontract-editor.css +0 -0
  147. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/datacontract-editor.es.js +0 -0
  148. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/dockerfile-aoNXDcio.js +0 -0
  149. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/ecl-C4Q0DYuA.js +0 -0
  150. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/elixir-C9X42b0T.js +0 -0
  151. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/flow9-Bff42pfB.js +0 -0
  152. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/freemarker2-Dyfzmb5A.js +0 -0
  153. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/fsharp-C6vPAsHG.js +0 -0
  154. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/go-DEr8zx9f.js +0 -0
  155. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/graphql-BiNBBRFh.js +0 -0
  156. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/handlebars-BtDNI-uC.js +0 -0
  157. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/hcl-2T9lKuFg.js +0 -0
  158. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/html-Cn4TGw_o.js +0 -0
  159. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/htmlMode-Bf84vbo2.js +0 -0
  160. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/index.html +0 -0
  161. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/ini-CZGtssYM.js +0 -0
  162. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/java-B260NeH3.js +0 -0
  163. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/javascript-B86Kac07.js +0 -0
  164. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/jsonMode-Ckgg5lAE.js +0 -0
  165. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/julia-kuNLM9c5.js +0 -0
  166. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/kotlin-Bz6kAefA.js +0 -0
  167. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/less-AZUtS89I.js +0 -0
  168. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/lexon-BcmgnyRb.js +0 -0
  169. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/liquid-D0NPwuu_.js +0 -0
  170. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/logo_fuchsia_v2.svg +0 -0
  171. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/lua-Dz1RbATg.js +0 -0
  172. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/m3-CIMooLFn.js +0 -0
  173. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/markdown-C1BsCK9P.js +0 -0
  174. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/mdx-QFRSBtVQ.js +0 -0
  175. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/mips-BovsnfLQ.js +0 -0
  176. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/monaco-4.7.0.js +0 -0
  177. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/msdax-CiRB2ZB-.js +0 -0
  178. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/mysql-BwdpPE19.js +0 -0
  179. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/objective-c-D4nfHfso.js +0 -0
  180. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/odcs.svg +0 -0
  181. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/pascal--j5-PYtz.js +0 -0
  182. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/pascaligo-C7TcJxNL.js +0 -0
  183. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/perl-BzEWqUb5.js +0 -0
  184. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/pgsql-B_KZ0mGX.js +0 -0
  185. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/php-A19QHzQV.js +0 -0
  186. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/pla-COeKY1hA.js +0 -0
  187. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/postiats-BfMp7zJL.js +0 -0
  188. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/powerquery-B0TS_5Gb.js +0 -0
  189. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/powershell-5jSbKdYB.js +0 -0
  190. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/protobuf-YgnOutn3.js +0 -0
  191. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/pug-DLej6kn5.js +0 -0
  192. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/python-C8RW9B6A.js +0 -0
  193. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/qsharp-AhjqtSHB.js +0 -0
  194. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/r-D-F4P80w.js +0 -0
  195. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/razor-CLZqdY_r.js +0 -0
  196. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/redis-hwwIlMnV.js +0 -0
  197. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/redshift-Bcm_kjEG.js +0 -0
  198. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/restructuredtext-CrdzfPP-.js +0 -0
  199. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/ruby-QC2UNm1s.js +0 -0
  200. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/rust-5aqiQ3L5.js +0 -0
  201. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/sb-B1g1ZfLJ.js +0 -0
  202. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/scala-C2U4R5Gb.js +0 -0
  203. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/scheme-DeFRbslr.js +0 -0
  204. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/scss-RSTCiCmI.js +0 -0
  205. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/shell-BpF-iNu8.js +0 -0
  206. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/solidity-C00r2mbQ.js +0 -0
  207. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/sophia-DVW5ZKDB.js +0 -0
  208. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/sparql-B0nmpxeX.js +0 -0
  209. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/sql-CJwKPERn.js +0 -0
  210. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/st-DPlKG5DT.js +0 -0
  211. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/swift-YZBAbVHV.js +0 -0
  212. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/systemverilog-CDQSaH63.js +0 -0
  213. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/tcl-Dlu8sp6Q.js +0 -0
  214. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/tsMode-yleMwhPq.js +0 -0
  215. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/twig-C5TO7-kw.js +0 -0
  216. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/typescript-CJBeebKU.js +0 -0
  217. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/typespec-BsmjDEu7.js +0 -0
  218. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/vb-ChHvIDrk.js +0 -0
  219. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/wgsl-XEp1ju8c.js +0 -0
  220. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/xml-vC-NMVX1.js +0 -0
  221. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/yaml-Dlf2VF-T.js +0 -0
  222. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/__init__.py +0 -0
  223. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/__init__.py +0 -0
  224. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/check_filter.py +0 -0
  225. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/check_spec.py +0 -0
  226. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/dimensions.py +0 -0
  227. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/physical_type_match.py +0 -0
  228. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/type_normalize.py +0 -0
  229. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  230. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  231. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/__init__.py +0 -0
  232. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/__init__.py +0 -0
  233. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/oracle_patch.py +0 -0
  234. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/redshift_patch.py +0 -0
  235. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/dtype_category.py +0 -0
  236. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/native_type.py +0 -0
  237. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/snowflake_structured_types.py +0 -0
  238. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/__init__.py +0 -0
  239. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/avro_exporter.py +0 -0
  240. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/avro_idl_exporter.py +0 -0
  241. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/bigquery_exporter.py +0 -0
  242. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/custom_exporter.py +0 -0
  243. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/data_caterer_exporter.py +0 -0
  244. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/dbml_exporter.py +0 -0
  245. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/dbt_exporter.py +0 -0
  246. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/dcs_exporter.py +0 -0
  247. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/dqx_exporter.py +0 -0
  248. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/duckdb_type_converter.py +0 -0
  249. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/excel_exporter.py +0 -0
  250. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/exporter.py +0 -0
  251. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/exporter_factory.py +0 -0
  252. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/go_exporter.py +0 -0
  253. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/html_exporter.py +0 -0
  254. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/iceberg_exporter.py +0 -0
  255. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/jsonschema_exporter.py +0 -0
  256. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/markdown_exporter.py +0 -0
  257. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/mermaid_exporter.py +0 -0
  258. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/odcs_export_helper.py +0 -0
  259. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/odcs_v3_exporter.py +0 -0
  260. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/pandas_type_converter.py +0 -0
  261. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/protobuf_exporter.py +0 -0
  262. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/pydantic_exporter.py +0 -0
  263. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/rdf_exporter.py +0 -0
  264. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/sodacl_check_builder.py +0 -0
  265. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/sodacl_exporter.py +0 -0
  266. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/sql_exporter.py +0 -0
  267. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/sql_type_converter.py +0 -0
  268. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/sqlalchemy_exporter.py +0 -0
  269. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/avro_importer.py +0 -0
  270. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/bigquery_importer.py +0 -0
  271. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/csv_importer.py +0 -0
  272. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/dbml_importer.py +0 -0
  273. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/dbt_importer.py +0 -0
  274. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/excel_importer.py +0 -0
  275. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/iceberg_importer.py +0 -0
  276. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/importer_factory.py +0 -0
  277. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/json_importer.py +0 -0
  278. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/jsonschema_importer.py +0 -0
  279. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/odcs_helper.py +0 -0
  280. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/parquet_importer.py +0 -0
  281. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/powerbi_importer.py +0 -0
  282. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/protobuf_importer.py +0 -0
  283. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/spark_importer.py +0 -0
  284. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/sql_importer.py +0 -0
  285. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/init/init_template.py +0 -0
  286. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/integration/dbt_test_mapping.py +0 -0
  287. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/lint/schema.py +0 -0
  288. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/model/changelog.py +0 -0
  289. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/model/odcs.py +0 -0
  290. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/model/server.py +0 -0
  291. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/__init__.py +0 -0
  292. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/ci_output.py +0 -0
  293. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/json_test_results.py +0 -0
  294. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/junit_test_results.py +0 -0
  295. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/output_format.py +0 -0
  296. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/text_changelog_results.py +0 -0
  297. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/py.typed +0 -0
  298. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  299. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  300. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
  301. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  302. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
  303. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
  304. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  305. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
  306. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/odcs-3.1.0.init.yaml +0 -0
  307. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
  308. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/index.html +0 -0
  309. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/datacontract_information.html +0 -0
  310. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  311. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/datacontract_terms.html +0 -0
  312. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/definition.html +0 -0
  313. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/example.html +0 -0
  314. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/model_field.html +0 -0
  315. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/quality.html +0 -0
  316. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/server.html +0 -0
  317. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  318. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract_cli.egg-info/entry_points.txt +0 -0
  319. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract_cli.egg-info/top_level.txt +0 -0
  320. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/setup.cfg +0 -0
  321. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_catalog.py +0 -0
  322. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_changelog.py +0 -0
  323. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_changelog_engine.py +0 -0
  324. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_changelog_normalize.py +0 -0
  325. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_changelog_output_text.py +0 -0
  326. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_ci_output.py +0 -0
  327. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_cli.py +0 -0
  328. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_s3_credentials.py +0 -0
  329. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_create_checks_nested_type.py +0 -0
  330. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_create_checks_physical_type.py +0 -0
  331. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_create_checks_primary_key.py +0 -0
  332. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_data_contract.py +0 -0
  333. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_data_contract_checks.py +0 -0
  334. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_data_contract_specification.py +0 -0
  335. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_dbt_test_mapping.py +0 -0
  336. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_description_linter.py +0 -0
  337. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_docs_commands.py +0 -0
  338. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_docs_ordering.py +0 -0
  339. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_download_datacontract_file.py +0 -0
  340. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_dtype_category.py +0 -0
  341. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_duckdb_json.py +0 -0
  342. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_avro.py +0 -0
  343. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_avro_idl.py +0 -0
  344. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_bigquery.py +0 -0
  345. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_complex_data_contract.py +0 -0
  346. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_custom.py +0 -0
  347. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_custom_exporter.py +0 -0
  348. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_custom_model.py +0 -0
  349. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_data_caterer.py +0 -0
  350. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_dbml.py +0 -0
  351. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_dbt_models.py +0 -0
  352. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_dbt_sources.py +0 -0
  353. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_dbt_staging_sql.py +0 -0
  354. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_dqx.py +0 -0
  355. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_excel.py +0 -0
  356. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_go.py +0 -0
  357. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_great_expectations.py +0 -0
  358. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_html.py +0 -0
  359. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_iceberg.py +0 -0
  360. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_jsonschema.py +0 -0
  361. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_markdown.py +0 -0
  362. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_mermaid.py +0 -0
  363. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_odcs_v3.py +0 -0
  364. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_protobuf.py +0 -0
  365. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_pydantic.py +0 -0
  366. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_rdf.py +0 -0
  367. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_sql.py +0 -0
  368. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_sql_clickhouse.py +0 -0
  369. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_sql_query.py +0 -0
  370. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_sqlalchemy.py +0 -0
  371. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_ibis_mssql_pattern.py +0 -0
  372. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_ibis_mssql_schema.py +0 -0
  373. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_ibis_oracle_schema.py +0 -0
  374. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_athena.py +0 -0
  375. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_avro.py +0 -0
  376. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_bigquery.py +0 -0
  377. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_csv.py +0 -0
  378. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_dbml.py +0 -0
  379. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_dbt.py +0 -0
  380. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_excel.py +0 -0
  381. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_glue.py +0 -0
  382. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_iceberg.py +0 -0
  383. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_json.py +0 -0
  384. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_jsonschema.py +0 -0
  385. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_mysql.py +0 -0
  386. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_odcs_v3.py +0 -0
  387. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_oracle.py +0 -0
  388. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_parquet.py +0 -0
  389. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_postgres.py +0 -0
  390. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_powerbi.py +0 -0
  391. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_protobuf.py +0 -0
  392. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_redshift.py +0 -0
  393. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_snowflake.py +0 -0
  394. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_sql_oracle.py +0 -0
  395. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_sql_postgres.py +0 -0
  396. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_sql_snowflake.py +0 -0
  397. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_sql_sqlserver.py +0 -0
  398. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_sqlserver.py +0 -0
  399. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_trino.py +0 -0
  400. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_unity_file.py +0 -0
  401. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_install_extras.py +0 -0
  402. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_integration_entropydata.py +0 -0
  403. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_native_type_schema_scope.py +0 -0
  404. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_oracle_patch.py +0 -0
  405. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_physical_type_match.py +0 -0
  406. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_redshift_credentials.py +0 -0
  407. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_redshift_patch.py +0 -0
  408. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_resolve.py +0 -0
  409. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_resolve_definitions.py +0 -0
  410. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_roundtrip_jsonschema.py +0 -0
  411. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_server_type_mssql.py +0 -0
  412. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_snowflake_structured_types.py +0 -0
  413. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_sql_type_converter_physicaltype.py +0 -0
  414. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_api.py +0 -0
  415. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_athena_iceberg.py +0 -0
  416. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_azure_blob_file.py +0 -0
  417. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_azure_remote.py +0 -0
  418. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_bigquery.py +0 -0
  419. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_checks_filter.py +0 -0
  420. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_delta.py +0 -0
  421. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_diagnostics.py +0 -0
  422. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_dimension_filter.py +0 -0
  423. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_failed_samples.py +0 -0
  424. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_gcs_csv_remote.py +0 -0
  425. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_gcs_json_remote.py +0 -0
  426. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_kafka_remote.py +0 -0
  427. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_local_json.py +0 -0
  428. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_local_json_nd.py +0 -0
  429. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_mysql.py +0 -0
  430. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_oracle.py +0 -0
  431. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_oracle_xe.py +0 -0
  432. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_output_json.py +0 -0
  433. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_output_junit.py +0 -0
  434. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_parquet.py +0 -0
  435. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_postgres.py +0 -0
  436. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_quality.py +0 -0
  437. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_quality_id_and_tag_filter.py +0 -0
  438. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_quality_local_fallback.py +0 -0
  439. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_quality_percent_severity.py +0 -0
  440. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_redshift.py +0 -0
  441. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_csv.py +0 -0
  442. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_delta.py +0 -0
  443. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_json.py +0 -0
  444. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_json_complex.py +0 -0
  445. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_json_multiple_models.py +0 -0
  446. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_json_remote.py +0 -0
  447. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_schema_evolution.py +0 -0
  448. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_server_not_found.py +0 -0
  449. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_snowflake.py +0 -0
  450. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_soda_connection_error.py +0 -0
  451. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_sqlserver.py +0 -0
  452. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_trino.py +0 -0
  453. {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_type_normalize.py +0 -0
@@ -1,19 +1,36 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacontract-cli
3
- Version: 1.0.16
3
+ Version: 1.1.0
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
- Author-email: Jochen Christ <jochen.christ@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
5
+ Author-email: Jochen Christ <jochen.christ@entropy-data.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@entropy-data.com>
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://cli.datacontract.com
8
+ Project-URL: Documentation, https://docs.datacontract.com
9
+ Project-URL: Repository, https://github.com/datacontract/datacontract-cli
8
10
  Project-URL: Issues, https://github.com/datacontract/datacontract-cli/issues
9
- Classifier: Programming Language :: Python :: 3
11
+ Project-URL: Changelog, https://docs.datacontract.com/release-notes
12
+ Keywords: data-contract,data-contracts,odcs,open-data-contract-standard,data-quality,data-governance,data-mesh,data-product,data-engineering,schema,dbt,snowflake,databricks,bigquery
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Intended Audience :: Information Technology
10
17
  Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Topic :: Database
25
+ Classifier: Topic :: Software Development :: Quality Assurance
26
+ Classifier: Topic :: Software Development :: Testing
11
27
  Requires-Python: <3.15,>=3.10
12
28
  Description-Content-Type: text/markdown
13
29
  License-File: LICENSE
14
30
  Requires-Dist: typer<0.28,>=0.18.0
15
31
  Requires-Dist: click<9.0.0,>=8.1.0
16
32
  Requires-Dist: pydantic<2.14.0,>=2.8.2
33
+ Requires-Dist: pydantic-settings<3.0.0,>=2.5.0
17
34
  Requires-Dist: pyyaml~=6.0.1
18
35
  Requires-Dist: ruamel.yaml<0.20,>=0.17
19
36
  Requires-Dist: requests<2.35,>=2.31
@@ -40,24 +57,26 @@ Requires-Dist: pandas>=2.0.0; extra == "csv"
40
57
  Provides-Extra: excel
41
58
  Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == "excel"
42
59
  Provides-Extra: dataframe
43
- Requires-Dist: ibis-framework[pyspark]<13.0.0,>=10.0.0; extra == "dataframe"
44
- Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "dataframe"
60
+ Requires-Dist: ibis-framework<13.0.0,>=10.0.0; extra == "dataframe"
61
+ Requires-Dist: numpy<3,>=1.23.2; extra == "dataframe"
62
+ Requires-Dist: packaging<27.0,>=21.3; extra == "dataframe"
63
+ Requires-Dist: pandas<4,>=1.5.3; extra == "dataframe"
64
+ Requires-Dist: pyarrow>=10.0.1; extra == "dataframe"
65
+ Requires-Dist: pyarrow-hotfix>=0.4; extra == "dataframe"
66
+ Requires-Dist: rich>=12.4.4; extra == "dataframe"
45
67
  Provides-Extra: databricks
46
- Requires-Dist: ibis-framework[databricks,pyspark]<13.0.0,>=10.0.0; extra == "databricks"
68
+ Requires-Dist: ibis-framework[databricks]<13.0.0,>=10.0.0; extra == "databricks"
47
69
  Requires-Dist: databricks-sql-connector<4.5.0,>=3.7.0; extra == "databricks"
48
70
  Requires-Dist: databricks-sdk<0.123.0; extra == "databricks"
49
- Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "databricks"
71
+ Requires-Dist: packaging<27.0,>=21.3; extra == "databricks"
50
72
  Provides-Extra: databricks-runtime
51
- Requires-Dist: ibis-framework[databricks]<13.0.0,>=10.0.0; extra == "databricks-runtime"
52
- Requires-Dist: databricks-sql-connector<4.5.0,>=3.7.0; extra == "databricks-runtime"
53
- Requires-Dist: databricks-sdk<0.123.0; extra == "databricks-runtime"
54
- Requires-Dist: packaging<27.0,>=21.3; extra == "databricks-runtime"
73
+ Requires-Dist: datacontract-cli[databricks]; extra == "databricks-runtime"
55
74
  Provides-Extra: iceberg
56
75
  Requires-Dist: pyiceberg==0.11.1; extra == "iceberg"
57
76
  Provides-Extra: kafka
58
- Requires-Dist: datacontract-cli[avro]; extra == "kafka"
59
- Requires-Dist: ibis-framework[pyspark]<13.0.0,>=10.0.0; extra == "kafka"
60
- Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "kafka"
77
+ Requires-Dist: datacontract-cli[duckdb,parquet]; extra == "kafka"
78
+ Requires-Dist: confluent-kafka<3.0.0,>=2.6.0; extra == "kafka"
79
+ Requires-Dist: fastavro<2.0.0,>=1.9.7; extra == "kafka"
61
80
  Provides-Extra: mysql
62
81
  Requires-Dist: datacontract-cli[duckdb]; extra == "mysql"
63
82
  Provides-Extra: postgres
@@ -108,12 +127,12 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
108
127
  Provides-Extra: rdf
109
128
  Requires-Dist: rdflib==7.6.0; extra == "rdf"
110
129
  Provides-Extra: api
111
- Requires-Dist: fastapi<0.141.0,>=0.115.0; extra == "api"
112
- Requires-Dist: uvicorn<0.52.0,>=0.44.0; extra == "api"
130
+ Requires-Dist: fastapi<0.142.0,>=0.115.0; extra == "api"
131
+ Requires-Dist: uvicorn<0.53.0,>=0.44.0; extra == "api"
113
132
  Provides-Extra: protobuf
114
133
  Requires-Dist: proto-schema-parser<3.0,>=1.0; extra == "protobuf"
115
134
  Provides-Extra: all
116
- Requires-Dist: datacontract-cli[api,athena,azure,bigquery,csv,databricks,dataframe,dbml,duckdb,excel,gcs,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino]; extra == "all"
135
+ Requires-Dist: datacontract-cli[api,athena,avro,azure,bigquery,csv,databricks,dataframe,dbml,duckdb,excel,gcs,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino]; extra == "all"
117
136
  Provides-Extra: dev
118
137
  Requires-Dist: datacontract-cli[all]; extra == "dev"
119
138
  Requires-Dist: httpx==0.28.1; extra == "dev"
@@ -126,9 +145,9 @@ Requires-Dist: pytest; extra == "dev"
126
145
  Requires-Dist: pytest-xdist; extra == "dev"
127
146
  Requires-Dist: pymssql==2.3.13; extra == "dev"
128
147
  Requires-Dist: psycopg2-binary<3.0,>=2.9; extra == "dev"
129
- Requires-Dist: mysql-connector-python<9.7.0,>=8.0.30; extra == "dev"
130
- Requires-Dist: ruff==0.16.0; extra == "dev"
131
- Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.14.2; extra == "dev"
148
+ Requires-Dist: mysql-connector-python<26.8.0,>=8.0.30; extra == "dev"
149
+ Requires-Dist: ruff==0.16.1; extra == "dev"
150
+ Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.15.0; extra == "dev"
132
151
  Requires-Dist: trino==0.338.0; extra == "dev"
133
152
  Dynamic: license-file
134
153
 
@@ -401,8 +420,8 @@ A list of available extras:
401
420
  | Google BigQuery | `pip install datacontract-cli[bigquery]` |
402
421
  | CSV | `pip install datacontract-cli[csv]` |
403
422
  | Databricks Integration | `pip install datacontract-cli[databricks]` |
404
- | Databricks Runtime | `pip install datacontract-cli[databricks-runtime]` (inside Databricks, where the cluster provides PySpark) |
405
- | DataFrame (Spark) | `pip install datacontract-cli[dataframe]` |
423
+ | Databricks Runtime | `pip install datacontract-cli[databricks]` (also inside Databricks, using the cluster's own Spark session) |
424
+ | DataFrame (Spark) | `pip install datacontract-cli[dataframe]` (PySpark not included — you supply the Spark session) |
406
425
  | DBML | `pip install datacontract-cli[dbml]` |
407
426
  | DuckDB (local/S3/GCS/Azure file testing) | `pip install datacontract-cli[duckdb]` |
408
427
  | Excel | `pip install datacontract-cli[excel]` |
@@ -443,11 +462,9 @@ It covers everything in depth, including the complete command reference:
443
462
 
444
463
  - Install [uv](https://docs.astral.sh/uv/)
445
464
  - Python base interpreter should be 3.11.x.
446
- - A JDK (17 or 21) must be installed for the Spark-based tests (e.g. `test_test_kafka.py`, `test_test_delta.py`, `test_test_dataframe.py`, `test_import_spark.py`). Java 25 is not yet supported. On macOS and Linux you can install one with [SDKMAN](https://sdkman.io): `sdk install java 21.0.11-tem` (or any 21.x build from `sdk list java`). Verify with `java --version`.
447
465
  - Docker engine must be running to execute the tests.
448
466
 
449
467
  ```bash
450
- sdk use java 21.0.11-tem
451
468
  uv python pin 3.11
452
469
  uv venv
453
470
  uv pip install -e '.[dev]'
@@ -480,15 +497,6 @@ Try to sync all groups:
480
497
  uv sync --all-groups --all-extras
481
498
  ```
482
499
 
483
- #### Errors in tests that use PySpark (e.g. test_test_kafka.py)
484
-
485
- Ensure you have a JDK 17 or 21 installed. Java 25 causes issues.
486
-
487
- ```
488
- java --version
489
- ```
490
-
491
-
492
500
  ### Docker Build
493
501
 
494
502
  ```bash
@@ -267,8 +267,8 @@ A list of available extras:
267
267
  | Google BigQuery | `pip install datacontract-cli[bigquery]` |
268
268
  | CSV | `pip install datacontract-cli[csv]` |
269
269
  | Databricks Integration | `pip install datacontract-cli[databricks]` |
270
- | Databricks Runtime | `pip install datacontract-cli[databricks-runtime]` (inside Databricks, where the cluster provides PySpark) |
271
- | DataFrame (Spark) | `pip install datacontract-cli[dataframe]` |
270
+ | Databricks Runtime | `pip install datacontract-cli[databricks]` (also inside Databricks, using the cluster's own Spark session) |
271
+ | DataFrame (Spark) | `pip install datacontract-cli[dataframe]` (PySpark not included — you supply the Spark session) |
272
272
  | DBML | `pip install datacontract-cli[dbml]` |
273
273
  | DuckDB (local/S3/GCS/Azure file testing) | `pip install datacontract-cli[duckdb]` |
274
274
  | Excel | `pip install datacontract-cli[excel]` |
@@ -309,11 +309,9 @@ It covers everything in depth, including the complete command reference:
309
309
 
310
310
  - Install [uv](https://docs.astral.sh/uv/)
311
311
  - Python base interpreter should be 3.11.x.
312
- - A JDK (17 or 21) must be installed for the Spark-based tests (e.g. `test_test_kafka.py`, `test_test_delta.py`, `test_test_dataframe.py`, `test_import_spark.py`). Java 25 is not yet supported. On macOS and Linux you can install one with [SDKMAN](https://sdkman.io): `sdk install java 21.0.11-tem` (or any 21.x build from `sdk list java`). Verify with `java --version`.
313
312
  - Docker engine must be running to execute the tests.
314
313
 
315
314
  ```bash
316
- sdk use java 21.0.11-tem
317
315
  uv python pin 3.11
318
316
  uv venv
319
317
  uv pip install -e '.[dev]'
@@ -346,15 +344,6 @@ Try to sync all groups:
346
344
  uv sync --all-groups --all-extras
347
345
  ```
348
346
 
349
- #### Errors in tests that use PySpark (e.g. test_test_kafka.py)
350
-
351
- Ensure you have a JDK 17 or 21 installed. Java 25 causes issues.
352
-
353
- ```
354
- java --version
355
- ```
356
-
357
-
358
347
  ### Docker Build
359
348
 
360
349
  ```bash
@@ -11,3 +11,7 @@ def repr_str(dumper, data):
11
11
 
12
12
 
13
13
  yaml.add_representer(str, repr_str, Dumper=yaml.SafeDumper)
14
+
15
+ from datacontract.config import Config # noqa: E402
16
+
17
+ __all__ = ["Config"]
@@ -1,3 +1,4 @@
1
+ import json
1
2
  import logging
2
3
  import os
3
4
  import tempfile
@@ -10,8 +11,9 @@ from fastapi import Body, Depends, FastAPI, HTTPException, Query, Request, statu
10
11
  from fastapi.middleware.cors import CORSMiddleware
11
12
  from fastapi.responses import PlainTextResponse
12
13
  from fastapi.security.api_key import APIKeyHeader
13
- from pydantic import BaseModel
14
+ from pydantic import BaseModel, ValidationError
14
15
 
16
+ from datacontract.config import Config, known_env_names
15
17
  from datacontract.data_contract import DataContract, ExportFormat
16
18
  from datacontract.model.exceptions import DataContractException
17
19
  from datacontract.model.run import Run
@@ -270,6 +272,58 @@ api_key_header = APIKeyHeader(
270
272
  )
271
273
 
272
274
 
275
+ _CONFIG_HEADER_PREFIX = "datacontract-"
276
+
277
+
278
+ def config_from_headers(headers) -> "Config | None":
279
+ """Build a per-request Config from configuration option headers.
280
+
281
+ Header names are matched case-insensitively and map mechanically to the env
282
+ var names: uppercase, dashes to underscores — ``datacontract-snowflake-password``
283
+ → ``DATACONTRACT_SNOWFLAKE_PASSWORD``, ``entropy-data-api-key`` →
284
+ ``ENTROPY_DATA_API_KEY``. Returns None when no config headers are present,
285
+ so env-var-configured deployments behave exactly as before. Unknown
286
+ ``datacontract-*`` option names are rejected with a 400.
287
+ """
288
+ known = known_env_names()
289
+ values = {}
290
+ for name, value in headers.items():
291
+ lowered = name.lower()
292
+ env = lowered.upper().replace("-", "_")
293
+ if lowered.startswith(_CONFIG_HEADER_PREFIX) or env in known:
294
+ values[env] = value
295
+ if not values:
296
+ return None
297
+ try:
298
+ return Config.resolve(values)
299
+ except (ValueError, ValidationError) as e:
300
+ raise HTTPException(
301
+ status_code=status.HTTP_400_BAD_REQUEST,
302
+ detail=f"Invalid datacontract-* configuration header: {e}",
303
+ )
304
+
305
+
306
+ def _parse_filters_query(filters: str | None) -> dict[str, str] | None:
307
+ """Parse the `filters` query parameter (JSON object mapping schema name to predicate)."""
308
+ if filters is None:
309
+ return None
310
+ detail = (
311
+ "The filters parameter must be a JSON object mapping schema name to a SQL predicate, "
312
+ 'e.g., {"orders": "ingested_at >= CURRENT_DATE - 1"}.'
313
+ )
314
+ try:
315
+ parsed = json.loads(filters)
316
+ except json.JSONDecodeError:
317
+ raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=detail)
318
+ if (
319
+ not isinstance(parsed, dict)
320
+ or not parsed
321
+ or not all(isinstance(predicate, str) and predicate.strip() for predicate in parsed.values())
322
+ ):
323
+ raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=detail)
324
+ return {schema_name: predicate.strip() for schema_name, predicate in parsed.items()}
325
+
326
+
273
327
  def check_api_key(api_key_header: str | None):
274
328
  correct_api_key = os.getenv("DATACONTRACT_CLI_API_KEY")
275
329
  if correct_api_key is None or correct_api_key == "":
@@ -298,7 +352,9 @@ def check_api_key(api_key_header: str | None):
298
352
  description="""
299
353
  Run schema and quality tests. Data Contract CLI connects to the data sources configured in the server section.
300
354
  This usually requires credentials to access the data sources.
301
- Credentials must be provided via environment variables when running the web server.
355
+ Credentials can be provided via environment variables when running the web server, or per request
356
+ via datacontract-* headers (case-insensitive), which map to the environment variable names
357
+ (e.g. datacontract-snowflake-password sets DATACONTRACT_SNOWFLAKE_PASSWORD for this request only).
302
358
  POST the data contract YAML as payload.
303
359
  """,
304
360
  responses={
@@ -348,12 +404,41 @@ async def test(
348
404
  examples=["https://api.datamesh-manager.com/api/test-results"],
349
405
  ),
350
406
  ] = None,
407
+ filter: Annotated[
408
+ str | None,
409
+ Query(
410
+ description="A SQL predicate to filter the rows under test, in the dialect of the server. "
411
+ "Only works if a single schema is tested; for contracts with multiple schemas, use filters. "
412
+ "Schema checks and custom SQL queries are not filtered.",
413
+ examples=["ingested_at >= CURRENT_DATE - 1"],
414
+ ),
415
+ ] = None,
416
+ filters: Annotated[
417
+ str | None,
418
+ Query(
419
+ description="Row filters per schema, as a JSON object mapping schema name to SQL predicate. "
420
+ "Schema checks and custom SQL queries are not filtered.",
421
+ examples=['{"orders": "ingested_at >= CURRENT_DATE - 1"}'],
422
+ ),
423
+ ] = None,
351
424
  ) -> Run:
352
425
  check_api_key(api_key)
426
+ parsed_filters = _parse_filters_query(filters)
427
+ if filter is not None and parsed_filters is not None:
428
+ raise HTTPException(
429
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
430
+ detail="Use either the filter or the filters parameter, not both.",
431
+ )
353
432
  logging.info("Testing data contract...")
354
433
  logging.info(body)
355
434
  return DataContract(
356
- data_contract_str=body, server=server, publish_url=publish_url, fastapi_url=str(request.url)
435
+ data_contract_str=body,
436
+ server=server,
437
+ publish_url=publish_url,
438
+ fastapi_url=str(request.url),
439
+ config=config_from_headers(request.headers),
440
+ filter=filter,
441
+ filters=parsed_filters,
357
442
  ).test()
358
443
 
359
444
 
@@ -8,6 +8,7 @@ import pytz
8
8
  from jinja2 import Environment, PackageLoader, select_autoescape
9
9
  from open_data_contract_standard.model import OpenDataContractStandard
10
10
 
11
+ from datacontract.config import cli_config
11
12
  from datacontract.data_contract import DataContract
12
13
  from datacontract.export.html_exporter import get_version
13
14
 
@@ -26,7 +27,7 @@ def _get_owner(odcs: OpenDataContractStandard) -> Optional[str]:
26
27
  def create_data_contract_html(contracts, file: Path, path: Path, schema: str):
27
28
  logging.debug(f"Creating data contract html for file {file} and schema {schema}")
28
29
  data_contract = DataContract(
29
- data_contract_file=f"{file.absolute()}", inline_references=True, schema_location=schema
30
+ data_contract_file=f"{file.absolute()}", inline_references=True, schema_location=schema, config=cli_config()
30
31
  )
31
32
  html = data_contract.export(export_format="html")
32
33
  odcs = data_contract.get_data_contract()
@@ -5,6 +5,7 @@ from importlib import metadata
5
5
  from pathlib import Path
6
6
  from typing import Iterable, Optional
7
7
 
8
+ import pydantic
8
9
  import typer
9
10
  from click import Context
10
11
  from dotenv import find_dotenv, load_dotenv
@@ -13,6 +14,7 @@ from rich.markup import escape
13
14
  from typer.core import TyperGroup
14
15
  from typing_extensions import Annotated
15
16
 
17
+ from datacontract.config import Config, set_cli_config
16
18
  from datacontract.output.output_format import OutputFormat
17
19
 
18
20
  console = Console()
@@ -151,6 +153,13 @@ def common(
151
153
  "instead of the bundled CA certificates (e.g. behind a corporate proxy or internal CA).",
152
154
  envvar="DATACONTRACT_SYSTEM_TRUSTSTORE",
153
155
  ),
156
+ config_file: Optional[Path] = typer.Option(
157
+ None,
158
+ "--config-file",
159
+ help="Path to a YAML file with credentials and connection options "
160
+ "(sections per data source, ${VAR} references resolve from the environment). "
161
+ "Defaults to ./datacontract-config.yaml or ~/.datacontract/config.yaml if present.",
162
+ ),
154
163
  ):
155
164
  """
156
165
  The datacontract CLI is an open source command-line tool for working with Data Contracts (https://datacontract.com).
@@ -164,10 +173,30 @@ def common(
164
173
  # Already-set environment variables take precedence.
165
174
  load_dotenv(dotenv_path=find_dotenv(usecwd=True), override=False)
166
175
 
176
+ set_cli_config(_load_config_file(config_file))
177
+
167
178
  if system_truststore:
168
179
  inject_system_truststore()
169
180
 
170
181
 
182
+ def _load_config_file(config_file: "Optional[Path]"):
183
+ """Load the --config-file, or the first default location that exists."""
184
+ candidates = (
185
+ [config_file]
186
+ if config_file
187
+ else [Path("datacontract-config.yaml"), Path.home() / ".datacontract" / "config.yaml"]
188
+ )
189
+ for candidate in candidates:
190
+ if candidate.exists():
191
+ try:
192
+ return Config.from_yaml(candidate)
193
+ except (ValueError, pydantic.ValidationError) as e:
194
+ raise typer.BadParameter(str(e), param_hint="--config-file")
195
+ if config_file:
196
+ raise typer.BadParameter(f"Config file {config_file} does not exist.", param_hint="--config-file")
197
+ return None
198
+
199
+
171
200
  def enable_debug_logging(debug: bool, otherwise_disable_stderr: bool = False):
172
201
  if not debug and otherwise_disable_stderr:
173
202
  # some commands render run.logs to the console themselves; a NullHandler keeps
@@ -2,6 +2,7 @@ import typer
2
2
  from typing_extensions import Annotated
3
3
 
4
4
  from datacontract.cli import app, console, debug_option, enable_debug_logging
5
+ from datacontract.config import cli_config
5
6
  from datacontract.data_contract import DataContract
6
7
  from datacontract.output.text_changelog_results import write_text_changelog_results
7
8
 
@@ -11,8 +12,14 @@ from datacontract.output.text_changelog_results import write_text_changelog_resu
11
12
  epilog="Example: datacontract changelog datacontract-v1.yaml datacontract-v2.yaml",
12
13
  )
13
14
  def changelog(
14
- v1: Annotated[str, typer.Argument(help="The location (url or path) of the source (before) data contract YAML.")],
15
- v2: Annotated[str, typer.Argument(help="The location (url or path) of the target (after) data contract YAML.")],
15
+ v1: Annotated[
16
+ str,
17
+ typer.Argument(help="The location (url, s3 url, or local path) of the source (before) data contract YAML."),
18
+ ],
19
+ v2: Annotated[
20
+ str,
21
+ typer.Argument(help="The location (url, s3 url, or local path) of the target (after) data contract YAML."),
22
+ ],
16
23
  inline_references: Annotated[
17
24
  bool,
18
25
  typer.Option(
@@ -24,7 +31,7 @@ def changelog(
24
31
  ):
25
32
  """Show a changelog between two data contracts."""
26
33
  enable_debug_logging(debug)
27
- result = DataContract(data_contract_file=v1, inline_references=inline_references).changelog(
28
- DataContract(data_contract_file=v2, inline_references=inline_references)
34
+ result = DataContract(config=cli_config(), data_contract_file=v1, inline_references=inline_references).changelog(
35
+ DataContract(config=cli_config(), data_contract_file=v2, inline_references=inline_references)
29
36
  )
30
37
  write_text_changelog_results(result, console)
@@ -15,6 +15,7 @@ from datacontract.cli import (
15
15
  resolve_output_format,
16
16
  validate_publish_url,
17
17
  )
18
+ from datacontract.config import cli_config
18
19
  from datacontract.data_contract import DataContract
19
20
  from datacontract.output.ci_output import write_ci_output, write_ci_summary, write_json_results
20
21
  from datacontract.output.output_format import OutputFormat
@@ -34,7 +35,7 @@ class FailOn(str, Enum):
34
35
  def ci(
35
36
  locations: Annotated[
36
37
  Optional[list[str]],
37
- typer.Argument(help="The location(s) (url or path) of the data contract yaml file(s)."),
38
+ typer.Argument(help="The location(s) (url, s3 url, or local path) of the data contract yaml file(s)."),
38
39
  ] = None,
39
40
  schema: Annotated[
40
41
  str,
@@ -111,6 +112,7 @@ def ci(
111
112
  for location in locations:
112
113
  out.print(f"Testing {location}")
113
114
  run = DataContract(
115
+ config=cli_config(),
114
116
  data_contract_file=location,
115
117
  schema_location=schema,
116
118
  publish_url=publish,
@@ -14,6 +14,7 @@ from datacontract.cli import (
14
14
  enable_debug_logging,
15
15
  validate_publish_url,
16
16
  )
17
+ from datacontract.config import cli_config
17
18
  from datacontract.integration.dbt_sync import (
18
19
  ModelResolution,
19
20
  _ensure_dbt_project,
@@ -120,7 +121,7 @@ def _maybe_publish(run: Run, odcs, publish: Optional[str], ssl_verification: boo
120
121
  f"Pass --server to identify the run.[/yellow]"
121
122
  )
122
123
  return False
123
- return not publish_test_results_to_entropy_data(run, publish, ssl_verification)
124
+ return not publish_test_results_to_entropy_data(run, publish, ssl_verification, config=cli_config())
124
125
 
125
126
 
126
127
  def _report_run(run: Run, *, run_only: bool, publish_failed: bool, ctx: _ContractCtx) -> bool:
@@ -10,6 +10,7 @@ import typer
10
10
  from typing_extensions import Annotated
11
11
 
12
12
  from datacontract.cli import app, console, debug_option, enable_debug_logging
13
+ from datacontract.config import cli_config
13
14
  from datacontract.init.init_template import get_init_template
14
15
  from datacontract.lint.urls import fetch_resource
15
16
  from datacontract.model.exceptions import DataContractException
@@ -56,7 +57,7 @@ def _download_local_copy(url: str) -> str:
56
57
  console.print("Aborted.")
57
58
  raise typer.Exit(code=1)
58
59
  try:
59
- content = fetch_resource(url)
60
+ content = fetch_resource(url, cli_config())
60
61
  except DataContractException as e:
61
62
  console.print(f"[red]Error: {e.reason}[/red]")
62
63
  raise typer.Exit(code=1)
@@ -6,6 +6,7 @@ from rich.console import Console
6
6
  from typing_extensions import Annotated
7
7
 
8
8
  from datacontract.cli import OrderedCommandsWithMigrationHints, debug_option, enable_debug_logging
9
+ from datacontract.config import cli_config
9
10
  from datacontract.data_contract import DataContract
10
11
  from datacontract.export.exporter import ExportFormat, SqlServerType
11
12
  from datacontract.export.great_expectations_exporter import GreatExpectationsEngine
@@ -17,7 +18,10 @@ export_app = typer.Typer(cls=OrderedCommandsWithMigrationHints, no_args_is_help=
17
18
  # ---------------------------------------------------------------------------
18
19
  # Shared option type aliases
19
20
  # ---------------------------------------------------------------------------
20
- location_arg = Annotated[str, typer.Argument(help="The location (url or path) of the data contract yaml.")]
21
+ location_arg = Annotated[
22
+ str,
23
+ typer.Argument(help="The location (url, s3 url, or local path) of the data contract yaml."),
24
+ ]
21
25
  output_option = Annotated[
22
26
  Optional[Path],
23
27
  typer.Option(
@@ -64,6 +68,7 @@ def _export(
64
68
  clickhouse_order_by: Optional[str] = None,
65
69
  ):
66
70
  result = DataContract(
71
+ config=cli_config(),
67
72
  data_contract_file=location,
68
73
  schema_location=schema,
69
74
  server=server,