datacontract-cli 1.0.3__tar.gz → 1.0.4__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 (368) hide show
  1. datacontract_cli-1.0.4/PKG-INFO +514 -0
  2. datacontract_cli-1.0.4/README.md +397 -0
  3. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/cli.py +3 -1
  4. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_export.py +26 -0
  5. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/data_contract.py +14 -35
  6. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/checks/create_checks.py +7 -0
  7. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/checks/type_normalize.py +2 -0
  8. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/data_contract_test.py +16 -0
  9. datacontract_cli-1.0.4/datacontract/engines/datacontract/check_azure_blob_file.py +614 -0
  10. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/ibis/connections/connect.py +54 -16
  11. datacontract_cli-1.0.4/datacontract/engines/ibis/connections/oracle_patch.py +169 -0
  12. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/dcs_exporter.py +12 -5
  13. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/exporter.py +3 -0
  14. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/sql_exporter.py +71 -32
  15. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/sql_type_converter.py +99 -0
  16. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/dbml_importer.py +1 -1
  17. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/sql_importer.py +12 -3
  18. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/unity_importer.py +40 -2
  19. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/schemas/odcs-3.1.0.schema.json +1 -1
  20. datacontract_cli-1.0.4/datacontract_cli.egg-info/PKG-INFO +514 -0
  21. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract_cli.egg-info/SOURCES.txt +9 -1
  22. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract_cli.egg-info/requires.txt +5 -1
  23. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/pyproject.toml +10 -3
  24. datacontract_cli-1.0.4/tests/test_connect_trino.py +123 -0
  25. datacontract_cli-1.0.4/tests/test_export_sql_clickhouse.py +61 -0
  26. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_sql_oracle.py +0 -4
  27. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_sql_snowflake.py +1 -3
  28. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_unity_file.py +15 -0
  29. datacontract_cli-1.0.4/tests/test_oracle_patch.py +88 -0
  30. datacontract_cli-1.0.4/tests/test_test_azure_blob_file.py +341 -0
  31. datacontract_cli-1.0.4/tests/test_test_oracle_xe.py +93 -0
  32. datacontract_cli-1.0.4/tests/test_type_normalize.py +25 -0
  33. datacontract_cli-1.0.3/PKG-INFO +0 -2730
  34. datacontract_cli-1.0.3/README.md +0 -2615
  35. datacontract_cli-1.0.3/datacontract_cli.egg-info/PKG-INFO +0 -2730
  36. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/LICENSE +0 -0
  37. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/MANIFEST.in +0 -0
  38. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/__init__.py +0 -0
  39. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/api.py +0 -0
  40. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/catalog/catalog.py +0 -0
  41. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/changelog/__init__.py +0 -0
  42. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/changelog/changelog.py +0 -0
  43. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/changelog/normalize.py +0 -0
  44. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_api.py +0 -0
  45. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_catalog.py +0 -0
  46. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_changelog.py +0 -0
  47. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_ci.py +0 -0
  48. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_dbt.py +0 -0
  49. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_edit.py +0 -0
  50. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_import.py +0 -0
  51. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_init.py +0 -0
  52. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_lint.py +0 -0
  53. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_publish.py +0 -0
  54. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/command_test.py +0 -0
  55. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/VERSION +0 -0
  56. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/abap-Bs8kvjsq.js +0 -0
  57. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/apex-Dspwrl5m.js +0 -0
  58. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/assets/editor.worker-4.7.0.js +0 -0
  59. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +0 -0
  60. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/azcli-k1BiOau1.js +0 -0
  61. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/bat-BIP72KWc.js +0 -0
  62. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/bicep-VhQeYhS3.js +0 -0
  63. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/cameligo-DnuAXtHg.js +0 -0
  64. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/clojure-BAuDPsal.js +0 -0
  65. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/coffee-BV06qSnj.js +0 -0
  66. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/cpp-Cz8Jeyrf.js +0 -0
  67. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/csharp-F6hhlXFb.js +0 -0
  68. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/csp-KzlEHCyI.js +0 -0
  69. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/css-e4FKntZ3.js +0 -0
  70. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/cssMode-BNkTa2xp.js +0 -0
  71. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/cypher-CpvDGKRr.js +0 -0
  72. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/dart-DdHeFWR0.js +0 -0
  73. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/datacontract-editor.css +0 -0
  74. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/datacontract-editor.es.js +0 -0
  75. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/dockerfile-aoNXDcio.js +0 -0
  76. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/ecl-C4Q0DYuA.js +0 -0
  77. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/elixir-C9X42b0T.js +0 -0
  78. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/flow9-Bff42pfB.js +0 -0
  79. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/freemarker2-Dyfzmb5A.js +0 -0
  80. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/fsharp-C6vPAsHG.js +0 -0
  81. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/go-DEr8zx9f.js +0 -0
  82. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/graphql-BiNBBRFh.js +0 -0
  83. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/handlebars-BtDNI-uC.js +0 -0
  84. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/hcl-2T9lKuFg.js +0 -0
  85. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/html-Cn4TGw_o.js +0 -0
  86. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/htmlMode-Bf84vbo2.js +0 -0
  87. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/index.html +0 -0
  88. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/ini-CZGtssYM.js +0 -0
  89. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/java-B260NeH3.js +0 -0
  90. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/javascript-B86Kac07.js +0 -0
  91. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/jsonMode-Ckgg5lAE.js +0 -0
  92. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/julia-kuNLM9c5.js +0 -0
  93. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/kotlin-Bz6kAefA.js +0 -0
  94. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/less-AZUtS89I.js +0 -0
  95. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/lexon-BcmgnyRb.js +0 -0
  96. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/liquid-D0NPwuu_.js +0 -0
  97. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/logo_fuchsia_v2.svg +0 -0
  98. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/lua-Dz1RbATg.js +0 -0
  99. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/m3-CIMooLFn.js +0 -0
  100. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/markdown-C1BsCK9P.js +0 -0
  101. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/mdx-QFRSBtVQ.js +0 -0
  102. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/mips-BovsnfLQ.js +0 -0
  103. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/monaco-4.7.0.js +0 -0
  104. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/msdax-CiRB2ZB-.js +0 -0
  105. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/mysql-BwdpPE19.js +0 -0
  106. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/objective-c-D4nfHfso.js +0 -0
  107. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/odcs.svg +0 -0
  108. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/pascal--j5-PYtz.js +0 -0
  109. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/pascaligo-C7TcJxNL.js +0 -0
  110. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/perl-BzEWqUb5.js +0 -0
  111. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/pgsql-B_KZ0mGX.js +0 -0
  112. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/php-A19QHzQV.js +0 -0
  113. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/pla-COeKY1hA.js +0 -0
  114. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/postiats-BfMp7zJL.js +0 -0
  115. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/powerquery-B0TS_5Gb.js +0 -0
  116. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/powershell-5jSbKdYB.js +0 -0
  117. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/protobuf-YgnOutn3.js +0 -0
  118. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/pug-DLej6kn5.js +0 -0
  119. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/python-C8RW9B6A.js +0 -0
  120. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/qsharp-AhjqtSHB.js +0 -0
  121. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/r-D-F4P80w.js +0 -0
  122. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/razor-CLZqdY_r.js +0 -0
  123. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/redis-hwwIlMnV.js +0 -0
  124. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/redshift-Bcm_kjEG.js +0 -0
  125. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/restructuredtext-CrdzfPP-.js +0 -0
  126. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/ruby-QC2UNm1s.js +0 -0
  127. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/rust-5aqiQ3L5.js +0 -0
  128. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/sb-B1g1ZfLJ.js +0 -0
  129. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/scala-C2U4R5Gb.js +0 -0
  130. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/scheme-DeFRbslr.js +0 -0
  131. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/scss-RSTCiCmI.js +0 -0
  132. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/shell-BpF-iNu8.js +0 -0
  133. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/solidity-C00r2mbQ.js +0 -0
  134. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/sophia-DVW5ZKDB.js +0 -0
  135. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/sparql-B0nmpxeX.js +0 -0
  136. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/sql-CJwKPERn.js +0 -0
  137. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/st-DPlKG5DT.js +0 -0
  138. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/swift-YZBAbVHV.js +0 -0
  139. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/systemverilog-CDQSaH63.js +0 -0
  140. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/tcl-Dlu8sp6Q.js +0 -0
  141. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/tsMode-yleMwhPq.js +0 -0
  142. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/twig-C5TO7-kw.js +0 -0
  143. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/typescript-CJBeebKU.js +0 -0
  144. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/typespec-BsmjDEu7.js +0 -0
  145. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/vb-ChHvIDrk.js +0 -0
  146. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/wgsl-XEp1ju8c.js +0 -0
  147. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/xml-vC-NMVX1.js +0 -0
  148. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/editor_assets/yaml-Dlf2VF-T.js +0 -0
  149. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/__init__.py +0 -0
  150. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/checks/__init__.py +0 -0
  151. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/checks/check_spec.py +0 -0
  152. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  153. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  154. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  155. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  156. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/ibis/__init__.py +0 -0
  157. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/ibis/connections/__init__.py +0 -0
  158. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/ibis/connections/duckdb_connection.py +0 -0
  159. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/ibis/connections/kafka.py +0 -0
  160. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/ibis/dtype_category.py +0 -0
  161. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/engines/ibis/ibis_check_execute.py +0 -0
  162. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/__init__.py +0 -0
  163. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/avro_exporter.py +0 -0
  164. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/avro_idl_exporter.py +0 -0
  165. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/bigquery_exporter.py +0 -0
  166. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/custom_exporter.py +0 -0
  167. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/data_caterer_exporter.py +0 -0
  168. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/dbml_exporter.py +0 -0
  169. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/dbt_exporter.py +0 -0
  170. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/dqx_exporter.py +0 -0
  171. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/duckdb_type_converter.py +0 -0
  172. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/excel_exporter.py +0 -0
  173. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/exporter_factory.py +0 -0
  174. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/go_exporter.py +0 -0
  175. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/great_expectations_exporter.py +0 -0
  176. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/html_exporter.py +0 -0
  177. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/iceberg_exporter.py +0 -0
  178. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/jsonschema_exporter.py +0 -0
  179. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/markdown_exporter.py +0 -0
  180. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/mermaid_exporter.py +0 -0
  181. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/odcs_export_helper.py +0 -0
  182. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/odcs_v3_exporter.py +0 -0
  183. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/pandas_type_converter.py +0 -0
  184. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/protobuf_exporter.py +0 -0
  185. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/pydantic_exporter.py +0 -0
  186. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/rdf_exporter.py +0 -0
  187. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/sodacl_check_builder.py +0 -0
  188. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/sodacl_exporter.py +0 -0
  189. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/spark_exporter.py +0 -0
  190. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/export/sqlalchemy_exporter.py +0 -0
  191. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/avro_importer.py +0 -0
  192. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/bigquery_importer.py +0 -0
  193. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/csv_importer.py +0 -0
  194. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/dbt_importer.py +0 -0
  195. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/dcs_importer.py +0 -0
  196. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/excel_importer.py +0 -0
  197. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/glue_importer.py +0 -0
  198. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/iceberg_importer.py +0 -0
  199. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/importer.py +0 -0
  200. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/importer_factory.py +0 -0
  201. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/json_importer.py +0 -0
  202. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/jsonschema_importer.py +0 -0
  203. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/odcs_helper.py +0 -0
  204. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/odcs_importer.py +0 -0
  205. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/parquet_importer.py +0 -0
  206. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/powerbi_importer.py +0 -0
  207. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/protobuf_importer.py +0 -0
  208. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/snowflake_importer.py +0 -0
  209. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/imports/spark_importer.py +0 -0
  210. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/init/init_template.py +0 -0
  211. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/integration/dbt_sync.py +0 -0
  212. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/integration/dbt_test_mapping.py +0 -0
  213. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/integration/entropy_data.py +0 -0
  214. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/lint/files.py +0 -0
  215. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/lint/resolve.py +0 -0
  216. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/lint/resources.py +0 -0
  217. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/lint/schema.py +0 -0
  218. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/lint/urls.py +0 -0
  219. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/model/changelog.py +0 -0
  220. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/model/exceptions.py +0 -0
  221. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/model/odcs.py +0 -0
  222. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/model/run.py +0 -0
  223. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/model/server.py +0 -0
  224. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/output/__init__.py +0 -0
  225. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/output/ci_output.py +0 -0
  226. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/output/json_test_results.py +0 -0
  227. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/output/junit_test_results.py +0 -0
  228. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/output/output_format.py +0 -0
  229. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/output/test_results_writer.py +0 -0
  230. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/output/text_changelog_results.py +0 -0
  231. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/py.typed +0 -0
  232. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
  233. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  234. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
  235. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  236. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
  237. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
  238. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  239. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
  240. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/schemas/odcs-3.1.0.init.yaml +0 -0
  241. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/datacontract.html +0 -0
  242. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/datacontract_odcs.html +0 -0
  243. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/index.html +0 -0
  244. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/partials/datacontract_information.html +0 -0
  245. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  246. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/partials/datacontract_terms.html +0 -0
  247. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/partials/definition.html +0 -0
  248. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/partials/example.html +0 -0
  249. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/partials/model_field.html +0 -0
  250. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/partials/quality.html +0 -0
  251. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/partials/server.html +0 -0
  252. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract/templates/style/output.css +0 -0
  253. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  254. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract_cli.egg-info/entry_points.txt +0 -0
  255. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/datacontract_cli.egg-info/top_level.txt +0 -0
  256. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/setup.cfg +0 -0
  257. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_api.py +0 -0
  258. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_catalog.py +0 -0
  259. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_changelog.py +0 -0
  260. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_changelog_engine.py +0 -0
  261. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_changelog_normalize.py +0 -0
  262. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_changelog_output_text.py +0 -0
  263. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_ci_output.py +0 -0
  264. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_cli.py +0 -0
  265. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_connect_databricks.py +0 -0
  266. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_connect_sqlserver.py +0 -0
  267. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_data_contract.py +0 -0
  268. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_data_contract_checks.py +0 -0
  269. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_data_contract_specification.py +0 -0
  270. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_dbt_sync.py +0 -0
  271. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_dbt_test_mapping.py +0 -0
  272. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_description_linter.py +0 -0
  273. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_download_datacontract_file.py +0 -0
  274. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_duckdb_json.py +0 -0
  275. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_edit.py +0 -0
  276. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_avro.py +0 -0
  277. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_avro_idl.py +0 -0
  278. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_bigquery.py +0 -0
  279. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_complex_data_contract.py +0 -0
  280. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_custom.py +0 -0
  281. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_custom_exporter.py +0 -0
  282. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_custom_model.py +0 -0
  283. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_data_caterer.py +0 -0
  284. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_dbml.py +0 -0
  285. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_dbt_models.py +0 -0
  286. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_dbt_sources.py +0 -0
  287. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_dbt_staging_sql.py +0 -0
  288. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_dqx.py +0 -0
  289. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_excel.py +0 -0
  290. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_go.py +0 -0
  291. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_great_expectations.py +0 -0
  292. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_html.py +0 -0
  293. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_iceberg.py +0 -0
  294. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_jsonschema.py +0 -0
  295. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_markdown.py +0 -0
  296. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_mermaid.py +0 -0
  297. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_odcs_v3.py +0 -0
  298. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_protobuf.py +0 -0
  299. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_pydantic.py +0 -0
  300. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_rdf.py +0 -0
  301. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_sodacl.py +0 -0
  302. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_spark.py +0 -0
  303. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_sql.py +0 -0
  304. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_sql_query.py +0 -0
  305. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_export_sqlalchemy.py +0 -0
  306. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_ibis_mssql_pattern.py +0 -0
  307. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_avro.py +0 -0
  308. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_bigquery.py +0 -0
  309. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_csv.py +0 -0
  310. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_dbml.py +0 -0
  311. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_dbt.py +0 -0
  312. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_excel.py +0 -0
  313. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_glue.py +0 -0
  314. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_iceberg.py +0 -0
  315. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_json.py +0 -0
  316. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_jsonschema.py +0 -0
  317. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_odcs_v3.py +0 -0
  318. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_parquet.py +0 -0
  319. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_powerbi.py +0 -0
  320. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_protobuf.py +0 -0
  321. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_snowflake.py +0 -0
  322. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_spark.py +0 -0
  323. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_sql_postgres.py +0 -0
  324. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_import_sql_sqlserver.py +0 -0
  325. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_integration_entropydata.py +0 -0
  326. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_lint.py +0 -0
  327. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_require_env.py +0 -0
  328. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_resolve.py +0 -0
  329. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_resolve_definitions.py +0 -0
  330. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_roundtrip_jsonschema.py +0 -0
  331. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_sql_type_converter_physicaltype.py +0 -0
  332. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_api.py +0 -0
  333. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_athena_iceberg.py +0 -0
  334. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_azure_remote.py +0 -0
  335. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_bigquery.py +0 -0
  336. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_checks_filter.py +0 -0
  337. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_databricks.py +0 -0
  338. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_dataframe.py +0 -0
  339. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_delta.py +0 -0
  340. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_diagnostics.py +0 -0
  341. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_failed_samples.py +0 -0
  342. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_gcs_csv_remote.py +0 -0
  343. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_gcs_json_remote.py +0 -0
  344. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_kafka.py +0 -0
  345. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_kafka_remote.py +0 -0
  346. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_local_json.py +0 -0
  347. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_local_json_nd.py +0 -0
  348. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_mysql.py +0 -0
  349. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_oracle.py +0 -0
  350. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_output_json.py +0 -0
  351. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_output_junit.py +0 -0
  352. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_parquet.py +0 -0
  353. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_postgres.py +0 -0
  354. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_quality.py +0 -0
  355. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_quality_local_fallback.py +0 -0
  356. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_quality_percent_severity.py +0 -0
  357. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_s3_csv.py +0 -0
  358. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_s3_delta.py +0 -0
  359. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_s3_json.py +0 -0
  360. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_s3_json_complex.py +0 -0
  361. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_s3_json_multiple_models.py +0 -0
  362. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_s3_json_remote.py +0 -0
  363. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_schema_evolution.py +0 -0
  364. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_server_not_found.py +0 -0
  365. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_snowflake.py +0 -0
  366. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_soda_connection_error.py +0 -0
  367. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_sqlserver.py +0 -0
  368. {datacontract_cli-1.0.3 → datacontract_cli-1.0.4}/tests/test_test_trino.py +0 -0
