datacontract-cli 1.0.13__tar.gz → 1.0.14__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of datacontract-cli might be problematic. Click here for more details.
- {datacontract_cli-1.0.13/datacontract_cli.egg-info → datacontract_cli-1.0.14}/PKG-INFO +12 -5
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/protobuf_exporter.py +29 -4
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/integration/dbt_sync.py +14 -2
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/lint/resolve.py +4 -3
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14/datacontract_cli.egg-info}/PKG-INFO +12 -5
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract_cli.egg-info/requires.txt +11 -4
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/pyproject.toml +24 -10
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_dbt_sync.py +26 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_protobuf.py +59 -1
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/LICENSE +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/MANIFEST.in +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/README.md +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/__init__.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/api.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/catalog/catalog.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/changelog/__init__.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/changelog/changelog.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/changelog/normalize.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/cli.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_api.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_catalog.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_changelog.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_ci.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_dbt.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_edit.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_export.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_import.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_init.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_lint.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_publish.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/command_test.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/data_contract.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/VERSION +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/abap-Bs8kvjsq.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/apex-Dspwrl5m.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/assets/editor.worker-4.7.0.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/azcli-k1BiOau1.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/bat-BIP72KWc.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/bicep-VhQeYhS3.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/cameligo-DnuAXtHg.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/clojure-BAuDPsal.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/coffee-BV06qSnj.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/cpp-Cz8Jeyrf.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/csharp-F6hhlXFb.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/csp-KzlEHCyI.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/css-e4FKntZ3.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/cssMode-BNkTa2xp.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/cypher-CpvDGKRr.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/dart-DdHeFWR0.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/datacontract-editor.css +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/datacontract-editor.es.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/dockerfile-aoNXDcio.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/ecl-C4Q0DYuA.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/elixir-C9X42b0T.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/flow9-Bff42pfB.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/freemarker2-Dyfzmb5A.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/fsharp-C6vPAsHG.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/go-DEr8zx9f.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/graphql-BiNBBRFh.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/handlebars-BtDNI-uC.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/hcl-2T9lKuFg.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/html-Cn4TGw_o.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/htmlMode-Bf84vbo2.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/index.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/ini-CZGtssYM.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/java-B260NeH3.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/javascript-B86Kac07.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/jsonMode-Ckgg5lAE.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/julia-kuNLM9c5.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/kotlin-Bz6kAefA.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/less-AZUtS89I.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/lexon-BcmgnyRb.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/liquid-D0NPwuu_.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/logo_fuchsia_v2.svg +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/lua-Dz1RbATg.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/m3-CIMooLFn.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/markdown-C1BsCK9P.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/mdx-QFRSBtVQ.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/mips-BovsnfLQ.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/monaco-4.7.0.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/msdax-CiRB2ZB-.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/mysql-BwdpPE19.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/objective-c-D4nfHfso.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/odcs.svg +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/pascal--j5-PYtz.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/pascaligo-C7TcJxNL.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/perl-BzEWqUb5.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/pgsql-B_KZ0mGX.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/php-A19QHzQV.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/pla-COeKY1hA.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/postiats-BfMp7zJL.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/powerquery-B0TS_5Gb.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/powershell-5jSbKdYB.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/protobuf-YgnOutn3.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/pug-DLej6kn5.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/python-C8RW9B6A.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/qsharp-AhjqtSHB.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/r-D-F4P80w.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/razor-CLZqdY_r.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/redis-hwwIlMnV.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/redshift-Bcm_kjEG.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/restructuredtext-CrdzfPP-.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/ruby-QC2UNm1s.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/rust-5aqiQ3L5.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/sb-B1g1ZfLJ.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/scala-C2U4R5Gb.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/scheme-DeFRbslr.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/scss-RSTCiCmI.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/shell-BpF-iNu8.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/solidity-C00r2mbQ.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/sophia-DVW5ZKDB.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/sparql-B0nmpxeX.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/sql-CJwKPERn.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/st-DPlKG5DT.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/swift-YZBAbVHV.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/systemverilog-CDQSaH63.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/tcl-Dlu8sp6Q.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/tsMode-yleMwhPq.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/twig-C5TO7-kw.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/typescript-CJBeebKU.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/typespec-BsmjDEu7.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/vb-ChHvIDrk.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/wgsl-XEp1ju8c.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/xml-vC-NMVX1.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/yaml-Dlf2VF-T.js +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/checks/__init__.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/checks/check_spec.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/checks/create_checks.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/checks/physical_type_match.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/checks/type_normalize.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/data_contract_test.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/datacontract/check_azure_blob_file.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/__init__.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/connections/__init__.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/connections/connect.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/connections/duckdb_connection.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/connections/kafka.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/connections/oracle_patch.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/connections/redshift_patch.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/dtype_category.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/ibis_check_execute.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/native_type.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/engines/ibis/snowflake_structured_types.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/avro_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/avro_idl_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/bigquery_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/custom_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/data_caterer_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/dbml_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/dbt_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/dqx_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/excel_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/exporter_factory.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/go_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/great_expectations_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/iceberg_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/jsonschema_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/markdown_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/odcs_export_helper.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/pydantic_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/rdf_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/sodacl_check_builder.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/sodacl_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/spark_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/sql_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/sql_type_converter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/sqlalchemy_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/avro_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/dcs_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/excel_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/odcs_helper.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/odcs_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/powerbi_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/snowflake_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/spark_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/imports/unity_importer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/integration/dbt_test_mapping.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/integration/entropy_data.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/lint/files.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/model/changelog.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/model/run.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/model/server.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/output/__init__.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/output/ci_output.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/output/json_test_results.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/output/test_results_writer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/output/text_changelog_results.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/py.typed +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/schemas/odcs-3.1.0.init.yaml +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/datacontract_odcs.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/index.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract_cli.egg-info/SOURCES.txt +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/setup.cfg +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_api.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_catalog.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_changelog.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_changelog_engine.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_changelog_normalize.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_changelog_output_text.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_ci_output.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_cli.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_connect_databricks.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_connect_sqlserver.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_connect_trino.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_create_checks_nested_type.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_create_checks_physical_type.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_data_contract.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_dbt_test_mapping.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_description_linter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_dtype_category.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_edit.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_avro.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_custom.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_custom_model.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_dbt_models.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_dqx.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_excel.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_go.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_html.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_rdf.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_sodacl.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_spark.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_sql.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_sql_clickhouse.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_ibis_mssql_pattern.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_ibis_oracle_schema.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_avro.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_csv.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_dbt.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_excel.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_glue.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_json.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_jsonschema.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_odcs_v3.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_powerbi.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_snowflake.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_spark.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_sql_oracle.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_sql_snowflake.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_integration_entropydata.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_lint.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_oracle_patch.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_physical_type_match.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_redshift_patch.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_require_env.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_resolve.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_resolve_definitions.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_snowflake_structured_types.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_sql_type_converter_physicaltype.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_api.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_athena_iceberg.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_azure_blob_file.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_checks_filter.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_dataframe.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_delta.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_diagnostics.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_failed_samples.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_local_json_nd.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_mysql.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_oracle.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_oracle_xe.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_output_json.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_postgres.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_quality.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_quality_local_fallback.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_quality_percent_severity.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_redshift.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_schema_evolution.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_server_not_found.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_soda_connection_error.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_test_trino.py +0 -0
- {datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/tests/test_type_normalize.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.14
|
|
4
4
|
Summary: The datacontract CLI is an open source command-line tool for working with Data Contracts. It uses data contract YAML files to lint the data contract, connect to data sources and execute schema and quality tests, detect breaking changes, and export to different formats. The tool is written in Python. It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a Python library.
|
|
5
5
|
Author-email: Jochen Christ <jochen.christ@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: <3.15,>=3.10
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: typer<0.
|
|
14
|
+
Requires-Dist: typer<0.28,>=0.18.0
|
|
15
15
|
Requires-Dist: click<9.0.0,>=8.1.0
|
|
16
16
|
Requires-Dist: pydantic<2.14.0,>=2.8.2
|
|
17
17
|
Requires-Dist: pyyaml~=6.0.1
|
|
@@ -42,7 +42,7 @@ Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == "excel"
|
|
|
42
42
|
Provides-Extra: databricks
|
|
43
43
|
Requires-Dist: ibis-framework[databricks,pyspark]<13.0.0,>=10.0.0; extra == "databricks"
|
|
44
44
|
Requires-Dist: databricks-sql-connector<4.4.0,>=3.7.0; extra == "databricks"
|
|
45
|
-
Requires-Dist: databricks-sdk<0.
|
|
45
|
+
Requires-Dist: databricks-sdk<0.122.0; extra == "databricks"
|
|
46
46
|
Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "databricks"
|
|
47
47
|
Provides-Extra: iceberg
|
|
48
48
|
Requires-Dist: pyiceberg==0.11.1; extra == "iceberg"
|
|
@@ -55,9 +55,11 @@ Requires-Dist: datacontract-cli[duckdb]; extra == "mysql"
|
|
|
55
55
|
Provides-Extra: postgres
|
|
56
56
|
Requires-Dist: ibis-framework[postgres]<13.0.0,>=10.0.0; extra == "postgres"
|
|
57
57
|
Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "postgres"
|
|
58
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "postgres"
|
|
58
59
|
Provides-Extra: redshift
|
|
59
60
|
Requires-Dist: ibis-framework[postgres]<13.0.0,>=10.0.0; extra == "redshift"
|
|
60
61
|
Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "redshift"
|
|
62
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "redshift"
|
|
61
63
|
Provides-Extra: s3
|
|
62
64
|
Requires-Dist: s3fs<2027.0.0,>=2025.2.0; extra == "s3"
|
|
63
65
|
Requires-Dist: duckdb-extension-httpfs<1.6.0,>=1.5.0; extra == "s3"
|
|
@@ -71,18 +73,23 @@ Requires-Dist: duckdb-extension-azure<1.6.0,>=1.5.0; extra == "azure"
|
|
|
71
73
|
Requires-Dist: azure-identity<1.26,>=1.17.1; extra == "azure"
|
|
72
74
|
Requires-Dist: azure-storage-blob<12.31,>=12.24; extra == "azure"
|
|
73
75
|
Provides-Extra: snowflake
|
|
74
|
-
Requires-Dist: snowflake-connector-python[pandas]<4.
|
|
76
|
+
Requires-Dist: snowflake-connector-python[pandas]<4.8,>=3.6; extra == "snowflake"
|
|
75
77
|
Requires-Dist: ibis-framework[snowflake]<13.0.0,>=10.0.0; extra == "snowflake"
|
|
76
78
|
Provides-Extra: sqlserver
|
|
77
79
|
Requires-Dist: ibis-framework[mssql]<13.0.0,>=10.0.0; extra == "sqlserver"
|
|
80
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "sqlserver"
|
|
78
81
|
Provides-Extra: oracle
|
|
79
82
|
Requires-Dist: ibis-framework[oracle]<13.0.0,>=10.0.0; extra == "oracle"
|
|
83
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "oracle"
|
|
80
84
|
Provides-Extra: athena
|
|
81
85
|
Requires-Dist: ibis-framework[athena]<13.0.0,>=10.0.0; extra == "athena"
|
|
86
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "athena"
|
|
82
87
|
Provides-Extra: trino
|
|
83
88
|
Requires-Dist: ibis-framework[trino]<13.0.0,>=10.0.0; extra == "trino"
|
|
89
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "trino"
|
|
84
90
|
Provides-Extra: impala
|
|
85
91
|
Requires-Dist: ibis-framework[impala]<13.0.0,>=10.0.0; extra == "impala"
|
|
92
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "impala"
|
|
86
93
|
Provides-Extra: dbml
|
|
87
94
|
Requires-Dist: pydbml>=1.1.1; extra == "dbml"
|
|
88
95
|
Provides-Extra: duckdb
|
|
@@ -112,7 +119,7 @@ Requires-Dist: pytest-xdist; extra == "dev"
|
|
|
112
119
|
Requires-Dist: pymssql==2.3.13; extra == "dev"
|
|
113
120
|
Requires-Dist: psycopg2-binary<3.0,>=2.9; extra == "dev"
|
|
114
121
|
Requires-Dist: mysql-connector-python<9.7.0,>=8.0.30; extra == "dev"
|
|
115
|
-
Requires-Dist: ruff==0.15.
|
|
122
|
+
Requires-Dist: ruff==0.15.22; extra == "dev"
|
|
116
123
|
Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.14.2; extra == "dev"
|
|
117
124
|
Requires-Dist: trino==0.338.0; extra == "dev"
|
|
118
125
|
Dynamic: license-file
|
{datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/export/protobuf_exporter.py
RENAMED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
import re
|
|
1
2
|
from typing import List, Optional
|
|
2
3
|
|
|
3
4
|
from open_data_contract_standard.model import OpenDataContractStandard, SchemaProperty
|
|
4
5
|
|
|
5
6
|
from datacontract.export.exporter import Exporter
|
|
7
|
+
from datacontract.model.exceptions import DataContractException
|
|
6
8
|
|
|
7
9
|
OBJECT_TYPES: set = {"object", "record", "struct"}
|
|
8
10
|
|
|
11
|
+
# A valid proto package is a dot-separated sequence of identifiers.
|
|
12
|
+
_PROTO_PACKAGE_PATTERN = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$")
|
|
13
|
+
|
|
9
14
|
|
|
10
15
|
class ProtoBufExporter(Exporter):
|
|
11
16
|
def export(self, data_contract, schema_name, server, sql_server_type, export_args) -> str:
|
|
@@ -31,6 +36,27 @@ def _get_logical_type_option(prop: SchemaProperty, key: str):
|
|
|
31
36
|
return prop.logicalTypeOptions.get(key)
|
|
32
37
|
|
|
33
38
|
|
|
39
|
+
def _get_proto_package_name(data_contract: OpenDataContractStandard) -> str:
|
|
40
|
+
"""
|
|
41
|
+
Returns the Protobuf package name from the contract's customProperties
|
|
42
|
+
("protoPackageName"), falling back to "example".
|
|
43
|
+
"""
|
|
44
|
+
if data_contract.customProperties is None:
|
|
45
|
+
return "example"
|
|
46
|
+
for cp in data_contract.customProperties:
|
|
47
|
+
if cp.property == "protoPackageName" and cp.value:
|
|
48
|
+
if not _PROTO_PACKAGE_PATTERN.match(cp.value):
|
|
49
|
+
raise DataContractException(
|
|
50
|
+
type="protobuf-export",
|
|
51
|
+
name="invalid-proto-package-name",
|
|
52
|
+
reason=f"Invalid protoPackageName '{cp.value}'. "
|
|
53
|
+
"Must be a dot-separated sequence of identifiers, e.g. 'com.example.mydata'.",
|
|
54
|
+
engine="datacontract",
|
|
55
|
+
)
|
|
56
|
+
return cp.value
|
|
57
|
+
return "example"
|
|
58
|
+
|
|
59
|
+
|
|
34
60
|
def to_protobuf(data_contract: OpenDataContractStandard) -> str:
|
|
35
61
|
"""
|
|
36
62
|
Generates a Protobuf file from the data contract specification.
|
|
@@ -58,7 +84,7 @@ def to_protobuf(data_contract: OpenDataContractStandard) -> str:
|
|
|
58
84
|
|
|
59
85
|
# Build header with syntax and package declarations.
|
|
60
86
|
header = 'syntax = "proto3";\n\n'
|
|
61
|
-
package =
|
|
87
|
+
package: str = _get_proto_package_name(data_contract)
|
|
62
88
|
header += f"package {package};\n\n"
|
|
63
89
|
|
|
64
90
|
# Append enum definitions before messages.
|
|
@@ -348,9 +374,8 @@ def _get_field_declaration(prop: SchemaProperty) -> str:
|
|
|
348
374
|
|
|
349
375
|
logical_type = (prop.logicalType or "").lower()
|
|
350
376
|
is_array = logical_type == "array"
|
|
351
|
-
is_message_type = logical_type in OBJECT_TYPES
|
|
352
377
|
|
|
353
|
-
# Add 'optional' only for non-required, non-array
|
|
354
|
-
if hasattr(prop, "required") and prop.required is False and not is_array
|
|
378
|
+
# Add 'optional' only for non-required, non-array
|
|
379
|
+
if hasattr(prop, "required") and prop.required is False and not is_array:
|
|
355
380
|
return f"optional {field_type}"
|
|
356
381
|
return field_type
|
|
@@ -482,9 +482,11 @@ def _singular_tests_for_qualities(
|
|
|
482
482
|
*,
|
|
483
483
|
label_prefix: str = "",
|
|
484
484
|
field: Optional[str] = None,
|
|
485
|
+
model_version: Optional[str] = None,
|
|
485
486
|
) -> list[SingularTest]:
|
|
486
487
|
"""Generate singular tests for ODCS quality entries that have an associated `query` and bound."""
|
|
487
488
|
out: list[SingularTest] = []
|
|
489
|
+
model_ref = _model_ref(model, model_version)
|
|
488
490
|
for idx, quality in enumerate(qualities or [], start=1):
|
|
489
491
|
if not quality.query:
|
|
490
492
|
continue
|
|
@@ -495,13 +497,18 @@ def _singular_tests_for_qualities(
|
|
|
495
497
|
f"Skipping singular SQL test `{test_label}` on `{model}`: quality has a `query` but no `mustBe*` bound."
|
|
496
498
|
)
|
|
497
499
|
continue
|
|
500
|
+
# Resolve the ODCS model/field placeholders to dbt constructs. `{schema}` (which the test
|
|
501
|
+
# engine also resolves) has no clean dbt equivalent and is intentionally left untouched.
|
|
502
|
+
query = re.sub(r'["\']?\$?\{(model|table|object)}["\']?', model_ref, quality.query)
|
|
503
|
+
if field is not None:
|
|
504
|
+
query = re.sub(r'["\']?\$?\{(field|column|property)}["\']?', field, query)
|
|
498
505
|
severity = _normalize_severity(quality.severity)
|
|
499
506
|
filename = f"{_slugify(contract_id)}__{_slugify(contract_version)}__{_slugify(model)}__{_slugify(test_label)}"
|
|
500
507
|
out.append(
|
|
501
508
|
SingularTest(
|
|
502
509
|
filename=f"{filename}.sql",
|
|
503
510
|
sql=_build_singular_sql(
|
|
504
|
-
|
|
511
|
+
query,
|
|
505
512
|
predicate,
|
|
506
513
|
severity,
|
|
507
514
|
contract_id,
|
|
@@ -982,9 +989,14 @@ def generate_dbt_tests_for_schema(
|
|
|
982
989
|
run,
|
|
983
990
|
label_prefix=f"{prop.name}__",
|
|
984
991
|
field=prop.name,
|
|
992
|
+
model_version=model_version,
|
|
985
993
|
)
|
|
986
994
|
)
|
|
987
|
-
singulars.extend(
|
|
995
|
+
singulars.extend(
|
|
996
|
+
_singular_tests_for_qualities(
|
|
997
|
+
schema_obj.quality, contract_id, contract_version, model_name, run, model_version=model_version
|
|
998
|
+
)
|
|
999
|
+
)
|
|
988
1000
|
_disambiguate_singular_filenames(singulars)
|
|
989
1001
|
|
|
990
1002
|
return model_dict, singulars
|
|
@@ -44,11 +44,12 @@ _SafeLoaderNoTimestamp.yaml_implicit_resolvers = {
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
def _resolve_jsonschema_compliance_error_message_path(yaml_str, message):
|
|
47
|
+
except_message = message
|
|
48
|
+
|
|
47
49
|
try:
|
|
48
50
|
matches = re.findall(r"\[(\d+)\]", message)
|
|
49
51
|
schema_index = matches[0] if len(matches) > 0 else None
|
|
50
52
|
property_index = matches[1] if len(matches) > 1 else None
|
|
51
|
-
except_message = message
|
|
52
53
|
if schema_index is not None and "schema" in yaml_str and int(schema_index) < len(yaml_str["schema"]):
|
|
53
54
|
except_message = except_message.replace(
|
|
54
55
|
f"schema[{schema_index}]", f"schema.{yaml_str['schema'][int(schema_index)]['name']}"
|
|
@@ -68,8 +69,8 @@ def _resolve_jsonschema_compliance_error_message_path(yaml_str, message):
|
|
|
68
69
|
except Exception:
|
|
69
70
|
logging.warning("YAML doesn't conform to JSON schema. Could not resolve indexed schema or property names.")
|
|
70
71
|
except_message = message
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
|
|
73
|
+
return except_message
|
|
73
74
|
|
|
74
75
|
|
|
75
76
|
def resolve_data_contract_dict(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.14
|
|
4
4
|
Summary: The datacontract CLI is an open source command-line tool for working with Data Contracts. It uses data contract YAML files to lint the data contract, connect to data sources and execute schema and quality tests, detect breaking changes, and export to different formats. The tool is written in Python. It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a Python library.
|
|
5
5
|
Author-email: Jochen Christ <jochen.christ@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
|
|
|
11
11
|
Requires-Python: <3.15,>=3.10
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: typer<0.
|
|
14
|
+
Requires-Dist: typer<0.28,>=0.18.0
|
|
15
15
|
Requires-Dist: click<9.0.0,>=8.1.0
|
|
16
16
|
Requires-Dist: pydantic<2.14.0,>=2.8.2
|
|
17
17
|
Requires-Dist: pyyaml~=6.0.1
|
|
@@ -42,7 +42,7 @@ Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == "excel"
|
|
|
42
42
|
Provides-Extra: databricks
|
|
43
43
|
Requires-Dist: ibis-framework[databricks,pyspark]<13.0.0,>=10.0.0; extra == "databricks"
|
|
44
44
|
Requires-Dist: databricks-sql-connector<4.4.0,>=3.7.0; extra == "databricks"
|
|
45
|
-
Requires-Dist: databricks-sdk<0.
|
|
45
|
+
Requires-Dist: databricks-sdk<0.122.0; extra == "databricks"
|
|
46
46
|
Requires-Dist: pyspark<5.0.0,>=3.5.0; extra == "databricks"
|
|
47
47
|
Provides-Extra: iceberg
|
|
48
48
|
Requires-Dist: pyiceberg==0.11.1; extra == "iceberg"
|
|
@@ -55,9 +55,11 @@ Requires-Dist: datacontract-cli[duckdb]; extra == "mysql"
|
|
|
55
55
|
Provides-Extra: postgres
|
|
56
56
|
Requires-Dist: ibis-framework[postgres]<13.0.0,>=10.0.0; extra == "postgres"
|
|
57
57
|
Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "postgres"
|
|
58
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "postgres"
|
|
58
59
|
Provides-Extra: redshift
|
|
59
60
|
Requires-Dist: ibis-framework[postgres]<13.0.0,>=10.0.0; extra == "redshift"
|
|
60
61
|
Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "redshift"
|
|
62
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "redshift"
|
|
61
63
|
Provides-Extra: s3
|
|
62
64
|
Requires-Dist: s3fs<2027.0.0,>=2025.2.0; extra == "s3"
|
|
63
65
|
Requires-Dist: duckdb-extension-httpfs<1.6.0,>=1.5.0; extra == "s3"
|
|
@@ -71,18 +73,23 @@ Requires-Dist: duckdb-extension-azure<1.6.0,>=1.5.0; extra == "azure"
|
|
|
71
73
|
Requires-Dist: azure-identity<1.26,>=1.17.1; extra == "azure"
|
|
72
74
|
Requires-Dist: azure-storage-blob<12.31,>=12.24; extra == "azure"
|
|
73
75
|
Provides-Extra: snowflake
|
|
74
|
-
Requires-Dist: snowflake-connector-python[pandas]<4.
|
|
76
|
+
Requires-Dist: snowflake-connector-python[pandas]<4.8,>=3.6; extra == "snowflake"
|
|
75
77
|
Requires-Dist: ibis-framework[snowflake]<13.0.0,>=10.0.0; extra == "snowflake"
|
|
76
78
|
Provides-Extra: sqlserver
|
|
77
79
|
Requires-Dist: ibis-framework[mssql]<13.0.0,>=10.0.0; extra == "sqlserver"
|
|
80
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "sqlserver"
|
|
78
81
|
Provides-Extra: oracle
|
|
79
82
|
Requires-Dist: ibis-framework[oracle]<13.0.0,>=10.0.0; extra == "oracle"
|
|
83
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "oracle"
|
|
80
84
|
Provides-Extra: athena
|
|
81
85
|
Requires-Dist: ibis-framework[athena]<13.0.0,>=10.0.0; extra == "athena"
|
|
86
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "athena"
|
|
82
87
|
Provides-Extra: trino
|
|
83
88
|
Requires-Dist: ibis-framework[trino]<13.0.0,>=10.0.0; extra == "trino"
|
|
89
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "trino"
|
|
84
90
|
Provides-Extra: impala
|
|
85
91
|
Requires-Dist: ibis-framework[impala]<13.0.0,>=10.0.0; extra == "impala"
|
|
92
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "impala"
|
|
86
93
|
Provides-Extra: dbml
|
|
87
94
|
Requires-Dist: pydbml>=1.1.1; extra == "dbml"
|
|
88
95
|
Provides-Extra: duckdb
|
|
@@ -112,7 +119,7 @@ Requires-Dist: pytest-xdist; extra == "dev"
|
|
|
112
119
|
Requires-Dist: pymssql==2.3.13; extra == "dev"
|
|
113
120
|
Requires-Dist: psycopg2-binary<3.0,>=2.9; extra == "dev"
|
|
114
121
|
Requires-Dist: mysql-connector-python<9.7.0,>=8.0.30; extra == "dev"
|
|
115
|
-
Requires-Dist: ruff==0.15.
|
|
122
|
+
Requires-Dist: ruff==0.15.22; extra == "dev"
|
|
116
123
|
Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.14.2; extra == "dev"
|
|
117
124
|
Requires-Dist: trino==0.338.0; extra == "dev"
|
|
118
125
|
Dynamic: license-file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
typer<0.
|
|
1
|
+
typer<0.28,>=0.18.0
|
|
2
2
|
click<9.0.0,>=8.1.0
|
|
3
3
|
pydantic<2.14.0,>=2.8.2
|
|
4
4
|
pyyaml~=6.0.1
|
|
@@ -28,6 +28,7 @@ uvicorn<0.52.0,>=0.44.0
|
|
|
28
28
|
|
|
29
29
|
[athena]
|
|
30
30
|
ibis-framework[athena]<13.0.0,>=10.0.0
|
|
31
|
+
packaging<27.0,>=21.3
|
|
31
32
|
|
|
32
33
|
[avro]
|
|
33
34
|
avro==1.12.1
|
|
@@ -47,7 +48,7 @@ pandas>=2.0.0
|
|
|
47
48
|
[databricks]
|
|
48
49
|
ibis-framework[databricks,pyspark]<13.0.0,>=10.0.0
|
|
49
50
|
databricks-sql-connector<4.4.0,>=3.7.0
|
|
50
|
-
databricks-sdk<0.
|
|
51
|
+
databricks-sdk<0.122.0
|
|
51
52
|
pyspark<5.0.0,>=3.5.0
|
|
52
53
|
|
|
53
54
|
[dbml]
|
|
@@ -66,7 +67,7 @@ pytest-xdist
|
|
|
66
67
|
pymssql==2.3.13
|
|
67
68
|
psycopg2-binary<3.0,>=2.9
|
|
68
69
|
mysql-connector-python<9.7.0,>=8.0.30
|
|
69
|
-
ruff==0.15.
|
|
70
|
+
ruff==0.15.22
|
|
70
71
|
testcontainers[kafka,minio,mssql,mysql,postgres]==4.14.2
|
|
71
72
|
trino==0.338.0
|
|
72
73
|
|
|
@@ -86,6 +87,7 @@ pyiceberg==0.11.1
|
|
|
86
87
|
|
|
87
88
|
[impala]
|
|
88
89
|
ibis-framework[impala]<13.0.0,>=10.0.0
|
|
90
|
+
packaging<27.0,>=21.3
|
|
89
91
|
|
|
90
92
|
[kafka]
|
|
91
93
|
datacontract-cli[avro]
|
|
@@ -97,6 +99,7 @@ datacontract-cli[duckdb]
|
|
|
97
99
|
|
|
98
100
|
[oracle]
|
|
99
101
|
ibis-framework[oracle]<13.0.0,>=10.0.0
|
|
102
|
+
packaging<27.0,>=21.3
|
|
100
103
|
|
|
101
104
|
[parquet]
|
|
102
105
|
pyarrow>=18.1.0
|
|
@@ -104,6 +107,7 @@ pyarrow>=18.1.0
|
|
|
104
107
|
[postgres]
|
|
105
108
|
ibis-framework[postgres]<13.0.0,>=10.0.0
|
|
106
109
|
psycopg[binary]<4.0,>=3.1
|
|
110
|
+
packaging<27.0,>=21.3
|
|
107
111
|
|
|
108
112
|
[protobuf]
|
|
109
113
|
proto-schema-parser<3.0,>=1.0
|
|
@@ -114,6 +118,7 @@ rdflib==7.6.0
|
|
|
114
118
|
[redshift]
|
|
115
119
|
ibis-framework[postgres]<13.0.0,>=10.0.0
|
|
116
120
|
psycopg[binary]<4.0,>=3.1
|
|
121
|
+
packaging<27.0,>=21.3
|
|
117
122
|
|
|
118
123
|
[s3]
|
|
119
124
|
s3fs<2027.0.0,>=2025.2.0
|
|
@@ -121,11 +126,13 @@ duckdb-extension-httpfs<1.6.0,>=1.5.0
|
|
|
121
126
|
duckdb-extension-aws<1.6.0,>=1.5.0
|
|
122
127
|
|
|
123
128
|
[snowflake]
|
|
124
|
-
snowflake-connector-python[pandas]<4.
|
|
129
|
+
snowflake-connector-python[pandas]<4.8,>=3.6
|
|
125
130
|
ibis-framework[snowflake]<13.0.0,>=10.0.0
|
|
126
131
|
|
|
127
132
|
[sqlserver]
|
|
128
133
|
ibis-framework[mssql]<13.0.0,>=10.0.0
|
|
134
|
+
packaging<27.0,>=21.3
|
|
129
135
|
|
|
130
136
|
[trino]
|
|
131
137
|
ibis-framework[trino]<13.0.0,>=10.0.0
|
|
138
|
+
packaging<27.0,>=21.3
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "datacontract-cli"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.14"
|
|
4
4
|
description = "The datacontract CLI is an open source command-line tool for working with Data Contracts. It uses data contract YAML files to lint the data contract, connect to data sources and execute schema and quality tests, detect breaking changes, and export to different formats. The tool is written in Python. It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a Python library."
|
|
5
5
|
license = "MIT"
|
|
6
6
|
readme = "README.md"
|
|
@@ -15,7 +15,7 @@ classifiers = [
|
|
|
15
15
|
]
|
|
16
16
|
requires-python = ">=3.10,<3.15"
|
|
17
17
|
dependencies = [
|
|
18
|
-
"typer>=0.18.0,<0.
|
|
18
|
+
"typer>=0.18.0,<0.28",
|
|
19
19
|
"click>=8.1.0,<9.0.0",
|
|
20
20
|
"pydantic>=2.8.2,<2.14.0",
|
|
21
21
|
"pyyaml~=6.0.1",
|
|
@@ -59,7 +59,7 @@ excel = [
|
|
|
59
59
|
databricks = [
|
|
60
60
|
"ibis-framework[databricks,pyspark]>=10.0.0,<13.0.0",
|
|
61
61
|
"databricks-sql-connector>=3.7.0,<4.4.0",
|
|
62
|
-
"databricks-sdk<0.
|
|
62
|
+
"databricks-sdk<0.122.0",
|
|
63
63
|
# Not capped to Spark 3.5.x like older builds were: the databricks path uses a
|
|
64
64
|
# caller-provided Spark session (or the databricks SQL connector) and never
|
|
65
65
|
# loads the Kafka/Avro connector jars, so it isn't tied to a Scala/Spark line.
|
|
@@ -93,6 +93,8 @@ postgres = [
|
|
|
93
93
|
# psycopg's binary wheels bundle libpq, so the extra works without
|
|
94
94
|
# PostgreSQL client libraries installed on the system.
|
|
95
95
|
"psycopg[binary]>=3.1,<4.0",
|
|
96
|
+
# ibis loads its datafusion compiler (needs packaging) but omits it from this extra.
|
|
97
|
+
"packaging>=21.3,<27.0",
|
|
96
98
|
]
|
|
97
99
|
|
|
98
100
|
redshift = [
|
|
@@ -101,6 +103,8 @@ redshift = [
|
|
|
101
103
|
# psycopg's binary wheels bundle libpq, so the extra works without
|
|
102
104
|
# PostgreSQL client libraries installed on the system.
|
|
103
105
|
"psycopg[binary]>=3.1,<4.0",
|
|
106
|
+
# ibis loads its datafusion compiler (needs packaging) but omits it from this extra.
|
|
107
|
+
"packaging>=21.3,<27.0",
|
|
104
108
|
]
|
|
105
109
|
|
|
106
110
|
# DuckDB extension wheels are bundled for air-gapped installs. The 1.5.x line
|
|
@@ -125,28 +129,38 @@ azure = [
|
|
|
125
129
|
]
|
|
126
130
|
|
|
127
131
|
snowflake = [
|
|
128
|
-
"snowflake-connector-python[pandas]>=3.6,<4.
|
|
132
|
+
"snowflake-connector-python[pandas]>=3.6,<4.8",
|
|
129
133
|
"ibis-framework[snowflake]>=10.0.0,<13.0.0"
|
|
130
134
|
]
|
|
131
135
|
|
|
132
136
|
sqlserver = [
|
|
133
|
-
"ibis-framework[mssql]>=10.0.0,<13.0.0"
|
|
137
|
+
"ibis-framework[mssql]>=10.0.0,<13.0.0",
|
|
138
|
+
# ibis loads its datafusion compiler (needs packaging) but omits it from this extra.
|
|
139
|
+
"packaging>=21.3,<27.0",
|
|
134
140
|
]
|
|
135
141
|
|
|
136
142
|
oracle = [
|
|
137
|
-
"ibis-framework[oracle]>=10.0.0,<13.0.0"
|
|
143
|
+
"ibis-framework[oracle]>=10.0.0,<13.0.0",
|
|
144
|
+
# ibis loads its datafusion compiler (needs packaging) but omits it from this extra.
|
|
145
|
+
"packaging>=21.3,<27.0",
|
|
138
146
|
]
|
|
139
147
|
|
|
140
148
|
athena = [
|
|
141
|
-
"ibis-framework[athena]>=10.0.0,<13.0.0"
|
|
149
|
+
"ibis-framework[athena]>=10.0.0,<13.0.0",
|
|
150
|
+
# ibis loads its datafusion compiler (needs packaging) but omits it from this extra.
|
|
151
|
+
"packaging>=21.3,<27.0",
|
|
142
152
|
]
|
|
143
153
|
|
|
144
154
|
trino = [
|
|
145
|
-
"ibis-framework[trino]>=10.0.0,<13.0.0"
|
|
155
|
+
"ibis-framework[trino]>=10.0.0,<13.0.0",
|
|
156
|
+
# ibis loads its datafusion compiler (needs packaging) but omits it from this extra.
|
|
157
|
+
"packaging>=21.3,<27.0",
|
|
146
158
|
]
|
|
147
159
|
|
|
148
160
|
impala = [
|
|
149
|
-
"ibis-framework[impala]>=10.0.0,<13.0.0"
|
|
161
|
+
"ibis-framework[impala]>=10.0.0,<13.0.0",
|
|
162
|
+
# ibis loads its datafusion compiler (needs packaging) but omits it from this extra.
|
|
163
|
+
"packaging>=21.3,<27.0",
|
|
150
164
|
]
|
|
151
165
|
|
|
152
166
|
dbml = [
|
|
@@ -200,7 +214,7 @@ dev = [
|
|
|
200
214
|
# psycopg v3 and DuckDB's mysql extension respectively).
|
|
201
215
|
"psycopg2-binary>=2.9,<3.0",
|
|
202
216
|
"mysql-connector-python>=8.0.30,<9.7.0",
|
|
203
|
-
"ruff==0.15.
|
|
217
|
+
"ruff==0.15.22",
|
|
204
218
|
"testcontainers[minio,postgres,kafka,mssql,mysql]==4.14.2",
|
|
205
219
|
"trino==0.338.0",
|
|
206
220
|
]
|
|
@@ -684,6 +684,32 @@ def test_singular_tests_skipped_when_query_has_no_bound():
|
|
|
684
684
|
assert any("no `mustBe*` bound" in log.message for log in run.logs)
|
|
685
685
|
|
|
686
686
|
|
|
687
|
+
def test_singular_query_resolves_object_and_property_placeholders():
|
|
688
|
+
"""ODCS `{object}`/`{property}` placeholders in a custom `quality.query` resolve to the dbt
|
|
689
|
+
`ref()` and column name so the generated singular test compiles (issue #1397)."""
|
|
690
|
+
run = Run.create_run()
|
|
691
|
+
qualities = [
|
|
692
|
+
DataQuality(
|
|
693
|
+
query="SELECT COUNT(*) FROM {object} WHERE {property} < 0",
|
|
694
|
+
mustBe=0,
|
|
695
|
+
name="positive",
|
|
696
|
+
)
|
|
697
|
+
]
|
|
698
|
+
out = _singular_tests_for_qualities(qualities, "c", "1.0.0", "MY_TABLE", run, field="my_column")
|
|
699
|
+
assert len(out) == 1
|
|
700
|
+
assert "SELECT COUNT(*) FROM {{ ref('MY_TABLE') }} WHERE my_column < 0" in out[0].sql
|
|
701
|
+
assert "{object}" not in out[0].sql
|
|
702
|
+
assert "{property}" not in out[0].sql
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
def test_singular_query_placeholder_resolves_versioned_ref():
|
|
706
|
+
"""On a versioned model, `{object}` resolves to a version-pinned `ref()`."""
|
|
707
|
+
run = Run.create_run()
|
|
708
|
+
qualities = [DataQuality(query="SELECT COUNT(*) FROM {model}", mustBe=0, name="rc")]
|
|
709
|
+
out = _singular_tests_for_qualities(qualities, "c", "1.0.0", "MY_TABLE", run, model_version="2")
|
|
710
|
+
assert "{{ ref('MY_TABLE', version=2) }}" in out[0].sql
|
|
711
|
+
|
|
712
|
+
|
|
687
713
|
def test_generate_outputs_warns_on_unsupported_model_qualities():
|
|
688
714
|
"""Model-level qualities that can't map to a test are skipped with a warning — not dropped
|
|
689
715
|
silently or crashed on: a `rowCount` with no bound, and a non-`rowCount` metric with no query."""
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import pytest
|
|
1
2
|
import yaml
|
|
2
3
|
from open_data_contract_standard.model import OpenDataContractStandard
|
|
3
4
|
from typer.testing import CliRunner
|
|
4
5
|
|
|
5
6
|
from datacontract.cli import app
|
|
6
7
|
from datacontract.export.protobuf_exporter import to_protobuf
|
|
8
|
+
from datacontract.model.exceptions import DataContractException
|
|
7
9
|
|
|
8
10
|
# logging.basicConfig(level=logging.DEBUG, force=True)
|
|
9
11
|
|
|
@@ -77,6 +79,14 @@ schema:
|
|
|
77
79
|
- name: user
|
|
78
80
|
logicalType: string
|
|
79
81
|
description: Field user
|
|
82
|
+
- name: sub_review
|
|
83
|
+
description: Details of sub review.
|
|
84
|
+
required: False
|
|
85
|
+
logicalType: object
|
|
86
|
+
properties:
|
|
87
|
+
- name: comment
|
|
88
|
+
logicalType: string
|
|
89
|
+
description: Field comment
|
|
80
90
|
"""
|
|
81
91
|
data_contract = OpenDataContractStandard(**yaml.safe_load(odcs_yaml))
|
|
82
92
|
|
|
@@ -117,16 +127,64 @@ message Product {
|
|
|
117
127
|
|
|
118
128
|
// Details of Review.
|
|
119
129
|
message Review {
|
|
130
|
+
// Details of sub review.
|
|
131
|
+
message SubReview {
|
|
132
|
+
// Field comment
|
|
133
|
+
string comment = 1;
|
|
134
|
+
}
|
|
135
|
+
|
|
120
136
|
// Field comment
|
|
121
137
|
string comment = 1;
|
|
122
138
|
// Field rating
|
|
123
139
|
int32 rating = 2;
|
|
124
140
|
// Field user
|
|
125
141
|
string user = 3;
|
|
142
|
+
// Details of sub review.
|
|
143
|
+
optional SubReview sub_review = 4;
|
|
126
144
|
}
|
|
127
145
|
|
|
128
|
-
|
|
129
146
|
""".strip()
|
|
130
147
|
result = to_protobuf(data_contract).strip()
|
|
131
148
|
|
|
132
149
|
assert result == expected_protobuf
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def test_to_protobuf_custom_package_name():
|
|
153
|
+
odcs_yaml = """
|
|
154
|
+
kind: DataContract
|
|
155
|
+
apiVersion: v3.1.0
|
|
156
|
+
id: test_protobuf
|
|
157
|
+
customProperties:
|
|
158
|
+
- property: protoPackageName
|
|
159
|
+
value: com.example.product
|
|
160
|
+
schema:
|
|
161
|
+
- name: Product
|
|
162
|
+
properties:
|
|
163
|
+
- name: id
|
|
164
|
+
logicalType: string
|
|
165
|
+
"""
|
|
166
|
+
data_contract = OpenDataContractStandard(**yaml.safe_load(odcs_yaml))
|
|
167
|
+
|
|
168
|
+
result = to_protobuf(data_contract)
|
|
169
|
+
|
|
170
|
+
assert "package com.example.product;\n" in result
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def test_to_protobuf_invalid_package_name():
|
|
174
|
+
odcs_yaml = """
|
|
175
|
+
kind: DataContract
|
|
176
|
+
apiVersion: v3.1.0
|
|
177
|
+
id: test_protobuf
|
|
178
|
+
customProperties:
|
|
179
|
+
- property: protoPackageName
|
|
180
|
+
value: "123 not a package!"
|
|
181
|
+
schema:
|
|
182
|
+
- name: Product
|
|
183
|
+
properties:
|
|
184
|
+
- name: id
|
|
185
|
+
logicalType: string
|
|
186
|
+
"""
|
|
187
|
+
data_contract = OpenDataContractStandard(**yaml.safe_load(odcs_yaml))
|
|
188
|
+
|
|
189
|
+
with pytest.raises(DataContractException):
|
|
190
|
+
to_protobuf(data_contract)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/abap-Bs8kvjsq.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/apex-Dspwrl5m.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/azcli-k1BiOau1.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/bat-BIP72KWc.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/bicep-VhQeYhS3.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.13 → datacontract_cli-1.0.14}/datacontract/editor_assets/cameligo-DnuAXtHg.js
RENAMED
|
File without changes
|