@@ -0,0 +1,514 @@
1
+ Metadata-Version: 2.4
2
+ Name: datacontract-cli
3
+ Version: 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>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://cli.datacontract.com
8
+ Project-URL: Issues, https://github.com/datacontract/datacontract-cli/issues
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: <3.15,>=3.10
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: typer<0.27,>=0.18.0
15
+ Requires-Dist: click<9.0.0,>=8.1.0
16
+ Requires-Dist: pydantic<2.14.0,>=2.8.2
17
+ Requires-Dist: pyyaml~=6.0.1
18
+ Requires-Dist: requests<2.35,>=2.31
19
+ Requires-Dist: fastjsonschema<2.22.0,>=2.19.1
20
+ Requires-Dist: jsonschema<5.0.0,>=4.23.0
21
+ Requires-Dist: pytz>=2024.1
22
+ Requires-Dist: python-multipart<1.0.0,>=0.0.20
23
+ Requires-Dist: rich<16.0,>=13.7
24
+ Requires-Dist: sqlglot<31.0.0,>=26.6.0
25
+ Requires-Dist: python-dotenv<2.0.0,>=1.0.0
26
+ Requires-Dist: boto3<2.0.0,>=1.34.41
27
+ Requires-Dist: Jinja2<4.0.0,>=3.1.5
28
+ Requires-Dist: jinja_partials<1.0.0,>=0.2.1
29
+ Requires-Dist: datacontract-specification<2.0.0,>=1.2.3
30
+ Requires-Dist: open-data-contract-standard<4.0.0,>=3.1.2
31
+ Requires-Dist: deepdiff<10.0.0,>=6.0.0
32
+ Provides-Extra: avro
33
+ Requires-Dist: avro==1.12.1; extra == "avro"
34
+ Provides-Extra: bigquery
35
+ Requires-Dist: ibis-framework[bigquery]<13.0.0,>=10.0.0; extra == "bigquery"
36
+ Provides-Extra: csv
37
+ Requires-Dist: pandas>=2.0.0; extra == "csv"
38
+ Provides-Extra: excel
39
+ Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == "excel"
40
+ Provides-Extra: databricks
41
+ Requires-Dist: ibis-framework[databricks,pyspark]<13.0.0,>=10.0.0; extra == "databricks"
42
+ Requires-Dist: databricks-sql-connector<4.4.0,>=3.7.0; extra == "databricks"
43
+ Requires-Dist: databricks-sdk<0.118.0; extra == "databricks"
44
+ Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "databricks"
45
+ Provides-Extra: iceberg
46
+ Requires-Dist: pyiceberg==0.11.1; extra == "iceberg"
47
+ Provides-Extra: kafka
48
+ Requires-Dist: datacontract-cli[avro]; extra == "kafka"
49
+ Requires-Dist: ibis-framework[pyspark]<13.0.0,>=10.0.0; extra == "kafka"
50
+ Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "kafka"
51
+ Provides-Extra: mysql
52
+ Requires-Dist: datacontract-cli[duckdb]; extra == "mysql"
53
+ Provides-Extra: postgres
54
+ Requires-Dist: ibis-framework[postgres]<13.0.0,>=10.0.0; extra == "postgres"
55
+ Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "postgres"
56
+ Provides-Extra: redshift
57
+ Requires-Dist: ibis-framework[postgres]<13.0.0,>=10.0.0; extra == "redshift"
58
+ Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "redshift"
59
+ Provides-Extra: s3
60
+ Requires-Dist: s3fs<2027.0.0,>=2025.2.0; extra == "s3"
61
+ Requires-Dist: duckdb-extension-httpfs<1.6.0,>=1.5.0; extra == "s3"
62
+ Requires-Dist: duckdb-extension-aws<1.6.0,>=1.5.0; extra == "s3"
63
+ Provides-Extra: gcs
64
+ Requires-Dist: datacontract-cli[duckdb]; extra == "gcs"
65
+ Requires-Dist: duckdb-extension-httpfs<1.6.0,>=1.5.0; extra == "gcs"
66
+ Provides-Extra: azure
67
+ Requires-Dist: datacontract-cli[duckdb]; extra == "azure"
68
+ Requires-Dist: duckdb-extension-azure<1.1.0,>=1.0.3; (platform_system != "Linux" or platform_machine != "aarch64") and extra == "azure"
69
+ Requires-Dist: azure-identity<1.18,>=1.17.1; extra == "azure"
70
+ Requires-Dist: azure-storage-blob<12.30,>=12.24; extra == "azure"
71
+ Provides-Extra: snowflake
72
+ Requires-Dist: snowflake-connector-python[pandas]<4.7,>=3.6; extra == "snowflake"
73
+ Requires-Dist: ibis-framework[snowflake]<13.0.0,>=10.0.0; extra == "snowflake"
74
+ Provides-Extra: sqlserver
75
+ Requires-Dist: ibis-framework[mssql]<13.0.0,>=10.0.0; extra == "sqlserver"
76
+ Provides-Extra: oracle
77
+ Requires-Dist: ibis-framework[oracle]<13.0.0,>=10.0.0; extra == "oracle"
78
+ Provides-Extra: athena
79
+ Requires-Dist: ibis-framework[athena]<13.0.0,>=10.0.0; extra == "athena"
80
+ Provides-Extra: trino
81
+ Requires-Dist: ibis-framework[trino]<13.0.0,>=10.0.0; extra == "trino"
82
+ Provides-Extra: impala
83
+ Requires-Dist: ibis-framework[impala]<13.0.0,>=10.0.0; extra == "impala"
84
+ Provides-Extra: dbml
85
+ Requires-Dist: pydbml>=1.1.1; extra == "dbml"
86
+ Provides-Extra: duckdb
87
+ Requires-Dist: duckdb<1.6.0,>=1.5.0; extra == "duckdb"
88
+ Requires-Dist: ibis-framework[duckdb]<13.0.0,>=10.0.0; extra == "duckdb"
89
+ Provides-Extra: parquet
90
+ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
91
+ Provides-Extra: rdf
92
+ Requires-Dist: rdflib==7.6.0; extra == "rdf"
93
+ Provides-Extra: api
94
+ Requires-Dist: fastapi<0.138.0,>=0.115.0; extra == "api"
95
+ Requires-Dist: uvicorn<0.50.0,>=0.44.0; extra == "api"
96
+ Provides-Extra: protobuf
97
+ Requires-Dist: proto-schema-parser<3.0,>=1.0; extra == "protobuf"
98
+ Provides-Extra: all
99
+ Requires-Dist: datacontract-cli[api,athena,azure,bigquery,csv,databricks,dbml,duckdb,excel,gcs,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino]; extra == "all"
100
+ Provides-Extra: dev
101
+ Requires-Dist: datacontract-cli[all]; extra == "dev"
102
+ Requires-Dist: httpx==0.28.1; extra == "dev"
103
+ Requires-Dist: kafka-python; extra == "dev"
104
+ Requires-Dist: minio==7.2.20; extra == "dev"
105
+ Requires-Dist: moto==5.2.2; extra == "dev"
106
+ Requires-Dist: pandas>=2.1.0; extra == "dev"
107
+ Requires-Dist: pre-commit<4.7.0,>=3.7.1; extra == "dev"
108
+ Requires-Dist: pytest; extra == "dev"
109
+ Requires-Dist: pytest-xdist; extra == "dev"
110
+ Requires-Dist: pymssql==2.3.13; extra == "dev"
111
+ Requires-Dist: psycopg2-binary<3.0,>=2.9; extra == "dev"
112
+ Requires-Dist: mysql-connector-python<9.7.0,>=8.0.30; extra == "dev"
113
+ Requires-Dist: ruff==0.15.17; extra == "dev"
114
+ Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.14.2; extra == "dev"
115
+ Requires-Dist: trino==0.337.0; extra == "dev"
116
+ Dynamic: license-file
117
+
118
+ # Data Contract CLI
119
+
120
+ <p>
121
+ <a href="https://github.com/datacontract/datacontract-cli/actions/workflows/ci.yaml?query=branch%3Amain">
122
+ <img alt="Test Workflow" src="https://img.shields.io/github/actions/workflow/status/datacontract/datacontract-cli/ci.yaml?branch=main"></a>
123
+ <a href="https://pypi.org/project/datacontract-cli/">
124
+ <img alt="PyPI Version" src="https://img.shields.io/pypi/v/datacontract-cli" /></a>
125
+ <a href="https://github.com/datacontract/datacontract-cli">
126
+ <img alt="Stars" src="https://img.shields.io/github/stars/datacontract/datacontract-cli" /></a>
127
+ <a href="https://datacontract.com/slack" rel="nofollow"><img src="https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&amp;style=social" alt="Slack Status" data-canonical-src="https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&amp;style=social" style="max-width: 100%;"></a>
128
+ </p>
129
+
130
+ The `datacontract` CLI is an open-source command-line tool for working with [data contracts](https://datacontract.com).
131
+ It natively supports the [Open Data Contract Standard](https://bitol-io.github.io/open-data-contract-standard/latest/) to lint data contracts, connect to data sources and execute schema and quality tests, and export to different formats.
132
+ The tool is written in Python.
133
+ It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a Python library.
134
+
135
+ ![Main features of the Data Contract CLI](datacontractcli.png)
136
+
137
+ > 📖 **Full documentation: [docs.datacontract.com](https://docs.datacontract.com)**
138
+ >
139
+ > Quick links: [Quickstart](https://docs.datacontract.com/quickstart) · [Commands](https://docs.datacontract.com/commands) · [Best Practices](https://docs.datacontract.com/best-practices) · [Custom Export and Import](https://docs.datacontract.com/extending) · [Development Setup](#development-setup)
140
+
141
+ ## Getting started
142
+
143
+ Let's look at this data contract:
144
+ [https://datacontract.com/orders-v1.odcs.yaml](https://datacontract.com/orders-v1.odcs.yaml)
145
+
146
+ We have a _servers_ section with endpoint details to a Postgres database, _schema_ for the structure and semantics of the data, _service levels_ and _quality_ attributes that describe the expected freshness and number of rows.
147
+
148
+ This data contract contains all information to connect to the database and check that the actual data meets the defined schema specification and quality expectations.
149
+ We can use this information to test if the actual data product is compliant to the data contract.
150
+
151
+ Let's use [uv](https://docs.astral.sh/uv/) to install the CLI (or use the [Docker image](#docker)),
152
+ ```bash
153
+ $ uv tool install --python python3.11 --upgrade 'datacontract-cli[all]'
154
+ ```
155
+
156
+
157
+ Now, let's run the tests:
158
+
159
+ ```bash
160
+ $ export DATACONTRACT_POSTGRES_USERNAME=datacontract_cli.egzhawjonpfweuutedfy
161
+ $ export DATACONTRACT_POSTGRES_PASSWORD=jio10JuQfDfl9JCCPdaCCpuZ1YO
162
+ $ datacontract test https://datacontract.com/orders-v1.odcs.yaml
163
+
164
+ # returns:
165
+ Testing https://datacontract.com/orders-v1.odcs.yaml
166
+ Server: production (type=postgres, host=aws-1-eu-central-2.pooler.supabase.com, port=6543, database=postgres, schema=dp_orders_v1)
167
+ ╭────────┬──────────────────────────────────────────────────────────┬─────────────────────────┬─────────╮
168
+ │ Result │ Check │ Field │ Details │
169
+ ├────────┼──────────────────────────────────────────────────────────┼─────────────────────────┼─────────┤
170
+ │ passed │ Check that field 'line_item_id' is present │ line_items.line_item_id │ │
171
+ │ passed │ Check that field line_item_id has type UUID │ line_items.line_item_id │ │
172
+ │ passed │ Check that field line_item_id has no missing values │ line_items.line_item_id │ │
173
+ │ passed │ Check that field 'order_id' is present │ line_items.order_id │ │
174
+ │ passed │ Check that field order_id has type UUID │ line_items.order_id │ │
175
+ │ passed │ Check that field 'price' is present │ line_items.price │ │
176
+ │ passed │ Check that field price has type INTEGER │ line_items.price │ │
177
+ │ passed │ Check that field price has no missing values │ line_items.price │ │
178
+ │ passed │ Check that field 'sku' is present │ line_items.sku │ │
179
+ │ passed │ Check that field sku has type TEXT │ line_items.sku │ │
180
+ │ passed │ Check that field sku has no missing values │ line_items.sku │ │
181
+ │ passed │ Check that field 'customer_id' is present │ orders.customer_id │ │
182
+ │ passed │ Check that field customer_id has type TEXT │ orders.customer_id │ │
183
+ │ passed │ Check that field customer_id has no missing values │ orders.customer_id │ │
184
+ │ passed │ Check that field 'order_id' is present │ orders.order_id │ │
185
+ │ passed │ Check that field order_id has type UUID │ orders.order_id │ │
186
+ │ passed │ Check that field order_id has no missing values │ orders.order_id │ │
187
+ │ passed │ Check that unique field order_id has no duplicate values │ orders.order_id │ │
188
+ │ passed │ Check that field 'order_status' is present │ orders.order_status │ │
189
+ │ passed │ Check that field order_status has type TEXT │ orders.order_status │ │
190
+ │ passed │ Check that field 'order_timestamp' is present │ orders.order_timestamp │ │
191
+ │ passed │ Check that field order_timestamp has type TIMESTAMPTZ │ orders.order_timestamp │ │
192
+ │ passed │ Check that field 'order_total' is present │ orders.order_total │ │
193
+ │ passed │ Check that field order_total has type INTEGER │ orders.order_total │ │
194
+ │ passed │ Check that field order_total has no missing values │ orders.order_total │ │
195
+ ╰────────┴──────────────────────────────────────────────────────────┴─────────────────────────┴─────────╯
196
+ 🟢 data contract is valid. Run 25 checks. Took 3.938887 seconds.
197
+ ```
198
+
199
+ Voilà, the CLI tested that the YAML itself is valid, all records comply with the schema, and all quality attributes are met.
200
+
201
+ We can also use the data contract metadata to export in many [formats](https://docs.datacontract.com/exports), e.g., to generate a SQL DDL:
202
+
203
+ ```bash
204
+ $ datacontract export sql https://datacontract.com/orders-v1.odcs.yaml
205
+
206
+ # returns:
207
+ -- Data Contract: orders
208
+ -- SQL Dialect: postgres
209
+ CREATE TABLE orders (
210
+ order_id None not null primary key,
211
+ customer_id text not null,
212
+ order_total integer not null,
213
+ order_timestamp None,
214
+ order_status text
215
+ );
216
+ CREATE TABLE line_items (
217
+ line_item_id None not null primary key,
218
+ sku text not null,
219
+ price integer not null,
220
+ order_id None
221
+ );
222
+ ```
223
+
224
+ Or generate an HTML export:
225
+
226
+ ```bash
227
+ $ datacontract export html --output orders-v1.odcs.html https://datacontract.com/orders-v1.odcs.yaml
228
+ ```
229
+
230
+ [//]: # (which will create this [HTML export]&#40;https://datacontract.com/examples/orders-latest/datacontract.html&#41;.)
231
+
232
+
233
+ ## Usage
234
+
235
+ ```bash
236
+ # create a new data contract from example and write it to odcs.yaml
237
+ $ datacontract init odcs.yaml
238
+
239
+ # edit the data contract in the Data Contract Editor (web UI)
240
+ $ datacontract edit odcs.yaml
241
+
242
+ # lint the odcs.yaml and stop after the first validation error (default).
243
+ $ datacontract lint odcs.yaml
244
+
245
+ # show a changelog between two data contracts
246
+ $ datacontract changelog v1.odcs.yaml v2.odcs.yaml
247
+
248
+ # execute schema and quality checks (define credentials as environment variables)
249
+ $ datacontract test odcs.yaml
250
+
251
+ # generate dbt tests from a contract into your dbt project and run `dbt test`
252
+ $ datacontract dbt sync orders.odcs.yaml --project-dir ./warehouse
253
+
254
+ # export data contract as html (other formats: avro, dbt-models, dbt-sources, dbt-staging-sql, jsonschema, odcs, rdf, sql, sodacl, terraform, ...)
255
+ $ datacontract export html datacontract.yaml --output odcs.html
256
+
257
+ # import sql (other formats: avro, glue, bigquery, jsonschema, excel ...)
258
+ $ datacontract import sql --source my-ddl.sql --dialect postgres --output odcs.yaml
259
+
260
+ # import from Excel template
261
+ $ datacontract import excel --source odcs.xlsx --output odcs.yaml
262
+
263
+ # export to Excel template
264
+ $ datacontract export excel --output odcs.xlsx odcs.yaml
265
+ ```
266
+
267
+ ## Programmatic (Python)
268
+ ```python
269
+ from datacontract.data_contract import DataContract
270
+
271
+ data_contract = DataContract(data_contract_file="odcs.yaml")
272
+ run = data_contract.test()
273
+ if not run.has_passed():
274
+ print("Data quality validation failed.")
275
+ # Abort pipeline, alert, or take corrective actions...
276
+ ```
277
+
278
+ ## How to
279
+
280
+ - [How to integrate Data Contract CLI in your CI/CD pipeline as a GitHub Action](https://github.com/datacontract/datacontract-action/)
281
+ - [How to run the Data Contract CLI API to test data contracts with POST requests](https://cli.datacontract.com/API)
282
+ - [How to run Data Contract CLI in a Databricks pipeline](https://www.datamesh-architecture.com/howto/build-a-dataproduct-with-databricks#test-the-data-product)
283
+
284
+
285
+ ## Installation
286
+
287
+ Choose the most appropriate installation method for your needs:
288
+
289
+ ### uv
290
+
291
+ The preferred way to install is [uv](https://docs.astral.sh/uv/):
292
+
293
+ ```
294
+ uv tool install --python python3.11 --upgrade 'datacontract-cli[all]'
295
+ ```
296
+
297
+ ### uvx
298
+
299
+ If you have [uv](https://docs.astral.sh/uv/) installed, you can run datacontract-cli directly without installing:
300
+
301
+ ```
302
+ uv run --with 'datacontract-cli[all]' datacontract --version
303
+ ```
304
+
305
+ ### pip
306
+ Python 3.10, 3.11, and 3.12 are supported. We recommend using Python 3.11.
307
+
308
+ ```bash
309
+ python3 -m pip install 'datacontract-cli[all]'
310
+ datacontract --version
311
+ ```
312
+
313
+ ### pip with venv
314
+
315
+ Typically it is better to install the application in a virtual environment for your projects:
316
+
317
+ ```bash
318
+ cd my-project
319
+ python3.11 -m venv venv
320
+ source venv/bin/activate
321
+ pip install 'datacontract-cli[all]'
322
+ datacontract --version
323
+ ```
324
+
325
+ ### pipx
326
+
327
+ pipx installs into an isolated environment.
328
+
329
+ ```bash
330
+ pipx install 'datacontract-cli[all]'
331
+ datacontract --version
332
+ ```
333
+
334
+ ### Docker
335
+
336
+ You can also use our Docker image to run the CLI tool. It is also convenient for CI/CD pipelines.
337
+
338
+ ```bash
339
+ docker pull datacontract/cli
340
+ docker run --rm -v ${PWD}:/home/datacontract datacontract/cli
341
+ ```
342
+
343
+ You can create an alias for the Docker command to make it easier to use:
344
+
345
+ ```bash
346
+ alias datacontract='docker run --rm -v "${PWD}:/home/datacontract" datacontract/cli:latest'
347
+ ```
348
+
349
+ _Note:_ The output of Docker command line messages is limited to 80 columns and may include line breaks. Don't pipe docker output to files if you want to export code. Use the `--output` option instead.
350
+
351
+
352
+
353
+ ## Optional Dependencies (Extras)
354
+
355
+ The CLI tool defines several optional dependencies (also known as extras) that can be installed for using with specific servers types.
356
+ With _all_, all server dependencies are included.
357
+
358
+ ```bash
359
+ uv tool install --python python3.11 --upgrade 'datacontract-cli[all]'
360
+ ```
361
+
362
+ A list of available extras:
363
+
364
+ | Dependency | Installation Command |
365
+ |------------------------------------------|--------------------------------------------|
366
+ | Amazon Athena | `pip install datacontract-cli[athena]` |
367
+ | Avro Support | `pip install datacontract-cli[avro]` |
368
+ | Azure Integration | `pip install datacontract-cli[azure]` |
369
+ | Google BigQuery | `pip install datacontract-cli[bigquery]` |
370
+ | CSV | `pip install datacontract-cli[csv]` |
371
+ | Databricks Integration | `pip install datacontract-cli[databricks]` |
372
+ | DBML | `pip install datacontract-cli[dbml]` |
373
+ | DuckDB (local/S3/GCS/Azure file testing) | `pip install datacontract-cli[duckdb]` |
374
+ | Excel | `pip install datacontract-cli[excel]` |
375
+ | GCS Integration | `pip install datacontract-cli[gcs]` |
376
+ | Iceberg | `pip install datacontract-cli[iceberg]` |
377
+ | Impala | `pip install datacontract-cli[impala]` |
378
+ | Kafka Integration | `pip install datacontract-cli[kafka]` |
379
+ | MySQL Integration | `pip install datacontract-cli[mysql]` |
380
+ | Oracle | `pip install datacontract-cli[oracle]` |
381
+ | Parquet | `pip install datacontract-cli[parquet]` |
382
+ | PostgreSQL Integration | `pip install datacontract-cli[postgres]` |
383
+ | protobuf | `pip install datacontract-cli[protobuf]` |
384
+ | RDF | `pip install datacontract-cli[rdf]` |
385
+ | Amazon Redshift | `pip install datacontract-cli[redshift]` |
386
+ | S3 Integration | `pip install datacontract-cli[s3]` |
387
+ | Snowflake Integration | `pip install datacontract-cli[snowflake]` |
388
+ | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
389
+ | Trino | `pip install datacontract-cli[trino]` |
390
+ | API (run as web server) | `pip install datacontract-cli[api]` |
391
+
392
+
393
+ ## Documentation
394
+
395
+ 📖 **The full documentation is at [docs.datacontract.com](https://docs.datacontract.com).**
396
+
397
+ It covers everything in depth, including the complete command reference:
398
+
399
+ - [Quickstart](https://docs.datacontract.com/quickstart) — install and run your first test
400
+ - [Open Data Contract Standard](https://docs.datacontract.com/open-data-contract-standard) — the contract format
401
+ - [Test your contract](https://docs.datacontract.com/testing) and [Connect your Data](https://docs.datacontract.com/connect) — schema & quality tests against 18+ data sources
402
+ - [Define your Quality Rules](https://docs.datacontract.com/quality-rules) — SQL, library, text, and custom checks
403
+ - [Sync with dbt](https://docs.datacontract.com/dbt) · [Edit your contract](https://docs.datacontract.com/editor)
404
+ - [Imports](https://docs.datacontract.com/imports) and [Exports](https://docs.datacontract.com/exports) — convert to/from 25+ formats
405
+ - [API](https://docs.datacontract.com/api) and [Python Library](https://docs.datacontract.com/python-library)
406
+ - [Command reference](https://docs.datacontract.com/commands) — `init`, `lint`, `test`, `export`, `import`, `dbt`, `ci`, `catalog`, `publish`, `api`, and more
407
+
408
+ ## Development Setup
409
+
410
+ - Install [uv](https://docs.astral.sh/uv/)
411
+ - Python base interpreter should be 3.11.x.
412
+ - 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`.
413
+ - Docker engine must be running to execute the tests.
414
+
415
+ ```bash
416
+ sdk use java 21.0.11-tem
417
+ uv python pin 3.11
418
+ uv venv
419
+ uv pip install -e '.[dev]'
420
+ uv run ruff check
421
+ uv run pytest
422
+ ```
423
+
424
+ ## Contribution
425
+
426
+ We are happy to receive your contributions. Propose your change in an issue or directly create a
427
+ pull request with your improvements.
428
+
429
+ Before creating a pull request, please make sure that all tests are passing (`uv run pytest`) and
430
+ your code is properly formatted (`ruff format`). Create a changelog entry and reference fixed
431
+ issues (if any).
432
+
433
+ ### Troubleshooting
434
+
435
+ #### Windows: Some tests fail
436
+
437
+ Run in WSL. (We need to fix the paths in the tests so that normal Windows will work, contributions are appreciated)
438
+
439
+ #### PyCharm does not pick up the `.venv`
440
+
441
+ This [uv issue](https://github.com/astral-sh/uv/issues/12545) might be relevant.
442
+
443
+ Try to sync all groups:
444
+
445
+ ```
446
+ uv sync --all-groups --all-extras
447
+ ```
448
+
449
+ #### Errors in tests that use PySpark (e.g. test_test_kafka.py)
450
+
451
+ Ensure you have a JDK 17 or 21 installed. Java 25 causes issues.
452
+
453
+ ```
454
+ java --version
455
+ ```
456
+
457
+
458
+ ### Docker Build
459
+
460
+ ```bash
461
+ docker build -t datacontract/cli .
462
+ docker run --rm -v ${PWD}:/home/datacontract datacontract/cli
463
+ ```
464
+
465
+ #### Docker compose integration
466
+
467
+ We've included a [docker-compose.yml](./docker-compose.yml) configuration to simplify the build, test, and deployment of the image.
468
+
469
+ ##### Building the Image with Docker Compose
470
+
471
+ To build the Docker image using Docker Compose, run the following command:
472
+
473
+ ```bash
474
+ docker compose build
475
+ ```
476
+
477
+ This command utilizes the `docker-compose.yml` to build the image, leveraging predefined settings such as the build context and Dockerfile location. This approach streamlines the image creation process, avoiding the need for manual build specifications each time.
478
+
479
+ #### Testing the Image
480
+
481
+ After building the image, you can test it directly with Docker Compose:
482
+
483
+ ```bash
484
+ docker compose run --rm datacontract --version
485
+ ```
486
+
487
+ This command runs the container momentarily to check the version of the `datacontract` CLI. The `--rm` flag ensures that the container is automatically removed after the command executes, keeping your environment clean.
488
+
489
+
490
+ ## Related Tools
491
+
492
+ - [Entropy Data](https://www.entropy-data.com/) is a commercial tool to manage data contracts. It contains a web UI, access management, and data governance for a data product marketplace based on data contracts.
493
+ - [Data Contract Editor](https://editor.datacontract.com) is an editor for Data Contracts, including a live html preview.
494
+
495
+ ## License
496
+
497
+ [MIT License](LICENSE)
498
+
499
+ ## Credits
500
+
501
+ Created by [Stefan Negele](https://www.linkedin.com/in/stefan-negele-573153112/), [Jochen Christ](https://www.linkedin.com/in/jochenchrist/), and [Simon Harrer]().
502
+
503
+ ---
504
+
505
+ <p align="center">
506
+ <a href="https://entropy-data.com" target="_blank"><img src="https://entropy-data.com/media/entropy-data-logo.svg" alt="Entropy Data" height="36"></a>
507
+ </p>
508
+ <p align="center">
509
+ <a href="https://entropy-data.com/legal-notice">Legal Notice</a> · <a href="https://entropy-data.com/privacy-policy">Privacy Policy</a>
510
+ </p>
511
+
512
+
513
+
514
+ <a href="https://github.com/datacontract/datacontract-cli" class="github-corner" aria-label="View source on GitHub"><svg width="80" height="80" viewBox="0 0 250 250" style="fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>